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

変更履歴 2.090.0

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

Download D 2.090.0
2020年01月05日リリース

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

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

コンパイラの変更

  1. lazy パラメータからデリゲートを抽出できるようになった。

    lazy パラメータの基礎となるデリゲートを抽出できるようになった。 & 演算子を使う:

    void test(lazy int dg)
    {
        int delegate() dg_ = &dg;
        assert(dg_() == 7);
        assert(dg == dg_());
    }
    
    void main()
    {
        int a = 7;
        test(a);
    }
    

    以前はコンパイルエラーが発生していた。

ランタイムの変更

  1. core.memory.GC.inFinalizer が追加された。

    GCの状態に関する情報を公開する新しい関数が追加された。 この関数は、現在のスレッドがGCヒープ上に割り当てられたオブジェクトのデストラクタ(ファイナライザ)を実行している場合、true 。 を実行しているかどうかを返す:

    • もはや参照されていない
    • への明示的な呼び出しが行われたGC.runFinalizers への明示的な呼び出しが(通常は共有ライブラリのアンロードの一環として)行われた。

    GCヒープに割り当てられたオブジェクトのデストラクタには、現在いくつかの制限や奇妙な点がある。 がある:

    • 到達不可能なすべてのオブジェクトのデストラクタは、不確定な順序で実行される、 到達不可能なオブジェクトのデストラクターはすべて不確定な順序で実行されるため、オブジェクトの最終化中にオブジェクトのメンバーが生きているという保証はない。 最終化
    • ファイナライズ中の割り当ては禁止されている。
    • スタックに割り当てられたオブジェクトとは対照的に、部分的に構築されたオブジェクト(コンストラクタが例外をスローしたオブジェクト。 コンストラクタが例外をスローしたオブジェクト)を最終化することができる。

    core.memory.GC.inFinalizerを使えば、上記のようなプログラミング・エラーを効率的に防ぐことができる。 上記のようなプログラミング・エラーを効率的に防御したり、特定のオブジェクトがGCによって破棄されたままになっていないかどうかを検出したりするために使うことができる。 オブジェクトがGCによって破棄されたままになっているかどうかを検出することができる。

  2. プラットフォーム依存のexecinfoイントロスペクションが追加された

    新しいモジュール(core.internal.execinfo)がプラットフォームに依存した が追加された。C言語ランタイムの一部としてexecinfo実装を提供する全てのPOSIXシステムにおいて 実装を提供するPOSIXシステム上では、適切な実装に依存したexecinfoモジュールが自動的にインポートされる。 依存のexecinfoモジュールが自動的にインポートされる。

    それに加えて、分離されたライブラリとして構築された外部のexecinfo 実装を使用する機会がある。

    重要: Cランタイムがexecinfo機能を提供しないプラットフォームでは、外部ライブラリ(例えばlibexecinfo)を使用するかどうかを決める必要がある。 機能を提供しないCランタイムを持つプラットフォームでは、外部lib(libexecinfoなど)を使うかどうかを決める必要がある。 を使うかどうかを決めなければならない。そうでない場合、DRuntimeはバージョンIDを追加することなく普通にビルドされる。 しかし、外部libを使用する場合は、次のバージョンIDのいずれかをコンパイル時に選択しなければならない。 バージョンIDはコンパイル時に選択される。つまり、選択した 外部形式は、DRuntimeを再構築せずに後で変更することはできない。

    誰かがこのようなOS(musl libcを使用するもの)用にDRuntimeをパッケージ化し、そのパッケージを提供する場合、この点に留意することは非常に重要である。 このようなOS(例えば、musl libcを使用しているOS)用にDRuntimeをパッケージ化し、execinfoのサポートがあるパッケージとないパッケージを提供する場合、この点に留意することが本当に重要になるだろう。 とexecinfoサポートなし(特定の外部ライブラリを またはソースベースのパッケージの場合、このビルドオプションを を選択できるようにする(portageなど)。

    Version IDBacktrace format
    ExtExecinfo_BSDFmt0x00000000 <_D6module4funcAFZv+0x78> at module
    ExtExecinfo_DarwinFmt1 モジュール 0x00000000 D6module4funcAFZv + 0
    ExtExecinfo_GNUFmtmodule(_D6module4funcAFZv) [0x00000000]or module(_D6module4funcAFZv+0x78) [0x00000000] or module(_D6module4funcAFZv-0x78) [0x00000000]
    ExtExecinfo_SolarisFmtオブジェクトのシンボル+オフセット [pc]

    上記のフォーマットは、「古典的な」バックトレース出力のほとんどをカバーしている。 重要:" フォーマットは簡単に追加できる。

  3. 特定の浮動小数点精度に丸めるための組込み関数toPrec を追加した。

    組込み関数 core.math.toPrecは、その floatの精度に丸める、 doubleまたはreal の精度で丸める。

    のような浮動小数点アルゴリズムもある。 Kahan-Babuska-Neumaier和のようないくつかの浮動小数点アルゴリズムは、特定の精度の丸めを必要とする を必要とする。しかし しかし、すべての演算の後に精度に丸めることは、一般的なケースでは全体的な精度を失い、実行時性能の問題となる。 を失い、実行性能の問題となる。

    これらの関数を追加することで、必要な箇所で丸めを保証することができる。 これらの関数を追加することで、コード内の必要な箇所で丸めを保証し、アルゴリズム内のどこで丸めが必要かを文書化することができる。 を文書化する。

  4. Unittest デフォルトモード

    unittestsのデフォルトをテストのみ実行するように変更した。元の動作(unittestsを実行してからmainを実行する)には--DRT-testmode=run-main

    ユニットテストを制御する機能は2.078.0で追加され、上記のスイッチはそれ以降のすべてのバージョンで動作する。

ライブラリの変更

  1. 非推奨のstd.array.Appender.toString は削除された。

    callable を受け付けるオーバーロードは、2.079 から非推奨となり、現在は削除されている。 から非推奨となり、現在は削除されている。現在は削除されている。 を受け付けるオーバーロードを使う。

  2. 非推奨std.functional.binaryReverseArgs は削除された。

    引数を2つだけ受け取るreverseArgs のこの特殊化は、2.079以降非推奨となり、現在は削除されている。 2.079から非推奨となり、現在は削除されている。代わりにreverseArgs を使うこと。

  3. 非推奨std.bitmanip.BitArray.toString は削除された。

    callable を受け付けるオーバーロードは、2.079以降非推奨となり、現在は削除されている。 から非推奨となり、現在は削除されている。現在は削除されている。 を受け付けるオーバーロードを使う。

  4. 非推奨モジュールstd.experimental.all は削除された。

    Phobosに含まれるすべてのシンボルがimport std

  5. std.jsonにget!(T)ゲッターを追加。

    このゲッターは、可能であれば、基礎となるjson型をTとして返そうとする。 このような自動整数変換に便利である:

    import std.json;
    string s = `{ "a": 123 }`;
    auto json = parseJSON(s);
    
    // これはjson["a"].floatingでスローされる
    assert(json["a"].get!double == 123.0);
    

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

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

  1. Bugzilla 20383: [REG 2.084.z] int[]からubyte[]への不正な変換を受け付ける。
  2. Bugzilla 20418: Win32のbitarray.dでunittestに失敗する。
  3. Bugzilla 20465: 動的+静的配列宣言の失敗

DMDコンパイラのバグ

  1. Bugzilla 6592: エラーが発生してもヘッダファイルが作成される
  2. Bugzilla 8684: 引数リストに')'がないとエラーメッセージの海になる
  3. Bugzilla 9490: 式を括弧で囲むと'this'が見つからない。
  4. Bugzilla 10562: 要素が固定長の配列の場合、要素の値で配列を初期化できない。
  5. Bugzilla 14696: 条件演算子で文が完了する前にテンポラリのデストラクタが呼び出される。
  6. Bugzilla 17125: ヘッダー生成で浮動小数点数が正しくフォーマットされない
  7. Bugzilla 19432: ulongを符号付きロングレンジ以上の10進数で初期化できない。
  8. Bugzilla 20151: 特定のディレクトリレイアウトがアクセス違反でDMDをクラッシュさせる
  9. Bugzilla 20220: clang 9でpragma(crt_constructor)が動作しない。
  10. Bugzilla 20318: 不正な命令(コアがダンプされた)
  11. Bugzilla 20326: 不透明型のstringofが前方参照エラーになる
  12. Bugzilla 20367: copy ctor が定義されているとき Postblit を無効にできない。
  13. Bugzilla 20400: CTFEで文字配列の長さが長くなると値が変わる。
  14. Bugzilla 20401: ref変数がreturn前にコピーされる
  15. Bugzilla 20406: コピーコンストラクタはデフォルトコンストラクタを必要とする
  16. Bugzilla 20413: テンプレートと標準名前空間によるC++のマングリング・バグ
  17. Bugzilla 20417: __traits(compiles)は、式がラムダ内にラップされていない場合、偽の結果を返すが、typeofは正しく動作する。
  18. Bugzilla 20419: is(missing == module/package) は不明な識別子を返す
  19. Bugzilla 20466: オプティマイザがmswのレジスタを0かどうかテストする際に、そのレジスタを壊してしまう。
  20. Bugzilla 20475: 文字列の静的配列の構造体がメンバ単位ではなくビット単位で比較される

DMDコンパイラの機能強化

  1. Bugzilla 4544: 文字列を期待していたのに文字定数が返ってきたときのエラーメッセージが改善された。
  2. Bugzilla 11038: staticはインポートのブロック属性としては効果がない。
  3. Bugzilla 18809: 存在しないプロパティのエラーメッセージを改善した。
  4. Bugzilla 20334: posix.mak clean targetが生成されたファイルを全て削除しない。
  5. Bugzilla 20448: エラー: テンプレート化された関数からエスケープされたメンバ参照を変異させる際の不明なエラー

phobosのバグ

  1. Bugzilla 9588: 構造体のコンテキスト・ポインタを表示するフォーマット
  2. Bugzilla 9592: 正当化されたタプルの表示
  3. Bugzilla 10126: TaskPoolが勝手に終了するようにするか、終了しないことを明確にするためにドキュメントを改善する。
  4. Bugzilla 10448: min と max が NaN を意識していない
  5. Bugzilla 10902: phobosのunittestに時間がかかりすぎる。
  6. Bugzilla 11013: findSplitBeforeの述語内の変数を無視する。
  7. Bugzilla 11782: 範囲へのフォーマットポインタは範囲を表示する
  8. Bugzilla 15405: FormatSpec.writeUpToNextSpec()がドキュメント化されていない。
  9. Bugzilla 15940: ImplicitConversionTargetsとstruct内のクラスエイリアス。
  10. Bugzilla 16223: BigUint: 小さいインスタンス型に対する未定義のシフト
  11. Bugzilla 18248: std.conv.parseの基数オーバーロードが数値のない空でない範囲でスローされない
  12. Bugzilla 18446: curl の onProgress の例が正しくない。
  13. Bugzilla 19283: [std.mathspecial]正規分布のドキュメントにパラメータが記載されていない
  14. Bugzilla 19626: unittestモードで列挙型のRedBlackTreeが失敗する
  15. Bugzilla 19733: expi ドキュメントのリンクが壊れている
  16. Bugzilla 20160: ThreadInfo.cleanup()が"this"の登録名ではなくローカルスレッドの登録名をクリアしてしまう。
  17. Bugzilla 20260: CustomFloatの精度/指数幅が0になる
  18. Bugzilla 20261: CustomFloat.εは無限大を返す
  19. Bugzilla 20263: CustomFloat.min_exp の値が正しくない。
  20. Bugzilla 20281: CustomFloatは64ビットに制限されている
  21. Bugzilla 20282: CustomFloat.dig がいくつかの値で失敗する。
  22. Bugzilla 20283: CustomFloat.max_expが動作しない場合がある。
  23. Bugzilla 20284: CustomFloat.max_10_exp が指数の桁数が多すぎる型に対して動作しない。
  24. Bugzilla 20286: allowDenorm がない場合、CustomFloat.min_normal が失敗する。
  25. Bugzilla 20313: WindowsでwouldHaveBlockedの動作が一貫していない
  26. Bugzilla 20314: only にconst変数を渡すとconst範囲の要素型が強制される
  27. Bugzilla 20357: formatはnanまたはinfを表示する際にスペースフラグに従うべきである
  28. Bugzilla 20396: format!"%a"は非正規化浮動小数点数に対して誤った結果をもたらす
  29. Bugzilla 20398: std.zipのtotalEntriesの数が正しくない。
  30. Bugzilla 20408: スタイルチェッカーはバックアップファイルをチェックすべきではない

phobosの機能強化

  1. Bugzilla 20198: std.math.nextUpとnextDownとnextafterがfloatとdoubleに対してCTFEで動作するようにした。
  2. Bugzilla 20288: std.format double with NaNがカンマの範囲違反で失敗する。
  3. Bugzilla 20425: プロキシ opCmp が opCmp をオーバーロードした型でコンパイルに失敗する。
  4. Bugzilla 20439: void opAssign を持つ型では memoize に失敗する。

Druntimeのバグ

  1. Bugzilla 20299: 一時的なデストラクタでcheckaction=contextが機能しない。
  2. Bugzilla 20303: core.threadのメモリリーク
  3. Bugzilla 20315: const(void[])引数でcheckaction=contextが失敗する。
  4. Bugzilla 20322: checkaction=contextが"wstring/dstring"引数で失敗する。
  5. Bugzilla 20323: checkaction=contextがコピー不可能な引数に対して失敗する。
  6. Bugzilla 20346: checkaction=contextでstd.uuidがコンパイルできない。
  7. Bugzilla 20364: [REG2.069] _d_arraysetlengthiT()でtypeof(null)[]配列のseg faultの長さを変更する
  8. Bugzilla 20440: opAssignがrefを返さない値を持つ連想配列はrequire関数をサポートしない

Druntimeの機能強化

  1. Bugzilla 17563: gc_inFinalizer は public にすべきである。

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

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

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