From eb2844625b97d79a0146e906baa4896bb72c59e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wojciech=20Przytu=C5=82a?= Date: Wed, 2 Oct 2024 19:43:25 +0200 Subject: [PATCH] A taste of Rust - introductory slides --- .../A_taste_of_Rust.html | 769 ++++++++++++++++++ .../A_taste_of_Rust.md | 404 +++++++++ .../A_taste_of_Rust.pdf | Bin 0 -> 52282 bytes 3 files changed, 1173 insertions(+) create mode 100644 content/lessons/01_introduction/a_taste_of_rust-introductory_slides/A_taste_of_Rust.html create mode 100644 content/lessons/01_introduction/a_taste_of_rust-introductory_slides/A_taste_of_Rust.md create mode 100644 content/lessons/01_introduction/a_taste_of_rust-introductory_slides/A_taste_of_Rust.pdf diff --git a/content/lessons/01_introduction/a_taste_of_rust-introductory_slides/A_taste_of_Rust.html b/content/lessons/01_introduction/a_taste_of_rust-introductory_slides/A_taste_of_Rust.html new file mode 100644 index 0000000..7c20e31 --- /dev/null +++ b/content/lessons/01_introduction/a_taste_of_rust-introductory_slides/A_taste_of_Rust.html @@ -0,0 +1,769 @@ +
+

A taste of Rust

+

...so that you quickly grasp its core concepts and characteristics.

+
+
+

Syntax: mostly similar to C++

+
fn bar(num_cats: u32) -> usize {
+    let a: &str = "Ann has "; // <-- think of char*
+
+    let mut b: String = String::from(a); // <-- think of std::string
+    b += num_cats.to_string();
+    b += " cats";
+    b.push('.');
+
+    println!("{}", &b);
+    return b.len();
+
+    // <-- b is dropped (deallocated) here - RAII mechanism employed.
+}
+
+
+
+
+
+

Syntax: C/C++/ML/...

+

C/C++: Code blocks with braces, lines end with semicolons, main function begins every program, modules/associated functions :: notation (e.g. std::thread::spawn)...

+

ML: Match statement, code blocks evaluated as expressions.

+
+
+

Inspired by functional languages (ML, Haskell)

+
+
+

Variables are not mutable by default

+
fn variables_non_mut_by_default() {
+    let cant_mutate_me = 5; // <-- variable `const` by default
+    // cant_mutate_me = 3; <-- compile error
+    let mut can_mutate_me = 5;
+    can_mutate_me += 1;
+}
+
+
+
+

Blocks' last statement can be evaluated as an expression

+
fn blocks_are_expressions(flag: bool) -> i32 {
+    let x = if flag {
+        42 // <-- mind lack of semicolon
+    } else {
+        let init = -37;
+        (init + 17) * (init - 3) // <-- the last statement can be returned
+    };
+
+    x // <-- same about functions - their body is a block, too.
+}
+
+
+
+

Enum types, pattern matching

+
enum Animal {
+    Cat { tail_len: usize },
+    Fish,
+}
+
+fn pattern_matching(animal: Animal) {
+    let tail_len = match animal {
+        Cat { tail_len } => tail_len,
+        Fish => 0,
+    };
+}
+
+
+
+

Functional iterators

+
let peers: Vec<Peer> = initial_peers
+    .iter()
+    .enumerate()
+    .map(|(id, endpoint)| {
+        let token = get_token(endpoint);
+
+        Peer {
+            address: endpoint.address(),
+            tokens: vec![Token::new(token as i64)],
+            datacenter: None,
+            rack: None,
+            host_id: Uuid::new_v4(),
+        }
+    })
+    .collect();
+
+
+
+

What Rust lacks (on purpose)

+
+
+

Classes, inheritance?

+
class Vehicle {
+    float estimate_cost(float route_len) = 0;
+};
+class Car: Vehicle { int engine_size_cm3; };
+class Bike: Vehicle { int rider_stamina; };
+
+float Car::estimate_cost(float route_len) {
+    engine_size_cm3 * CAR_COST_COEFFICIENT * route_len
+}
+
+float Bike::estimate_cost(float route_len) { /* */ }
+
+
+
+
+

Classes, inheritance. Structs, traits, composition.

+
struct Car { engine_size_cm3: i32 };
+struct Bike { rider_stamina: i32 };
+
+trait Travel {
+    fn estimate_cost(&self, route_len: f32) -> f32;
+}
+
+impl Travel for Car {
+    fn estimate_cost(&self, route_len: f32) -> f32 {
+        self.engine_size_cm3 * CAR_COST_COEFFICIENT * route_len
+    }
+}
+
+impl Travel for Bike { /* */ }
+
+
+
+

Null value?

