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

変更ログ 2.094.0

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

Download D 2.094.0
2020年9月22日リリース

2.094.0には21の大きな変更と119のBugzillaの問題の修正が含まれている。 多大なる感謝を 49人の貢献者 に感謝する。

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

コンパイラの変更

  1. 追加__traits(child, parent, member)

    引数を2つ取る。最初の引数はシンボルまたは式でなければならない。 は、parent のメンバへのエイリアスなどのシンボルでなければならない。 member parent これはthis の逆である。 __traits(parent, member)の逆である。

    struct A
    {
        int i;
        int foo(int j) {
            return i * j;
        }
    }
    
    alias Ai = A.i;
    
    void main()
    {
        A a;
    
        __traits(child, a, Ai) = 3;
        assert(a.i == 3);
        assert(__traits(child, a, A.foo)(2) == 6);
    }
    
  2. 配列リテラルの型判定の改善

    DMDが配列リテラル要素の共通型を決定できない場合があった。 を決定できない場合があった。不一致の列挙型と、ミュータブル要素とイミュータブル要素のみを含む とimmutable要素のみを含むリテラルが正しく推論されるようになった。

  3. -vtemplates を介したテンプレート使用状況の診断が改善された。

    少なくとも1つのインスタンス化を持つすべてのテンプレートが、標準の コンパイラ診断の標準書式を使って表示されるようになった。 宣言のポイントに簡単にナビゲートできるようになった。

    この種のメッセージはすべて、一意のインスタンス化数の降順でソートされる。

    フラグ引数list-instances が渡された場合(-vtemplates=list-instances など)、 テンプレートがインスタンス化された各場所が、インスタンス化の理由(暗黙的か明示的か)とともに表示される。 とともに表示される。

    たとえば、main.d という名前のDソース・ファイルに

    void foo(int I)() { }
    void goo1(int I)() { }
    void goo2(int I)() { goo1!(I); }
    
    void test()
    {
        foo!(1)();
        foo!(1)();
        foo!(2)();
    
        goo1!(1)();
    
        goo2!(1)();
    }
    

    -vtemplates=list-instances でコンパイルすると、次のように出力される。

    main.d(1): vtemplate: 3 (2 unique) instantiation(s) of template `foo(int I)()` found, they are:
    main.d(7): vtemplate: explicit instance `foo!1`
    main.d(8): vtemplate: explicit instance `foo!1`
    main.d(9): vtemplate: explicit instance `foo!2`
    main.d(2): vtemplate: 2 (1 unique) instantiation(s) of template `goo1(int I)()` found, they are:
    main.d(11): vtemplate: explicit instance `goo1!1`
    main.d(3): vtemplate: implicit instance `goo1!1`
    main.d(3): vtemplate: 1 (1 unique) instantiation(s) of template `goo2(int I)()` found, they are:
    main.d(13): vtemplate: explicit instance `goo2!1`
    
  4. C++のヘッダー生成では、デフォルトでIgnored ... のコメントが省略される。

    生成されるC++ヘッダーは、 以外の宣言に遭遇したときにコメントを書いていた。 extern(C++)

    // test.d
    void foo() {}
    
    // test.h
    [...]
    // リンケージのため関数test.fooを無視
    

    これは生成されるヘッダー・ファイルの肥大化の原因となっていたが、現在は以下のようにカスタマイズできる。 HC= スイッチでカスタマイズできるようになった。 verbose (コメントを書く) とsilent (コメントを省く) のどちらかを受け付ける。デフォルトの はsilent に変更された。

    注釈: ヘッダージェネレーターはまだ実験的なものである。 バグが発生した場合はバグトラッカーに報告してほしい。

  5. 例外をスローするコードをデバッグ・ブロックで使用できるようになった。

    デバッグコードを書くとき、関数ブロックがthrow 、 しかし、コンソールやログファイルへの書き込みなど、快適なデバッグ体験は通常、nothrow 。 DMDではすでに、debug 文の中でpure@nogc をエスケープすることができた。 今回のリリースでは、例外をスローするコードもdebug 文から呼び出すことができる:

    import std.stdio;
    void main() nothrow
    {
        debug writeln("Your throwing log statement.");
    }
    
  6. コンパイラの-inlineスイッチに関係なく、常にpragma(inline, true) 関数をインライン化する。

    関数をpragma(inline, true) でマークすると、呼び出されたときに常にインライン化されるようになった。 されるようになり、インライン化できない場合はコンパイルエラーとなる。

    pragma(inline, true) 、関数本体ではなく、関数内に埋め込まれる。 に埋め込まれている場合、それが常に有効になるとは限らない。(関数本体が呼び出される前に解析されるかどうかによる。 本体が呼び出される前に解析されるかどうかに依存する)。

    pragma(inline, true) "でマークされた関数がインライン化できない場合、-wiコマンドラインスイッチが指定された場合のみ警告を発するようになった。 wiコマンドラインスイッチが与えられた場合のみ警告を発する。以前は が指定された場合のみ、警告を発するようになった。

  7. 暗黙のオーバーライドの非推奨期間が終了した

    基底クラスメソッドの暗黙的オーバーライドは、2.075.0で非推奨となった (2017-07-19リリース) で非推奨となったPR 6731 によって修正された。

    非推奨期間は終了し、以下のコードは今後常にエラーとなる:

    class Base
    {
        void myFunction();
        void myOtherFunction(void* ptr);
    }
    
    class Child : Base
    {
        // エラー: 暗黙的に`Base.myFunction`をオーバーライドしている
        void myFunction() const;
        // エラー: 暗黙的に`Base.myOtherFunction(void*)`をオーバーライドしている
        void myOtherFunction(const void* ptr);
    }
    
  8. Vector型に対する厳格な暗黙の変換ルール

    以前は、コンパイラは__vector 型を暗黙的に他の 型と変換することができた。 __vector 型と暗黙の変換が可能であった。

    int4 x = 2;
    float8 y = x;
    short8 z = y / 3;
    

    このリリースでは、__vector 型は、静的配列のように、暗黙的にそれ自身の修飾型かvoid型にのみ変換できるようになった。 それ自身の修飾子かvoidに暗黙的に変換されるだけである。

    const int4 a = 5;
    int4 b = a;         // OK、どちらもint4
    void16 c = a;       // OK、同じサイズのvoidにキャスト
    float4 d = b;       // エラー、暗黙的にint4をfloat4に変換できない。
    

    __vector 型間の明示的な変換は可能だが、同じサイズのベクトル間のみである。 の間でのみ可能である。

    long2 a = 8;
    short8 b = cast(short8)a;   // OK
    short16 c = cast(short16)b; // エラー、サイズが異なるためキャストできない。
    

    __simd__simd_sto イントリニクスのユーザーは、各使用時にvoid16から適切な型への明示的なキャストを追加するか、または以下の操作を行わなければならない。 を追加するか、または、値をピー クする必要があるまでvoid16ベクトルを厳密に操作しなければならない。 を厳密に操作しなければならない。

    float4 fun1(float4 a, float4 b)
    {
        a = cast(float4)__simd(XMM.ADDPD, a, b);
        a = cast(float4)__simd(XMM.ADDSS, a, b);
        return a;
    }
    
    float4 fun2(void16 a, void16 b)
    {
        a = __simd(XMM.ADDPD, a, b);
        a = __simd(XMM.ADDSS, a, b);
        return cast(float4)a;
    }
    
  9. in としてマークされたパラメータが適切に表示されるようになった。

    以前のリリースでは、in をパラメータに使用すると、パラメータが早く下がりすぎた、 エラーメッセージがパラメータを エラーメッセージはパラメーターをconst (-preview=in が使用されている場合はscope const )と表示していた、 エラーメッセージはパラメーターを(または の場合は)と表示し、ヘッダー生成やスタックトレースも表示する。 ヘッダー生成には問題があった。-preview=in で生成されたヘッダーは、そうでないものと異なっていた。 今回のリリースから、in はすべてのメッセージで正しく表示されるようになった。 これはマングリングのアップデートを必要とするため、古いデバッガやツールでは、正しくマングリングを解除できない場合がある。 は、in パラメータを使用する関数を正しくデマングルできないかもしれない。

  10. DDoc Markdownのサポートがデフォルトで有効になった。

    DdocのMarkdownがデフォルトで有効になった。 サポートされているMarkdownの機能(見出し、強調テキスト、リンクなど)の完全なリストはDdocのドキュメントページで説明されている。

    より慎重な人のために、Markdown機能のすべてのインスタンスのリストは、-transition=vmarkdown で記録できる。 この移行で問題が発生した場合、-revert=markdown でMarkdown機能の処理を一時的に無効にし、問題を報告することができる。

    この問題を提唱してくれたDavid Gileadiに心から感謝する!

  11. 入力パラメータのサポートを追加した (in パラメータ,-preview=in)

    Dは創設以来、inrefout のパラメータ・ストレージ・クラスをサポートしてきた。 outref がよく使われている、 しかし、in は、もともと のエイリアスとして意図されたものであったため、通常は取り残されていた。 const scopeのエイリアスとして意図されていたが、const のサポートが導入されると、 のエイリアスになった。 scope のサポートが導入された(DIP1000)。

    DMD v2.092.0では、スイッチのない-preview=in の代わりに、const scopeconst を追加することで修正した。

    しかし、これではin の意図する意味を正しく理解できなかった: 入力パラメーターに適用される。 入力パラメータとは、関数が調べるだけのパラメータである、 入力パラメータとは、関数を変更することなく、またその参照を保持することなく、 関数が調べることだけを意図しているパラメータのことである。 これはconst scope でカバーされている。 しかし、入力パラメーターの中にはかなり大きなものがあったり、それをコピーすると副作用があったりする(ポストブリット、コピーコンストラクター)、 したがって、実行時のオーバーヘッドを避けるために、これらのパラメータは参照渡しにすべきである。 そこで新たな問題が発生する:Dはr値の参照渡しをサポートしていない。 したがって、入力パラメーターを受け取るAPIを設計する場合、一般的なやり方は、。 入力パラメーターを受け付けるAPIを設計する場合、in を受け付けるオーバーロードと、in ref を受け付けるオーバーロードの両方を用意するのが一般的だった。 これは1つのパラメータではうまくいくが、組合せの爆発に悩まされる。

    このリリースでは、in の意味を見直し、これらの使用例をすべて適切にサポートするようにした。 in パラメータは、最適な場合には参照渡しとなり、r値を受け付けるようになった。 スイッチを使用する場合、in ref パラメーターもエラーとなる。

    参照渡しのルールは以下の通りである:

    • 型が精巧なコピーや破壊(ポストブリット、コピーコンストラクタ、デストラクタ)を持っている場合、
    型は常に参照渡しされる。
    • コピー不可能な型は、常に参照渡しとなる。
    • 参照型(動的配列、関数ポインタ、デリゲート、連想配列、クラス)は、。 は、ref によって渡されることはない。これにより、デリゲートでの共変が可能になる。
    • それ以外の場合、型のサイズが必要であれば、参照渡しされる。 現在のところ、マシン語サイズの2倍を超える型は参照渡しとなる、 しかし、これはバックエンドによって制御され、プラットフォームのABIに基づいて変更することができる。

  12. サポートされていない-mcpu= でベクトル型や演算を使用すると、エラーが発生するようになった。

    以前は、コンパイラーは以下のコードをすべての -mcpu= 型はOSX 32ビットとすべての64ビット・ターゲットの両方でサポートされている。

    __vector(long[4]) x;    // AVXタイプ
    x += 1;                 // AVX2演算
    

    このリリースでは、__vector のすべての型と操作が、現在の CPU をチェックするようになった。 をチェックし、サポートが不十分な場合はエラーを出すようになった。

    また、__traits(compiles) を使った条件付きコンパイルも可能である。 を使った条件付きコンパイルも可能である。

    static if (__traits(compiles, long4))
    {
        // `-mcpu=avx`以上の場合にコンパイルされる
    }
    
    static if (__traits(compiles, { int4 x; x += 1; }))
    {
        // `-mcpu=baseline`以上の場合にコンパイルされる
    }
    
    static if (__traits(compiles, { int4 x; x *= 1; }))
    {
        // `-mcpu=avx`以上の場合にコンパイルされる
    }
    
    static if (__traits(compiles, { int8 x; x += 1; }))
    {
        // `-mcpu=avx2`以上の場合にコンパイルされる
    }
    

    以下の表は、最低限必要な-mcpu=

    128 ビットベクトル型に最低限必要な-mcpu=
    void16byte16ubyte16short8ushort8int4uint4long2ulong2float4double2
    ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン

    128 ビットのベクトル演算子に最低限必要な-mcpu=
    Operatorbyte16ubyte16short8ushort8int4uint4long2ulong2float4double2
    +ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン
    -ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン
    *--ベースラインベースラインavxavx--ベースラインベースライン
    /--------ベースラインベースライン
    &ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン--
    |ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン--
    ^ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン--
    +=ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン
    -=ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン
    *=--ベースラインベースラインavxavx--ベースラインベースライン
    /=--------ベースラインベースライン
    &=ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン--
    |=ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン--
    ^=ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン--
    単数~ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン--
    単項式ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン
    単一ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン

    256ビットベクトル型に最低限必要な-mcpu=
    void32byte32ubyte32short16ushort16int8uint8long4ulong4float8double4
    avxavxエイベックスエイベックス東風東風東風東風東風東風avx

    256 ビットベクトル演算子に最低限必要な-mcpu=
    Operatorbyte32ubyte32short16ushort16int8uint8long4ulong4float8double4
    +avx2avx2avx2avx2avx2avx2avx2avx2avxavx
    -avx2avx2avx2avx2avx2avx2avx2avx2avxavx
    *--avx2avx2avx2avx2--avxavx
    /--------avxavx
    &avx2avx2avx2avx2avx2avx2avx2avx2--
    |avx2avx2avx2avx2avx2avx2avx2avx2--
    ^avx2avx2avx2avx2avx2avx2avx2avx2--
    +=avx2avx2avx2avx2avx2avx2avx2avx2avxavx
    -=avx2avx2avx2avx2avx2avx2avx2avx2avxavx
    *=--avx2avx2avx2avx2--avxavx
    /=--------avxavx
    &=avx2avx2avx2avx2avx2avx2avx2avx2--
    |=avx2avx2avx2avx2avx2avx2avx2avx2--
    ^=avx2avx2avx2avx2avx2avx2avx2avx2--
    単項~avx2avx2avx2avx2avx2avx2avx2avx2--
    単項式ベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースラインベースライン
    単一avx2avx2avx2avx2avx2avx2avx2avx2avxavx

