Rust#
Rust is a modern compiler language that focueses on performance, reliability, and productivity. It is syntactically similar to C++, but is designed to provide better memory safety.
// hello beer: drink 0.5 l in 4 rounds
use std::{thread, time};
const LITER_PER_SIP: f32 = 37e-3;
fn sips2liter( num_sips: i32 ) -> f32 {
    return (num_sips as f32) * LITER_PER_SIP;
}
fn main(){
    let mut beer_l = 0.5;
    let rounds = 4;
    let sips_per_round = vec![3, 7, 4, 2];
    println!("I drink {} l in {} rounds:", beer_l, rounds);
    for sips in sips_per_round {
        println!("I drink {} sips.\n", sips);
        //thread::sleep( time::Duration::from_secs(sips) );
        beer_l = beer_l - sips2liter( sips as i32 );
        if beer_l <= 0.0 {
            println!("My beer is empty!");
            break
        } else {
            println!("I have {} l beer left.", beer_l);
        }
    }
}
Run your own program at the Rust Playground!
Important Basics#
- blocks of code delimited by curly brackets 
{ } - Cargo, the package manager, reads the 
Cargo.tomlfile, which contains details and dependencies for every project. - memory safety: Data values can only be initialized by a fixed set of forms and the inputs must be already initialized.
 - resources are managed through the resource acquisition is initialization (RAII) convention, with optional reference counting.
 - Rust has an ownership system where all values have a unique owner
 
Types#
- Integer: 
ì8,i16,ì32,u8,u16,u32 - Float: 
f32,f64 - String: 
char,str - Collections: 
array,tuple,slice - Misc: 
bool,isize,usize 
let tuple = ("hello", 5, 'c');
assert_eq!(tuple.0, "hello");   // tuples are accessed with .
Differences to common languages#
Control Flow#
- Assignment 
let answer = "hello".to_string(); - Conditions 
if i == 0 { } else { } - Loops 
for i in 0..5 { } 
match instead of switch#
 match number {
    1 => println!("One!"),                // Match a single value
    3 | 5 | 7 | 9 => println!("Odd"),     // Match several values
    13...19 => println!("A teen"),        // Match an inclusive range
    _ => println!("Ain't special"),       // Handle the rest of cases
}
Objects: traits and impl#
Similar to C, Rust uses struct for data structures. Rust defines
trait as an interface and impl as an implementation of an interface
for a struct.
trait Quack {
    fn quack(&self);
}
struct Duck (){
    name: String;
}
impl Quack for Duck {
    fn quack(&self) {
        println!("quack!");
    }
}
trait Show {
    fn show(&self) -> String;
}
impl Show for i32 {
    fn show(&self) -> String {
        format!("four-byte signed {}", self)
    }
}
impl Show for f64 {
    fn show(&self) -> String {
        format!("eight-byte float {}", self)
    }
}
References#
- Steve Donovan: A Gentle Introduction To Rust, 2018
 - Rust Documentation