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

変更ログ 2.089.0

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

Download D 2.089.0
2019年11月02日リリース

2.089.0は11の大きな変更と66の修正されたBugzillaの問題を含んでいる。 多大なる感謝を 44名の貢献者 に感謝する。

ライブラリの変更

  1. std.traits.Unconstを追加した。

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

コンパイラの変更

  1. foreachループでシャドウイングを許可しないようにした。

    このバージョンまでは、foreach ループで変数をシャドウすることができた。 通常のfor ループでは禁止されている。このパッチはforeach ループの動作をfor ループのものと一致させる。発生した問題を修正するには、 本体の中でシャドウする変数 foreach の名前を変更する。

  2. IsExpressionsconstinoutshared の組み合わせに正しくマッチするようになった。

    Bugzilla 20138が修正された、 修正されたことで は、修飾子const,inout, およびshared の組み合わせに正しくマッチするようになった。

    以前は失敗したが、現在はパスする例:

    static assert(is(shared(const int) U == shared U) && is(U == const int));
    static assert(is(shared(inout int) U == inout U) && is(U == shared int));
    

    以下のようなコードの動作が変わることに注意されたい:

    static if (is(T U == const U) { ...}
    else static if (is(T U == shared const U)) { ... }
    

    2つ目のケースには決して到達しない。 Tshared const 。以前の動作を得るには、順序を入れ替える。

  3. extern(C) テンプレートミックスインの宣言は、グローバルスコープでミックスされるとCシンボルとしてマングルされるようになった。

    これは文字列ミックスインではすでにそうなっていたが、テンプレート・ミックスインでは新しいスコープが導入されるため、その中のシンボルはDシンボルとしてマングルされてしまう。 しかし、ユーザーはしばしばミックスイン・テンプレート内のextern(C) 、Cからアクセスできるはずのボイラープレート・コードを自動生成するために使用する。

    // ライブラリコード
    mixin template WasmEntryPoint() {
        extern(C) export void _start() {
            // boilerplate code
        }
    }
    
    mixin template UseGpuInsteadOfIntegratedGraphics() {
        extern(C) export uint NvOptimusEnablement = 0x00000001;
        extern(C) export int AmdPowerXpressRequestHighPerformance = 1;
    }
    
    // アプリケーションコード
    mixin WasmEntryPoint;
    mixin UseGpuInsteadOfIntegratedGraphics;
    
    static assert(_start.mangleof == "_start");
    static assert(NvOptimusEnablement.mangleof == "NvOptimusEnablement");
    

    以前は、_startは_D9onlineapp8__mixin46_startUkZv のようにマングルされ、ユーザーは手動でpragma(mangle, "_start") を追加するか、代わりに文字列ミックスインを使用しなければならなかった。 新しい動作では、extern(Windows)extern(Objective-C) と同様に、extern(C) についてはその必要がなくなった。 extern(C++) は、ネストされたスコープであっても、常にC++にマングルされるため、変更はない。

    複数のモジュールのグローバル・スコープに、同じ名前の異なるextern(C) 宣言を混在させると、コードが壊れる可能性がある。

    import core.stdc.stdio;
    
    mixin template GenPrintCallback(string text) {
        extern(C):
    
        auto textLength = text.length;
        auto textPointer = text.ptr;
    
        void callBackOnly() {
            printf("%.*s\n", textLength, textPointer);
        }
    
        mixin(`auto `, text, ` = &callBackOnly;`);
    }
    
    mixin GenPrintCallback!"foo";
    
    // 別のモジュールで:
    mixin GenPrintCallback!"bar";
    

    この場合、textLength、textPointer、callBackOnlyは複数回定義されるので、リンカーはどれかを選ぶか、エラーを出す。 解決策は、変数をextern(C) 、Cコールバック関数を匿名にしないことだ:

    import core.stdc.stdio;
    
    mixin template GenPrintCallback(string text) {
    
        auto textLength = text.length; // もうextern(C):以下にはない
        auto textPointer = text.ptr;
    
        alias FunT = extern(C) void function();
        enum FunT callBackOnly = () {
            printf("%.*s\n", textLength, textPointer);
        };
    
        mixin(`auto `, text, ` = callBackOnly;`);
    }
    
  4. Digital Marsのツールチェーンのデフォルトのリンカーはoptlink.exeになった。

    Windowsで-m32でビルドするときのデフォルトのリンカが変更された。 Windowsで-m32でビルドするときのデフォルトのリンカーは、link.exeからoptlink.exeに変更された。 デジタル・マーズ・ツール・チェインとマイクロソフト・コンパイラ・ツールの両方がPATH環境変数にある場合に、間違ったリンカを呼び出さないようにするためだ。 がPATH環境変数にある場合に、間違ったリンカーを呼び出さないようにするためだ。

  5. 問題6952に対処するための新しい-Xcc コンパイラー・フラグ

    POSIXでは、dmd は、-L-prefixedコンパイラ・フラグを、リンカ・ドライバ(デフォルトではcc )を通してリンカ(例えば )に渡す。 リンカ・ドライバ(デフォルトでは-Xlinker )を経由して、 の前に付けることで、リンカ(例:ld )に渡される。 そのため フラグを直接リンカードライバに渡すことはできなかった。

    このリリースでは、リンカ・ドライバに渡すフラグを指定する新しいコンパイラ・フラグ-Xcc が追加された。 このスイッチは、いくつかのリリースのLDCコンパイラーにすでに存在していた。 このスイッチの使用例としては -nostartfiles -pthread -staticとして指定できるようになった。 -Xcc=-nostartfiles -Xcc=-pthread -Xcc=-static と指定できるようになった。

    以前は、リンカードライバ・オプションを設定することも可能だった。CC 環境変数、例えばCC='cc -pthread' dmd ... を設定したり、CC 変数を設定し、カスタム・リンカー・ ドライバ・ラッパー・スクリプトを指すようにすることでも、リンカー・ ドライバ・オプションを指定することが可能だった。 -Xcc は、コンパイル性とビルド・システムへの統合の機会を向上させることで、これを改善した。 ビルド・システムに統合できる。

    こちらも参照のこと:

ランタイムの変更

  1. core.atomic.atomicFetchAddcore.atomic.atomicFetchSub を追加した。

    アトミック・スイートにcore.atomic.atomicFetchAddcore.atomic.atomicFetchSub を追加した。

  2. wstatus述語を純粋で@safeにする。

    wait(2) によって報告された wstatus 値を操作する述語は、現在、純粋かつ @safe とマークされている。 でマークされ、これらの属性を持つ関数で使用できるようになった。 属性を持つ関数で使用できるようになった。

ライブラリーの変更

  1. std.trait.Unconstの追加

    std.traits.Unconstのように動作する。 std.traits.Unqualのように動作するが const,inout,immutable の修飾子のみを削除する。

dubの変更点

  1. クロスコンパイルを含むLDCのサポートが改善された。

    ldc2 ドライバが以下をサポートするようになった

    • コマンドラインオプションの追加(カバレッジ、プロファイリング、スタックフレームの保持)、
    • リンクの分離、
    • ターゲット・トリプル(LDC-mtriple )を--arch 、例えば--arch=x86_64-pc-windows-msvc のように指定することで、クロスコンパイルが可能になった。 LDCのセットアップ方法についてはhttps://wiki.dlang.org/Cross-compiling_with_LDC。

  2. Lintコマンド追加

    DubがD-Scannerを実行するコマンドlint をサポートした。 デフォルトではdub lint がスタイルチェックを実行する。依存するdubパッケージのインポートパスがD-Scannerに渡される。 パッケージへのインポートパスが D-Scanner に渡される。

    dub lint

  3. SemVer互換演算子"^"の追加

    Dubは、^x.y.z という形式のバージョン指定をサポートするようになった。 これは「セムバー互換バージョン」に対応する。 x.y.z までのバージョンで、メジャー番号が同じものである。メジャー番号が0の場合は、同じ バージョンだけが一致する。これは、https://semver.org/ にリストされているバージョンに対応する。 として に掲載されているバージョンに対応する。 ^x.y^x.y.0 と同じである。


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

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

  1. Bugzilla 20126: iasmがバッキングメモリを変更した場合、codegenがレジスタからパラメータをリロードする。
  2. Bugzilla 20212: ライブラリの列挙型で無効なデバッグ情報が表示される。

DMDコンパイラのバグ

  1. Bugzilla 982: Codeview: 列挙型のシンボルが整数宣言されている。
  2. Bugzilla 1104: CodeView: char が 0x10 (T_CHAR) ではなく 0x20 (T_UCHAR) になっている。
  3. Bugzilla 2195: foreachの変数シャドウイングが検出されずに報告される
  4. Bugzilla 2450: 名前付きテンプレートミックスインの演算子の使用エラー
  5. Bugzilla 3831: デリゲートのtypeidの書き込み
  6. Bugzilla 4372: デバッグ情報において、列挙子の値の型が基本型に変更された。
  7. Bugzilla 6952: Linuxでのスタティック・リンク
  8. Bugzilla 13582: 他の非推奨モジュールからインポートされた非推奨モジュールは警告されるべきではない。
  9. Bugzilla 16047: 多次元 AA エントリの設定における範囲違反
  10. Bugzilla 19965: [DIP1000] テンプレートで内部ポインタをエスケープできるようになった
  11. Bugzilla 20012: テンプレートミックスイン内のextern(C)関数をC関数として扱わない。
  12. Bugzilla 20089: FPU スタックが正しくクリーンアップされない
  13. Bugzilla 20131: インラインasm LOCK CMPXCHGからの不正なコード生成; REX接頭辞が欠落している可能性がある
  14. Bugzilla 20138: 式が正しく評価されていないか?
  15. Bugzilla 20163: 文字列ミックスインで非推奨のインポートが診断メッセージを出力しない。
  16. Bugzilla 20164: 関数ローカルスコープで非推奨モジュールをインポートしても診断メッセージは出力されない。
  17. Bugzilla 20181: [nightly 2019-08-29] structのstatic foreach iterating propertyメソッドで内部コンパイラーエラーが発生する。
  18. Bugzilla 20244: dmdの新オプション-preview=noXlinkerがLinuxでシンプルなDアプリケーションをビルドする際に機能しない
  19. Bugzilla 20267: Error:string is used as a type - and similar "smart" error messages(エラー: is used as a type - と同様の"スマート"エラーメッセージ

DMDコンパイラの機能強化

  1. Bugzilla 809: 遅延引数をデリゲートに変換できるようにする
  2. Bugzilla 1547: デフォルトのパラメータ値は暗黙的なstatic opCallを使うべきである。
  3. Bugzilla 3004: [patch] 無視されるプラグインの処理を改善した。
  4. Bugzilla 15118: Win32のdmdがlink.exeの代わりにoptlink.exeを探すようにした。
  5. Bugzilla 18272: パッチ] -gf の変更履歴とドキュメントがない。
  6. Bugzilla 18617: __traits(deprecated, expr)を使って、ある式が非推奨のトリガーになるかどうかをチェックする必要がある。

phobosのリグレッション

  1. Bugzilla 20186: 実行ファイル "Hello, world" のファイルサイズが 185KB 増加した。
  2. Bugzilla 20295: std.zip: 中心ディレクトリレコードの末尾に 0xff バイトを含む zip64 が動作しない。
  3. Bugzilla 20328: [REG 2.089 beta] isInputRangeのNullable.getに関する非推奨メッセージ

phobosのバグ

  1. Bugzilla 15230: std.range.SortedRange述語チェックに一貫性がない。
  2. Bugzilla 17705: std.math.isFinite がコンパイル時に実行できない。
  3. Bugzilla 19514: gcd(BigInt(2), BigInt(1)) が失敗する
  4. Bugzilla 20027: std.zip が zip マルウェアの攻撃を受けやすい
  5. Bugzilla 20145: ランダムなunittestの失敗 inf std.datetime.stopwatch
  6. Bugzilla 20205: std.math:abs(int.min) の結果が正しくない。
  7. Bugzilla 20218: チェックされた書式文字列は無限の範囲に対して無限の時間がかかる
  8. Bugzilla 20239: chameleon zip-fileはstd.zipによって拒否されるべきである
  9. Bugzilla 20240: BitArrayが長さを超えたビットを保持しない
  10. Bugzilla 20241: BitArray.bitsSet は長さを無視する
  11. Bugzilla 20287: std.zip:間違った圧縮データ
  12. Bugzilla 20301: std.regex.regex がパターンの const/immutable 配列を受け付けない
  13. Bugzilla 20302: std.functional.memoizeがconst/immutableパラメータを持つ関数を受け付けない

phobosの機能強化

  1. Bugzilla 20147: std.bigint.BigIntと浮動小数点数の比較(==, >, >=, <=, <)を可能にした。
  2. Bugzilla 20159: CTFEでstd.math.scalbnが動作するようにした。
  3. Bugzilla 20192: std.math.isSubnormalをCTFEで動作させる
  4. Bugzilla 20196: std.math.isNormalをCTFEで動作させる
  5. Bugzilla 20199: CTFEでstd.math.frexpが動くようにする
  6. Bugzilla 20200: CTFEで浮動小数点数に対してstd.math.isPowerOf2が動作するようにする
  7. Bugzilla 20201: std.math.scalbnを純粋にする
  8. Bugzilla 20202: CTFEでstd.math.signbitが動くようにする
  9. Bugzilla 20203: std.math.copysignをCTFEで動くようにする
  10. Bugzilla 20242: BitArrayコンストラクタは入力データを変更すべきではない

Druntimeのリグレッション

  1. Bugzilla 20270: [REG2.087] プロセスの並列実行時にガベージコレクションでデッドロックが発生する

Druntimeのバグ

  1. Bugzilla 13821: fiber + exception + win server 2012 の不具合
  2. Bugzilla 16380: err.hのバインディングがない
  3. Bugzilla 18643: CAS と数値リテラルを結合するとコンパイルエラーが発生する。
  4. Bugzilla 19481: local/libphobos/libdruntime/core/sync/mutex.d(95) エラー: pthread_mutex_init に失敗した。
  5. Bugzilla 20155: GC ヒープ上の dtor を持つ構造体の割り当てが偽のポインタを生成する可能性がある。
  6. Bugzilla 20214: アドレスが変更されない場合、GC: realloc は偽のポインタを生成する可能性がある。

Druntimeの機能強化

  1. Bugzilla 8831: core.atomic: 他の結果型との比較とスワップ関数を追加した。
  2. Bugzilla 13826: volatileキーワードが削除された場合、volatileLoad/Storeをcore.volatileに移動する。
  3. Bugzilla 15007: core.atomicがC++11に対応した。
  4. Bugzilla 20105: core.atomic の"cas"関数は不完全である。
  5. Bugzilla 20106: core.atomic : atomicFenceがMemoryOrderを受け付けない。
  6. Bugzilla 20107: core.atomic : メモリオーダーにキーがない

このリリースへの貢献者 (44)

このリリースを可能にしてくれたすべての素晴らしい人々に多大な感謝を捧げる。

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