Rustlings: Live!
Goals:
Share knowledge
Ask Questions
Pair
Grow
Social Rules
https://www.recurse.com/manual
Have Fun!
What is Rust?
What is Rust?
Rust is a statically and strongly typed modern systems programming language focusing on safety, speed, and concurrency. It accomplishes these goals by being memory safe without using garbage collection.
all types are known at compile-time
types are designed to make it harder to write incorrect programs
generating the best possible machine code with full control of memory use
e.g. OS, device drivers
Why Rust vs C/C++?
- Memory safety w/o garbage collection
- Clear compiler errors
Why does Rust matter?
traffic mesh
netlify-toml-rs
traffic controller
netlify-headers-rs
...
Top Down Rust
Package Manager | npm | crates |
Version Manager | nvm | rustup |
Registry | npmjs.com | crates.io |
Config | package.json | cargo.toml |
Task Runner | npm scripts/gulp | make / cargo run |
Linter | eslint/tslint | clippy |
Formatter | prettier | rustfmt |
JavaScript | Rust |
---|
Installation
$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
[[ Install Rustup ]]
https://www.rust-lang.org/tools/install
windows
mac
println!("Hello, world!");
├── babys_first_rust/ ├── main.rs └── main
executable
your code
println!("Hello, world!");
fn main() { println!("Hello, world!"); }
println!("Hello, world!");
fn main() { println!("Hello, world!"); }
4 spaces
end of expression
first code that runs in every executable Rust program
console log macro
println!("Hello {}", SOME_VAR);
println!("Hello {:?}", "world");
Compiling + Executing
rustc main.rs
./main
Cargo
├── babys_first_rust/
├── src
├── main.rs └── cargo.toml
your config
your code
cargo.toml
[package] name = "hello_cargo" version = "0.1.0" authors = ["Your Name <you@example.com>"] edition = "2018" [dependencies]
Compiling + Executing
cargo build
./target/debug/hello_cargo
OR
cargo run
Rust Basics
Variables and Mutability
Variables and Constants
Variables and Shadowing
Variables and Shadowing
Primitive Data Types
Type | Example Values |
---|---|
bool | true/false |
char | ❤️, a, 東京 |
i8, i16, i32, i64, isize | -5, 42, |
u8, u16, u32, u64, usize | 5, 42 |
f32, f64 | 3.14, 4,5 |
array | let array: [i32; 5] = [0, 1, 2, 3, 4]; |
slice | let slice = &array[0..3]; |
str | "Hello World" |
tuple | let tuple = ("hello", 42, "world", [3,6,9]); |
Functions
Functions with Params
Functions with Returns
Conditionals
Conditionals: While
Iterators
Let's Pair!
The rules of raindrops are that if a given number:
- has 3 as a factor, add 'Pling' to the result.
- has 5 as a factor, add 'Plang' to the result.
- has 7 as a factor, add 'Plong' to the result.
- does not have any of 3, 5, or 7 as a factor, the result should be the digits of the number.
- 28 has 7 as a factor, but not 3 or 5, so the result would be "Plong".
- 30 has both 3 and 5 as factors, but not 7, so the result would be "PlingPlang".
Hints
pub fn raindrops(n: u32) -> String {
let mut sound = String::new();
...
}
Rustlings: Live!
By shortdiv
Rustlings: Live!
- 688