英語版
このページの英語版を見る

変更ログ 2.077.0

前バージョン: - 次のバージョン:

Download D 2.077.0
2017年11月1日リリース


D 2.077.0におけるすべてのバグ修正と機能強化のリスト。

コンパイラの変更

  1. マングル・シンボルが参照型と識別子を返すようになった。

    extern(D)リンケージを持つシンボルは、型と識別子の後方参照を使用してマングルされるようになった。 型と識別子の後方参照を使用してマングルされるようになった。 に複数回含まれる場合、型と識別子の後方参照を使用してマングルされるようになった。これにより、シンボルの長さが短縮される。 特にVoldemort戻り値の型を持つテンプレート化された関数の連鎖式では、シンボルの長さが短くなる。例えば、平均的な 例えば、"phobos"のunittestビルドで作成された127000以上のシンボルの平均シンボル長は、約3分の1に短縮される。 で作成された127000以上のシンボルの平均シンボル長は約3分の1に短縮され、最長のシンボル は416133文字から1142文字に短縮される。

    詳細はABI 仕様書を参照のこと。

  2. コンストラクタとデストラクタの前奏アサートが削除された。

    コンパイラーは、コンストラクターとデストラクターの先頭にassert(this, "null this"); を挿入していた。 これらのアサー トをトリガーするには、NULL メモリの位置で集約をコンストラクタまたはデストラクタする 必要があった。 これは、コンストラクタやデストラクタが有用な処理を行うために必要なデータ・メンバへのアクセス時にクラッシュする。

  3. DMDビルドが再現可能になった

    dmdリファレンス・コンパイラが、与えられたソースコードと設定に対して同一のバイナリを決定論的に生成するようになった。 を決定論的に生成するようになった。 配布されたバイナリが指定されたソースコードに由来することを第三者が検証できるようになった。

    この保証は、同じコンパイラー・バージョンとコンフィギュレーションが使用される場合にのみ適用される。 使用されている場合にのみ適用される。また、非決定的()()トークン__DATE__,__TIME__ 、 および__TIMESTAMP__ の値がバイナリに含まれてはならない。

    詳細はreproducible-builds.orgを参照のこと。

ランタイムの変更

  1. core.atomic.atomicLoad'sの戻り値の型が、間接表現を持つ集約型について変更された。

    core.atomic.atomicLoad以前は、shared の修飾子を除去しすぎていた。 を熱心に除去していた。集約型が"head"と "tail"を持ち、それらが間接参照で接続されている場合、。 を持つ場合、atomicLoad はテールからshared を取り除いていた。これはバグだった。 Bugzilla 16230 atomicLoad は先頭だけをロードする。テールは 共有メモリに残り、shared 修飾子を保持しなければならない。

    間接参照を含む構造体をロードする場合、atomicLoad 。 適切に型付けされた値を返すゲッターを提供するラッパーを返すようになった。

    クラス参照をロードするとき、atomicLoadshared を残すようになった。 を残すようになった。

    例:

    class C { int value; }
    shared C shc = new C;
    
    struct S { int head; int* tailPointer; }
    shared int tail = 1;
    auto shs = shared S(2, &tail);
    
    void main()
    {
        import core.atomic : atomicLoad, atomicOp;
    
        // クラス参照の読み込み:
        shared C c = atomicLoad(shc);
        // c自体は実際には共有されていない。非アトミックにコピーしても安全だy:
        shared C c2 = c; // OK
        // cのフィールドはまだ共有されているので、アトミックにロードする必要がある:
        int v = atomicLoad(c.value);
    
        // インダイレクトを持つ構造体のロード:
        auto s = atomicLoad(shs);
        // 構造体の先頭はコピーされており、アトミックに変更できない:
        ++s.head;
        // テールはまだ共有されており、アトミックに処理する必要がある:
        shared(int)* t = s.tailPointer;
        atomicOp!"+="(*t, 1);
    }
    
  2. ベクトル化された配列操作がテンプレート化された

    配列操作は、some 配列操作専用のアセンブリ・ルーチンから、すべての配列操作の汎用テンプレート実装に変更された。これにより、これまでベクトル化されていなかった配列演算のパフォーマンスが大幅に向上した(スループットが2~4倍向上)。 さらに、この実装では、短い配列でもベクトル化をうまく利用することで、一部の演算のレイテンシを大幅に短縮している(最大4倍)。

    GDC/LDCの実装は自動ベクトル化に依存しているが、DMDの実装は自らベクトル化を行う。DMDによるベクトル演算のサポートは、バイナリの肥大化とわずかなテスト・オーバーヘッドを避けるため、静的に決定される (-march=native,-march=avx2)。DMDはデフォルトで64ビット・ターゲットのSSE2を有効にする。

    druntime#1891も参照のこと。

    釈注:精度が低下する可能性があるため、浮動小数点除算(例:ary[] / scalar )を乗算(ary[] * (1.0 / scalar) )に弱める実装は行われなくなった。精度の低下が許容される場合に浮動小数点乗算の高い性能を維持するには、GDC/LDCで-ffast-math 、またはDMDで(1.0 / scalar) 、手動で乗算するようにコードを書き換える。


D 2.077.0におけるすべてのバグ修正と機能強化のリスト:

