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

変更ログ 2.101.0

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

Download D 2.101.0
2022年11月14日リリース

2.101.0には40の大きな変更と209のBugzillaの問題の修正が含まれている。 多大なる感謝を 72人の貢献者 に感謝する。

D 2.101.0の全バグ修正と機能強化のリスト。

コンパイラの変更

  1. Dにビット・フィールドを追加

    これはImportCのビット・フィールドと同じように機能する。

    https://github.com/dlang/dlang.org/pull/3190

    struct B
    {
        int x:3, y:2;
    }
    
    static assert(B.sizeof == 4);
    
    int vaporator(B b)
    {
        b.x = 4;
        b.y = 2;
        return b.x + b.y; // 6を返す
    }
    
  2. 追加__traits(classInstanceAlignment)

    __traits(classInstanceSize) を補完する。 アライメントを提供する:

    align(__traits(classInstanceAlignment, C))
    void[__traits(classInstanceSize, C)] buffer;
    
  3. リラックスpragma(crt_constructor) /pragma(crt_destructor) リンケージチェック

    extern(C) デフォルトの シグネチャを使用する場合、CRTコン/デストラクタはもう必要ない。 デフォルトの シグネチャを使用する場合、CRTのcon/destructorにはもう必要ない。 void ()

  4. でコンパイルする場合、定義済みバージョンD_Optimized を追加する。-O

    これにより、コードが最適化を有効にしてコンパイルされているかどうかを区別できるようになる(-O フラグが提供されている)。 これは、-release モードが有効かどうかとは無関係である。 定義済みバージョンassert,D_NoBoundsChecks,D_Invariants などを参照のこと。

  5. nothrow 関数の契約からのスローは非推奨となった。

    これまでコンパイラは、inout 関数の契約から例外をスローし、スロー関数を呼び出すことができた。nothrow 関数のコントラクトが例外をスローし、throw関数を呼び出すことを認めていた。これは nothrow 保証を破ることになるため、非推奨のお知らせが表示されるようになった。

    // 非推奨:
    float sqrt(float n) nothrow
    in
    {
        if (n < 0)
            throw new Exception("n must be positive");
    }
    do
    {
        // ...
    }
    
    // FIX: nothrow属性を削除するか、アサーションを使用する
    float sqrt(float n) nothrow
    in
    {
        assert(n >= 0);
    }
    do
    {
        // ...
    }
    
  6. version またはdebug の条件に整数を使用することは推奨されなくなった。

    問題は、意味を持たない単一の数値名前空間を提供するだけだということだ。 有効にする機能を記述したバージョン識別子を使う方が良い。 フォーラムのこのスレッドも参照のこと。

    // 現在は非推奨:
    version = 3;
    version (2) { }
    
    debug = 4;
    debug (5) { }
    
    // 代わりに識別子を使う:
    version = HasX;
    
    version (HasX)
        void x() { /* ... */ }
    else
        void x() {}
    
  7. scope ポインタ・エラーに対する非推奨事項を表示する。

    scope 属性は長い間存在していたが、コンパイラーはコードの破壊を避けるため、-preview=dip1000 スイッチが渡されたときのみそのセマンティクスを検証していた。 スコープ変数に格納されたポインタや参照は、その変数が定義されているスコープから抜け出すことはできない。

    通常、ガベージ・コレクタ(GC)がメモリの解放を行うので、変数にscope マークを付ける必要はない。 しかし、D言語ではローカル変数を指すポインタやスライスを作成することができる。ポインタやスライスは、スタックベースのメモリ割り当てを使用し、そのスコープの終了時に破棄される。 @safe コードでは、このようなポインタの作成が禁止されているか、scope セマンティクスが強制されていることが重要である:

    @safe:
    int[] getSlice()
    {
        int[4] stackBuffer;
        int[] slice = stackBuffer[]; // スライスは、スタック上に確保されたローカル変数を指す
        return slice; // ぶら下がるポインター!
    }
    
    struct S
    {
        int x;
    
        int* get()
        {
            int* y = &this.x; // この構造体のインスタンスは、ローカル変数になる可能性がある
            return y; // 危険!
        }
    }
    

    このリリースから、スタック・メモリーへのポインターについて、@safe のコードでscope のセマンティクスが強制されるようになったが、これは非推奨の警告に過ぎない。 ただし、非推奨警告としてのみである。最終的にはエラーになる。 すぐにエラーにするには、-preview=dip1000 を使用する。 非推奨の警告を無効にするには、-revert=dip1000 を使用する。

    DIP1000の原文は古いので、ドキュメントについては仕様ページを参照されたい:

  8. C++ヘッダー生成の改良

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

    • C++11互換ヘッダーを生成する際、仮想関数をオーバーライドする場合はoverride キーワードでマークされるようになった。 でマークされるようになった。
    • 最終仮想関数は、C++11 互換ヘッダーの生成時にfinal キーワードでマークされるようになった。 が付くようになった。

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

  9. -preview=fixImmutableConv が追加された

    コンパイラは、結果が一意であると判断した場合、間接参照を含む戻り値を暗黙的に不変に変換することができる。 以前は、このチェックは間接関数の型を検査し、int[] からvoid[] のような変換を考慮することを忘れていた:

    int[] f(ref void[] m) pure
    {
        auto result = new int[5];
        m = result;
        return result;
    }
    
    void main()
    {
        void[] v;
        immutable x = f(v);
        // `v`は不変の変数`x`の変更可能なエイリアスである
    }
    

    この問題は15660号として提出され、しばらく前にチェックをより厳格にすることで修正された:呼び出される関数は強く純粋でなければならない。 しかし、コードの破損を避けるため、この修正は-preview=dip1000 スイッチでのみ有効であった。 これはdip1000(scope ポインタに関するもの)とは無関係なので、この修正は新しい-preview=fixImmutableConv スイッチに移された。

  10. 関数から破棄されたvoid値を返すことは非推奨となった。

    副作用のないvoid型の式文は、効果がないので破棄されるべきである。 型の式文は、効果がないので破棄されるべきである。コンパイラは通常、このようなステートメントを許可しない。 しかし、return文の場合、このエラーは回避される。 エラーは回避される。例:

    struct StackBuffer
    {
        auto opIndex(size_t i)
        {
            return arr[i];
        }
    
    private:
        void[] arr;
    }
    

    このコードはコンパイル可能だが、opIndex を呼び出すとエラーになる。 なぜなら、戻り値の型がどこかに格納されていなければならないからである。 変数はvoid型であってはならない)、あるいは呼び出しは何の効果も持たないからである。

    このリリースから、関数から破棄されたvoid値を返すこと を返すことは非推奨である。そのようなコードは、確実に死んだコードなので削除して構わない。

  11. ImportCは、typeof(...) 演算子を認識するようになった。

    ISO Cはtypeof 演算子を指定していないが、広く実装されているベンダーの拡張機能である。 ImportCはこの拡張も実装するようになった。

    認識されるのはtypeof(...) の形式のみで、他のコンパイラーは、 と のどちらか一方しかサポートしていない。 __typeof__(...) __typeof(...) これらの形式を使用するImport Cは、#definesで正規化する必要がある。

  12. -transition=markdown-revert=markdown スイッチを削除した。

    このリリースでは、-transition=markdown を削除した。 スイッチ、および-revert=markdown スイッチはddocドキュメントブロックのマークダウン置換を無効にする。

    マークダウン置換は以前からデフォルトであり、このリリースでは は常に実行される。

  13. new 連想配列

    これにより、キーが挿入される前に、2つの連想配列参照が同じ を指すことができる。

    int[string] a = new int[string];
    auto b = a;
    ...
    a["seven"] = 7;
    assert(b["seven"] == 7);
    

    注釈: NULL連想配列参照にキーを挿入する前に、new を呼び出す必要はない。 のキーを挿入する前に をコールする必要はない。 インスタンスは確保される。

  14. -preview=in extern(C++) で使用できるようになった。D以外のリンクでは無効。

    -preview=in の意図は、in を D の入力パラメー タ用のストレージクラスとして使用できるようにすることである。 しかし、scope const ref の拡張版であるため、D中心である。 通常、extern(D) 以外の関数は特定のABIに適合することが期待されている、 in

    C++には、入力パラメーター用の"go to"ストレージ・クラス(const T& )もある、 in は、const T& パラメータにバインドするために、extern(C++) 関数に適用することもできる。 これにより、const ref を介するよりも、より近いAPIを関数に公開することができる、 in 、C++のようにconst T& に "r値"をバインドすることができる。

  15. 短縮されたメソッド構文はデフォルトで使用できる。

    DIP 1043---短縮メソッド構文が受け入れられ、フラグ-preview=shortenedMethods はもはや短縮関数本体を書くのに必要ない:

    int add(int x, int y) pure => x + y;
    
    // 同等のフル関数ボディ:
    int add(int x, int y) pure
    {
        return x + y;
    }
    

    プレビュー・フラグは、将来のリリースで非推奨になるまで、まだ機能する。

  16. ソース・ファイルにUnicodeの方向性オーバーライドが含まれなくなる。

    トロイの木馬のソースInvisible Vulnerabilities(目に見えない脆弱性)」は、様々なプログラミング言語で悪意を持ってコードを隠蔽するために、どのように利用できるかを示している。 Dも影響を受ける。

    これを防ぐため、コンパイラーはソース・ファイル中にこれらの文字列が現れるとエラーを発するようになった。 方向性のオーバーライドを含む文字列リテラルが必要な場合は、代わりにエスケープ・シーケンスを使用する:

    string s = "\u202E\u2066";
    
  17. Windows:DMDスタックの上限を16MBに倍増する

    いくつかのプロジェクトのコンパイルには、以前より多くのスタック容量が必要になる。 現在、DMDはLDCと同じ制限を持つ。 スタック制限を増やした と同じ制限になった。

