メモリ

Dはシステムプログラミング言語であり、したがって手動でのメモリ管理ができます。 しかし手動でのメモリ管理は非常に間違いを起こしやすいので、 Dはデフォルトでメモリ割り当ての管理にガベージコレクタを使用します。

DはCのようなポインタ型 T*を提供します:

int a;
int* b = &a; // bにはaのアドレスが入る
auto c = &a; // cはint*でaのアドレスが入る

ヒープ上の新しいメモリブロックはnew式を使って割り当てます。 これは管理されたメモリへのポインタを返します:

int* a = new int;

aによって参照されるメモリがプログラムのどこからも参照されなくなってすぐに、 ガベージコレクタはそれを解放します。

Dには関数のための3つのセキュリティレベルがあります: @system@trusted、そして @safeです。 特に指定されない限り、デフォルトは@systemです。 @safeは設計によってメモリバグを防ぐDのサブセットです。 @safeなコードは@safeまたは@trustedな関数のみ呼び出すことができます。 また、@safeコード中での明示的なポインタ演算は禁止されています:

void main() @safe {
    int a = 5;
    int* p = &a;
    int* c = p + 5; // エラー
}

@trusted関数は手動で検証された関数で、 SafeDとその根底にある管理されない低レベルな世界との間を橋渡しします。

掘り下げる

rdmd playground.d