#Klooienmetcomputers

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.

Arnout van Kempen di CCO CISA is Senior manager Risk & Compliance bij Baker Tilly. Hij schrijft op persoonlijke titel. Hij is lid van de Commissie Financiƫle verslaggeving & Accountancy van de AFM en lid van de signaleringsraad van de NBA. Daarnaast is hij diaken van het bisdom 's-Hertogenbosch.

Gerelateerd

reacties

Reageer op dit artikel

Spelregels debat

    Aanmelden nieuwsbrief

    Ontvang elke werkdag (maandag t/m vrijdag) de laatste nieuwsberichten, opinies en artikelen in uw mailbox.

    Bent u NBA-lid? Dan kunt u zich ook aanmelden via uw ledenprofiel op MijnNBA.nl.