ランタイムの変更

  1. v2.078以前のように、構造体の配列の等値性が再び一貫するようになった。

    v2.078以降、いくつかの配列の等式比較(例えば、両方の配列が 動的配列である場合など)は、カスタム.tupleof のない構造体に対して誤って の比較を使用していた。 opEqualsの比較を誤って使用していた。 -preview=fieldwise を強制していた。

    union U
    {
        string s;
    }
    
    void main()
    {
        static immutable from = "from", from2 = "from2";
        U[] a = [{ s : from }];
        U[1] b = [{ s : from2[0..4] }];
        assert(a[0] != b[0]);
        assert(a != b);
        assert(a != b[]); // v2.078以前は動作していたが、その後失敗していた、再び動作するようになった
    }
    
  2. core.memory.GC.allocatedInCurrentThread() -profile=gc

    新しい関数core.memory.GC.allocatedInCurrentThread() は以下を返す。 core.memory.GC.stats().allocatedInCurrentThreadを返す。 の方が高速である。 これは-profile=gc に使用され、より高速になる。

インストーラの変更

  1. インストールスクリプトが以下をサポートするようになった。get-path <compiler>

    get-path <compiler> インストール・スクリプトに新しいアクションが追加された。 このアクションにより、コンパイラー・バイナリーの情報を表示できるようになった。 の動作は、以下の追加オプションで変更できる: get-path

    • --install ローカルにコンパイラがない場合はインストールする
    • --dmd 特定のコンパイラ実行ファイルのパスを返す(DMD類似インターフェース)
    • --dub DUB実行ファイルのパスを返す

    例:

    curl https://dlang.org/install.sh | bash -s get-path --install
    /home/user/dlang/dmd-2.093.0/linux/bin64/dmd
    

    ~/dlang/install.sh get-path ldc-1.23.0 --install
    /home/user/dlang/ldc-1.23.0/bin/ldc2
    

    ~/dlang/install.sh get-path --dmd ldc --install
    /home/user/dlang/ldc-1.23.0/bin/ldmd2
    

    ~/dlang/install.sh get-path --dub ldc --install
    /home/user/dlang/ldc-1.23.0/bin/dub
    

    ~/dlang/install.sh get-path --dub dub-1.22.0 --install
    /home/user/dlang/dub-1.22.0/dub
    

    ~/dlang/install.sh get-path --dub ldc,dub-1.22.0 --install
    /home/user/dlang/dub-1.22.0/dub
    

    コンパイラーのインストールが見つからず、--install が渡されなかった場合、エラーが発行される。

  2. DMDのバイナリリリースがLDCでビルドされるようになった

    Linux、OSX、FreeBSDのバイナリリリースが でビルドされるようになった。これは、2.091.0からWindowsリリースのホスト・コンパイラがLDCに変更されたことに伴うものである。 リリースのホスト・コンパイラがLDCに変更された。

    LDCでDMDをビルドすると、コンパイラが大幅にスピードアップするはずだ(20~30%)。

    この変更には以下の制限がある:

    • FreeBSD 32 ビットバイナリのリリースがなくなる (32 ビット LDC ホストコンパイラがなくなる)
    • 以前の dmd リリースからコピーされた追加のバイナリツールが含まれなくなった。 (c0de0295e6b1f9a802bb04a97cca9f06c5b0dccd(optlink は含まれている) を参照) これらはまだ https://digitalmars.com/ 経由か、古い dmd リリースから入手可能である。

