Hacker Public Radio

Your ideas, projects, opinions - podcasted.

New episodes Monday through Friday.


HPR3426: Rust 101: Episode 0 - What in Tarnishing?

Hosted by BlacKernel on 2021-09-20 00:00:00
Download or Listen

Talking Points

  • What is Rust?
    • " Garbage Collection " - Resource Acquisition Is Initialization (RAII)
    • Strict Typing with Type Inference
    • Reference pointers
    • Immutable by default
    • Unsafe Mode
  • Why use Rust over Python?
    • Speed
    • Compiled
      1. Help from compiler
      2. Smaller binary size
      3. Useful in high throughput/embedded applications
    • Logically consistent
  • Why use Rust over C?
    • Safe by default
    • Easier to read
    • Forces you to write good code
    • Arrays without stupidity++ and built in vectors
    • Option<T> and Result<T> or a match {} made in heaven

Show Notes

Strict Typing

fn main() {

    // Type declared with var: <T> syntax
    let penguin_one: &str = "gentoo";
    
    // Type &str is inherited from "gentoo"
    let penguin_two = "gentoo";
    
    // Will not panic if they are the same
    assert_eq!(penguin_one, penguin_two);
}

Reference Pointers

Wrong Way:

fn print_u8_vector(vec: Vec<u8>) {
    println!("{:?}", vec);
}

fn main() {
    let penguin_ages: Vec<u8> = vec!(2, 4, 6);
    print_u8_vector(penguin_ages);
    
    // This line will throw an error
    println!("{}", penguin_ages[0]);
}

Correct Way:

fn print_u8_vector(vec: &Vec<u8>) {
    println!("{:?}", vec);
}

fn main() {
    let penguin_ages: Vec<u8> = vec!(2, 4, 6);
    print_u8_vector(&penguin_ages);
    
    // This line will print '2'
    println!("{}", penguin_ages[0]);
}

Immutable By Default

Wrong Way:

fn main() {
    let my_num = 2;
    
    // This line will throw an error
    my_num = my_num + 1;
    println!("{}", my_num);
}

Correct Way:

fn main() {
    let mut my_num = 2;
    my_num = my_num + 1;
    
    // This line will print '3'
    println!("{}", my_num);
}

Unsafe Code

Hello World Program in C in Rust:

extern "C" {
    fn printf(input: &str);
}

fn main() {
    unsafe {
        printf("Hello, World!");
    }
}

Contact Me

Email: izzyleibowitz at pm dot me

Mastodon: at blackernel at nixnet dot social

Comments



More Information...


Copyright Information

Unless otherwise stated, our shows are released under a Creative Commons Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license.

The HPR Website Design is released to the Public Domain.