ランタイムの変更

  1. avx512fの検出を以下に追加core.cpuid

    機能フラグcore.cpuid.avx512f が追加された。 を検出できるようにした。

  2. --DRT-oncycle=deprecate は削除された

    このオプションは2.072.2で導入され、モジュールコンストラクタの古い欠陥サイクルチェッカに依存していたコードの移行を助けるために導入された。 現在は警告を表示し、デフォルトの--DRT-oncycle=abort と同じ動作をする。 こちらも参照のこと:静的構築の順序も参照のこと。

  3. Posix (Darwinを除く):デフォルトのGCシグナルをSIGUSR1/2からSIGRTMIN/SIGRTMIN+1に切り替える。

    SIGUSRは "システム"ライブラリ(例えば、AndroidのDalvik VMやLLVMのlibFuzzer)で使われる可能性がある。 Dalvik VMやLLVM libFuzzer)で使われる可能性がある。 SIGRTはユーザー定義の目的用に予約されており、衝突する可能性は低い。

    使用されるシグナルは、早期に core.thread.osthread.thread_setGCSignals().

ライブラリの変更

  1. @safe-preview=dip1000 と併用できるSafeRefCounted を追加した。

    RefCounted は、 のコードでのみ使用できる。 ペイロードへの参照をエスケープする可能性があるためである。 その修正コピー、 が追加された。また 関数 "が追加され、安全にペイロードにアクセスし、変更できるようになった。 、ペイロードへの参照がエスケープされるのを防ぐ。 @system std.typecons.SafeRefCountedborrow-preview=dip1000 @safe

    @safe pure nothrow void fun()
    {
        import std.typecons;
    
        auto rcInt = safeRefCounted(5);
        assert(rcInt.borrow!(theInt => theInt) == 5);
        auto sameInt = rcInt;
        assert(sameInt.borrow!"a" == 5);
    
        // 関数内で`ref`を使う
        auto arr = [0, 1, 2, 3, 4, 5, 6];
        sameInt.borrow!(ref (x) => arr[x]) = 10;
        assert(arr == [0, 1, 2, 3, 4, 10, 6]);
    
        // modifying the payload via an alias
        sameInt.borrow!"a*=2";
        assert(rcInt.borrow!"a" == 10);
    }
    

    ペイロードへの直接アクセスは、残念ながら@system 。しかし -dip1000 参照をエスケープすることはできないが、スコープ終了前に最後の参照を破棄することは可能だ。 スコープが終了する前に最後の参照を破棄することは可能である:

    int destroyFirstAndUseLater()
    {
        import std.typecons;
    
        auto rc = SafeRefCounted!int(123);
        int* ptr = &rc.refCountedPayload();
        destroy(rc);
        return *ptr; // 解放されたメモリから読み込む。これをやってはいけない。
    }
    

    副次的な効果として、私たちは次のことを可能にした。 std.file.dirEntries@safe-preview=dip1000

    @safe であるRefCounted のメンバ関数の中には、そうでないものもある。 SafeRefCounted.RefCounted "型"とrefCounted "関数"は、旧来の動作でまだ利用できる。 型と 関数は、古いビヘイビアでも利用できる。しかし、それらの主な目的は後方互換性である。 互換性である。新しいコードには推奨されない。

  2. ロガーをexperimentalから外す。

    std.experimental.loggerパッケージはstd.loggerになった。古いパッケージとモジュールは まだ利用可能で、新しいものを一般にインポートする。非推奨をエラーとしてコンパイルする 今のところ、古いモジュールは非推奨になっていない。

  3. コンパイル時に最小のLogLevelを設定するstd.experimental.loggerの機能を削除した。

    この変更以前は、std.experimental.loggerはコンパイル時にロギングを無効にする機能を持っていた。 ロギングを無効にする機能があった。 また、コンパイル時に最小LogLevelを設定することも可能だった。 得られる機能、追加される複雑さ、エラーの起こりやすさのトレードオフは、後者の2つの項目に大きく傾いていた。 のトレードオフは、2番目の2つの項目に大きく傾きすぎていた。 この変更により、これらのコンパイル時機能が削除された。

  4. std.experimental.logger.core.sharedLogをshared(Logger)を返すように変更した。

    安全でないコードをより明示的にするために、std.experimental.logger.sharedLog がLoggerの代わりにshared(Logger)を返すようになった。

  5. std.experimental.typeconsが削除された。

    これはstd.typecons.wrap 、structで動作する実装でアップデートしようとしたものだが、どこにも行かなかった。 フォーラムのこの投稿を参照のこと。

  6. std.digest.digestは削除された

    このモジュールは当初2.076.1で非推奨とされ、092.0で非推奨とされたシンボルがすべて削除され 2.092.0で非推奨シンボルがすべて削除され、代わりに std.digest またはそのサブモジュールをインポートするようになった092.0以降、空になっている。

  7. std.xmlが削除された

    このモジュールは古く、phobosの現在の標準に合っていないと考えられる。 もしまだ必要なら、https://github.com/DigitalMars/undeaD

  8. std.socket.Socket メソッドは 配列のみを受け付けるようになった。scope

    dip1000に準拠するため、std.socket.Socketscope 属性を持つようになった。これにはreceivesend setOptionフレーバーが含まれる。技術的には のユーザーにとっては技術的には変更されないが、Socket から派生する場合は、その派生物に属性を適用しなければならない。 を適用しなければコンパイルに失敗する。しかし、属性を適用することは 属性を適用することは、以前のバージョンの Phobosとの後方互換性があるため、移行パスは必要ない。 移行パスは必要ない。

  9. std.outbuffer.OutBufferクラスにカスタムフィル値を追加する。

    std.outbuffer.OutBuffer 、fill、alignSize、align{2,4}メソッドを拡張して、フィル時に(アラインメントまで)書き込む値を指定する。 のメソッドを拡張する。

    フラッシュ・デバイス・イメージの場合、0xffをフィル値として使用することが望ましい、 なぜなら0xffはプログラムされていないフラッシュ・メモリ・セルの値だからである。パディング を 0 で埋めるには、フラッシュ・セルを 0xff から 0x00 にプログラムする必要がある。 フラッシュ・メモリ・デバイスの消耗を増加させる。通常 通常、フラッシュ・メモリ・イメージの最後には、より大きなブロックがある。 をフラッシュ・デバイスのサイズ(通常は2の累乗)までパディングしなければならない。代わりに PRでは0x00でパディングする代わりに0xffで埋めることができる。

    その他にも、0x00以外の値でアライメントギャップを埋めることが合理的な使用例があるかもしれない。 アライメント・ギャップを0x00以外の値で埋めることが合理的な場合もある。 や16進エディターで出力データを見るときなどである。例えば、デバッグや16進エディターで出力データを見るときなどである。 パディングされたスペースに0x55や0xaaのようなカスタム値が含まれている場合、ギャップを見つけるのは簡単だ。

    新しいフィル・メソッドが追加された。 で埋めることができる。

    OutBuffer buf = new OutBuffer();
    buff.fill( 1234, 42 ); // 1234バイトをbuf.offsetから始まる42バイトで埋める
    buff.fill( 10 );       // fill0( 10 );と同等
    

    alignSize、align{2,4}メソッドは、要求されたアライメント境界へのパディングにユーザー定義の値を使うように修正された。 値を使うように修正された。

    OutBuffer buf = new OutBuffer();
    buf.write(cast(ubyte) 1);
    buf.align2(0x55);
    assert(buf.toBytes() == "\x01\x55");
    buf.write(cast(ubyte) 2);
    buf.align4(0x55);
    assert(buf.toBytes() == "\x01\x55\x02\x55");
    buf.write(cast(ubyte) 3);
    buf.alignSize(8, 0x55);
    assert(buf.toBytes() == "\x01\x55\x02\x55\x03\x55\x55\x55");
    

