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

変更ログ 2.095.0

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

Download D 2.095.0
2021年01月01日リリース

2.095.0には、27の大きな変更と78のBugzilla問題の修正が含まれている。 多大なる感謝を 61人の貢献者 に感謝する。

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

コンパイラの変更

  1. オーバーロードの解決時にシンボルの可視性をバイパスすることを非推奨とする。

    集約宣言にプライベート・メソッドとパブリック・メソッドが同じオーバーロード・セットに含まれている場合、別のモジュールからプライベート・メソッドを呼び出すことができる。 同じオーバーロード・セットにプライベート・メソッドとパブリック・メソッドが含まれている場合、別のモジュールからプライベート・メソッドを呼び出すことができる。

    例:

    ==============================
    module foo;
    
    struct Foo
    {
      import std : writeln;
    
      private int _x;
    
      private ref int x() return
      {
        writeln("ref int");
        return _x;
      }
    
      int x() const
      {
        writeln("int");
        return _x;
      }
    }
    ============================
    
    ---
    

    module main;

    void main() { import std : writeln; import foo : Foo;

    auto f = Foo(); f.x = 3; // プライベートのメソッドの呼び出しOK writeln(f); } ===========================

    このバージョンから、非推奨メッセージが発行されるようになった。 が発行される。
  2. テンプレート内部で非推奨がトリガーされた場合、インスタンス化のトレースが表示されるようになった。

    非推奨を扱う際によくある問題は、ライブラリ・コード内で非推奨がトリガーされることだ、 例えば、deprecated alias this 、またはフック(opApply 、レンジ・プリミティブ...)がある。 が"phobos"内部に深くネストされた関数から呼び出される。

    このような場合、インスタンス化がどこから来ているのかを見つけるのは非常に面倒である。 今回のリリースから、非推奨化がテンプレート内部でトリガーされた場合、コンパイラーはテンプレートのインスタンス化のトレースを表示するようになった。 はテンプレートのインスタンス化のトレースを表示する。 同じ制限が適用され(6フレーム、再帰テンプレートは圧縮される)、それを解除するために-v を使って解除できる。

  3. C++ヘッダー生成の改善

    以下の機能/バグ修正/改善が に実装された:

    • 列挙型 "はマクロで生成されなくなり、enum class-extern-std= 、c++11以降のC++標準セットが使用される。
    • 前方参照宣言が適切にインデントされるようになった。
    • デフォルト関数のパラメータが適切に出力されるようになった。
    • タプルメンバー/パラメーター/変数が個々の変数として出力される として発行されるようになった。
    • インターフェイスが基底クラスとして出力されるようになった。
    • 集約メンバは適切な保護レベルで出力される。
    • 集約内の保護された列挙型が再び発行される。
    • プライベートメンバメソッドが発行されなくなった
    • 共用体のデフォルトコンストラクタが自動生成されなくなった。
    • externブロックの中にネストされた宣言を無視しなくなった、 例extern(D) extern(C++) void foo() {}
    • 不透明な列挙型によるセグメンテーション・フォールトが発生しなくなり、C++ 11 用に適切にエクスポートされるようになった。
    • -extern-std=c++98 でコンパイルする際、C++11 の構成要素が回避されるようになった。
    • typeof(null) 型を使用してもアサーションに失敗しなくなった。
    • 浮動小数点リテラルのベース型がヘッダーに反映されるようになった。
    • NaN math.h から / を使用して が発行される。NANINFINITY Infinity
    • 最終クラスはfinal
    • immutable は変更可能" ではなく として出力される。const
    • テンプレート内の識別子チェーンは完全に出力される。
    • vtableの適切なレイアウトは、 でない仮想関数のプレースホルダを非表示にすることで確保される。 extern(C|C++) でない仮想関数のプレースホルダを非表示にすることで、適切な vtable レイアウトが確保される。
    • クラス・メンバー/メソッドのconst の欠落が修正された。
    • テンプレート化されたクラス宣言が出力されるようになった
    • extern(C|C++) でないマニフェスト定数は出力されなくなった。

    注釈: ヘッダー・ジェネレーターはまだ実験的なものである。 バグがあればバグトラッカーに送ってほしい。

  4. モジュール内で競合する関数定義の診断

    以前は、モジュール内で同一の関数が複数定義されていても、それを認識することはできなかった。 を認識していなかった。これは、バイナリがシンボルの複数の定義を含むことができないため、問題があった。 バイナリはシンボルの複数の定義を含むことができないため、コンパイラのバックエンドによっては未定義の挙動を引き起こす の挙動を引き起こす。

    DMDは、1つのモジュール内で競合する実装がある場合、エラーメッセージを出すようになった。 がある場合、エラーメッセージを表示するようになった:

    void foo() {}
    void foo() {} // エラー
    

    最大でも1つの定義がある限り、複数の宣言が許される:

    void bar(int);
    void bar(int) { }
    void bar(int);
    

    DMDはオーバーロードをサポートしないスキームのマングリングに対して非推奨を発表する。 (extern(C|Windows|System)):

    extern(C):
    void foo(int) { }
    void foo(double) { } // 非推奨
    

    この非推奨は2.105ではエラーとなる。

  5. extern(Pascal) は削除された

    この未使用のリンケージはv2.084.0、非推奨となり、現在は削除されている。

  6. コンパイラーは現在-extern-std=c++20

    コンパイラーは-extern-std= のサポート標準として c++20 を受け付けるようになった。 現在のところ、これは__traits(getTargetInfo, "cppStd") の値を変更するだけである、 の値を変更するだけだが、将来的に新しい型が追加される可能性がある。

  7. C++互換性標準がデフォルトでc++11になった。

    -extern-std= のデフォルト設定が c++11 に更新された。

    extern(C++) C++98コンパイラでコンパイルされたコードとのリンクは保証されなくなった。 とのリンクは保証されなくなった。さらに-HC によって生成された C++ ヘッダーは、C++11 以降でのみ使用可能な構文を使用する。

    古いC++コンパイラーとの互換性が必要な場合は、コマンドラインで -extern-std=c++98 を渡す必要がある。

  8. -preview=inclusiveincontracts を追加 :in 契約は、親となるin 契約の明示的なスーパーセットでなければならない。

    Liskovにあるように、in の契約は、それらが現れるメソッドに置かれた条件のみを緩めることができる。 現在は、in の契約とin の契約を自動的に "オーリング"することで、これを実現している。 と自動的に "連結"され、必然的に親メソッドよりも緩い "契約"が作成される。

    しかし、これはこのコード・パッシングのような奇妙な振る舞いにつながる:

    class A
    {
        void foo(int i) in (i > 0) { }
    }
    class B : A
    {
        void foo(int i) in (i < 0) { }
    }
    unittest { (new B).foo(5); }
    

    それは、B.fooin 契約が暗黙のうちに super.in() || i < 0 、つまり、 になっているからである。i > 0 || i < 0

    -preview=inclusiveincontracts では、このコードはAssertError で失敗する。 以前の動作に戻すには、in (i > 0 || i < 0) ; つまり、親のin "契約"を明示的に子の"契約"に含めるのである。

  9. Objective-Cプロトコルのサポートを追加する

    Objective-Cプロトコル][objc_protocol]を宣言できるようになった。Dでは、これは はinterface キーワードを使って宣言される。

    Objective-Cのプロトコルの動作に合わせるために、次のような変更が加えられた。 が加えられた:

    • インターフェイスの中でオプショナル・メソッドを宣言することができる。これは
    モジュールで利用できる@optional User Defined Attributeを使う。core.attributes モジュールで利用できるオプショナル・メソッドとは、インターフェイスを実装するクラスで実装する必要のないメソッドのことである。 メソッドである。オプショナルメソッドを安全に呼び出すには、次のようにする、 オプションのメソッドを安全に呼び出すには、実行時チェックを行い、レシーバーがそのメソッドを実装していることを確認する必要がある メソッドを実装していることを確認する。

    • インターフェイスの中にstatic 。このメソッドは
    このメソッドは、インターフェイスを実装するクラスで実装される必要がある。 オプションと宣言されている場合を除く)。extern (D) インターフェースとは異なり、static のメソッドはボディを持つことができない。 extern (Objective-C) のメソッドはボディを持つことができない。

    例:

    import core.attribute : optional, selector;
    import std.stdio : writeln;
    
    struct objc_selector;
    alias SEL = objc_selector*;
    
    extern (C) SEL sel_registerName(in char* str);
    
    extern (Objective-C)
    extern class NSObject
    {
        static NSObject alloc() @selector("alloc");
        NSObject init() @selector("init");
    }
    
    extern (Objective-C)
    interface Foo
    {
        bool respondsToSelector(SEL sel) @selector("respondsToSelector:");
        void foo() @selector("foo");
    
        // これはオプションのメソッド
        @optional void bar() @selector("bar");
    }
    
    extern (Objective-C)
    class Bar : NSObject, Foo
    {
        override static Bar alloc() @selector("alloc");
        override Bar init() @selector("init");
    
        bool respondsToSelector(SEL sel) @selector("respondsToSelector:");
    
        void foo() @selector("foo")
        {
            writeln("foo");
        }
    }
    
    void main()
    {
        Foo f = Bar.alloc.init;
    
        // インスタンス`f`がメソッド`bar`を実装しているかどうかを実行時にチェックする
        if (f.respondsToSelector(sel_registerName("bar")))
            f.bar();
        else
            f.foo();
    }
    

    [objc_protocol][https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithProtocols/WorkingwithProtocols.html] 。

  10. pragma(inline)で任意のコンパイル時引数を許可する。

    以前はtrue またはfalse リテラルのみが許可されていた(仕様では整数が使えることになっていたが、そうではなかった)。

    現在、pragma は、bool に変換可能な任意のコンパイル時式を受け取ることができる。この式は、ターゲット関数が実際に使用されるときにのみ評価される。

    例えば、以下のコードでは、3つの関数はすべてインライン化されている:

    pragma(inline, canInline("func1"))
    void func1() {}
    
    void func2()
    {
        pragma(inline, canInline(__traits(identifier, __traits(parent, {}))));
    }
    
    pragma(inline, canInline("func3") || true)
    void func3() {}
    
    int canInline(string fname)
    {
        switch (fname)
        {
            case "func1":
            case "func2":
                return 1;
            default:
                return 0;
        }
    }
    
    void main()
    {
        func1();
        func2();
        func3();
    }
    
  11. シンボルが存在するC++名前空間を取得するために、__traits(getCppNamespaces, symbol) を追加する。

    この新しいトレイトは、シンボルが存在する名前空間を表す文字列のタプルを返す。 これは、リフレクションで使用するために、与えられたシンボルがどの名前空間に存在するかを決定することを可能にし、以下に示すように、extern(C++) 宣言で直接使用することができる。

    extern(C++, "ns")
    struct Foo {}
    static assert(__traits(getCppNamespaces, Foo)[0] == "ns");
    struct Bar {}
    static assert(!__traits(getCppNamespaces, Foo).length);
    extern(C++, __traits(getCppNamespaces, Foo)) struct Baz {}
    static assert(__traits(getCppNamespaces, Foo) ==  __traits(getCppNamespaces, Baz));
    

