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

変更ログ: 2.111.0

前のバージョン

Download D nightlies
リリース予定


この変更履歴はautomatically generated のすべてのコミットから引用されている。 master のすべてのコミットから作成されている。

  • 全文メッセージは、それぞれのリポジトリのchangelog/ ディレクトリから集められている: dmd, druntime, phobos, tools, dlang.org, installerそして dub.
  • Bugzillaの参照についての詳細はDLang-Botのドキュメントを参照のこと。 DAutoTest PR previewにはBugzillaの変更履歴が含まれていない。
  • 保留中の変更履歴は、 dlang.org 設定し、pending_changelog ターゲットを実行することで、ローカルに生成することができる:
    make -f posix.mak pending_changelog


2.111.0には30の大きな変更と143のBugzilla問題の修正が含まれている。 多大なる感謝を 71人の 貢献者 に感謝する。

コンパイラの変更

  1. キーワードautoref は隣接していなければならない。
  2. で、const(void)[] からvoid[] へのコピーが禁止された。-preview=fixImmutableConv
  3. align 属性でdefault を明示的に指定できるようになった。
  4. 多値の場合の case fallthough でエラーが出るようになった。
  5. より厳格な属性を持つフィールド・デストラクタを持つコンストラクタに対してエラーが出るようになった。
  6. throw する可能性のあるnothrow 関数のin/out 契約に対してエラーが発生するようになった。
  7. -preview=fieldwise がデフォルトで有効になった。
  8. ビルド時のプロファイリングが dmd に追加された。
  9. getBitfieldOffsetとgetBitfieldWidthの__traitsが追加された。
  10. コンパイラフラグ-i を使用することで C ソースファイルを適切にピックアップするようになった。
  11. Import 式が 16 進文字列として扱われるようになった。
  12. ImportCのプラグマで、nothrow@nogc 、または を設定できるようになった。pure
  13. 新しい isCOMClass 特性により、"型" が COM クラスであるかどうかを検出できるようになった。
  14. ミックスインテンプレートで代入構文を使用できるようになった。
  15. Objective-Cのセレクタが@selectorで指定されていない場合、自動的に生成されるようになった。
  16. -oq スイッチをDMDに追加
  17. Postfixの型修飾子メソッド属性で、-H-D
  18. ref および のメソッド属性をローカル変数、静的変数、外部変数、およびグローバル変数に適用できるようになった。auto ref
  19. expression 、それがl値であってもr値として扱われるようにする__rvalue(expression) 形式の一次式を追加。
  20. 無属性関数の安全性チェックに-preview=safer スイッチが追加された。
  21. コンストラクタで短縮メソッド構文を使用できるようになった。
  22. bool 0または1以外の値は使用できない。@safe

D 2.111.0で予定されているすべてのバグ修正と機能強化のリスト。