dubの変更

  1. 特別なテストランナー設定を構築する

    dub build --config=unittest --build=unittest[-cov] をビルドできるようになった。 のテストランナー実行ファイルのビルドを真似ることができるようになった。 これには既存の 。 dub test [--coverage] unittest

    dub describe --config=unittest 実行ファイルへのパスを導き出すことができる。 を導き出すことができる。

  2. 出力がカラー化される

    dub出力がより読みやすく改良された、 つまり、出力の中で最も重要な情報 がカラー化/太字化された。

    CLIツールの常として、この動作は出力がTTYであろうとなかろうと自動的にオンになる。 この動作は、出力がTTYであるかどうかにかかわらず、自動的にオンになる。TTYがある場合に古い出力を強制するには を強制するには、--color=off を使用する。TTYがない場合に色付きの を強制するには、--color=on を使用する。

    on またはoff に設定されている場合、--color フラグは自動的にコンパイラに転送される。 コンパイラに転送される。これは特にCI パイプラインで特に有用である。

  3. dub.json 、設定、またはセレクション・ファイルにおいて、認識できないフィールドがあった場合、dubが警告を発するようになった。

    以前は、dubは認識できないものを黙って受け入れていた。 dub.json [dub.]settings.json dub.selections.jsonを黙認していた。当初の意図は 当初の意図は前方互換性を簡単にすることだったが、それは有害であることが判明した。 タイプミスはユーザー設定が無視されたことを意味するからだ。

    このリリースから、dubは設定ファイル やdub.selections.json 。10リリース以降、これらの警告はエラーに変わる。

  4. cov-ctfeunittest-cov-ctfe の2つの新しいビルド型が追加された。

    これらは既存のビルド型covunittest-cov をそれぞれ拡張したものである。 コンパイラに渡されるフラグのセットに-cov=ctfe を追加する。

  5. DUBの設定とpackagesディレクトリの配置を見直した。

    DUBがダウンロードしたパッケージやユーザー設定を保存する場所を、環境変数やdubのコンフィギュレーションで設定できるようになった。ユーザー設定の保存場所を指定するには、環境変数またはシステム全体のdubの設定を使用する必要がある。

    デフォルトでは、DUBはパッケージを

    • Windowsに保存される: %APPDATA%/dub/settings.json +%LOCALAPPDATA%/dub/packages/
    • Posix:$HOME/.dub/{packages/,settings.json}

    環境変数DUB_HOME が設定されている場合、代わりにパッケージ(およびその他の設定)を

    • $DUB_HOME/{packages/,settings.json}

    あるいは、DUB_HOME が設定されておらず、DPATH が設定されている場合、以下のパスが使用される:

    • $DPATH/dub/{packages/,settings.json}

    DPATH 環境変数は、ユーザースペースでインストールを行うすべてのDツール関連で使用されることを意図している。ホームフォルダーが散らかるのを避けるために使うことができる。

    環境変数に加えて、DUBのsettings.jsonファイルを通してパッケージの配置パス+settings.jsonパスを設定することも可能だ。ユーザーが編集可能なsettings.jsonをどこに置くかを設定するには、システム全体のdub設定を調整する必要がある。

    settings.jsonでは、以下のフィールドを設定できる:

    {
        "dubHome": "/path/to/dub", // sets both package store and config location
    }
    

    さらに、これらの設定パスには、$VARIABLE 構文を使った環境変数が解決される。

    以下のリストは、どのパスが選択されるかを上から順に説明したもので、パスが見つかるたびに停止する:

    • $DUB_HOME 環境変数
    • $DPATH 環境変数
    • システム全体のsettings.json:"dubHome" プロパティ(userSettingsのみ)
    • 最も具体的なsettings.json:"dubHome" プロパティ(localRepositoryのみ)

  6. DUBコマンドの終了コードがより一貫性のあるものになった。

    いくつかのDUBコマンドは、終了コード1の代わりに終了コード2を返すように調整された。終了コード1は常に使用法のエラーに使用され、終了コード2はより一般的なエラーの発生やパッケージのロードに失敗した場合に使用される。

    以下のコマンドが影響を受ける:

    • dub clean
    • dub add
    • dub search
    • dub convert
    • 'install'と'uninstall'コマンドが削除された。

      これらのコマンドは、それぞれfetchremove 、 のエイリアスであり、使用すると警告が表示された。 これらのコマンドはもはやヘルプにコマンドとして表示されず、dubはこれらを認識しない。

    • copyFiles が読み取り専用ファイルのコピーに使われた場合、そのコピーを書き込み可能にした。

      以前は、Dubを事前に実行したためにターゲット・ファイルがすでに存在していた場合、copyFiles 。 エラーを発生させていた。この動作の影響を受けていた場合は、以下の方法でファイルを削除する必要がある、 このようなエラーをなくすには、一度手作業でファイルを削除する必要がある。

      バージョン管理システムでは、マージ不可能な形式のファイルの同時編集を防ぐために、作業コピーのバイナリファイルを読み取り専用にするのが一般的である。 にするのが一般的である。

    • オーバーライド・システムは非推奨である。

      Dubには「オーバーライド」システムがあった。 を特定のパッケージでオーバーライドすることができる。 このオーバーライドシステムは、純粋にバージョンベースのアプローチを念頭に開発された、 しかし、開始以来、依存関係を指定する方法が追加されてきた、 オーバーライドアプローチは冗長であり、他のアプローチよりも柔軟性に欠ける。 このリリースから、dubはオーバーライドファイルが見つかると警告を出すようになった、 またはdub add-override /dub remove-override コマンドを使用すると警告が表示される。

    • dub run "のショートカット構文がサブパッケージでも使えるようになった。

      dub :subpackage"としてdubを起動すると、"dub run :subpackage"と同じ意味になる、 "dub"が"dub run"と同じである。

    • すべてのサブパッケージを一度にアップグレードする

      新しい"-s"スイッチにより、ベースパッケージと一緒にすべてのサブパッケージを "dub upgrade"することができる。 dub upgradeができるようになった。これは、完全に再現可能な ビルドとテストのためのより良いワークフローを提供することを目的としている。


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

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

  1. Bugzilla 20809: return文が破壊されたテンポラリのメモリにアクセスすることがある。
  2. Bugzilla 21197: dmd 2.093.0でDIP1000のライフタイム推論が正しくない。
  3. Bugzilla 23019: -of が既存のディレクトリを指している場合にファイル名が見つからない。
  4. Bugzilla 23076: float を short に変換する -inline -O で SIMD assert に失敗する。
  5. Bugzilla 23247: Deprecation: 書式指定 "%La" の引数 0.0L は double でなければならない。
  6. Bugzilla 23271: goto は変数の宣言をスキップするbugred.A.test.__appendtmp4
  7. Bugzilla 23291: 共有クラスの配列のメンバは比較できない。
  8. Bugzilla 23337: 配列構築のためのポストブリット/コピー・コンテナ(_d_arrayctor lowering)が誤ってエライドされている。
  9. Bugzilla 23386: テンプレート内の列挙型UDAのセグメンテーションエラー
  10. Bugzilla 23431: [REG 2.101.0][ICE] Dsymbol::toParent() (this=0x0) でのセグメンテーション fault at dmd/dsymbol.d:561
  11. Bugzilla 23433: [REG 2.081][ICE] dmd.blockexit.checkThrowのSegmentation fault at src/dmd/blockexit.d:557
  12. Bugzilla 23439: [REG 2.098] エラー:CTFE internal error: リテラル 'assert(false, "Accessed expression of type noreturn")'.