ランタイムの変更

  1. 変数suspendSignalNumberresumeSignalNumber がプライベートになった。

    core.thread.osthread にあるこれらの変数は、誤って公開されてしまった。 直接アクセスすべきでないため、privateになった。 GCシグナルを設定するには、代わりにthread_setGCSignals

ライブラリーの変更

  1. によって消費された文字数を返すstd.conv.parse

    フラグdoCountYes.doCount に設定することにより、この関数は名前付きタプルを返す。 このタプルはフィールドdatacount を含む。 フィールドdataTarget 型であり、元の関数の結果を含む。 フィールドcountsize_t 型であり、消費された文字数が格納されている。 それ以外は、この関数は元の振る舞いを維持している。 例:":

    import std.typecons : Flag, Yes, No;
    
    string s1 = "123";
    auto a1 = parse!(int, string, Yes.doCount)(s1);
    assert(a1.data == 123 && a1.count == 3);
    
  2. std.stdio.getdelimstd.stdio.getline

    getdelimgetline に対する一般に利用可能なextern(C) バインディングは非推奨である。 std.stdio のバインディングは廃止された。まだ必要なコードは、代わりにdruntimeの のシンボルをインポートできる。 core.sys.posix.stdio シンボルをインポートできる。

  3. で整数変換を追加する。JSONValue.get

    JSONValue.get で、格納されている または を任意の符号付き整数または符号なし整数に変換できるようになった。 に変換できるようになった。変換は で実行される。 で実行され、整数オーバーフローの場合は をスローする; uinteger integer std.conv.to ConvException

    auto json = parseJSON(`{"a": 123}`);
    writeln(json["a"].get!ubyte);
    

