Rust

- Johan Burell

Vad är det och vad gör det speciellt?

http://valte.ch/mejsla_rust

Funktionalitet

  • Inga fler segmenteringfel
  • Garanterad trådsäkerhet
  • Funktionell stil (expressions, fria funktioner, ADT)
  • Pragmatisk och kompakt syntax
  • Ruskigt snabb
  • (Ingen GC eller Runtime)
  • Fungerar till allt mellan stora applikationer och IoT

Det här med minne...

Ägandeskap

  • Minne binds till variabler
  • Det får bara finnas en bindning åt gången per minne
  • Variabler som faller ur scope, frigör sitt minne

Mutationer

  • Alla variabler är omuterbara om inget annat anges
  • Variabler som är omuterbara kan bindas om muterbart
  • ...och sedan tillbaka till omuterbart om man vill

Låneregler

  • Minne får lånas ut omuterbart hur många gånger som helst
  • Om minne lånas ut muterbart får inga andra lån existera
  • Lån får inte pågå längre än variabelns livslängd

Både lånereglerna och ägande-/mutationsreglerna kollas under kompilering och är gratis under körning(!)

Men trådar då?

  • Variabler som skickas mellan trådar måste ha egenskapen "Send" (ex Arc)
  • Variabler som delas mellan trådar måste ha egenskapen "Sync" (ex Mutex)

Inga andra variabler får passera trådbarriären (unsafe är det enda undantaget)

Ett första exempel

Alla beroenden i finns i prelude:

https://doc.rust-lang.org/stable/std/prelude/index.html

Varför ett '!' ? Vi kommer till det...

Mutationer

Mutationer

Mutationer

En titt på typer

Motsvarande f32 och f64 finns för flyttal

Heltal

En titt på typer (nummer)

En titt på typer (kastning)

En titt på typer (num forts)

En titt på typer (strängar)

En titt på typer (strängar)

Funktioner

Closures

  • Fungerar likt closures i andra språk
  • Som standard så lånar de omgivningen, men kan även ta över ägandeskapet

Lån

Lån, forts...

Box-returer istället...

Trådsäkerhet

Mer om typer

Mer om typer (Structs)

Mer om typer (Traits)

Funktionell stil

Funktionellt flöde

Felhantering med ADTs

Frågor?

(...och tack för er tid!)

Made with Slides.com