コンパイラの変更

  1. キーワードautoref は隣接していなければならない

    この2つのキーワードを隣接させずにauto ref パラメータを宣言することは非推奨となった。 こうすることで、refauto のセマンティクスを別々に記述するのではなく、auto ref のセマンティクスを意図していることが明確になる。 新しく導入されたref ローカル/グローバル変数については、直ちにエラーとなる。

    void t()(ref const auto int x) // Deprecation
    {
        ref auto y = x; // Error
    }
    
    // Correction:
    void t()(auto ref const int x)
    {
        auto ref y = x;
    }
    
  2. const(void)[]void[] へのコピーは禁止されている。-preview=fixImmutableConv

    const(void)[] のデータにconst の末尾へのポインタが含まれている場合、 へのコピーは、 のデータに違反する可能性がある。void[] にコピーすると、const データに違反する可能性がある:

    void f(int*[] a, const int*[] b)
    {
        void[] va = a;
        const void[] vb = b;
        va[] = vb[]; // fills `a` with pointers to const
        *a[0] = 0; // const data mutated
    }
    

    vb のデータをva にコピーすることはできなくなった。 -preview=fixImmutableConv スイッチでは許可されなくなった。

  3. align 属性でdefault を明示的に指定できるようになった。

    align 、アライメントをその型のデフォルトに設定する。 あるいは、より明示的にalign(default)

    struct S
    {
        align(4)
        {
            byte x;
            align(default) long y;
            long z;
        }
    }
    
    void main()
    {
        pragma(msg, S.x.alignof); // 4
        pragma(msg, S.y.alignof); // 8
        pragma(msg, S.z.alignof); // 4
    }
    
  4. 多値の場合、ケースのフォールディングでエラーが出るようになった。

    以前は非推奨であったが、現在はエラーとなる:

    int i;
    switch (0)
    {
        case 0, 1: i = 20;
        default: assert(0); // Error: switch case fallthrough - use 'goto default;' if intended
    }
    
    switch (0)
    {
        default:
        case 0, 1: i = 20;
        case 2, 3: i = 30; // Error: switch case fallthrough - use 'goto case;' if intended
    }
    
  5. より厳格な属性を持つフィールド・デストラクタを持つコンストラクタでは、エラーが発生するようになった。
    struct HasDtor
    {
        ~this() {}
    }
    
    struct Pure
    {
        HasDtor member;
        this(int) pure {} // Error: `this` has stricter attributes than its destructor (`pure`)
    }
    
    struct Nothrow
    {
        HasDtor member;
        this(int) nothrow {} // Error: `this` has stricter attributes than its destructor (`nothrow`)
    }
    
    struct NoGC
    {
        HasDtor member;
        this(int) @nogc {} // Error: `this` has stricter attributes than its destructor (`@nogc`)
    }
    
    struct Safe
    {
        HasDtor member;
        this(int) @safe {} // Error: `this` has stricter attributes than its destructor (`@safe`)
    }
    
  6. nothrow 関数のin/out 契約がスローされる場合、エラーが発生する。

    これは以前は非推奨であったが、現在はエラーである:

    void test() nothrow
    in
    {
        throw new Exception(null); // Error: `in` contract may throw but function is marked as `nothrow`
    }
    out
    {
        throw new Exception(null); // Error: `out` contract may throw but function is marked as `nothrow`
    }
    do
    {
    }
    
  7. -preview=fieldwise がデフォルトで有効になった

    これにより、== 演算子を使用した一部の構造体比較に影響するバグが修正された。 詳細については、2.085.0 の-preview=fieldwise のエントリーを参照のこと。 エントリーを参照のこと。

    新しい-revert=fieldwise スイッチは、バグフィックスを無効にし、元の動作に戻すために使うことができる。 元の==

  8. ビルド時間のプロファイリングがdmdに追加された。

    LDCコンパイラがすでに持っている-ftime-trace スイッチがdmdでも使えるようになった。 これを使えば、コードのどの部分のコンパイルに一番時間がかかるかを知ることができ、ビルド時間を最適化できる。

    dmd -ftime-trace app.d
    

    これはapp.o.time-trace を出力する。

    別の出力ファイルは-ftime-trace-file=trace.json で選択できる。

    出力はGoogle Chromeのプロファイラフォーマットで、ui.perfetto.devのようなインタラクティブなビューアで見ることができる。

    YouTubeのチュートリアルも参照のこと:Dコンパイラのプロファイリングでビルド時間を短縮する

  9. getBitfieldOffsetとgetBitfieldWidthの__traitsを追加する。

    これでビルトイン・ビットフィールドのイントロスペクション機能が完成した。例:」:

    struct S
    {
        int a,b;
        int :2, c:3;
    }
    
    static assert(__traits(getBitfieldOffset, S.b) == 0);
    static assert(__traits(getBitfieldOffset, S.c) == 2);
    static assert(__traits(getBitfieldWidth, S.b) == 32);
    static assert(__traits(getBitfieldWidth, S.c) == 3);
    
  10. コンパイラー・フラグ-i を使用すると、Cソース・ファイルを適切にピックアップするようになった。

    以前は.cソースファイルを手動でインクルードする必要があったが、.dファイルと同様に動作するようになった。

  11. インポート式が16進文字列として扱われるようになった。

    Import式は string 、バイナリファイルの埋め込みにも使用される。 16進文字列と同じように扱うことで、char 以外の積分型の配列に暗黙的に変換される。

    // Formerly, a cast was required:
    immutable ubyte[] iconImg = cast(immutable ubyte[]) import("icon.png");
    
    // Now, it implicitly converts to integral arrays:
    immutable ubyte[] iconImg = import("icon.png");
    
  12. ImportC 用のプラグマで、nothrow@nogc またはpure

    ImportCの新しいプラグマで、関数宣言のデフォルト・ストレージ・クラスを設定できる。 クラスを設定することができる:

    #pragma attribute(push, [storage classes...])
    

    nothrownogcpure がサポートされている。 認識されない属性は無視される。 デフォルトのストレージ・クラスを有効にすると、他のプラグマで無効化されるま で、プラグマ以降のすべての関数宣言に影響する。 の後にあるすべての関数宣言に影響する。 インクルード内の宣言も影響を受ける。次の例:」。 ライブラリの@nogcnothrow を有効にする:

    #pragma attribute(push, nogc, nothrow)
    #include <somelibrary.h>
    

    変更されたストレージクラスはスタックにプッシュされる。最後の変更は 以下のプラグマで取り消すことができる:

    #pragma attribute(pop)
    

    これは、複数のデフォルト・ストレージ・クラスを同時に無効にすることもできる、 #pragma attribute(push, ...) を同時に無効にすることもできる。

  13. 型がCOMクラスであるかどうかを検出するための新しいトレイトisCOMClassが追加された。

    COM クラスは、IUnknown と呼ばれるユーザー定義インタフェースを継承する。 コンパイル時にこれを検出するには、__traits(isCOMClass, Type) を使用する。 また、実行時にはTypeInfo_Class フラグを使用する。

  14. ミックスインテンプレートで代入構文が使えるようになった。

    以前は、ミックスイン・テンプレート・インスタンスに名前をつけるには、名前を最後につける必要があった。 今は、代入構文を使ってインスタンスの前に置くこともできる。

    mixin MyMixinTemplate!(Args) myName; // old style
    mixin myName = MyMixinTemplate!(Args); // new style
    
  15. Objective-Cのセレクタが@selectorで指定されていない場合、自動的に生成されるようになった。

    さらに、Objective-Cセレクタの生成ルールが変更され、以下の手順に従うようになった:

    1. "@property "の付いた関数は、セッターにsetXYZ:
    2. "is "という接頭辞が付いたプロパティ関数では、セッターでis
    3. セレクタの生成では、Dマングルされた型ではなく、関数のパラメータ名を使用するようになった。

    セレクタはまだ@selector UDAで指定することができる。 で指定することもできる。

    これらの新しいルールは、外部および非外部のobjective-cクラスとプロトコルの両方に適用される。

    extern(Objective-C)
    extern class NSObject {
        static NSObject alloc(); // Generates as `alloc`
        NSObject init(); // Generates as `init`
    }
    
    extern(Objective-C)
    class Fox : NSObject {
        bool fluffy;
    
        @property bool isFluffy() => fluffy; // `isFluffy`
        @property void isFluffy(bool value) { fluffy = value; } // `setFluffy:`
    
        void yip(int a) @selector("bark:") { // `bark:`
            // ...
        }
    
        void doSomething(int a, int b, int c) { // `doSomething:b:c:`
            // ...
        }
    }
    

    セレクタの自動生成は以前にはなかったので、これらの変更によって既存のコードが壊れることはないはずだ。 は以前には存在しなかったからだ。また、セレクタの自動生成はextern(Objective-C)メソッドにのみ適用される。

  16. DMDに-oq

    -od このスイッチは、オブジェクト・ファイルに完全修飾名を与える。 を使ったときの名前の衝突を防ぐ。 このスイッチはすでにLDCに存在していたが、dmdにも追加された。

    例:」:

    dmd -c -oq -od=. app.d util/app.d misc/app.d
    

    これにより、app.obj ではなく、app.objutil.app.objmisc.app.obj が出力される。

    -oq また、DDoc ( ) や .di ヘッダー生成 ( ) などの他の出力にも適用される。 -D -Dd=.-H -Hd=.

  17. Postfix型修飾子メソッド属性は、-H-D

    .di インターフェイスファイル生成とDdoc出力で、メソッド(とコンストラクタ)のパラメータリストの後に型修飾子属性が置かれるようになった。 属性を持つようになった。 これにより、戻り値の型との混乱を避けることができる。

    struct S
    {
        const int f(); // before
        int f() const; // now
    }
    
  18. ref と をローカル変数、静的変数、外部変数、グローバル変数に適用できるようになった。auto ref

    例えば、次のように書くことができる:

    struct S { int a; }
    
    void main()
    {
        S s;
        ref int r = s.a;
        r = 3;
        assert(s.a == 3);
    
        auto ref x = 0;
        auto ref y = x;
        static assert(!__traits(isRef, x));
        static assert( __traits(isRef, y));
    }
    
  19. expression 、それがl値であってもr値として扱われる__rvalue(expression)

    ref のオーバーロード:

    foo(S s); // selected if `s` is an rvalue
    foo(ref S s); // selected if argument `s` is an lvalue
    
    S s;
    S bar();
    ...
    foo(s); // selects foo(ref S)
    foo(bar()); // selects foo(S)
    

    この変更に伴い、このようになった、

    foo(__rvalue(s)); // selects foo(S)
    

    これはコンストラクターや代入にも適用される。 移動代入が有効になる。コピーの代わりに移動させることで、リソース効率が向上する。 例えば、文字列をコピー/削除するよりも移動させる方がはるかにリソース効率がよい。

    移動したオブジェクトは破壊される可能性がある。 フィールドを移動させるときは、そのことを考慮して、破壊可能な穏やかな値に設定する。

  20. 無属性関数の安全性チェックに-preview=safer スイッチを追加した。

    現在@safe のコードで有効になっているチェックのうち、修正が容易なもの(修正が関数に限定されているもの)はすべて のコードで有効になる。 修正が関数に制約される)、現在-preview=safer

    @system 、あるいは無属性関数の呼び出しのような、修正が容易でないコードは、従来通り許可される。 は従来通り許される。

    void f();
    @system void g();
    
    void main()
    {
        int* p;
        p++; // Error, pointer arithmetic
        f(); // allowed
        g(); // allowed
    }
    

    詳細はsafer.mdを参照のこと。

  21. 短縮されたメソッド構文がコンストラクターで使えるようになった

    以前は「コンストラクターから式を返すことができない」というエラーが発生していたが、現在はサポートされている:

    struct Number
    {
        int x;
    
        void vf(int);
        this(int x) => vf(x);
        this(float x) => this(cast(int) x);
    }
    

    式本体は、this/super 呼び出しであるか、void 型でなければならない。

    ポストブリットとデストラクタは、void を返すので、すでに短縮メソッド構文をサポートしている。

  22. bool 0 または 1 以外の値は返されない。@safe

    仕様が更新された (2.109用に)更新された。 のみが安全な値である。 boolである。これは、bool の値を読み取る場合、そのバイト表現に他のビットが設定されていることを意味する。 の読み取りは処理系定義であり、避けるべきである。 その結果、@safe のコードでは、以下が非推奨となる:

    • void ブール値の初期化(2.109以降)
    • 共用体からbool フィールドを読み込む(2.109以降)。
    • 動的配列をbool 動的配列型にキャストする実行時。
    • bool 、動的配列を末尾の変更可能な動的配列型にキャストする。
    • ポインタのbool ポインタ型へのキャスト
    • bool ポインタを末尾の変更可能ポインタ型にキャストする