DMDコンパイラのリグレッション

  1. Bugzilla 15538: [REG 2.064] スイッチのコードが間違っていた。
  2. Bugzilla 16013: [REG2.072a] 互いに依存する構造体とエイリアスのICE
  3. Bugzilla 16273: [REG 2.072a] 継承、テンプレート、オーバーライドでのdmdのセグメンテーションエラー
  4. Bugzilla 17307: [REG2.072.0][ICE] TypeBasic::implicitConvTo:"匿名構造体は集約の一部にしかなれない "というエラーの後
  5. Bugzilla 17684: [REG 2.062]static alias this バグか不完全な実装か?

DMDコンパイラのバグ

  1. Bugzilla 6625: より新しいWindows APIインポートライブラリを配布する。
  2. Bugzilla 11259: 親がパッケージの場合、__traits(isSame)は__traits(parent)の結果に対して失敗する
  3. Bugzilla 17370: [scope] struct GC allocationでスコープポインタのエスケープが可能になった。
  4. Bugzilla 17568: [scope] フィールドへのアドレスはスコープメソッドからエスケープできる
  5. Bugzilla 17725: [スコープ] ネストされた関数から囲むローカルへのエスケープ
  6. Bugzilla 17751: 内部エラー: ddmd/backend/el.c 2927
  7. Bugzilla 17782: 区切り文字列の識別子の区切り文字が '_' で始まることはできない。
  8. Bugzilla 17790: [スコープ] 集合体の配列を通してエスケープポインタが可能である。
  9. Bugzilla 17795: [scope] ~=演算でスコープエラーが検出されない
  10. Bugzilla 17857: T.alignofは明示的なalign(N)型の整列を無視する。
  11. Bugzilla 17943: 間違ったポインタ算術最適化

DMDコンパイラの機能強化

  1. Bugzilla 10523: 短いベクトル演算のために配列演算関数を呼び出さない。
  2. Bugzilla 13262: 特定の共有データを別のスレッドに送信できない
  3. Bugzilla 15831: IFTI voldemort型の爆発的肥大化
  4. Bugzilla 16995: __traits(getUnittests)は別個のコンパイルでは動作しない。
  5. Bugzilla 17787: BetterCの定義済みバージョンを追加して、ライブラリが適応できるようにした。
  6. Bugzilla 17791: traits(isDeprecated,...)を追加した。
  7. Bugzilla 17887: WebAssemblyの予約バージョン識別子を追加する

phobosのバグ

  1. Bugzilla 3191: バッファが再利用されると std.zlib.UnCompress がエラーになる。
  2. Bugzilla 8779: std.zlib.UnCompress はストリームの終了を検出する必要がある。
  3. Bugzilla 9505: std.zlibにはバグがあるようだ。
  4. Bugzilla 10444: SIMDレジスタの書き込み
  5. Bugzilla 11389: std.zlib.array.replaceが関数型で動作しない。
  6. Bugzilla 12470: std.array.replaceがinout(char)[]で動作しない。
  7. Bugzilla 13829: 文字列のstd.uni.byCodePointに長さがある。
  8. Bugzilla 15096: std.array.arrayが範囲へのポインタに対してインスタンス化できない
  9. Bugzilla 15735: std.algorithm.iteration.splitterが空の範囲を返す
  10. Bugzilla 16264: 64ビットでBigIntの乗算がクラッシュする(biguintnoasm.d(276):範囲違反)
  11. Bugzilla 17847: Park-Miller エンジンのシードを適切にサニタイズするようにした。

phobosの機能強化

  1. Bugzilla 4582: std.typecons.Tupleのdistinctフィールド名制約。
  2. Bugzilla 6004: 標準.range.unzip()
  3. Bugzilla 6409: 連想配列のためのstd.array.emptyも追加された。
  4. Bugzilla 9183: Nullable.get(x)オーバーロードを追加する。
  5. Bugzilla 9591: std.typetuple.staticApplyMapを追加した。
  6. Bugzilla 16512: std.allocator.Nullable.get(x)オーバーロードの追加allocator.disposeに渡される引数をNull化する。
  7. Bugzilla 16984: dlang.orgで実行可能なモジュールを増やす
  8. Bugzilla 17803: std.typecons.Tuple: opAssignはref Tupleを返すべきだ。
  9. Bugzilla 17844: std.process.executeはstderrをキャプチャしないようにすべきだ。

Druntimeのバグ

  1. Bugzilla 16230: core.atomic.atomicLoadは集約型から共有型を熱心に削除しすぎる。
  2. Bugzilla 17829: core.stdc.errnoが-betterCで動作しない。

dlang.orgのバグ

  1. Bugzilla 9958: "Integer FloatSuffix"は有効なFloatLiteralではない
  2. Bugzilla 17649: CONTRIBUTING.md命令に失敗した(./druntimeディレクトリがない)。
  3. Bugzilla 17798: [2.076] "static foreach"がドキュメント化されていない
  4. Bugzilla 17848: ドキュメントの浮動小数点リテラルの例が無効である。
  5. Bugzilla 17856: __traits("識別子")は、行内のドキュメントで例を使用することができる。

dlang.orgの機能強化

  1. Bugzilla 17581: BetterC "の動作をドキュメント化した。
前バージョン: - 次のバージョン: