D 2.0 の 1.0 からの違い
D 2.0 は D 1.0 と比べ、 言語の面でもライブラリの面でも大きく強化されています。 このリストには バグフィックス や 1.0 にも加えられた変更 は含まれません。
言語の変更点
- クラスオブジェクトの opAssign は多重定義不可能となりました
- 予約語 pure 追加
- enum を拡張して記号定数の定義を可能としました
- const/invariant 構造体、 クラス、 インターフェイス を追加
- IsExpression に const と invariant を追加
- 型指定子 typeof(return) を追加
- 単項 * 演算子を opStar() でオーバーロード可能にしました
- 完全なクロージャのサポート
- string, wstring, dstring を全て invariant な定義に変更しました .
- 関数とテンプレートの オーバーロード集合 を追加
- std.math.sin, cos, tan にコンパイル時定数を与えるとコンパイル時評価されるようになりました
- プラグイン用の C++ interface 追加
- IsExpression の結果型を int から bool に変更
- オプションの TemplateParameterList を IsExpression に追加
- override が省略された時の警告を導入
- 文字列リテラルのための新構文 (デリミタ, ヒアドキュメント, Dトークン) 追加
- __EOF__ トークンを追加
- D_Version2 定義済み識別子を追加して、D 2.0 コンパイラでコンパイラされていることを識別可能にしました
- 配列のinvariantなコピーを作るための .idup プロパティを追加
- 推移的 const と invariant を導入
- in パラメタ記憶域クラスを scope const の意味としました
- class と struct の invariant 宣言に () が必須となりました
- isSame, compiles を __traits に追加
- ForeachRangeStatement 文を追加
Phobos ライブラリの変更点
- std.algorithm: 新モジュール
- std.bitarray: 非推奨となる予定
- std.bitmanip: std.bitarryの内容に加え、bitfields, FloatRep, DoubleRep テンプレートを提供する新モジュール
- std.contracts: 新モジュール
- std.conv: parse と assumeUnique を追加。 conv_error を変換対象の型でパラメタ化されたテンプレートに変更。 その他大量の機能追加
- std.file: dirEntries 追加
- std.format: writef* に raw('r') 書式指定を追加
- std.functional: 新モジュール
- std.getopt: 新モジュール
- std.hiddenfunc: 新モジュール
- std.math: nextafter を全ての浮動小数点数型に使えるようにしました。approxEqual テンプレートを追加。
- std.numeric: 新モジュール
- std.path: rel2abs (Linux版のみ) 追加。 basename と dirname 関数 (getBaseName と getDirectoryName の別名) 追加
- std.process: Linux版で getpid を使えるように
- std.stdio: writeln() と write() を追加。 writef() は書式指定を使える箇所を第一引数のみに制限。 readln で行終端を指定可能にしました。 関数 fopen, popen, lines, chunks を追加
- std.string: 関数 munch, chompPrefix を追加
- std.random: 乱数生成エンジンと乱数分布の追加。大きな変更です。
- std.traits: 新モジュール
- std.typecons: 新モジュール
- std.variant: 新モジュール
- Tango GC との構造的な差を取り込み (まだまだ途中です)
- Phobos linux.mak を書き直して、ビルドロジックをドキュメント化
- next メンバを Object.Error から Object.Exception に移動
- Linux版のライブラリ名を libphobos.a から libphobos2.a に変更