dubの変更

  1. windows-dmd 用に x86_omf アーキテクチャを追加した。

    windows-dmd で x86_omf アーキテクチャをプラットフォーム仕様として使えるようになった。 --arch=x86_omf仕様として使えるようになった。これは現在のところ --arch=x86 と同等である。

  2. dub remove --non-interactive はデフォルトですべてのパッケージを削除する

    バージョン指定のないパッケージ名でコマンドを呼び出した場合、通常は最新バージョンとみなされる、 通常、最新バージョンが想定される。 この動作はdub fetchdub run では理にかなっている、 を通じてローカルパッケージをクリーンアップする場合、この動作は理にかなっているが、dub remove 、 そのため、以前のバージョンは、複数の バージョンが利用可能な場合、単にエラーになっていた。 このバージョンから、dub remove -n $PKGNAME は、 という名前のパッケージのキャッシュされたバージョンをすべて削除する。 $PKGNAME $PKGNAME@* というパッケージのキャッシュされたバージョンをすべて削除するだけである。

  3. パッケージのないフォルダでdub upgrade を実行することは、もはや無意味である。

    この変更以前は、dub upgrade / 。 で誤ってdub.json を実行すると、 /dub.sdl が存在しない。 dub.selections.json と、場合によっては空の.dub フォルダが残る。 これは修正され、dub upgrade を実行すべきでない場所で実行しても、親切なエラーメッセージが表示されるだけになった。 を実行しても、フレンドリーなエラーメッセージが表示されるだけである。

  4. 依存関係を正確なコミットの git url としてサポートするようにした

    Gitリポジトリは、依存関係としてdubから直接使用することができる。

    dub.json:

    {
        "name": "git-dependency",
        "dependencies": {
            "gitcompatibledubpackage": {
                "repository": "git+https://github.com/dlang-community/gitcompatibledubpackage.git",
                "version": "ccb31bf6a655437176ec02e04c2305a8c7c90d67"
            }
        }
    }
    
  5. すべてのコマンドがpackage[@<version-spec>] をサポートするようになり、--version は非推奨となった。

    dub コマンドは、そのバージョン処理に若干のばらつきがあった。 パッケージ名を受け付けるほとんどのコマンド(例: や )は、 のどちらかをサポートしていた。 のどちらかをサポートしていた。 オプション を受け付ける。 後者の形式は現在では非推奨となり、すべてのコマンドが を受け付けるようになった。 がない場合は、依然として「最新バージョン」を意味することに注釈: ( を除く)。 dub fetch dub run package[@version-spec] package --version=<version-spec> package[@<version-spec>] @<package-spec> remove


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

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

  1. Bugzilla 18412: [REG2.077.0]ライブラリの不変のトラクタ配列を静的コンストラクタで参照するとNULLになる。
  2. Bugzilla 19476: 明示的なミックスインテンプレート関数の呼び出しが再帰的な呼び出しになる。
  3. Bugzilla 20296: extern(C++)リンケージで可変長引数D関数を使用するとセグメンテーションエラーが発生する。
  4. Bugzilla 20620: dmd バージョンに -dirty という接尾辞がある。
  5. Bugzilla 20958: 関数のコードを生成する際の意味解析が不完全であった。
  6. Bugzilla 20981: インライン化された__simd_stoのランタイムセグメンテーション違反
  7. Bugzilla 21088: std.meta.staticMapがtypeidに対応しなくなった。
  8. Bugzilla 21091: [ICE] Segmentation fault:Module::importAll(Scope*) (this=0x0, prevsc=0x0) at dmd/dmodule.d:1124
  9. Bugzilla 21163: 構造体イニシャライザーのScopeラムダ引数が解析エラーを引き起こす
  10. Bugzilla 21196: [REG 2.092] 非推奨ブロック内で言語機能の非推奨がトリガーされた
  11. Bugzilla 21258: 2.094.0-beta.1以降、デフォルトを持つタプルパラメータは、すべてのデフォルトのために最初のタプル要素を使用する