ランタイムの変更

  1. criticalRegionLockを削除する。

    criticalRegionLock機能には重大な設計上の欠陥がある。https://issues.dlang.org/show_bug.cgi?id=24741

    使用されないことが判明したため、欠陥を修正するのではなく、機能を削除した。

  2. expect,[un]likely,trap を以下に追加する。core.builtins

    LDC/GDCコンパイラ用の分岐と値のヒントのための関数expectlikely/unlikely を追加する。 DMDはこれらのヒントを無視する。

    ターゲットに依存するトラップ命令に、trap を追加する。 ターゲットにトラップ命令がない場合、この組込み関数はabort() 関数の呼び出しに lowered される。

ライブラリの変更

  1. formattedReadの機能を拡張し、std.file.slurpのような実行を可能にする。

    formattedReadにテンプレート引数型を渡すことができるようになった。 フォーマット文字列とともにformattedReadに渡すことができるようになった。 すべての引数の読み込みに成功しなければならない。 と異なり、std.format.FormatExceptionがスローされる。

    import std.exception : assertThrown;
    import std.format : FormatException;
    import std.typecons : tuple;
    
    @safe pure unittest
    {
        auto complete = "hello!34.5:124".formattedRead!(string, double, int)("%s!%s:%s");
        assert(complete == tuple("hello", 34.5, 124));
    
        assertThrown!FormatException("hello!34.5:".formattedRead!(string, double, int)("%s!%s:%s"));
    }
    
    /// The format string can be checked at compile-time:
    @safe pure unittest
    {
        auto expected = tuple("hello", 124, 34.5);
        auto result = "hello!124:34.5".formattedRead!("%s!%s:%s", string, int, double);
        assert(result == expected);
    
        assertThrown!FormatException("hello!34.5:".formattedRead!("%s!%s:%s", string, double, int));
    }
    
  2. std.digestにfromHexString関数とfromHexStringAsRange関数を追加した。

    この新しい関数は、16進文字列からバイト範囲への変換を可能にする。 テンプレート std.conv.hexStringテンプレートとは異なり この関数はランタイム入力で使用できる。

    std.conv モジュールには、入力を直接バイト列に変換する便利な機能がない。 をバイト列に直接変換する機能がない。どちらも std.conv.parsestd.conv.toは、要求されたターゲット整数型の単一の値に対する変換しか扱えない。 変換しか扱えない。さらに、これらの関数は結果のために新しいバッファを割り当てる。 fromHexStringAsRange のために新しいバッファを割り当てる。 を実装することで遅延的に動作する。

    さらに便利なことに、検証関数がある。 std.digest.isHexString も追加された。

  3. std.uniにpopGrapheme関数を追加した。

    新しい関数は既存の std.uni.graphemeStridestd.uni.decodeGrapheme関数を掛け合わせたものである。新関数では、以下の両方がサポートされる。 がgraphemeStride のように@safe pure nothrow @nogc をサポートする。 自動デコードに頼らない限り、@nogc のように をサポートする。graphemeStride のサポートが追加された)。 decodeGrapheme のように、配列以外の範囲でも動作する。

    例:」:

    import std.uni;
    
    // Two Union Jacks of the Great Britain in each
    string s = "\U0001F1EC\U0001F1E7\U0001F1EC\U0001F1E7";
    wstring ws = "\U0001F1EC\U0001F1E7\U0001F1EC\U0001F1E7";
    dstring ds = "\U0001F1EC\U0001F1E7\U0001F1EC\U0001F1E7";
    
    // String pop length in code units, not points.
    assert(s.popGrapheme() == 8);
    assert(ws.popGrapheme() == 4);
    assert(ds.popGrapheme() == 2);
    
    assert(s == "\U0001F1EC\U0001F1E7");
    assert(ws == "\U0001F1EC\U0001F1E7");
    assert(ds == "\U0001F1EC\U0001F1E7");
    
    import std.algorithm.comparison : equal;
    import std.algorithm.iteration : filter;
    
    // Also works for non-random access ranges as long as the
    // character type is 32-bit.
    auto testPiece = "\r\nhello!"d.filter!(x => !x.isAlpha);
    // Windows-style line ending is two code point in a single grapheme.
    assert(testPiece.popGrapheme() == 2);
    assert(testPiece.equal("!"d));
    
  4. 通常のAllocatorList のスレッドセーフ版としてSharedAllocatorList を追加した。

    新しい std.experimental.allocator.building_blocks.allocator_list.SharedAllocatorListは、通常のAllocatorList と同じセマンティクスを持つ。 通常のAllocatorList と同様に、BookkeepingAllocatorNullAllocator の場合、SharedAllocatorListouroboros モードに切り替わる、 自分自身のメタデータのためにメモリを割り当てる。

    SharedAllocatorList!((n) => SharedAscendingPageAllocator(max(n, numPages * pageSize)), NullAllocator) a;
    auto b = a.allocate(100);
    assert(b.length == 100);
    
    assert(a.deallocate(b));
    
  5. std.uniがUnicode 15.1.0から16.0.0にアップグレードされた。

    このUnicodeアップデートは2024年9月10日にリリースされ、新しい文字ブロックが追加された。 参照:https://www.unicode.org/versions/Unicode16.0.0/

    import std;
    
    void main()
    {
        const alphaCount = iota(0, dchar.max).filter!(std.uni.isAlpha).walkLength;
        writeln(alphaCount);
        // formerly: 138387
        // now:      142759
    }
    

