SchveighofferD言語で最も嬉しい機能の一つが、スライスの実装です。D以外のプログラミング言語を使うといつでも、自分がDのスライス構文なしではいられなくなっていることに気づきます。スライスは簡潔で効率的なだけではなく、スライスを使っていると全てが思った通りに"ただ動作する"のです。この記事では、Dのスライスと配列の内部実装と背景について眺めていきます。読み終わった後には、Dのスライスの適切な使い方についての明確な理解と、それがただの配列とどう根本的に!違っているかが把握できることと思います。オーバーフローの問題ほとんどの言語では、配列は中で自分のデータを管理する組み込みデータ型で、参照で持ち回る形で使われます。その型に対して関連づけられています。配列というのは単に連続領域に並んだデータの連なりです。配列や配列の一部への参照は単なるポインタ(明示的な参照)と同じものでした。Cの配列は、要素を指すデータ型、つまりポインタ、のみを通して個別に扱われます。提供される唯一の操作は、ポインタからのオフセットで指定したデータの読み書きのみです。ライブラリ関数と仮定/ドキュメントに任されています。配列はポインタを通して、どんなデータにもアクセスできてしまうことです、配列に属さないデータに対してさえも。負の添え字ですら使えてしまいます!配列が、単一の値を指すポインタと完全に同じ型を使っていることに触れるまでもないでしょう。関数の引数としてポインタが渡されたとき、それは配列かもしれないし、単に一つの値へのポインタなのかもしれません。バッファオーバーフロー攻撃の出番です。多くの側面で、Dの配列はCの配列によく似ています。実際、DはCのポインタを通じた配列の構文をサポートしています。配列構文の上に、スライスと呼ばれる新しい型を導入しました。スライスは(動的・静的に限らず)配列の一部分を表していて、ポインタとその部分の長さを両方とも保持します。データの長さを持つことによる保護と、裏でメモリを管理するガベージコレクタを合わせると、スライスは非常に協力でダイナミックな、しかもメモリ破壊からは守られた機能となっています。スライスは、スライスを第一引数にとる関数で機能を拡張することができます。これによって、どんな機能でも組み込みのプロパティやメソッドのように追加することが可能です。スライスによって、他の言語ならぎこちなく遅くなっていたかもしれないコードを、高性能でエレガントで簡潔な構文で書くことができます。個へのスライスを手に入れます。データはすべて必ずデフォルトで初期化されています。