D ist eine Systemprogrammiersprache und erlaubt daher manuellen Zugriff auf den Systemspeicher. Manueller Zugriff impliziert jedoch, dass Fehler sehr leicht entstehen können, daher verwendet D standardmäßig einen Garbage Collector um Speicher freizugeben.
D verfügt über Adresstypen (aka Pointer) T*
wie in C:
int a;
int* b = &a; // b beinhaltet die Adresse zu a
auto c = &a; // c hat den Typp int* und beinhaltet die Adresse zu a
Mit dem new
Ausdruck kann ein neuer Speicherblock auf dem Heap alloziert
werden. Der new
Ausdruck gibt einen Pointer zu den allozierten Speicher zurück:
int* a = new int;
Sobald der Speicher, welcher durch a
adressiert wird, von keiner Variable des Programmes mehr referenziert wird,
wird der Speicher durch den Garbage Collector freigegeben.
In D gibt es drei Sicherheitsstufen für Funktionen: ,
und
.
Außer explizit angeben, werden Funktionen als
behandelt.
ist ein Subset von D, welches per Definition Speicherfehler verhindert.
Code kann nur andere
Funktionen oder Funktionen denen explizit
mit
vertraut wird, aufrufen. Manuelle Adressarithmetik ist in
Code verboten.
void main() {
int a = 5;
int* p = &a;
int* c = p + 5; // Fehler
}
Funktionen müssen manuell verifiziert werden und erlauben die Brücke
zwischen SafeD und der zugrundeliegenden unsicheren, low-level Welt.
xxxxxxxxxx