ダブの変更

  1. dub.selections.json ファイルが親ディレクトリでも検索されるようになった

    パッケージのルートディレクトリにdub.selections.json ファイルがない場合、dubは親ディレクトリも探すようになり、最初に見つかった(最も深い)ファイルを使う可能性がある。 を使用する可能性がある。 "inheritable": true フラグが含まれている場合に限る。

    これにより、複数のダビングプロジェクトを含むリポジトリに「中央」dub.selections.json ファイルを使用することができる。 ファイルを使うことができる。 リポジトリルートディレクトリにある場合、そのソースツリー内のすべてのビルドに自動的に適用される。 (ローカルのdub.selections.json がそれを上書きしない限り)。

    このような継承されたセレクトファイルは、ネストしたプロジェクトでダブを実行しても、決して変更されることはない。 つまり、変更は常にローカルに保存される。 dub.selections.json ファイルに保存される。例えば、dub upgrade をネストされたプロジェクトに対して実行した場合。 プロジェクトに対して


D 2.111.0のすべてのバグ修正と機能強化のリスト:

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

  1. Bugzilla 20562: [dmd] メモリ割り当てに失敗する (ERROR: これはコンパイラのバグです)
  2. Bugzilla 24431: テンプレートのインスタンス化に失敗するとdmd -vcg-astがクラッシュする。
  3. Bugzilla 24599: [REG2.103] 誤ってエライドされたTypeInfoがリンク時に未定義のシンボルになる。
  4. Bugzilla 24687: [REG2.110] 文字列インポートを選択オーバーロードにキャストできない。
  5. Bugzilla 24699: [REG2.108] ミキシングテンプレートのbool引数の短絡評価ができない。
  6. Bugzilla 24812: [REG 2.106] #15664以降、空の列挙型宣言を診断する際のハイライトが正しくない。
  7. Bugzilla 24882: COMクラスはmallocではなくGCを使って割り当てられる

