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

変更ログ 2.082.0

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

Download D 2.082.0
2018年09月01日リリース

2.082.0には28の大きな変更と76のBugzillaの問題の修正が含まれている。 2.082.0を可能にしてくれた50人の貢献者に心から感謝する。

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

コンパイラの変更

  1. 符号なしバイト型の配列と構造体の比較のサポートが -betterC に追加された。

    このリリース以前は、以下のコードは-betterCでビルドされなかったが、このリリースではビルドされる。

    // (本リリース以前) エラー: TypeInfoは-betterCとともに使用できない
    struct Sint
    {
        int x;
        this(int v) { x = v;}
    }
    
    extern(C) void main()
    {
        Sint[6] a1 = [Sint(1), Sint(2), Sint(3), Sint(1), Sint(2), Sint(3)];
        assert(a1[0..3] == a1[3..$]);
    }
    
    // (本リリース以前) リンカーエラー: `core.internal.string.dstrcmp`への未定義の参照
    extern(C) void main()
    {
        auto s = "abc";
        switch(s)
        {
            case "abc":
                break;
            default:
                break;
        }
    }
    
    // (本リリース以前) リンカーエラー: `core.internal.string.dstrcmp`への未定義の参照
    extern(C) void main()
    {
        char[6] a = [1,2,3,1,2,3];
        assert(a[0..3] >= a[3..$]);  // バイトサイズの型(`char`や`ubyte`など...)で失敗した
    }
    
  2. D_ModuleInfoD_ExceptionsD_TypeInfo のバージョン識別子を追加した。

    D_ModuleInfodruntimeやその他のライブラリ実装の精度を向上させるために、D_ExceptionsD_TypeInfo のバージョン識別子が追加された。 druntimeや他のライブラリ実装において、より精度を高めるために追加された。

    定義済みバージョンを参照のこと。

  3. 条件式に続く代入式を非推奨とする。

    条件式が代入式の左オペランドである場合、条件式は代入式の結果への代入として解析される。 式の左オペランドである場合、それらは条件式の結果に対する代入として解析される。 への代入として解析される。これは現在では非推奨となっている。既存の を含めずに条件式に括弧を追加する。 代入を含めない:

    bool test;
    int a, b, c;
    ...
    test ? a = b : c = 2;   // 非推奨
    (test ? a = b : c) = 2; // 同等
    

    なぜなら、最初の文は次のコードと誤解されやすいからである。 と誤解されやすいからである:

    test ? a = b : (c = 2);
    
  4. 安全でないコードをデバッグ・ブロックで使用できるようになった

    デバッグ・コードを書くとき、人は型安全性には興味がない。 デバッグ体験だ。 型チェッカーはすでに、pure@nogcdebug 文の中でエスケープすることができる。 今回のリリースでは、debug ステートメントから@system コードを呼び出すこともできる:

    void main()
    {
        int[] arr = [1, 2];
        debug unsafeCode(arr);
    }
    
    @system void unsafeCode(T)(T[] arr)
    {
        import core.stdc.stdio;
        printf("arr.ptr: %p", arr.ptr);
    }
    
  5. の使用を廃止する。opDot

    opDot は のD1アナログであった。 しかし、 は のすべてのユースケースをカバーするが、安全性は確保されている。 alias this alias this opDot

    struct S
    {
        int a, b;
    }
    struct T
    {
        S s;
    
        S* opDot()
        {
            return &s;
        }
    }
    
    void main()
    {
        T t;
        t.a = 4;
        assert(t.a == 4);
        t.b = 5;
    }
    

    alias this :

    struct S
    {
        int a, b;
    }
    struct T
    {
        S s;
    
        alias s this;
    }
    
    void main() @safe
    {
        T t;
        t.a = 4;
        assert(t.a == 4);
        t.b = 5;
    }
    
  6. Dが列挙型メンバーの非推奨属性、@disable属性、ユーザー定義属性をサポートするようになった。

    例:

    template AliasSeq(TList...)
    {
        alias AliasSeq = TList;
    }
    
    enum MyEnum
    {
        @("uda0") value0,
        @disable value1,
        deprecated value2  // 非推奨: 列挙型のメンバーの`main.MyEnum.value2`は非推奨
    }
    
    static assert(__traits(getAttributes, MyEnum.value0) == AliasSeq!("uda0"));
    
    void main()
    {
        auto v1 = MyEnum.value1;  // エラー: 列挙型のメンバーの`main.MyEnum.value1`は`@disable`でアノテーションされているため使用できない
    }
    
  7. 非推奨のC言語のスタイルによる配列宣言は、コンパイル・エラーとなる。

    C言語のスタイルによる配列宣言の非推奨期間は終了した。 このリリースから リリースから、C言語のスタイルで配列を宣言するとエラーになる。

    int a[2];  // エラー: C言語のスタイルの構文の代わりに、D言語のスタイルの`int a[2]`を使用
    int[2] b;  // OK
    
  8. Windows上でのextern(C++)テンプレートのマングリングが、ポインタでないconstテンプレート・パラメータを正しくマングリングするようになった。

    以前はconstを無視し、$$Cエスケープ接頭辞が抜けていた。

    extern(C++) struct foo(T) {}
    
    extern(C++) void test(foo!(const(char)) a) {}
    // 新しい
    static assert(test.mangleof == "?test@@YAXU?$foo@$$CBD@@@Z");
    // 古い
    //static assert(test.mangleof == "?test@@YAXU?$foo@D@@@Z");
    
  9. .offsetof Objective-Cクラスのフィールドの" が無効になった。.tupleof

    Objective-Cの壊れやすい基底クラス問題 [1] を解決するために、フィールドは静的オフセットではなく動的オフセットを持つようになった。 フィールドには静的オフセットではなく動的オフセットがある。コンパイラは静的に既知のオフセットを出力する。 コンパイラーは、静的に既知のオフセットを出力する。 アプリケーションがロードされるときに、必要に応じてダイナミック・ローダーが更新できる。このような動作のため、コンパイル時にフィールドのオフセットを取得することはできない。 というのも、このオフセットは実行時に同じであるとは限らないからだ。 というのも、このオフセットは実際には実行時に同じにならないかもしれないからである。

    実行時に正しいフィールドのオフセットや値を得るには、代わりにObjective-Cのランタイムからの関数[2]を使うことができる。 を使用することができる [2]。

    [1]フラジャイル・バイナリー・インターフェース問題 [2]Objective-C Runtime

  10. 64ビットOS X:size_t の相互運用性を回復するため、long の C++ マングリングを 2.079 より前に戻す。

    Dsize_t と C++size_t の直接相互接続は、32 ビット OS X を除くすべてのプラットフォームで、2.079 以前には機能していた。 Dlong を64ビットOS X上でC++long long としてマングリングすることで、2.079から、32ビットOS Xを除くすべてのプラットフォームで、D とC++ の直接相互接続が機能するようになった。 2.079から64ビットOS X上でDsize_t を C++ としてマ ンガリングすることで、 の相互接続がより関連性の高いプ ラットフォーム上で壊れた。 新しい/修正されたエイリアス、例えば core.stdc.stdint.int64_t, core.stdc.stdint.uint64_tcore.stdc.config.cpp_size_tなどの新しいエイリアスや修正されたエイリアスによって 整数に関してポータブルなC++相互運用のための適切なツールがある。 64ビットのOS Xでは、以前のC++マングリング(C++long )に戻せば、D/C++の混在したコード・ベースを手作業で適応させる必要がなくなるかもしれない。 DMDバージョン2.079-2.081をスキップすることで、D/C++混在のコード・ベースを手作業で修正する必要性から救うことができる。

  11. 関数パラメーターのUDAがサポートされた。

    関数パラメータ上のユーザー定義属性は、既存のUDAと同様の動作をする:

    void example(@(22) string param)
    {
        @(11) string var;
        static assert([__traits(getAttributes, var)] == [11]);
        static assert([__traits(getAttributes, param)] == [22]);
    }
    

