# RSH 017 Internal: rust
## About RSH
- Started in ~april
- show website with overview of past sessions
- Goal, reach people in a better way
- Remind and show hackmd
- Today is unusual time
## Material
- https://github.com/dev-cafe/rust-demo
- https://github.com/annefou/rust-examples
## About Rust
### Why Rust
- "A language empowering everyone to build reliable and efficient software." (https://www.rust-lang.org)
- Fast but also safe
- Zero cost abstractions
- Type system
- Compiler catches most errors (if it compiles, it often just works)
- Compiler provides helpful error messages
- Memory safety
- Thread safety
- Private and immutable by default
- Great tooling (testing, documentation, auto-formatter, dependency management, package registry, no makefiles needed)
- Community
- Most-loved programming language in the 2016, 2017, 2018, and 2019 Stack Overflow annual surveys
### History of Rust
- Originally designed by Graydon Hoare at Mozilla Research, with contributions from Dave Herman, Brendan Eich, and others.
- Mozilla began sponsoring the project in 2009.
- Announced 2010: http://venge.net/graydon/talks/intro-talk-2.pdf
- Rust 1.0, the first stable release, released in 2015.
- Since 2011 `rustc` is compiled using `rustc`.
- `rustc` uses LLVM as its back end.
- The History of Rust: https://www.youtube.com/watch?v=79PSagCD_AY
- Firefox (components Servo and Quantum) written in Rust.
- Ad block engine in [Brave](https://brave.com/).
- `exa`, `ripgrep`, `bat`, and `fd` written in Rust (you really want these tools!).
- Great overview of tools written in Rust: https://www.wezm.net/v2/posts/2020/100-rust-binaries/
- [Discord](https://discord.com/) uses Rust for some of its backed.
### Memory model
- No explicit allocation and deallocation.
- No garbage collector either.
- Each value in Rust has an owner and there can only be one owner at a time.
- When the owner goes out of scope, the value is dropped.
- Rust knows the size of all stack allocations at compile time.
This does not compile:
```rust
let s1 = String::from("hello");
let s2 = s1;
println!("{}, world!", s1);
```
- Rust's memory is managed a bit like money: one owner, it can be borrowed.
- We can borrow references: https://doc.rust-lang.org/book/ch04-02-references-and-borrowing.html#references-and-borrowing
- At any given time, you can have either one mutable reference or any number of immutable references.
toc marks
- about rust
- starting a new project
- demo of complete project using cargo
- rust on mybinder
- rust and python
- rust or mybinder, continued
- conclusion
## hello world
## pi example
## tooling
- cargo
## notebook
## interfacing rust with python/c/fortran
Radovan can show this if there is time