Komme i gang med Rust
Hvorfor Rust?
Trenger vi virkelig et nytt programeringsspråk ?
Nei, vi trenger egentlig ikke et nytt programmeringsspråk, men vi trenger en minnemodell som fungerer.
Rydd etter deg
C og C++ sine minnemodeller er tanken at man skal rydde opp etter seg etter bruk, dette har vist seg å fungere dårlig. Det er stort sett bare en garanti med C og C++ og det er at det alltid er minnelekasje.
Dette resulterer igjen at vi må restarte server, mobiler etc når de går tomme for minne. Store selskaper har egne team som bare driver med dette.
Vi rydder for deg
Java og .Net med venner, har garbage collector, tanken er at den skal rydde etter deg. Problemet her er jo at vi må stoppe verden for at GC skal kjøre.
Store selskaper har egne team som bare driver med GC, tuner GC og ruter trafikk til server som ikke kjører GC.
Rydd opp mens du holder på
Compileren til Rust tvinger deg til å rydde etter deg, ellers får du ikke compilert. Alt er compile-time, så får du compilert så kjører det.
Hvordan kommer jeg i gang med Rust
Ok, først og fremst så trenger du Rust compileren og byggesystemet til Rust, alt dette kommer i en pakke.
Vi bruker rustup og anbefaler det på det varmeste.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Og når vi skal oppgradere, bruker vi bare:
rustup upgrade
Rustup fikser alle avhengiger i tooling osv, for oss.
Cargo
Cargo er så langt det beste byggesystemet jeg har vært borti, og jeg har prøvd en del. Cargo følger mer Rust og de to er som ett.
Din første Rust app
Ja, det blir selvsagt Hello World.
cargo new hello_world
Default for cargo new
er applikajson, for å lage bibliotek legger du på --lib
cargo new mitt_biblio --lib
Cargo genererer katalogen hello_world
som inneholder Cargo.toml
og en src
katalog med hello_world.rs
for deg.
Cargofila di ser da noe sånt ut.
[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
Hello world
Den genererte hello_world.rs
har en interessant feature og det er println!
hvor !
på slutten, forteller oss at det er en makro.
fn main(){
// utropstegnet forteller oss at det er en macro
println!("Hello, world");
}
For å kjøre den, bruker vi cargo
$cargo run
Compiling hello_world v0.1.0 (/home/reidars/github/rustblogg/hello_world)
Finished dev [unoptimized + debuginfo] target(s) in 0.89s
Running `target/debug/hello_world`
Hello, world!
Hello world uten makro, går også an, her er ett eksempel på det.
use std::io::Write;
fn main() {
std::io::stdout().write(b"Hello, world!\n").unwrap();
}
Som du ser, så hjelper makroene i Rust deg med mye, det er litt rart til å begynne med, men du blir nok veldig glad i de etterhvert.
#![feature(prelude_import)]
#[prelude_import]
use std::prelude::rust_2021::*;
#[macro_use]
extern crate std;
fn main() {
{
::std::io::_print(::core::fmt::Arguments::new_v1(
&["Hello world\n"],
&match () {
() => [],
},
));
}
}