Pointers in soorten en maten
Arnout van Kempen over rommelen in een digitale wereld.
Rust kent dus pointers, maar bewaakt ook als je pointers gebruikt de geheugenveiligheid. Hoe doet Rust dat? Door slimme pointers te gebruiken. En voor wie echt, heel, heel, heel diep wil gaan, bestaan er ook nog raw pointers die werken zoals in C, maar die mag je alleen gebruiken als je de compiler vertelt dat je unsafe wil programmeren. Het kan, maar bijzonder kleine kans dat je dat echt wilt.
Wat kan wel? Rust kent de volgende pointers:
Box<T>. Deze lijkt sterk op wat je in C met malloc() doet. Een Box is in feite gewoon een pointer naar heap-geheugen dat je alloceert. En als de Box uit scope gaat, ruimt Rust meteen de heap op:
struct MyStruct {
field : i32,
}
fn main() {
let mut my_box = Box::new(MyStruct { field: 10});
my_box.field += 1;
println!(“Veldwaarde: {}”, my_box.field);
}
Rc<T>. Dit is een geavanceerde variant waarbij dezelfde data door meerdere eigenaren kan worden gebruikt, maar geen van allen kan de data muteren.
Arc<T>. Doet wat Rc<T> doet, maar kan dan ook nog eens over verschillende threads werken, stukken code die tegelijk worden uitgevoerd. En
RefCell<T>. Voegt mutatiemogelijkheden toe.
En dan hebben we nog pointers naar slices, array’s, naar functies. Maar voorlopig kunnen we met Box<T> aardig uit de voeten. Bijvoorbeeld een heel simpele linked list, waar waarden aan toegevoegd kunnen worden:
struct Node<T> {
value: T,
next: Option<Box<Node<T>>>,
}
struct LinkedList<T> {
head: Option<Box<Node<T>>>,
}
In de LinkedList zullen nu nog methoden toegevoegd moeten worden met impl, om een nieuwe lijst te beginnen en om nodes toe te voegen, weg te halen, etcetera. Maar de basis is er en die lijkt sterk op C. We hebben een kop van de lijst, die naar een node verwijst en nodes die naar nodes verwijzen. En door het gebruik van T kan je lijsten van ieder denkbaar type maken zo.
Wie mee wil doen met #klooienmetcomputers kan dat doen via GitHub. Maak een account op github.com en zoek naar Abmvk/kmc. Het account Abmvk volgen kan ook. Lezers zijn vrij te gebruiken wat ze willen en om zelf zaken toe te voegen of aan te passen, vragen te stellen of commentaar te leveren.
Gerelateerd
Alles draait om data
Arnout van Kempen over rommelen in een digitale wereld.
Omgeving: input-output
Arnout van Kempen over rommelen in een digitale wereld.
Omgeving: de configuratie
Arnout van Kempen over rommelen in een digitale wereld.
Identificatie
Arnout van Kempen over rommelen in een digitale wereld.
Verhalen vertellen
Arnout van Kempen over rommelen in een digitale wereld.