DMDコンパイラのバグ修正

  1. Bugzilla 4101: [tdpl] DMDはgotoが初期化をスキップしてもエラーを出さない
  2. Bugzilla 10257: .tupleof が繰り返し実行時に保護情報を失う
  3. Bugzilla 10386: パッケージのインポート機能が静的ライブラリで壊れる。
  4. Bugzilla 10587: 不完全なテンプレート型では"__traits(getAttributes) "が機能しない。
  5. Bugzilla 10603: 関数ポインタ引数の左の純粋属性が拒否される。
  6. Bugzilla 12885: const共用体が暗黙的にmutableに変換される。
  7. Bugzilla 16643: NULLでCTFE内部エラー
  8. Bugzilla 17148: const(void)[]からvoid[]へのコピーはimmutableを壊す。
  9. Bugzilla 20587: rt_loadLibraryシンボルが見つからない。
  10. Bugzilla 20603: オーバーラップのある再帰構造で「イニシャライザで定数でないCTFEポインタを使用できない」 : _rt_load_ibrary symbol not found
  11. Bugzilla 20610: .tupleof ループ内の const は無視される
  12. Bugzilla 21995: サイズがuint.max以上の構造体ではICEが発生する。
  13. Bugzilla 23131: vasmを使用すると、すべてのX87命令が間違って出力される。
  14. Bugzilla 23294: [dip1000] パラメータからパラメータへの代入でスコープ推論がおかしくなる
  15. Bugzilla 23722: 複数のコンパイルユニットを使用するとラムダが正しく処理されず、不正なコードになる
  16. Bugzilla 23830: 構造体シンボルの前にモジュール名が出力されない。
  17. Bugzilla 23841: isZeroInitが共用体を考慮しない。
  18. Bugzilla 23957: 派生したextern(C++)クラスへのキャストは安全ではない
  19. Bugzilla 24153: InlinerがTypeInfoを要求して-BetterCを壊す。
  20. Bugzilla 24337: 文字列リテラルからint[]キャストを出力するとセグメンテーションエラーが発生する
  21. Bugzilla 24375: ImportC: .diジェネレーターは-> 演算子を持つC式を出力する。
  22. Bugzilla 24447: ImportC: 外部シンボルはイニシャライザを持つことができない。
  23. Bugzilla 24534: 宣言にラベルを付けると、gotoでその宣言をスキップできる。
  24. Bugzilla 24558: C言語がGlibc上でセグメンテーションフォールトを主張する
  25. Bugzilla 24577: C++から返されたコンストラクタを持つ "構造体 "が間違っている。
  26. Bugzilla 24582: 安全でないことを検出するcast(bool[])
  27. Bugzilla 24583: diジェネレータがreturnスコープとscope returnの順番を間違える。
  28. Bugzilla 24592: ImportC:32ビットLinuxでint64のビットフィールドのレイアウトが正しくない。
  29. Bugzilla 24594: ImportC: パックされた構造体のレイアウトが正しくない。
  30. Bugzilla 24603: 安全なコードで非void配列からvoid[]にコピーできる
  31. Bugzilla 24622: void[]連結/付加でconstデータを修正する
  32. Bugzilla 24630: boolポインタをmutableポインタ型にキャストするのは安全でない。
  33. Bugzilla 24631: ポインタのキャストにより、@safeコードで@systemフィールドを変更できる
  34. Bugzilla 24634: StructInitializerを使った式からの配列初期化の構文解析エラー
  35. Bugzilla 24651: 32ビットLinuxで48ビットフィールドのビットフィールドのレイアウトが正しくない。
  36. Bugzilla 24663: dip1000は暗黙的に静的配列に変換されたスライス式をチェックしない。
  37. Bugzilla 24669: ImportC: Cファイルが'-i'フラグでコンパイルされない。
  38. Bugzilla 24670: importC: .di 生成で const 構造体の戻り値の型に括弧が付けられない。
  39. Bugzilla 24694: [DIP1000] struct.class.fieldを通してスタックポインタをエスケープできる。
  40. Bugzilla 24701: noreturn変数のキャストによるエラーは発生しない
  41. Bugzilla 24705: synchronizedメソッドの引数が-preview=nosharedaccessで意図せず共有として扱われる。
  42. Bugzilla 24706: カンマ式の最初のオペランドにエラーがない。
  43. Bugzilla 24707: エラーメッセージのパラメータ属性の順序が正しくない
  44. Bugzilla 24731: IFTIは整数式を扱えない。
  45. Bugzilla 24733: ImportC:#pragma pack(pop) は間違ったアラインメントを復元する。
  46. Bugzilla 24748: DMDがオブジェクトファイルを完全修飾名で出力できない。
  47. Bugzilla 24760: デフォルト引数の後に可変長引数でICEを出力する。
  48. Bugzilla 24762: nogc誤検出エラー
  49. Bugzilla 24764: vcg-astがインポートされた不変量を表示する際のICE
  50. Bugzilla 24776: 匿名共用体を持つ構造体の isZeroInit が正しくない。
  51. Bugzilla 24790: -vcg-ast が exp の代入を下げると ICE する。
  52. Bugzilla 24803: __traits(location)がモジュールと矛盾している。
  53. Bugzilla 24807: エラーメッセージにテンプレートインスタンスの括弧がない。
  54. Bugzilla 24819: オプティマイザが32ビットの浮動小数点計算結果を変更する
  55. Bugzilla 24822: PODでない引数をr値パラメータに渡すと、不必要なblitが行われる。
  56. Bugzilla 24830: 別々のコンパイル+循環的なdeps+テンプレート化されたopCmp=シンボルの欠落
  57. Bugzilla 24832: 16進文字列のセグメンテーションエラー
  58. Bugzilla 24836: 隠された構造体argによる構造体returnはr値になるためにコピーは必要ない。
  59. Bugzilla 24845: 列挙型インスタンスのAA値に代入しようとするとコンパイラーエラーが発生する。
  60. Bugzilla 24848: 部分的なMulExpのパーサ診断がうまくいかない
  61. Bugzilla 24855: VRPが除算後のオーバーフロー防止に失敗する
  62. Bugzilla 24861: 誤って生成された16ビットコードの痕跡
  63. Bugzilla 24871: DDocはトリプルスラッシュ・コメントのインデントを削除する
  64. Bugzilla 24883: 投機的テンプレート・オーバーロード・エラーは-preview=rvaluerefparam
  65. Bugzilla 24884: バックエンドはdouble[4]でインライン化した後、間違った32ビットコードを生成する。
  66. Bugzilla 24891: .di生成の一部として2つのスコープ属性が生成される

