なぜ新しいプログラミング言語が必要なのだろうか? その理由の一つは、C++があまりに複雑だからということだ。C++のすべての機能を覚えることはあまりに困難であるため、たいていのC++プログラマは特定の機能群を使用することが習慣となり、それ以外の機能には手を出さなくなる。このことはコンパイラにとっては特に問題ではないが、しかし別の機能群に慣れている他のプログラマがコードを読もうとしたときには問題になる可能性がある。Dは、重要な機能を省略することなく非常に単純化することによってこの問題を回避した。もちろんDの利点はこれだけではない。
Dの目的の一つは、ソフトウェアの開発コストを少なくとも10%削減することだ。そのため生産性を高める機能を追加し、またバグで時間を浪費しないように言語を調整している。Dは命令型、構造化、オブジェクト指向、ジェネリックプログラミングといったプログラミングパラダイムをサポートしている。DはCやC++に非常に似ているので、 特にCやC++プログラマは比較的簡単にDを習得することができるはずだ。Dには、同じシステム上のCとABI(アプリケーション・バイナリ・インターフェース)レベルでの互換性がある。つまりDの中でprintfなどのCの関数を呼び出すことができるということだ。ただしCやC++とソースコードレベルでの互換性はない。DではC++と同じように、システムの下層に位置するデバイスドライバやオペレーティングシステムを書くことができる。またDは、ガベージコレクタ(ただし手動でのメモリ管理も可能)など、JavaとC#の数多くの便利な機能を採用している。
数ヵ月前にDを学ぼうと思い始めたときに私は、習得には長い時間がかかるだろうと見込んでいたが、間違っていた。Dを学ぶ前にJavaのプログラミングを少しだけしたことがあったのだが、Dは非常に似ていると感じた。とは言えDを今の時点で学び始めるには、CやC++でプログラミングをしたことがない人向けの優れたチュートリアルがないという難点がある。
Dのコンパイラには、DMDとGDCの2つがある。DMDはオフィシャルのコンパイラで、D言語の標準に100%準拠し、Dのソースコードからアセンブリコードへの変換を行なうためにプロプライエタリのバックエンドを使う。一方GDCは、Dのフリーのフロントエンドと、GCC(GNU Compiler Collection)のバックエンドを使っている。GDCはDMDとは違って今のところはまだ標準に100%の準拠はしていない。その理由は、GDCの開発者はDMDに新機能が追加される度に後追いで実装する必要があるためだ。GDCはLinux、Mac OS X、Cygwin、FreeBSD、AIX、MinGW上で 使用することができる。その他のオペレーティングシステムでも利用できるようにするためには、開発者がそのオペレーティングシステムをサポートするためにDのガベージコレクタを移植する必要がある。移植のために必要な作業はそれほど大量ではなく、また各システムについて一度行なえば良いだけなのだが、これまでのところは上記のオペレーティングシステムについてしか行なわれていない。