ランタイムの変更

  1. 例外のトラッピングを "@disable" で無効にできるようになった。--DRT-trapExceptions=0

    これまでは、グローバル変数「」を「」に設定することで、例外のトラッピングを無効にすることができた。 グローバル変数rt_trapExceptionsfalse に設定することでのみ可能だった。 これで、例えば、捕捉されなかった例外が発生したときにgdb を即座に開くことができる:

    > gdb -ex run --args  --DRT-trapExceptions=0
    [Thread debugging using libthread_db enabled]
    Using host libthread_db library "/usr/lib/libthread_db.so.1".
    uncaught exception
    object.Exception@src/rt_trap_exceptions_drt.d(4): foo
    ––––––––––
    src/rt_trap_exceptions_drt.d:4 void rt_trap_exceptions_drt.test() [0x55591026]
    src/rt_trap_exceptions_drt.d:9 _Dmain [0x55591058]
    
    Program received signal SIGABRT, Aborted.
    0x00007ffff6e7b86b in raise () from /usr/lib/libc.so.6
    (gdb) bt full
    #0  0x00007ffff6e7b86b in raise () from /usr/lib/libc.so.6
    No symbol table info available.
    #1  0x00007ffff6e6640e in abort () from /usr/lib/libc.so.6
    No symbol table info available.
    #2  0x00005555555918cc in _d_throwdwarf (o=0x7ffff7ea4000) at src/rt/dwarfeh.d:233
            eh = 0x7ffff7fa4740
            refcount = 0
            r = 5
    #3  0x0000555555591027 in rt_trap_exceptions_drt.test() () at ../../src/object.d:2695
            innerLocal = 20
    #4  0x0000555555591059 in D main (args=...) at src/rt_trap_exceptions_drt.d:9
            myLocal = "bar"
    

    今週のD を詳しく解説している。rt_trapExceptions

  2. 連想配列のための追加関数

    require "関数は、キーが存在しない場合に新しい値を作成する手段を提供する。 が存在しない場合に新しい値を構築する手段を提供する。

    class C{}
    C[string] aa;
    
    auto a = aa.require("a", new C);    // "a"を検索し、存在しなければ構築する
    

    update "関数"は、すでに値が存在するのか、それとも構築する必要があるのかによって、異なる処理を実行することができる。 この関数は、値がすでに存在するのか、それとも構築する必要があるのかによって、実行される操作が異なる。

    class C{}
    C[string] aa;
    
    C older;
    C newer;
    aa.update("a",
    {
        newer = new C;
        return newer;
    },
    (ref C c)
    {
        older = c;
        newer = new C;
        return newer;
    });
    

    この関数は、複数のキー検索を実行する必要性を回避する。詳細は は仕様書を参照されたい。

  3. TypeInfo.getHash ハッシュ計算に 関数を使用するようになった。core.internal.hash.hashOf

    これでtypeid(typeof(var)).getHash(&var) は常にhashOf(val) と等しくなるはずだ。 hashOfは、文字列ハッシュを含むビット単位のハッシュにMurmurHash3アルゴリズムを使用している。 古い実装では、文字列ハッシュに多項式ハッシュを使っていた。 連想配列内の文字列を辞書順に並べる。しかしAAでは したがって、AAに依存するテストは変更する必要がある。

  4. core.sys.posix.utsname.updateの名前をversion_に変更した。

    uname が返す構造体(utsname )は、Cのフィールドを持っている。version Cのフィールドを持つ。version はDのキーワードであるため、構造体のD定義はこれにマッチしない。 というのも、update はDにおけるキーワードだからである。 と呼ばれている。これは明白な選択ではない。 というのも、version_ と呼ぶのが、Dにおける に最も近いからである。 version したがって、update は、 に改名された。 version_に改名され、updateversion_ のエイリアスである。 のエイリアスである。