DMDコンパイラの機能強化

  1. Bugzilla 9997: UFCSのスペルミスのサジェスト
  2. Bugzilla 18235: D2テストスイートで、論理的に類似したテストを同じモジュールにまとめる
  3. Bugzilla 20243: 連想配列のキー型がinoutで代用されない。
  4. Bugzilla 20614: CTFEはtypeid(stuff).nameをサポートしているが、classinfo.nameはサポートしていない。
  5. Bugzilla 21564: "ミックスイン "テンプレートのインスタンス化のための代入構文を許可する。
  6. Bugzilla 23449: スペルチェッカーはポインタ・メンバの修正を提案する必要がある
  7. Bugzilla 23812: ImportC: インポートされたC関数に関数属性を追加できるようにした。
  8. Bugzilla 24135: 同名のテンプレート・メンバーのオーバーロードが呼び出し候補として表示されない
  9. Bugzilla 24580: ImportC: 属性の後にAsmラベルを付けると構文エラーになる。
  10. Bugzilla 24598: OpenBSD: コンパイラテストの適応
  11. Bugzilla 24623: バージョン CppRuntime_Clang/Gcc を CppRuntime_libcxx/libstdcxx にリネームした。
  12. Bugzilla 24639: ImportC: 負の定数の定義が列挙型変換で検出されない。
  13. Bugzilla 24645: エラーが20個以上ある場合、"static assert" エラーメッセージを非表示にした。
  14. Bugzilla 24738: ImportCore.interpolationの提案。
  15. Bugzilla 24745: 間違った構文で連想配列を作成したときのエラーメッセージを改善する
  16. Bugzilla 24749: "スロー "だけで構成される節はあり得ないパスであるべきである。
  17. Bugzilla 24841: 文字列のエスケープとして使われるUTF-16サロゲートは、エラー時にヒントを与えるべきである。