DMDコンパイラのバグ修正

  1. Bugzilla 2: 新しいdmdコマンドライン引数をフックアップする
  2. Bugzilla 9161: 構造体に @disabled ~this() がある場合、linux でリンカーエラーが発生する;
  3. Bugzilla 13123: nothrow関数の契約のスローを禁止する。
  4. Bugzilla 13732: 通常のテンプレートは "template this"を使うことができ、任意の型を渡すことができる。
  5. Bugzilla 14694: 関数の中にネストされた関数は、生成された.diファイルにボディが必要である。
  6. Bugzilla 15525: SEGVはエラーがある非ルートのdeclに対して意味解析を実行する。
  7. Bugzilla 16575: [ICE] D固有の型を持つextern(C++)関数
  8. Bugzilla 17764: [スコープ][DIP1000] コンポジション変換でエスケープチェッカーに負ける
  9. Bugzilla 18973: const toHashの@disableが未解決シンボルエラーを引き起こす
  10. Bugzilla 19178: 構造体の2次元静的配列の静的初期化で文字化けが発生したり、コンパイルできないことがある。
  11. Bugzilla 19285: GCの誤検出が推測される
  12. Bugzilla 20365: 構造体の静的配列ではコピーコンストラクタが呼び出されないが、ポストブリットは動作する。
  13. Bugzilla 20823: [DIP 1000] 安全でないコードがdip1000で失敗する
  14. Bugzilla 21314: extern(c++)静的クラス変数でのICE
  15. Bugzilla 21416: C++とのインターフェイスを持つBetterCモードのプログラムがリンクに失敗する。
  16. Bugzilla 21432: [CTFE] 関数スコープで列挙型配列を宣言できない。
  17. Bugzilla 21477: BetterCのTypeInfoエラーは暗号化されている
  18. Bugzilla 21676: [ICE][SIMD] SIMD + 最適化 + インライン化でDMDがクラッシュする
  19. Bugzilla 21956: ICE][SIMD]SIMD+最適化+インライン化でDMDがクラッシュする。
  20. Bugzilla 22108: DIP1000パラメータがスコープではなくリターンスコープと誤って解釈される
  21. Bugzilla 22134: 関数から破棄されたvoid値を返すことは非推奨である。
  22. Bugzilla 22351: extern(C++)関数はDではcontravariantであるが、C++ではcontravariantではない。
  23. Bugzilla 22390: ボトム型の空の配列を反復処理するとコンパイラがクラッシュする。
  24. Bugzilla 22429: importC: 指定子リストはまだサポートされていない。
  25. Bugzilla 22610: ImportC: struct __tag21のイニシャライザが3つ余った。
  26. Bugzilla 22626: synchronizedメンバ関数を-nosharedaccessで使用できない。
  27. Bugzilla 22652: importC: ネストされた構造体のブレークレスイニシャライザーが拒否される。
  28. Bugzilla 22664: disassemblerがinvlpg ECXのrdtscpを間違える。
  29. Bugzilla 22674: ImportC: 異なる翻訳単位で宣言された互換性のある型は、Dでは同等に扱われない。
  30. Bugzilla 22680: デストラクタの@safeホール
  31. Bugzilla 22706: autorefパラメータを持つ関数テンプレートの明示的なインスタンス化で不正なエラーが発生する。
  32. Bugzilla 22724: ImportC: VC拡張__pragma(pack)が実装されていない。
  33. Bugzilla 22784: pragma(printf)はネストされた関数に適用される。
  34. Bugzilla 22865: traits(compiles)は属性の推論に影響する。
  35. Bugzilla 22875: importC: const typedefのポインタをconstでない型に代入することはできない。
  36. Bugzilla 22925: importC: 多次元配列はstaticではないため、staticイニシャライザを持つことができない。
  37. Bugzilla 22952: コンパイラーは -mv map を使って package.d モジュールを見つけることができない。
  38. Bugzilla 22973: importC: sizeofによる配列とポインタのアクセスで、配列の要素型が不完全になる。
  39. Bugzilla 23006: importC: struct 内の多次元配列の静的イニシャライザーで dmd がセグメンテーションエラーになる。
  40. Bugzilla 23007: importC: 配列イニシャライザーの余分な中括弧でdmdのセグメンテーションフォールトが発生する。
  41. Bugzilla 23009: [CODEGEN][SIMD] SIMD + 最適化 + インライン化 + double
  42. Bugzilla 23010: 初期化しない型として使用されるエイリアスクが混在している。
  43. Bugzilla 23012: importC: シンボル名を設定するasmラベルが前方宣言から適用されない
  44. Bugzilla 23018: importC: 括弧で括られた式でpostfix演算子を使用したsizeofの構文エラー
  45. Bugzilla 23022: [dip1000] typeafe可変長パラメータはreturnを推論すべきではない。
  46. Bugzilla 23027: importC: 構造体の配列は static ではないので static イニシャライザを持つことはできない。
  47. Bugzilla 23030: ImportC:最初にconstとして使用した後にtypedef structを使用するとエラーが発生する。
  48. Bugzilla 23037: importC: 型修飾子だけの型は機能しない。
  49. Bugzilla 23038: importC: 構造体内のsizeofがスコープ内に構造体メンバを持つ。
  50. Bugzilla 23039: importC: 配列の長さを指定した宣言が、それ自身をスコープに含む。
  51. Bugzilla 23042: -BetterCでもRTInfoは含まれる。
  52. Bugzilla 23044: importC: 関数呼び出しのカンマ式が宣言として解析される。
  53. Bugzilla 23045: importC:キャストされた関数型にextern(C)がない。
  54. Bugzilla 23047: [ICE][SIMD] ベクトル型をSROAしない。
  55. Bugzilla 23050: vasm と 0xBE および 0xBF オペコードを使用したコードの逆アセンブルが正しくない。
  56. Bugzilla 23054: ImportC: ポインタに代入された複合リテラル構造体の保存期間が正しくない
  57. Bugzilla 23056: importC: dmd が CTFE 関数の return 文の欠落をアサートした。
  58. Bugzilla 23057: importC: 不正な構文によるdmdのセグメンテーションエラー
  59. Bugzilla 23063: return 値を返さないことも可能である。
  60. Bugzilla 23068: [BetterC] BetterCは-checkaction=haltを尊重しない。
  61. Bugzilla 23073: [dip1000] pureからのスコープ推論は自己割り当てを考慮しない
  62. Bugzilla 23088: expression has no effect" のスプリアスケース
  63. Bugzilla 23105: __trait(getMember) と では、同じコードでも文字列の振る舞いが異なる。mixin()
  64. Bugzilla 23112: コードは@nogcをパスし、とにかくアロケートする。
  65. Bugzilla 23123: -vasmがcmpxchg16bに対して間違った結果を出す。
  66. Bugzilla 23135: C++メンバ関数の共分散ルールが不一致である。
  67. Bugzilla 23138: 継承されたクラスのメンバ関数のオーバーライドが"downcast"属性を無視する。
  68. Bugzilla 23159: [BetterC]スコープ(失敗) BetterCでの使用は混乱を招くエラーを与える
  69. Bugzilla 23167: 内部タプルの束縛違反の診断が不正確である。
  70. Bugzilla 23168: [DIP1000] インダイレクトのない構造体に対してリターンスコープが誤って書き換えられる
  71. Bugzilla 23169: [DIP1000] マングリングでreturnスコープとreturnスコープが区別されない
  72. Bugzilla 23173: のコンパイラが生成した文字列に対する "Error: signed integer overflow" のエラー。long.min
  73. Bugzilla 23174: 構造体リテラルに続くドット式の一部でタプルのエイリアスを作成できない
  74. Bugzilla 23176: 一部のSSE2命令でvasmが即値をミスする
  75. Bugzilla 23178: __traits 、式として評価される。
  76. Bugzilla 23192: メンバ関数内で static foreach を使用して集約フィールドを反復できない。
  77. Bugzilla 23205: 関数内でミックスインテンプレートを宣言できない。
  78. Bugzilla 23206: ImportC: __declspec(noreturn) がコンパイルされない。
  79. Bugzilla 23207: druntime/src/core/stdc/errno.cのコンパイルでdmdがハングアップする
  80. Bugzilla 23213: ImportC - 可変長配列がコンパイルされない。
  81. Bugzilla 23214: ImportC: unsigned型のtypedefがコンパイルされない。
  82. Bugzilla 23217: ImportC: 構造体の配列のための余分なイニシャライザーのエラー
  83. Bugzilla 23222: 親モジュールへのエイリアスで vcg-ast のセグメンテーションエラーが発生する。
  84. Bugzilla 23223: モジュールへのエイリアスがモジュールの内容をastダンプに出力する
  85. Bugzilla 23224: ImportC: メモリモデルスイッチがCプリプロセッサに渡されない。
  86. Bugzilla 23225: OpenBSD: cpp 呼び出しでファイルが見つからない。
  87. Bugzilla 23230: char[7]型の式定義が暗黙的にcharに変換できない。
  88. Bugzilla 23235: [DIP1000] 型安全な可変長パラメータは自動的にスコープになるべきである。
  89. Bugzilla 23236: コンストラクタで "@mustUse" メンバを初期化できない。
  90. Bugzilla 23241: __traits getMemberはエイリアスにヒットするとコンパイルが中断される。
  91. Bugzilla 23249: Deprecation: 書式指定 "%m" の引数 &p は char** ではなく char* でなければならない。
  92. Bugzilla 23251: Deprecation: 書式指定子 "%[a-z]" は無効である。
  93. Bugzilla 23252: Deprecation: 書式指定子 "%[]]" は無効である。
  94. Bugzilla 23254: Deprecation: 書式指定子 "%S" と "%C" は無効である。
  95. Bugzilla 23256: Windows用にコンパイルする場合、手動で-mscrtlibを指定する必要がある。
  96. Bugzilla 23262: タイプセーフの可変長引数関数は戻り値を推論できない。
  97. Bugzilla 23293: ImportC: _Boolビット・フィールドのレイアウトがgccと一致しない。
  98. Bugzilla 23308: パラメータが三項式の結果の場合、varargs関数のオーバーロードを解決できない。
  99. Bugzilla 23327: [ICE] SEGV in AssocArray!(Identifier, Dsymbol).AssocArray.opIndex(const(Identifier)) at src/dmd/root/aav.d:313
  100. Bugzilla 23331: noreturnからの暗黙のキャストは、様々な方法でコンパイラをクラッシュさせる
  101. Bugzilla 23338: 構造体フィールドのためのブレイスレスサブ配列イナーライザーが失敗する
  102. Bugzilla 23340: std.path::expandTildeがgetpwam_r()の失敗時に誤ってonOutOfMemoryを発生させてしまう。
  103. Bugzilla 23342: ImportC: 配列の複合リテラルがGCを使用する。
  104. Bugzilla 23343: ImportC: シンボル名を設定するためにasmラベルで宣言された関数が余計なアンダースコアを前置してしまう。
  105. Bugzilla 23345: ImportC: 指定された初期化子が誤った値に初期化される。
  106. Bugzilla 23346: ImportC: プラグマパックがポップされない。
  107. Bugzilla 23347: ImportC: プラグマパックによってシンボル名を設定するasmラベルが無視される。
  108. Bugzilla 23348: ImportC:プラグマパックがポップされない。
  109. Bugzilla 23351: Mayonixのdmd-segfaultingプログラムの数々
  110. Bugzilla 23355: 無効なテンプレートパラメータがエラー位置を失う場合がある
  111. Bugzilla 23357: ImportC:定義と互換性のある型をDから使用すると再宣言エラーになる。
  112. Bugzilla 23368: コンパイル時にNULL例外をスローするとコンパイラがクラッシュする。
  113. Bugzilla 23379: noreturn型を持つ式をキャストすると氷ができる。
  114. Bugzilla 23380: [dip1000]クラスパラメータはref qua lifetimeとして扱うべきではない
  115. Bugzilla 23406: [セグ障害] 列挙型はエイリアスを使った代入でコンパイル時にセグ障害を引き起こす可能性がある。
  116. Bugzilla 23461: dmd: src/dmd/backend/cod1.d:2037: アサーションfalseに失敗した。