DMDコンパイラのバグ

  1. Bugzilla 2617: asmがあいまいなサイズの演算を黙って受け入れる
  2. Bugzilla 5570: 構造体や複素数を関数のパラメータとして渡す場合、64ビットCのABIが守られていなかった。
  3. Bugzilla 5922: インラインアセンブラ - "不変の変数値"の参照に失敗する。
  4. Bugzilla 6166: 名前付き戻り値の最適化がインラインアセンブラで扱われていない。
  5. Bugzilla 6459: インラインアセンブラが64ビットレジスタR8...R15に対してうまく動作しない。
  6. Bugzilla 7387: 呼び出し命令が $ を理解しない
  7. Bugzilla 10966: オプティマイザがtry-catchで間違ったコードを生成する
  8. Bugzilla 12490: エラー:カンマ式LHSの"Error: , has no effect "エラー。
  9. Bugzilla 12730: lea 命令がスケーリングレジスタの減算を受け付けるが、実際には加算される
  10. Bugzilla 12832: asmのmovdquが間違ったオペランドサイズを受け入れる
  11. Bugzilla 13215: 静的なこの配列の割り当てでエラーメッセージが表示される
  12. Bugzilla 13957: 浮動+整数型の構造体を渡す際に64ビットCのABIが守られていない。
  13. Bugzilla 14203: extern(C++)メンバ関数からの浮動小数点値の戻りがdmcと一致しない。
  14. Bugzilla 14458: ubyte[]代入が非常に遅い(dmdはmemsetを使っていない)。
  15. Bugzilla 14872: [2.068.2] asm [x86-64]のラベルアドレス
  16. Bugzilla 15103: 宣言/初期化構文エラーメッセージの改善
  17. Bugzilla 15257: 不正なインラインasmを含む"__traits(compiles, ...)"は静かにコンパイルを終了する。
  18. Bugzilla 15745: インラインアセンブリがプロファイリングに踏みつけられる
  19. Bugzilla 16044: __traits(allMembers)はサブパッケージに対して空のタプルを返す
  20. Bugzilla 16092: AVXレジスタYMM0-YMM7は32ビットasmからアクセスできない
  21. Bugzilla 16268: 整数オーバーフローを伴うコードでループの最適化が間違っている
  22. Bugzilla 16317: 最適化時の binop の評価/ロード順序が正しくない。
  23. Bugzilla 16857: インラインアセンブラがVPEXTRW命令のオペランドを反転させる
  24. Bugzilla 16963: asm文の前方参照ラベル名解決
  25. Bugzilla 17617: x64インラインアセンブラ(iasm)でRIP相対アドレッシングが使用できない。
  26. Bugzilla 17720: 異なる型のベクター拡張を使用した誤ったコード
  27. Bugzilla 17965: 関数の結果が既に正しい XMM レジスタにある場合に FPU を使用する。
  28. Bugzilla 18373: インラインアセンブラパーサが奇妙な構文を許可している。
  29. Bugzilla 18748: 即値オフセット付きbt命令で、32ビットデータに64ビットバリアントを使用する。
  30. Bugzilla 18749: 32ビットオフセットに64ビットレジスタを使用するbt命令
  31. Bugzilla 19210: return 関数のパラメータがそうでない場合のエラーメッセージが貧弱である。ref
  32. Bugzilla 19384: [Codegen] 一時スタックのアドレスが返される
  33. Bugzilla 19590: [Codegen]スタックテンポラリのアドレスが返されない : [Codegen] スタックテンポラリのアドレスが返される : [__traits allMembers]インポートには完全修飾名を付けるべきである。
  34. Bugzilla 19729: ミックスインから来るコンストラクタのオーバーロードが解決されない。
  35. Bugzilla 19846: byte[0]のようなゼロサイズの"関数"パラメータはコードが実行されない。
  36. Bugzilla 20017: JSON (-X) compilerInfo.architecturesの生成は、CPU検出のためにparams.isXXXに依存する。
  37. Bugzilla 20162: の符号拡張: 最適化が間違っている
  38. Bugzilla 20363: XMMレジスタを整数としてペイントするとcodegenのバグにつながる
  39. Bugzilla 20422: "newで作成できるのは構造体、動的配列、クラスオブジェクトのみで、int[]は作成できない" という紛らわしいエラーが発生する。
  40. Bugzilla 20761: 別名タプルに対する__traits(isSame)は壊れており、仕様が不十分である。
  41. Bugzilla 20831: __traits(getAttributes)が名前のないパラメータに使われるとコンパイルに失敗する
  42. Bugzilla 20911: test/unitのドキュメントが存在しない。
  43. Bugzilla 20934: preview=dtorfieldsが無効/外部コンストラクタでセグメンテーションに失敗する。
  44. Bugzilla 20938: 不変構造体と変更可能構造体を混合したconst配列を間接表現で作成できない。
  45. Bugzilla 20963: cast(double)anUlongのコードが間違っている。
  46. Bugzilla 20995: preview=dip1021で範囲違反。
  47. Bugzilla 21001: 宣言の前に使用すると private エイリアスが public になる
  48. Bugzilla 21019: Azure pipelines Windows_VisualD win32-ldc が Heisenbug で失敗する。
  49. Bugzilla 21037: AVX コードが VEX 接頭辞の設定に失敗することがある。
  50. Bugzilla 21038: wchar と dchar の文字列アライメントはそれぞれ 2 と 4 であるべきである。
  51. Bugzilla 21040: SIMD: AVXで32バイト演算を使用する不正な命令
  52. Bugzilla 21050: テンプレートの"__traits(getOverloads)"が最初のオーバーロードに対して不正なシンボルを返す。
  53. Bugzilla 21053: テスト・スイートのrun.dがテスト対象のコンパイラーでビルドされている。
  54. Bugzilla 21058: __traits(getOverloads)が第3引数の"this"を忘れるか、最初のオーバーロードがテンプレートである場合
  55. Bugzilla 21082: OSXでTestsuiteが失敗する(runnable/test16096.shでassertsをonにした場合)。
  56. Bugzilla 21089: vm.overcommit_memory=0では、DMDがシステム内の(ram+swap)メモリの半分以上を使用するとリンクできない。
  57. Bugzilla 21092: [ICE] ExpressionPrettyPrintVisitor::visit(CommaExp*) at dmd/hdrgen.d:2293 でセグメンテーションフォールトが発生した。
  58. Bugzilla 21117: コンパイラがオートテスターを実行中にセグメンテーションフォールトを起こすと、どのファイルをテストしたのかわからなくなる
  59. Bugzilla 21120: initシンボルの扱いに一貫性がない
  60. Bugzilla 21153: DWARF:DMDがDW_AT_nameに対してマングルされた名前を出力する。
  61. Bugzilla 21154: DWARF: 共有型が表現されない。
  62. Bugzilla 21164: DWARF: 共有型が表現されていない。
  63. Bugzilla 21181: インラインアセンブラが32ビットコンパイル時にlong ptrをバイト操作としてコンパイルする
  64. Bugzilla 21198: 共用体フィールドのインアウト・コピー・コンストラクタが共用体のコピー初期化を防止しない。
  65. Bugzilla 21208: [ICE] 列挙型を持つdtoh
  66. Bugzilla 21213: preview=dtorfields with strict attributes in base class constructor : [ICE] dtoh with enum
  67. Bugzilla 21217: C++ヘッダー・ジェネレーターはプライベート列挙型を生成すべきではない。
  68. Bugzilla 21219: extern(C++, [class|構造体])のために生成されたC++ヘッダーが無効である。
  69. Bugzilla 21225: preview=dtorfields は nothrow ctors に不要な dtor 呼び出しを挿入する。