+
public void doSomething(SomeObject obj) {
+    obj.some_method(); // BOOOM! NullPointerException!
+
+    if obj != null {
+        obj.some_method(); // Whew, we are safe now. We checked this.
+    }
+
+    /* A lot of code later */
+
+    // Have I checked `obj` for not being null? Yeah, for sure.
+    obj.some_method(); // BOOOM! NullPointerException!
+}
+
+
+
+

Null value. Lack of value represented as an Option enum.

+
fn this_returns_something_or_nothing(password: &str) -> Result<i32, String> {
+    if password == "Rust rulez!" {
+        Ok(42)
+    } else {
+        Err("You still have to learn a lot...")
+    }
+}
+
+fn main() {
+    match this_can_fail_or_succeed("Rust is hard...") {
+        Ok(code) => println!("Success! Code: {}", code),
+        Err(msg) => println!("Oops... {}", msg),
+    };
+}
+
+
+
+

Exceptions?

+
void some_critical_operation(data: VeryFragile) {
+    // We have to be extremely careful not to interrupt this.
+    // Else we will end up with an invalid state!
+
+    int const res = some_innocent_procedure(data); // BOOOM! Exception thrown.
+
+    finalise_critical_operation(res);
+}
+
+fn main() {
+    match this_can_fail_or_succeed("Rust is hard...") {
+        Ok(code) => println!("Success! Code: {}", code),
+        Err(msg) => println!("Oops... {}", msg),
+    };
+}
+
+
+
+

Exceptions. Errors propagated explicitly as enums.

+
fn this_can_fail_or_succeed(password: &str) -> Result<i32, String> {
+    if password == "Rust rulez!" {
+        Ok(42)
+    } else {
+        Err("You still have to learn a lot...")
+    }
+}
+
+fn main() {
+    match this_can_fail_or_succeed("Rust is hard...") {
+        Ok(code) => println!("Success! Code: {}", code),
+        Err(msg) => println!("Oops... {}", msg),
+    };
+}
+
+
+
+

Exceptions. Errors propagated explicitly as enums.

+
fn deserialize(
+    typ: &'frame ColumnType,
+    v: Option<FrameSlice<'frame>>,
+) -> Result<CqlType, DeserializationError> {
+    let mut val = ensure_not_null_slice::<CqlType>(typ, v)?;
+    let cql = deser_cql_value(typ, &mut val)
+        .map_err(deser_error_replace_rust_name::<CqlType>)?;
+    Ok(cql)
+}
+
+
+
+
+

Unique feature of Rust - the borrow checker

+
+
+

Dangling references?

+
int const& bar()
+{
+    int n = 10;
+    return n;
+}
+
+int main() {
+    int const& i = bar();
+    // i is a dangling reference to an invalidated stack frame...
+    std::cout << i << std::endl; // May result in segmentation fault.
+    return 0;
+}
+
+
+
+

Dangling references Lifetimes!

+
// This function does not compile! Reference can't borrow from nowhere.
+fn bar() -> &i32 {
+    let n = 10;
+    &n
+}
+
+
+
+

Dangling references Lifetimes!

+
fn main() {
+    let v = vec![1, 2, 3];
+    let v_ref = &v;
+
+    std::mem::drop(v);
+
+    // This does not compile! `v` has been dropped,
+    // so references to it are no longer valid.
+    let n = v_ref[1];
+}
+
+
+
+

Move semantics by default (& more lifetimes!).

+
fn main() {
+    let mut x = vec![1, 2, 3];
+    let y = x; // x's contents are moved into y.
+               // No heap allocation involved, O(1).
+
+    // This does not compile! `x`'s contents has been moved out,
+    // so it is no longer valid (alive).
+    // let n = x[0];
+
+    x = vec![0, 0]; // Now x is valid (alive) again.
+    let n = x[0];
+}
+
+
+
+

Data races?

+
void thread1(shared_data: &Data) {
+    while true {
+        shared_data.write(next_int());
+    }
+}
+
+void thread2(shared_data: const& Data) {
+    while true {
+        std::cout << shared_data.read() << std::endl;
+    }
+}
+
+int main() {
+    Data shared_data;
+
+    // The threads race with each other!
+    // A write is concurrent to another memory access (read or write)!
+    std::thread t1{shared_data};
+    std::thread t2{shared_data};
+}
+
+
+
+

Data races Aliasing XOR mutability

+
fn thread1(shared_data: &mut Data) {
+    loop {
+        shared_data.write(next_int());
+    }
+}
+fn thread2(shared_data: &Data) {
+    loop {
+        println!("{}", shared_data.read());
+    }
+}
+fn main() {
+    let mut shared_data = Data::new();
+
+    std::thread::scope(|s| {
+        let t1 = s.spawn(|| {
+            thread1(&mut shared_data);
+        });
+        let t2 = s.spawn(|| {
+            thread2(&shared_data); // Compiler yells:
+            // "cannot borrow `shared_data` as immutable because it is also borrowed as mutable"
+        });
+    });
+}
+
+
+
+