DMDコンパイラの機能強化

  1. Bugzilla 7372: エラーは問題を診断するには情報が少なすぎる(error: undefined identifier)。
  2. Bugzilla 14690: pragma(inline,true)関数の本体は.diファイルに記述しなければならない。
  3. Bugzilla 16701: package.d "ソース・ファイル・モジュールがすべて小文字に強制されるという制限を削除した。
  4. Bugzilla 17575: 名前付きミックスインテンプレートのエラー表示
  5. Bugzilla 21243: ラムダがauto refを返すことを許可する
  6. Bugzilla 21673: [SIMD][Win64]_mm_move_ssのcodegenが正しくない。
  7. Bugzilla 22911: dtoh: インクルードディレクティブを生成されたヘッダ用にソートする
  8. Bugzilla 23079: [dip1000]ref の戻り値のアドレスを取るときにもっと甘くする
  9. Bugzilla 23141: releaseスイッチの記述を改善した
  10. Bugzilla 23142: スコープをunittestに適用しないようにした。
  11. Bugzilla 23143: ImportC: 前方列挙型宣言をサポートする必要がある。
  12. Bugzilla 23165: ラムダ関数がインライン化されていない。
  13. Bugzilla 23191: [dip1000]スコープパラメーターは"@system"コードで返すことができる。
  14. Bugzilla 23216: 双方向範囲がないforeach_reverseのエラーメッセージの改善
  15. Bugzilla 23284: 浮動小数点が表現できないエラーメッセージを強化
  16. Bugzilla 23295: [dip1000] スコープ推論が失敗した理由を説明する
  17. Bugzilla 23306: new()をdisableにするべきではなかった。scope A = new A
  18. Bugzilla 23369: 重複インポートのエラーメッセージが紛らわしい。
  19. Bugzilla 23376: 複数コードポイントのHTMLエンティティを許可する
  20. Bugzilla 23384: 非表示時にマッチするベースクラスのメソッドを呼び出すことを提案する