DMDコンパイラの機能強化

  1. Bugzilla 1995: Jオプションの無効なパスを警告するようにした。
  2. Bugzilla 12223: エイリアスには __traits(getMember,...) が必要である。
  3. Bugzilla 14120: iasmに一時停止命令がない
  4. Bugzilla 14697: dmdのインラインアセンブラにpclmulqdq命令のサポートを追加した。
  5. Bugzilla 14936: 32bitで2のべき乗で割ると遅い。
  6. Bugzilla 19277: alias 文で使用されるストレージクラスは効果がない。
  7. Bugzilla 19663: x86_64 では、fabs 組み込み命令は SSE を使用すべきである。
  8. Bugzilla 19705: 数値範囲のforeachが遅い
  9. Bugzilla 20931: ctfeで実行されたコードはカバレッジで考慮されるべきである。
  10. Bugzilla 20990: オプティマイザはコールドブランチを関数の最後に移動すべきである。
  11. Bugzilla 21060: d/dmd/dstruct.c:1224のセマンティックにICEがある。
  12. Bugzilla 21159: DWARF: DW_AT_pureは純粋関数に対して発行されるべきである。

phobosのリグレッション

  1. Bugzilla 21129: [REG2.090] std.range.onlyがパラメータのローカルコピーの参照変換のために壊れている