ライブラリの変更

  1. (a)tanおよびexp関数ファミリーの単精度および倍精度の実装

    float およびdouble オーバーロード。 std.math.atan, std.math.atan2, std.math.tan, std.math.exp, std.math.expm1そして std.math.exp2 以前はreal の実装(インライン・アセンブラ)に転送されていた。 現在は、対応する精度で適切な「ソフトウェア」実装を得た。

    この結果、DMD(特に exp() およびexp2() )、LDCの全体的な高速化係数は3以上である。 doublefloat の両方である。

    これはまた、特に単精度において、精度の低い結果を意味する、 従って、もしあなたのコードが80ビット中間精度でより正確な結果に依存していたのであれば、今すぐ明示的に引数をキャストしなければならない。 このため、80ビットの中間精度によってより正確な結果を得ようとした場合、引数を明示的にキャストしなければならなくなる。

  2. std.algorithm.iteration.each が早期停止できるようになった。

    std.algorithm.iteration.eachは早期終了が可能になった。 を返す関数からNo.each std.typecons.Flagが呼び出された関数から返された場合、反復は早期に中止される。 からeach が返されると、反復は早期に中止される。 同様に、Yes.each を返すと、反復が継続される。 例:

    auto arr = [10, 20, 30];
    arr.each!((n) { arr ~= n; return (n == 20) ? No.each : Yes.each; }); // 2回目の繰り返しで中止
    assert(arr == [10, 20, 30, 10, 20]);
    
  3. std.algorithm.iteration.joiner を双方向レンジに使用できるようになった。

    std.algorithm.iteration.joinerを双方向範囲にリクエストできるようになった。

    import std.algorithm.iteration : joiner;
    import std.range : retro;
    [[1, 2], [3, 4]].joiner.retro; // [4, 3, 2, 1]
    

    より複雑な例として、フォーマット区切り記号を完全に遅延して挿入する例を挙げる:

    import std.algorithm.comparison : equal;
    import std.range : chain, cycle, iota, only, retro, take, zip;
    import std.format : format;
    
    static immutable number = "12345678";
    static immutable delimiter = ",";
    auto formatted = number.retro
        .zip(3.iota.cycle.take(number.length))
        .map!(z => chain(z[0].only, z[1] == 2 ? delimiter : null))
        .joiner
        .retro; // "12,345,678"
    
  4. std.algorithm.searching.skipOver 可変長引数を扱えるようになった。

    std.algorithm.skipOverにマッチする場合、針の上に移動することができる。 針をスキップするための可変長引数を受け付けるようになった:

    auto s = "DLang.rocks";
    assert(!s.skipOver("dlang", "DLF", "DLang "));
    assert(s == "DLang.rocks");
    
    assert(s.skipOver("dlang", "DLANG", "DLF", "D", "DL", "DLanp"));
    assert(s == "ang.rocks");
    
  5. 配列/入力範囲から静的配列を構築するためのstaticArray を追加した。長さ指定のコンパイル時バリアントを含む。

    要素の型は、[1, 2].staticArrayint[2] を返すように暗黙的に指定することも、 が を返すように明示的に指定することもできる、 を返すように暗黙的に指定することもできるし、[1, 2].staticArray!floatfloat[2] を返すように明示的に指定することもできる。 a がコンパイル時に長さがわからない範囲である場合、要素の数をテンプレート引数として与えなければならない (例えば、myrange.staticArray!2 )。 元範囲の要素が暗黙のうちに要求された要素型に変換可能な場合、サイズと型を組み合わせることができる(例: )。 型に変換できる場合、サイズと型を組み合わせることができる(例:2.iota.staticArray!(long[2]) )。 範囲a がコンパイル時に既知である場合、それをテンプレート引数として指定することもできる。 テンプレート引数として指定することもできる。 (例:staticArray!(2.iota) またはstaticArray!(double, 2.iota) )。

    import std.range : iota;
    
    auto input = 3.iota;
    auto a = input.staticArray!2;
    static assert(is(typeof(a) == int[2]));
    assert(a == [0, 1]);
    auto b = input.staticArray!(long[4]);
    static assert(is(typeof(b) == long[4]));
    assert(b == [0, 1, 2, 0]);
    
  6. 非推奨のタイムゾーン取得関数は削除された。

    Microsoftがタイムゾーンの定義を頻繁に変更するためである。 IANAのTZデータベース名とマイクロソフトが標準ライブラリで使用している名前の変換を維持するために のいくつかの関数は削除された。 std.datetime.timezoneにある、ホストOSに依存しないタイムゾーンの取得に関連するいくつかの関数は、以前は非推奨だった。 ホストOSに依存しないタイムゾーンの取得に関連するTimeZone.getTimeZone, TimeZone.getInstalledTZNames tzDatabaseNameToWindowsTZName windowsTZNameToTZDatabaseName.これらの関数は現在完全に削除されている。

    代わりにTimeZone.getTimeZonestd.datetime.timezone.PosixTimeZone.getTimeZoneそして std.datetime.timezone.WindowsTimeZone.getTimeZoneを使うべきである。 を直接使うべきである。の代わりに、Timezone.getInstalledTimeZonesstd.datetime.timezone.PosixTimeZone.getInstalledTZNamesstd.datetime.timezone.WindowsTimeZone.getInstalledTZNamesを直接使うべきである。 を直接使うべきである。また、TZデータベースの名前とWindowsの名前を変換したいプログラムは の名前とWindowsの名前を変換したいプログラムは std.datetime.timezone.parseTZConversionsを現在の windowsZones.xmlファイルを使用することができる。 std.datetime.timezone.parseTZConversionsを参照のこと)。