dubの変更

  1. すべてのコマンドがバージョン指定を受け付けるようになった

    このリリース以前は、dubはいくつかのコマンドに対してのみ正確なバージョンを取得することができた (describe,generate,fetch, etc...)。すべてのコマンドがバージョン指定を受け付けるようになった、 dub.json /dub.sdl にあるようなものだ:

    dub fetch 'foo@>0.2.0' dub describe foo@'>=0.3.0 <1.0.0'

    なお、describe のようなコマンドでは、ネットワークからのフェッチはできない。

  2. Dubは他のコンフィギュレーションから自動的にmainSourceFile を除外する。

    デフォルトでは、DubはsourcePaths の下にあるすべてのファイルを使用する。 しかし、複数のターゲットを扱うときによくあるパターンとして コンフィギュレーションを使用することである。これらのターゲットが実行可能ファイルの場合、ユーザーは他のコンフィギュレーションからメインファイルを追加しなければならない、 ユーザは、他のコンフィギュレーションからメイン・ファイルをリストに追加するか、メイン・ファイルを実行可能なディレクトリに保存することを余儀なくされる。 excludedSourceFiles リストに追加するか、メインをsourcePathsの外側の別のディレクトリに保存しなければならない。 の外側の別のディレクトリに格納する必要がある。

    このワークフローを単純化するために、DubはmainSourceFileにリストされたファイルを除外する。 にリストされたファイルを除外するようになった。これが望ましくない場合は、ファイルを手動で sourceFiles

  3. VisualDプロジェクト・ジェネレーターに-betterCコンパイラー・フラグのサポートを追加した。

    buildOptionsにbetterCが指定された場合、visualdプロジェクトファイルもbetterCを使うように設定される。 も betterC を使うように設定される。

  4. 生成されたunittestランナーのキャッシュ(dub test)

    ユーザー定義のunittest設定がないプロジェクトの場合、dub test 、メインファイルが自動的に生成される。 このメイン・ファイルはキャッシュされるようになり、ファイルを変更することなく次回以降に実行する際に再生成されることはない。

  5. 依存関係にカスタムビルド設定を定義できるようにした。

    例::

    {
        "name": "example",
        "dependencies": {
            "vibe-d": { "version" : "~>0.9.2", "dflags" : ["-preview=in"] }
        }
    }
    

    この例では、-preview=in は、vibe-d とその依存関係すべてに適用される。 build settingsフィールドはすべて解析される、 しかし、コンパイル時に考慮されるのは、今のところdflags だけである。

  6. DFLAGS また、 は、ネストされた の呼び出しには伝わらなくなった。LFLAGS dub

    DFLAGS および 、デフォルトで環境変数としてエクスポートされなくなった。 環境変数としてエクスポートされなくなった。 LFLAGS

    それでも以前の動作が必要な場合は、dub.jsonの$DFLAGS$LFLAGS 。 例えば preGenerateCommands : ["DFLAGS=$DFLAGS env | grep DFLAGS"]

    は、環境変数DFLAGSに使用されているすべてのdflagsを出力する。

  7. DC環境変数をデフォルトのDコンパイラーとして使用する

    dubは環境変数DC を尊重するようになった。つまり、DC=ldc2 dub builddub build --compiler=ldc2 のように動作する。 両方が指定された場合でも、--compiler スイッチが優先される。 DUBが再帰的に自分自身を呼び出す場合、例えばpreGenerateCommandsDC これは、ネストされたDUBの呼び出しが同じコンパイラを使用することを意味する。

  8. 修正#2051 "DUB単一ファイルパッケージからのユニットテストの実行に失敗する"

    dubはシングルモードでテストコマンドを実行できるようになった:dub test --single yoursinglefile.d

  9. ldcのクロスコンパイルを改善

    .dub/obj$DUB_TARGET_PATH/obj に移動させることで、同じプロジェクトで異なる設定(例えばクロス・コンパイル)の共存と並行コンパイルが可能になる。

  10. リストコマンドのフィルター機能

    listコマンドに、名前とバージョン指定によるオプションのフィルタリング機能を追加した:

    dub list foo dub list foo@'>=0.1.0 <1.0.0'

  11. .netrcファイルのサポートを追加

    .netrcファイルで定義された基本認証情報 で定義された基本認証情報が考慮されるようになった。 リポジトリに接続する際に考慮されるようになった。


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

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

  1. Bugzilla 20608: [REG2.087] tuple.expandをauto ref T...のテンプレート引数に渡せない。
  2. Bugzilla 21282: AliasSeqの"ミックスイン" "式のエイリアスができない"
  3. Bugzilla 21294: [REG 2.095]DMDがリンクに失敗するPR11743以降、DMDがリンクに失敗する
  4. Bugzilla 21312: [REG 2.095] 新たにトリガーされた はl値ではないので修正できない。
  5. Bugzilla 21325: Flags not set for ?: 浮動小数点オペランドでの評価にフラグが設定されていない。
  6. Bugzilla 21328: ラムダ内の静的浮動小数点配列要素を転送するとdmdバックエンドがクラッシュする
  7. Bugzilla 21357: [REG2.093] postblitが新旧の構造体ポインタをエイリアスする。
  8. Bugzilla 21364: 片方のメンバがGPRでもう片方がXMMの場合、構造体のアライメントが不適切になる