phobosリグレッションの修正

  1. Bugzilla 23487: std.experimental.loggerのsharedLogへのFileLoggerの割り当てが機能しなくなった。
  2. Bugzilla 24637: [REG 2.104] DList に const/immutable 要素を挿入できない。
  3. Bugzilla 24686: LDC 1.37でDeducedParameterTypeテンプレートが一致しない場合、SumTypeが動作しなくなった。

phobosのバグフィックス

  1. Bugzilla 10581: std.algorithm.filterに文字列ラムダを渡す際に "std.uni.isWhite "という識別子が未定義だった。
  2. Bugzilla 14138: std.parallelism.taskが@safetyを壊す。
  3. Bugzilla 15315: std.algorithm.moveでimmutableを壊すことができる
  4. Bugzilla 20870: std.outbuffer.printfは信頼できる。
  5. Bugzilla 20872: std.array.assocArrayはユーザが提供する "front "を値として信頼する。
  6. Bugzilla 23300: std.array:arrayはソースのスコープを誤って伝播する
  7. Bugzilla 24564: std.file.DirEntryはFileExceptionではなくExceptionをスローする。
  8. Bugzilla 24667: goo.glは消えようとしている
  9. Bugzilla 24685: std.stdio.File.rawReadは"@safe "なコードでファイルから生のポインタを読むことができる。
  10. Bugzilla 24704: DateTime.fromISOExtStringのエラーメッセージは、サポートしていない有効なISO拡張文字列は無効なISO拡張文字列であると言っている。
  11. Bugzilla 24715: std/process:spawnProcessPosix のデフォルトを libcclosefrom にした。
  12. Bugzilla 24773: 安定した sort() は、初期化されていない要素に対してデストラクタを起動する。
  13. Bugzilla 24801: RefRange は範囲プリミティブがない場合は動作しない。const
  14. Bugzilla 24809: 安定ソートが初期化されていない要素に割り当てる場合がある
  15. Bugzilla 24824: std.process.browseはforkされた子要素で失敗した場合に戻る
  16. Bugzilla 24827: maxElement は opAssign を持つ型を正しく扱わない。