インストーラの変更

  1. Windowsインストーラとバイナリがコード署名されるようになった。

    Windows上でリリースされるすべての実行ファイルは、以下の証明書によってコード署名されるようになった。

        Issuer: C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 Assured ID Code Signing CA
        Serial Number: 04:e7:49:06:78:3a:e6:5f:54:37:fd:55:45:66:5f:e5
        Validity
            Not Before: Aug  7 00:00:00 2018 GMT
            Not After : Aug 11 12:00:00 2021 GMT
        Subject: C = US, ST = Washington, L = Kirkland, O = D Language Foundation, CN = D Language Foundation
        SHA1 Fingerprint: BD:E0:0F:CA:EF:6A:FA:37:15:DB:D4:AA:1A:43:2E:78:27:54:E6:60
        SHA256 Fingerprint: AA:B0:6F:7B:A8:26:52:51:C4:24:44:1B:34:8E:30:68:F4:34:DB:35:38:6A:17:A7:45:C3:27:77:11:24:C4:E5
    

    ナイトリービルドとブランチ/機能プレビューには、今のところコード署名を付けない。

dubの変更

  1. $ARCH$PLATFORM などの変数がビルド設定でサポートされるようになった。

    以下のようなJSON行がサポートされた。

        "lflags-posix-x86": [ "-L$PACKAGE_DIR/lib/posix-x86" ],
        "lflags-posix-x86_64": [ "-L$PACKAGE_DIR/lib/posix-x86_64" ],
    

    に変えることができる。

        "lflags-posix": [ "-L$PACKAGE_DIR/lib/posix-$ARCH" ],
    

    $VAR${VAR} の両方の構文がサポートされている。 サポートされる変数は以下の通りである:

    名前
    $ARCH "x86"、"x86_64"
    $PLATFORM 「linux"、"windows"、...
    $PLATFORM_POSIX 「posix", "windows", ...
    $BUILD_TYPE 「debug"、"release"、...

  2. DUBは "syntax"ビルド型をサポートしている。

    このリリースでは、新しいビルドタイプ "syntax"が追加された。このビルド型はIDEがバイナリを生成せずにDコーディングの構文をチェックするのに便利である。

  3. 環境変数の展開が改良された

    ${PACKAGE_PATH}_suffix環境変数の展開が、${MY_VAR} の展開構文に対応した。

    さらに、$PACKAGE_PATH$ROOT_PACKAGE_PATH$DEP_PACKAGE_PATH は、きれいな連結をサポートするため、 または で終わることはなくなった。 を/ または\ で終わらせ、${PACKAGE_PATH}/subpath のようなきれいな連結をサポートしている。

    詳細は#1392を参照のこと。

  4. 依存関係の解決が再帰的アルゴリズムを使って再実装された

    新しいアルゴリズムは、依存関係グラフを下降しながら探索空間を最小化する。 グラフを下降しながら探索空間を最小化する。旧来のアプローチと比較して、実行時間が指数関数的に長くなるような 指数関数的な実行時間(「依存関係解決アルゴリズムに時間がかかりすぎる。 resolution algorithm is taking too long")となるような病的なケースに遭遇する可能性が非常に低くなった。

    さらに、満足できない依存関係の場合のエラーメッセージは、より正確である。 通常、失敗したパッケージの依存関係グラフの問題をデバッグするのが簡単になる。 の問題をデバッグすることが容易になる。

  5. DUBはSTDINで単一ファイルパッケージを受け付ける。

    DUBへの最初の引数としてdashを使用することで、STDIN上で単一ファイルパッケージを渡すことができる。 ダッシュ以降の引数はすべてアプリケーションの実行時引数として渡される。

    例:cat app.d | dub - --foo=bar

  6. 通常のアップグレードチェックが削除された

    以前は、dubはパッケージをビルドする前に、パッケージのアップグレードの可能性を定期的(1日1回)にチェックしていた。 このため、インターネット接続がダウンしていたり、 依存関係の解決に失敗したりした場合など、予期せぬビルドの失敗が発生し、 不必要な遅延を引き起こしていた。

    ビルドフラグ--nodeps は、欠落している依存関係の解決のみを抑制するようになった。

    新しい upgrade フラグ--dry-run が追加され、実際には何もアップグレードせずに、 アップグレード可能なパッケージを明示的にチェックするようになった。


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

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

  1. Bugzilla 18068: スタックトレースにファイル名と行番号が表示されない
  2. Bugzilla 19050: デバッグモードでコンパイルされたコンパイラーでDMDテスト・スイートを実行すると、無効な文字のために失敗する。
  3. Bugzilla 19058: dmd 2.081.0の個別コンパイルで"__traits(getUnitTests)"が動作しなくなる
  4. Bugzilla 19074: [REG 2.080] SIGSEGV in el_ptr (s=0x15) at dmd/backend/el.c:1760
  5. Bugzilla 19076: dmd 2.081が拡張インターフェースのgetVirtualFunctionsでクラッシュした。
  6. Bugzilla 19134: [C++] static const y = new Derived(); ->const(Derived)からimmutable(void*)**へのポインタキャストはコンパイル時にサポートされていない。
  7. Bugzilla 19140: [REG master] AssertError@dmd/ctfeexpr.d(229):アサーション失敗
  8. Bugzilla 19152: 2.081.1 getOverloads リグレッション コンパイラのバグ
  9. Bugzilla 19162: [REG: 2.079.0] パブリックインポートの名前の重複の解決

DMDコンパイラのバグ

  1. Bugzilla 9701: UDAを列挙型値にアタッチできない。
  2. Bugzilla 15373: 仮想関数を持つextern(C++)クラスでtypeidを使用するとセグメンテーションエラーが発生する。
  3. Bugzilla 17580: 仕様にもかかわらず、メソッドをsynchronizedとしてマークすることが許可されている。
  4. Bugzilla 18620: error cannot be interpreted at compile time でエラーが発生するコンテキストが見つからない
  5. Bugzilla 18985: 共有オブジェクトに対する += 演算のエラーメッセージがおかしい。
  6. Bugzilla 19018: レキサーが無効な整数リテラルを許可している。0x
  7. Bugzilla 19035: スコープ推論でのエスケープ、スコープ推論の改善
  8. Bugzilla 19043: Windowsのextern(C++)constテンプレートパラメーターのマングリングが正しくない。
  9. Bugzilla 19051: mingw リブの Set/GetWindowLongPtr 関数が未定義である。
  10. Bugzilla 19053: デバッグは"@safe"をエスケープすべきである。
  11. Bugzilla 19059: 無効な整数リテラル08と09が許される
  12. Bugzilla 19107: -deはコンパイルエラーを発生させるが、-dwは発生させない。
  13. Bugzilla 19112: 静的配列をキーとする連想配列 opIn は動的配列では失敗する。
  14. Bugzilla 19176: Dmdが__traits(getUnitTests)のためにクラッシュする。
  15. Bugzilla 19181: opDispatch引数のセマンティックエラーで "no property X"となる。
  16. Bugzilla 19187: __traits(compiles)がimportから設定された部分的に未定義のオーバーロードへのアクセスでセグメンテーションエラーになる
  17. Bugzilla 19193: テンプレート内の列挙型メンバの非推奨属性が無視される

DMDコンパイラの機能強化

  1. Bugzilla 17602: 非推奨の列挙型比較に対するメッセージを改善した。
  2. Bugzilla 18743: ConditionalExpressionとAssignExpressionは括弧を必要とする
  3. Bugzilla 18994: foreachループでコピー不可能な変数をrefなしで使用すると、行番号なしのエラーメッセージが表示される。
  4. Bugzilla 19022: CTorFlow: const/不変のフィールドの初期化が重複している行を表示する。
  5. Bugzilla 19081: ステートメントレベルでenumをUDAで宣言できない。
  6. Bugzilla 19108: 未知のプラグインがボディ内部で無視されない

phobosのバグ

  1. Bugzilla 12507: SysTime.init.toStringがセグメンテーションエラーにならないようにする
  2. Bugzilla 15732: std.function partialが関数/デリゲート参照で動作しない。
  3. Bugzilla 18682: std.typecons.NullableにopEqualsがあるがtoHashがない
  4. Bugzilla 18804: std.algorithm.mutation.copyは要素を入れるべきなのに、ソース範囲全体をターゲット範囲に入れる
  5. Bugzilla 18933: std.range.assumeSortedはSortedRange!(SortedRange!(...), pred)をネストすべきではない
  6. Bugzilla 18995: std.array.arrayは要素を解放しない
  7. Bugzilla 19003: .initで違反した制約を含む構造体ではformat!""が壊れる
  8. Bugzilla 19094: std.uni.normalizeにアンカーセクションが存在しない。
  9. Bugzilla 19138: std.uuid.randomUUIDはstd.random.RandomがMt19937であることに依存すべきではない
  10. Bugzilla 19147: std.complexでconst引数を使うことでテンプレートの肥大化を抑える
  11. Bugzilla 19171: Array!bool の範囲スライスに無効なアサートがある

phobosの機能強化

  1. Bugzilla 12335: std.algorithm.skipOverはstartsWithのように複数の引数をサポートすべきである。
  2. Bugzilla 13121: std.algorithm.joinerは可能であれば双方向の範囲を返すべきである。
  3. Bugzilla 14001: オプションで@nogc std.random.randomCoverを使えるようにした。
  4. Bugzilla 16639: JSONのエッジケースと曖昧さに関するこの記事を参考にstd.jsonを見直す。
  5. Bugzilla 16745: サイズが推測される静的配列を作成するためのテンプレートヘルパーを追加した。
  6. Bugzilla 17019: std.algorithm.iteration.eachを並列で使えるようにした。
  7. Bugzilla 18790: const(char)[]をchar[]に入れることができない。
  8. Bugzilla 19037: NullableはmoveEmplaceを使って任意の型をサポートすべきである。
  9. Bugzilla 19135: std.json : JSON_TYPEがD言語のスタイルと一致しない。
  10. Bugzilla 19156: nogc std.random.randomShuffle が使えない。

Druntime バグ

  1. Bugzilla 19046: OSX: core.stdc.time.CLOCKS_PER_SECの値が正しくない。
  2. Bugzilla 19073: core.internal.hashは浮動小数点数のビット単位のハッシュ表現をすべきではない。
  3. Bugzilla 19177: druntime/src/core/stdc/time.dにバージョンがない(Solaris)。

Druntimeの機能強化

  1. Bugzilla 18220: CLIからrt_trapexceptionsを設定できるようにした。
  2. Bugzilla 18918: core.internal.hashは参照を持つ構造体のメンバ毎のハッシュを行うべきである。
  3. Bugzilla 18921: core.internal.hashをメンバ単位のハッシュ連鎖に対応させる。
  4. Bugzilla 18923: セマフォの内部ハンドルはprotected にすべきである。private
  5. Bugzilla 18942: core.internal.hashは非x86のアラインメント情報を利用できる。
  6. Bugzilla 18981: デバッグ情報が圧縮されている場合、バックトレース中に SIGSEGV が発生する。
  7. Bugzilla 19009: core.internal.hash.hashOfのデフォルトハッシュ(toHash がない場合)は次のようにすべきである。@nogc
  8. Bugzilla 19048: core.internal.hash.hashOfではテンプレートの肥大化を抑える:不要なauto ref を削除し、可能な限りconst を追加する。
  9. Bugzilla 19049: object.hashOf - public関数を同一のpublic関数でラップしない。
  10. Bugzilla 19071: core.internal.hashは連鎖しないtoHashオーバーロードを持つべきである。
  11. Bugzilla 19072: Object.toHashとtypeid(void*).getHash(&ptr)はロービットをもっと多様にすべきだ。
  12. Bugzilla 19075: rt.util.random.Rand48.defaultSeedはctime.timeよりもRDTSCかmach_absolute_timeかQueryPerformanceCounterを優先すべきである。

dlang.orgのバグ

  1. Bugzilla 18558: テンプレートエイリアス仕様が不完全
  2. Bugzilla 18782: ドキュメントエラー:ProtectionAttributesはVisibility Attributesと言うべきだ。
  3. Bugzilla 19055: [404 Not Found] std.digest.digest
  4. Bugzilla 19067: [ミックスイン] テンプレートミックスインへのデッドリンク

dlang.orgの機能強化

  1. Bugzilla 19041: errnoEnforce: 例がコンパイルされない。

インストーラのバグ

  1. Bugzilla 2473: Linux システムのインストール手順が正しくない。
  2. Bugzilla 10941: Mac のインストール手順に従っても object.d が見つからない。
  3. Bugzilla 19100: install.sh の署名検証に失敗する。

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

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

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