phobosリグレッションの修正

  1. Bugzilla 23245: [REG 2.099] std.format が静的配列要素の非 const toString メソッドを無視する
  2. Bugzilla 23246: [REG 2.099] std.formatが連想配列の非定数toStringメソッドを無視する。
  3. Bugzilla 23268: clamp が"short" を受け付けなくなった。
  4. Bugzilla 23400: [REG 2.099] 基本型が非整数のopEqualsを持つ列挙型をフォーマットできない

phobosのバグ修正

  1. Bugzilla 14543: std.algorithm.searching.untilが範囲センチネルをうまく扱えない。
  2. Bugzilla 16034: マップは参照のみで可能であるべきである
  3. Bugzilla 16232: std.experimental.logger.core.sharedLogはスレッドセーフではない
  4. Bugzilla 18631: std.random.choiceはconst配列で動作しない
  5. Bugzilla 22637: std.convto!doubleparse!double はアンダーフロー/オーバーフローでスローしない。
  6. Bugzilla 23182: CTFEでSumTypeにopAssignで構造体を代入できない。
  7. Bugzilla 23196: ファイル・コンストラクタが preallocate に失敗する oom エラー。
  8. Bugzilla 23215: std.file.removeをNULL文字列で呼び出すとstrlenでsegfaultsが発生する。
  9. Bugzilla 23250: Unicode の地域インジケータが正しくペアリングされない
  10. Bugzilla 23270: std.random.diceのドキュメントが乏しい
  11. Bugzilla 23288: zlib:バッファオーバーフローの可能性を修正
  12. Bugzilla 23324: std.format ドキュメントのソースリンクが正しくない。
  13. Bugzilla 23350: std.concurrency の非決定性テストの失敗
  14. Bugzilla 23362: パーミュテーションは前方範囲であるべきである