DMDコンパイラのバグ

  1. Bugzilla 3713: 演算子でテールコールの最適化が有効にならない
  2. Bugzilla 8156: 文字列インポートされたファイル ~100 MiB のコンパイルが非常に遅い。
  3. Bugzilla 10664: Win64: COMDATフォールディングで例外処理が機能しない。
  4. Bugzilla 11049: 配列境界エラーで、#lineディレクティブで変更されたファイル名ではなくモジュールファイル名が使用される
  5. Bugzilla 11435: byteまたはshortへの間接参照をプッシュすると、有効なメモリの端を越えて読み込むことができる。
  6. Bugzilla 14708: スタック巻き戻し中にテンポラリのデストラクタが呼び出されない
  7. Bugzilla 15909: 重複大文字小文字エラーで文字が数字として報告される
  8. Bugzilla 19754: cast()はl値を返すこともあればr値を返すこともある。
  9. Bugzilla 19970: [CTFE] 0 ptr は null ではない。
  10. Bugzilla 20195: -preview=nosharedaccess にはアクセス上の問題がある。
  11. Bugzilla 20604: [ICE] dtoh ICEは入れ子になったテンプレート構造体(そしておそらくほとんどのテンプレート)と一緒に使える
  12. Bugzilla 20652: extern(C++)はcore.simdの型を正しくつぶさないようだ。
  13. Bugzilla 20714: ポストブリッティングメンバーを持つ構造体がコピーコンストラクタを呼び出さない。
  14. Bugzilla 20716: POD以外を返すextern(C++)とのインターフェイスメソッドのコード/ABIが正しくない。
  15. Bugzilla 20916: どこで非推奨になったのか探すのが大変だ。
  16. Bugzilla 20965: 暗黙的に生成されたポストブリットメンバーが無効なコピー・コンストラクタをオーバーライドしてしまう。
  17. Bugzilla 20970: テストスイート Azure Pipelines Windows_LDC_Debug x64-debug-ldcがハイゼンバグのため失敗した。
  18. Bugzilla 21218: dtoh: 保護属性はヘッダに出力されるべきである
  19. Bugzilla 21227: Windowsでimport(".˶")が動作しない。
  20. Bugzilla 21234: symlink/hardlinkの場合、import式は-Jパスの外のファイルを読むことができる。
  21. Bugzilla 21246: 関数が適切にオーバーライドされない場合、コンパイラは不一致の型を表示しなければならない。
  22. Bugzilla 21255: インポートされたテンプレート化された関数のオーバーロードセットがエイリアステンプレートパラメータに渡される場合、"overload alias ... forward declaration" をオーバーライドする必要がある。
  23. Bugzilla 21271: C++ヘッダー生成では、vtableレイアウトに影響するextern(D)クラス・メソッドは無視される。
  24. Bugzilla 21283: [C++] パラメータパックのrefに対する誤ったマングリング
  25. Bugzilla 21293: dtoh: 不透明な列挙型に遭遇した時のセグメンテーションエラー
  26. Bugzilla 21299: [LINK] dmd.root.stringtable.StringValue!(型).StringValue.lstring()への未定義の参照
  27. Bugzilla 21300: C++ヘッダー生成でenumを親に持つenumに無意味なコードが生成される
  28. Bugzilla 21320: パラメータで所有者のポインタを借用した。
  29. Bugzilla 21424: 変数が2回インクリメントされる
  30. Bugzilla 21464: 余計なモジュールレベルのインポートが属性推論に影響する。
  31. Bugzilla 21479: 三項演算子がref returnで間違った値を返す。
  32. Bugzilla 21514: [ICE] cod1.d:4015:アサーション `retregs || !*pretregs' は -m32 で失敗した。

DMDコンパイラの機能強化

  1. Bugzilla 8044: 列挙型テンプレート・パラメーターを使用する際、キャストされた値ではなく名前を表示するようになった。
  2. Bugzilla 21204: 生成されたコピー・コンストラクタのエラーが紛らわしいメッセージを表示する
  3. Bugzilla 21259: 非推奨フィールドを持つ構造体の初期化は非推奨の警告を出すべきである。
  4. Bugzilla 21275: オーバーロードの解決はプライベート・アクセスをバイパスする
  5. Bugzilla 21340: extern(C++,(emptyTuple))はエラーではなく名前空間なしになるべきである

phobosのバグ

  1. Bugzilla 13930: std.concurrencyが他のスレッドにイミュータブルAAを送信できない。
  2. Bugzilla 15425: std.traits.hasIndirections がネストされた構造体を認識できない。
  3. Bugzilla 18789: std.stdioが出力時のUTF変換を混乱させる
  4. Bugzilla 18801: std.stdio.FileがMSVCRTのUTF-8モードで動作しない
  5. Bugzilla 20924: std.numeric.gcdがconst BigIntで使用できない
  6. Bugzilla 21231: VariantNでpreview=fieldwiseの空の構造体に対してunreachable警告が出る。
  7. Bugzilla 21249: clamp()が安定せず、制約がない
  8. Bugzilla 21253: Variant.visit!(...)をジェネリック関数でコンパイルできない。
  9. Bugzilla 21296: std.variant.Variantをimmutable AAで初期化できない
  10. Bugzilla 21302: std.uniのドキュメントにソースファイルへのデッドリンクがある
  11. Bugzilla 21452: isCallableが関数テンプレートで誤ってfalseを返す

phobosの機能強化

  1. Bugzilla 6484: composeは複数引数の関数を取ることができない。
  2. Bugzilla 20869: std.algorithm.mutation : move は"@trusted"を過度に信頼している。opPostMove
  3. Bugzilla 20980: std.bigint.BigInt:不要なアロケーションを避けるために、xと非負のintを特別なケースにした。
  4. Bugzilla 21233: std.conv.parseが消費文字数を報告しない。
  5. Bugzilla 21237: isLvalueAssignableとisRvalueAssignableはpublicであるべきである。
  6. Bugzilla 21347: std.functional.adjoinはBetterCで動作すべきである。
  7. Bugzilla 21407: std.math.NaNとstd.math.getNaNPayloadをCTFEで動くようにした。
  8. Bugzilla 21408: CTFEでstd.math.nextUpとnextDownとnextafterが拡張精度実数で動くようにする
  9. Bugzilla 21430: std.bitmanip.bitsSetが返す範囲のfront、save、lengthプロパティにconst

Druntimeのバグ

  1. Bugzilla 14226: 無効なRuntime.traceHandlerのセットアップ
  2. Bugzilla 21421: core.stdcpp.new_.cpp_deleteがクラスで動作しない。
  3. Bugzilla 21441: TypeInfo_Enum.destroyとTypeInfo_Enum.postblitが基本型のdestroyとpostblitを呼び出さない。
  4. Bugzilla 21442: デストラクタからAA.removeを呼び出すとInvalidMemoryOperationErrorが発生する可能性がある。
  5. Bugzilla 21468: core.stdcpp.vectorフィールドを持つ構造体のcore.stdcpp.vectorが構造体の定義の前に参照されると、Inscrutableテンプレートエラーが発生する。
  6. Bugzilla 21484: core.memoryの無限再帰 : GC.{get,set,clr}Attr(const scope void*...)

Druntimeの強化

  1. Bugzilla 21030: 配列の等式に関連するテンプレート化された関数のインスタンス化を減らす。
  2. Bugzilla 21417: core.stdcpp.new_.cpp_deleteが不必要に@nogcであることを破壊に要求していた。
  3. Bugzilla 21426: dup配列のidup 、連想配列のkeys 、連想配列のvalues :TypeInfo関数ポインタを介してではなく、直接ポストブリットを呼び出す。

dlang.orgのバグ

  1. Bugzilla 21189: Plain Old Dataとコピーコンストラクタ
  2. Bugzilla 21273: [spec] シェルのスニペットのコントラストが存在しないと読めない(CSS)

インストーラーのバグ

  1. Bugzilla 21433: カタリナで install.sh を実行すると "bash: line 952: --list-keys: command not found" と表示される。
  2. Bugzilla 21439: FreeBSD の LDC では "@disable" は無効である。

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

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

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