Phobosのバグ

  1. Bugzilla 7033: WindowsでFile.rawWriteが遅い
  2. Bugzilla 12521: std.getoptがドキュメントに準拠していない。
  3. Bugzilla 20370: POSIXでは、std.file.copyは秒単位の精度でしかファイルをコピーしない。
  4. Bugzilla 20765: 作業ディレクトリを指定する際に相対パスでプロセスを実行できない。
  5. Bugzilla 20929: std.experimental.allocator.expandArrayの範囲ベースのオーバーロードがchar配列とwchar配列のインスタンス化に失敗する。
  6. Bugzilla 20949: std.range.popFrontはリリース・モードでは安全ではない
  7. Bugzilla 20984: Heisenbug:std/process で FreeBSD64 の phobos ランダムテストスイートが失敗する。
  8. Bugzilla 21021: std.variant で構造体が maxDataSize より大きい場合に this という別名で混乱する。
  9. Bugzilla 21148: Semaphoreci: core.exception.AssertError@std/file.d(1929): "-unittest" の失敗。
  10. Bugzilla 21182: asmのコードにint ptr がないため、byte opがデフォルトになっている。
  11. Bugzilla 21183: schwartzSortはconstを取り除かない。
  12. Bugzilla 21191: min は安定であるべきだ。
  13. Bugzilla 21199: Nullable.applyは他の"phobos"のように文字列表現を取るべきである。
  14. Bugzilla 21210: std.traits : isAssignableは無効なコピー構造体の偽陽性である。