phobosの機能強化

  1. Bugzilla 13893: rawReadは空でないバッファを取らなければならない。
  2. Bugzilla 18735: 全てのバージョンのfindとcanfindは述語の使い方を識別する必要がある。
  3. Bugzilla 21000: -preview=nosharedaccessはstdin,stdout,stderrの使用を禁止する。
  4. Bugzilla 23101: [std.sumtype]canMatchはrefを考慮しない。
  5. Bugzilla 23298: std.stringのwrapは初期値をラップする。
  6. Bugzilla 23333: DListの範囲は@nogcになる。
  7. Bugzilla 23370: std.base64はより多くの@nogc関数を持つことができる。

Druntimeのバグ修正

  1. Bugzilla 15939: GC.collectがマルチスレッド環境でデッドロックを引き起こす
  2. Bugzilla 23060: MacOS: core.sys.posix.sys.socketにいくつかの定義が欠けていた。
  3. Bugzilla 23065: importC: __builtin_expect は c_long を使用すべきである。
  4. Bugzilla 23067: importC: offsetofマクロはsize_tが定義されていると仮定している。
  5. Bugzilla 23129: object.destroyはDクラスのinitialize=falseを考慮しない
  6. Bugzilla 23228: OpenBSD:SIGRTMIN や SIGRTMAX がない。
  7. Bugzilla 23302: std.algorithm.comparison.predSwitchがエラーメッセージをファイル名とするSwitchErrorを生成する。