phobosの機能強化

  1. Bugzilla 17214: std.array.Appenderに不要なインダイレクトがある
  2. Bugzilla 17479: std.process.Pidのパブリックコンストラクタを追加した。
  3. Bugzilla 22293: NullableはopCast!boolを定義すべきである。
  4. Bugzilla 24524: RLIMIT_NOFILEが高すぎるとプロセスフォークが非常に遅くなる
  5. Bugzilla 24698: Appenderは'data'プロパティを使わずに'size_t length'プロパティをreadonlyで公開する必要がある。
  6. Bugzilla 24823: std.json:オプションでJSONオブジェクトのフィールドの順序を保持できるようにする。
  7. Bugzilla 24851: CustomFloatのいくつかのメンバはconstを持つことができる。
  8. Bugzilla 24875: std.trait.isAggregateTypeは集約型の列挙型を集約型と見なさない。

Druntimeのバグ修正

  1. Bugzilla 10380: [AA] 連想配列のキー型として連想配列を使用するコードが間違っていた。
  2. Bugzilla 24579: stat_t のサイズが Android armv7a 用に間違っている。
  3. Bugzilla 24626: hasUDAが同じシンボルの複数のUDAを扱わない
  4. Bugzilla 24660: Posixでatomic_wchar_tのサイズが正しくない。
  5. Bugzilla 24661: wctype_t と wctrans_t はプラットフォーム依存である。
  6. Bugzilla 24835: hasElaborateAssignは、メンバ変数が精巧な代入を持つ場合、opAssignが無効な構造体に対して真となる。
  7. Bugzilla 24846: atomicLoadは-preview=nosharedaccessのクラス引数では機能しない。
  8. Bugzilla 24864: hasElaborateDestructorは、匿名共用体を持つ構造体に対して不正にtrueになる。
  9. Bugzilla 24872: コピー不可能な値を配列に代入しても効果がない。

Druntime の機能強化

  1. Bugzilla 17416: SocketOption.REUSEPORTがlinuxで利用できない。
  2. Bugzilla 19369: core.sys.posix.setjmpがDarwinをサポートしていない。
  3. Bugzilla 20567: 単純なプログラムでは、GCは並列マーキングのためにスレッドを起動すべきではない。
  4. Bugzilla 24590: d_criticalenter2のモジュールコンストラクタサイクルと共有libphobos2での不正な命令

dlang.orgのバグ修正

  1. Bugzilla 14945: ABIページから "共用体 "が抜けている。
  2. Bugzilla 20601: [ページが見つからない]
  3. Bugzilla 24543: @__future 属性は(ほとんど)文書化されていない
  4. Bugzilla 24548: [spec] 論理条件変換は文書化されていない
  5. Bugzilla 24565: アウト契約変数は暗黙的にconstである。
  6. Bugzilla 24680: [dip1000] final autoクラスメソッドはスコープを推論するが、リターンはない
  7. Bugzilla 24732: FAQのprintf呼び出しに関する記事は古い

dlang.orgの機能強化

  1. Bugzilla 19348: 構造体キャストはもっとドキュメント化されるべきだ。
  2. Bugzilla 24659: メモリーセーフDページにreturn refに関する情報がない。
  3. Bugzilla 24868: 構造体から静的配列へのキャストが文書化されていない。
  4. Bugzilla 24876: スライスから静的配列への文書化されていないキャスト
  5. Bugzilla 24890: spec/arrays.ddは比較について言及し、ダングリング.ptrについて警告すべきである。

インストーラーのバグ修正

  1. Bugzilla 24600: DMDのナイトリービルドが古い

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

このリリースを可能にしてくれたすべての素晴らしい人々に心から感謝する。

前のバージョン