Rust

+

A language empowering everyone to build reliable and efficient software.

+
+
\ No newline at end of file diff --git a/content/lessons/01_introduction/a_taste_of_rust-introductory_slides/A_taste_of_Rust.md b/content/lessons/01_introduction/a_taste_of_rust-introductory_slides/A_taste_of_Rust.md new file mode 100644 index 0000000..5ebc1e7 --- /dev/null +++ b/content/lessons/01_introduction/a_taste_of_rust-introductory_slides/A_taste_of_Rust.md @@ -0,0 +1,404 @@ +--- +marp: true +author: Wojciech Przytuła +backgroundColor: black +color: grey +transition: fade +theme: gaia +style: | + pre { + background-color: black; + border-style: solid; + border-color: grey; + }, + + code { + background-color: black; + } +--- + +# A taste of Rust + +...so that you quickly grasp its core concepts and characteristics. + +--- + +## Syntax: mostly similar to C++ + +```rust +fn bar(num_cats: u32) -> usize { + let a: &str = "Ann has "; // <-- think of char* + + let mut b: String = String::from(a); // <-- think of std::string + b += num_cats.to_string(); + b += " cats"; + b.push('.'); + + println!("{}", &b); + return b.len(); + + // <-- b is dropped (deallocated) here - RAII mechanism employed. +} + + +``` + +--- + +## Syntax: C/C++/ML/... + +**C/C++:** Code blocks with braces, lines end with semicolons, `main` function begins every program, modules/associated functions `::` notation (e.g. `std::thread::spawn`)... + +**ML:** Match statement, code blocks evaluated as expressions. + +--- + +# Inspired by functional languages (ML, Haskell) + +--- + +### Variables are not mutable by default + +```rust +fn variables_non_mut_by_default() { + let cant_mutate_me = 5; // <-- variable `const` by default + // cant_mutate_me = 3; <-- compile error + let mut can_mutate_me = 5; + can_mutate_me += 1; +} +``` + +--- + +### Blocks' last statement can be evaluated as an expression + +```rust +fn blocks_are_expressions(flag: bool) -> i32 { + let x = if flag { + 42 // <-- mind lack of semicolon + } else { + let init = -37; + (init + 17) * (init - 3) // <-- the last statement can be returned + }; + + x // <-- same about functions - their body is a block, too. +} +``` + +--- + +### Enum types, pattern matching + +```rust +enum Animal { + Cat { tail_len: usize }, + Fish, +} + +fn pattern_matching(animal: Animal) { + let tail_len = match animal { + Cat { tail_len } => tail_len, + Fish => 0, + }; +} +``` + +--- + +### Functional iterators + +```rust +let peers: Vec = initial_peers + .iter() + .enumerate() + .map(|(id, endpoint)| { + let token = get_token(endpoint); + + Peer { + address: endpoint.address(), + tokens: vec![Token::new(token as i64)], + datacenter: None, + rack: None, + host_id: Uuid::new_v4(), + } + }) + .collect(); +``` + +--- + +# What Rust lacks (on purpose) + +--- + +### Classes, inheritance? + +```c++ +class Vehicle { + float estimate_cost(float route_len) = 0; +}; +class Car: Vehicle { int engine_size_cm3; }; +class Bike: Vehicle { int rider_stamina; }; + +float Car::estimate_cost(float route_len) { + engine_size_cm3 * CAR_COST_COEFFICIENT * route_len +} + +float Bike::estimate_cost(float route_len) { /* */ } + +``` + +--- + +### ~~Classes, inheritance~~. Structs, traits, composition. + +```rust +struct Car { engine_size_cm3: i32 }; +struct Bike { rider_stamina: i32 }; + +trait Travel { + fn estimate_cost(&self, route_len: f32) -> f32; +} + +impl Travel for Car { + fn estimate_cost(&self, route_len: f32) -> f32 { + self.engine_size_cm3 * CAR_COST_COEFFICIENT * route_len + } +} + +impl Travel for Bike { /* */ } +``` + +--- + +### Null value? + +```java +public void doSomething(SomeObject obj) { + obj.some_method(); // BOOOM! NullPointerException! + + if obj != null { + obj.some_method(); // Whew, we are safe now. We checked this. + } + + /* A lot of code later */ + + // Have I checked `obj` for not being null? Yeah, for sure. + obj.some_method(); // BOOOM! NullPointerException! +} +``` + +--- + +### ~~Null value~~. Lack of value represented as an Option enum. + +```rust +fn this_returns_something_or_nothing(password: &str) -> Result { + if password == "Rust rulez!" { + Ok(42) + } else { + Err("You still have to learn a lot...") + } +} + +fn main() { + match this_can_fail_or_succeed("Rust is hard...") { + Ok(code) => println!("Success! Code: {}", code), + Err(msg) => println!("Oops... {}", msg), + }; +} +``` + +--- + +### Exceptions? + +```c++ +void some_critical_operation(data: VeryFragile) { + // We have to be extremely careful not to interrupt this. + // Else we will end up with an invalid state! + + int const res = some_innocent_procedure(data); // BOOOM! Exception thrown. + + finalise_critical_operation(res); +} + +fn main() { + match this_can_fail_or_succeed("Rust is hard...") { + Ok(code) => println!("Success! Code: {}", code), + Err(msg) => println!("Oops... {}", msg), + }; +} +``` + +--- + +### ~~Exceptions~~. Errors propagated explicitly as enums. + +```rust +fn this_can_fail_or_succeed(password: &str) -> Result { + if password == "Rust rulez!" { + Ok(42) + } else { + Err("You still have to learn a lot...") + } +} + +fn main() { + match this_can_fail_or_succeed("Rust is hard...") { + Ok(code) => println!("Success! Code: {}", code), + Err(msg) => println!("Oops... {}", msg), + }; +} +``` + +--- + +### ~~Exceptions~~. Errors propagated explicitly as enums. + +```rust +fn deserialize( + typ: &'frame ColumnType, + v: Option>, +) -> Result { + let mut val = ensure_not_null_slice::(typ, v)?; + let cql = deser_cql_value(typ, &mut val) + .map_err(deser_error_replace_rust_name::)?; + Ok(cql) +} + +``` + +--- + +# Unique feature of Rust - the borrow checker + +--- + +### Dangling references? + +```c++ +int const& bar() +{ + int n = 10; + return n; +} + +int main() { + int const& i = bar(); + // i is a dangling reference to an invalidated stack frame... + std::cout << i << std::endl; // May result in segmentation fault. + return 0; +} +``` + +--- + +### ~~Dangling references~~ Lifetimes! + +```rust +// This function does not compile! Reference can't borrow from nowhere. +fn bar() -> &i32 { + let n = 10; + &n +} +``` + +--- + +### ~~Dangling references~~ Lifetimes! + +```rust +fn main() { + let v = vec![1, 2, 3]; + let v_ref = &v; + + std::mem::drop(v); + + // This does not compile! `v` has been dropped, + // so references to it are no longer valid. + let n = v_ref[1]; +} +``` + +--- + +### Move semantics by default (& more lifetimes!). + +```rust +fn main() { + let mut x = vec![1, 2, 3]; + let y = x; // x's contents are moved into y. + // No heap allocation involved, O(1). + + // This does not compile! `x`'s contents has been moved out, + // so it is no longer valid (alive). + // let n = x[0]; + + x = vec![0, 0]; // Now x is valid (alive) again. + let n = x[0]; +} +``` + +--- + +### Data races? + +```c++ +void thread1(shared_data: &Data) { + while true { + shared_data.write(next_int()); + } +} + +void thread2(shared_data: const& Data) { + while true { + std::cout << shared_data.read() << std::endl; + } +} + +int main() { + Data shared_data; + + // The threads race with each other! + // A write is concurrent to another memory access (read or write)! + std::thread t1{shared_data}; + std::thread t2{shared_data}; +} +``` + +--- + +### ~~Data races~~ Aliasing XOR mutability + +```rust +fn thread1(shared_data: &mut Data) { + loop { + shared_data.write(next_int()); + } +} +fn thread2(shared_data: &Data) { + loop { + println!("{}", shared_data.read()); + } +} +fn main() { + let mut shared_data = Data::new(); + + std::thread::scope(|s| { + let t1 = s.spawn(|| { + thread1(&mut shared_data); + }); + let t2 = s.spawn(|| { + thread2(&shared_data); // Compiler yells: + // "cannot borrow `shared_data` as immutable because it is also borrowed as mutable" + }); + }); +} +``` + +--- + +# Rust + +## A language empowering everyone to build reliable and efficient software. diff --git a/content/lessons/01_introduction/a_taste_of_rust-introductory_slides/A_taste_of_Rust.pdf b/content/lessons/01_introduction/a_taste_of_rust-introductory_slides/A_taste_of_Rust.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c3b3167127a6704b8023bf984db44ccbf5a4143f GIT binary patch literal 52282 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�WsQk`Kp6ZDwm+x9@;`b6>1STeQlXU|tdagjG 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 R3@}qe3*h28RaIAiHvpU*$F%?e literal 0 HcmV?d00001