Druntime の機能強化

  1. Bugzilla 23456: OpenBSD:waitid サポートの追加

dlang.org のバグ修正

  1. Bugzilla 14542: 仕様書PDFの目次が壊れている
  2. Bugzilla 15379: 関数パラメーターの"final"属性が壊れた。
  3. Bugzilla 15476: DDOC_UNDEFINED_MACRO は文書化されていない
  4. Bugzilla 17324: 浮動小数点1/(1/x) > 0 (x > 0 の場合) は一般に真ではない
  5. Bugzilla 17514: 「正」->「負でない
  6. Bugzilla 17623: 空文字列に対するアサーションの予期せぬ失敗
  7. Bugzilla 18496: 補数式が実際にintを促進するようになった。
  8. Bugzilla 18855: 匿名共用体の動作は文書化されていない。
  9. Bugzilla 18887: inoutの記述が不適切である
  10. Bugzilla 19869: FunctionLiteral は不正なフォームを許す
  11. Bugzilla 21188: 匿名構造体 - 記述されていない。
  12. Bugzilla 21279: 整数型間のキャスト式が定義されていない。
  13. Bugzilla 21781: [Oh No! Page Not Found] "Better C" からコア・ライブラリへのリンクがない。
  14. Bugzilla 22237: AA.updateが未定義である
  15. Bugzilla 22835: is式の文書化されていない型特殊化
  16. Bugzilla 23062: 関数/委譲推論の例がコンパイルされない。
  17. Bugzilla 23194: D社のリストに弊社を追加する
  18. Bugzilla 23237: dmd 2.100.1ダウンロードのリンクエラー。
  19. Bugzilla 23276: DOC: dmd-windows.htmlに">"の代わりに">"がある。
  20. Bugzilla 23296: 値域伝搬が文書化されていない。
  21. Bugzilla 23314: 言語仕様では構造体フィールドの不変量がチェックされると誤って記述されている。
  22. Bugzilla 23325: 動的配列の静的配列への代入が文書化されていない
  23. Bugzilla 23358: スペース挿入のためリンクが使えない

dlang.orgの機能強化

  1. Bugzilla 15286: is(typeof(シンボル))
  2. Bugzilla 19036: .tupleof順序保証
  3. Bugzilla 22141: プロパティの.capacityが配列プロパティのセクションにない。
  4. Bugzilla 23186: wchar/dcharはエンディアンが定義されていない
  5. Bugzilla 23359: InOutの名前をParameterStorageClassに変更する。

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

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

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