Phobosの強化

  1. Bugzilla 20889: std.bigint.BigIntの符号とバイト配列の大きさからの構築をサポートした。
  2. Bugzilla 21113: NetBSD の std.file.thisExePath が /proc ファイルシステムに依存するようになった。
  3. Bugzilla 21131: Appender with stringがUTFの入力範囲を正しく処理しない
  4. Bugzilla 21201: std.uuid.parseUUIDがdcharだけでなくcharやwcharを要素とする入力範囲を受け付けるようにした。

Druntimeのバグ

  1. Bugzilla 19554: [2.084.0] 混乱させるメッセージ - 警告: Foo構造体はtoHashメソッドを持っている。
  2. Bugzilla 20910: デフォルトのunittestランナーが間違ったunittest数を報告する。
  3. Bugzilla 21029: DMD PR #11212 でコンパイラが使わなくなった __ArrayEq を削除した。
  4. Bugzilla 21055: core.stdc.stdargは@nogcではない
  5. Bugzilla 21116: onArrayCastErrorは恐ろしく安全ではない

Druntimeの機能強化

  1. Bugzilla 21026: core.bitop.byteswap(ushort)を追加した。
  2. Bugzilla 21070: -profile=gcはプログラムをかなり遅くする。

dlang.orgのバグ

  1. Bugzilla 13569: 整数のゼロ除算の動作と仕様に矛盾がある

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

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

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