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

変更ログ 2.096.0

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

Download D 2.096.0
2021年3月11日リリース

2.096.0には、17の大きな変更と81のBugzilla問題の修正が含まれている。 多大なる感謝を 54人の貢献者 に感謝する。

ライブラリの変更

  1. 非推奨std.math : approxEqual

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

コンパイラの変更

  1. x86_64 PosixターゲットにおけるD ABIの変更

    コンパイラが更新され、creal 数値の実部を の実数部を返すようにコンパイラが更新された。

    これはABIを破壊する変更であり、 型を使用するライブラリを再コンパイルする必要がある。 creal の再コンパイルが必要となる。

  2. __c_complex_float__c_complex_double__c_complex_real 型を追加した。

    これにより、CおよびC++とのインターフェイス・コードで、ABIとの互換性を維持できるようになった。 _Complex 型との互換性を維持できる。 これは、非推奨となる予定の組み込み型cfloatcdouble 、および creal に取って代わる。

  3. コピーコンストラクタと生成ポストブリットの両方を持つことは非推奨となった。

    このリリースまでは、ポストブリットはコピーコンストラクタよりも優先されていた、 を優先していた。そのため これにより、コピー・コンストラクタを使用する新しいコードが、ポストブリットを使用するライブラリ・コードと相互作用するのを防いでいた。 と相互作用することを防いでいた。この相互作用を可能にするには、生成されたポストブリット とコピーコンストラクタ(ユーザー定義または生成)を持つことは非推奨となった。 例::

    // ポストブリットを使ったライブラリコード
    struct A
    {
        this(this) {}
    }
    
    // コピーコンストラクタを使った新しいコード
    struct B
    {
        A a;
        this(const scope ref B) {}
    }
    

    今回のリリースまで、上記のコードでは、struct B 、生成されたポストブリット がユーザー定義のコピーコンストラクタよりも優先されていた。このリリースでは このリリースでは、 structB の定義で、非推奨が発行される。 postblitはコピー・コンストラクタよりも優先される。B 。 ユーザー定義のポストブリットとコピー・コンストラクタ(生成またはユーザー定義)の両方がある場合、ポストブリットは、コピー・コンストラクタよりも優先され続ける、 postblitが優先され続ける。

    非推奨を取り除くには、ユーザーは以下のどちらかを行う:

    1. struct B で明示的に@disable this(this) 。これは次のように指示する。
    これは、コピーコンストラクタがポストブリットよりも優先されることをコンパイラに指示する。

    1. struct B に対してポストブリットを定義する。これはコンパイラに次のように指示する。
    を優先するよう指示する。

    1. struct B からコピーコンストラクタをすべて削除する。
    struct B のインスタンスをコピー構築するために使われる。

  4. DMDのJSON出力は、常に保護レベルを含むようになった。

    以前のリリースでは、コンパイラが生成するJSON出力に保護レベルが含まれていなかった。 publicが含まれていなかったが、現在は常に含まれる。

  5. DMDのJSON出力は、[共有]モジュールのコンストラクタ/デストラクタに対して、異なる型を持つようになった。

    以前は、モジュールのコンストラクタとデストラクタは(共有されているかどうかにかかわらず)、関数として出力されていた。 関数として出力され、ドキュメンテーションジェネレーターがそれらを認識する唯一の方法は、以下の通りだった。 である。 つまり、外部ツールはコンパイラ内部の詳細に依存する必要があった。 に依存しなければならない。 このリリースから、kind に4つの新しい値が導入された: shared static constructor shared static destructor,static constructor,static destructor.

  6. エイリアスによってローカル・シンボルを受け取るローカル・テンプレートを非推奨とする。

    ローカルシンボルを持つローカルテンプレートとメンバーテンプレートのインスタンス化のサポートは、DMD 2.087.0で実装された。 シンボルのインスタンス化のサポートはDMD 2.087.0で実装された。しかし、この実装は はGDCおよびLDCバックエンドと互換性がなかった。

    D実装間の機能パリティを維持するため、この改良は廃止された。 この改良は非推奨となり、将来のDMDリリースでは削除されるかもしれない リリースから削除されるかもしれない。

  7. C++ヘッダー生成の改善

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

    • 集合体のフィールド単位のコンストラクタを生成する
    • インスタンス化されたクラスをユニークなクラス宣言として生成しない
    • インスタンス化された基底クラスのテンプレート引数を生成する
    • コンパイラによって特別に処理される不透明な型の列挙型を生成しない。

    注釈: ヘッダー・ジェネレーターはまだ実験的なものである。 バグがあったらバグトラッカーに送ってほしい。

  8. DMDコンパイラー用に-gdwarf=<version> スイッチを追加した。

    DWARFシンボリックデバッグ情報を出力する(非Windowsマシンのみ)。 サポートされるバージョンは3、4、5である。

    一度追加されると、-g スイッチが暗黙のうちに有効になる。

    注釈:DWARFバージョン5は実験的なものである。

  9. のエイリアスとして__traits(getVisibility, Sym) を導入した。getProtection

    v2.071.0での変更以降、private,protected,public...などの属性は可視属性であり、保護属性ではない、 などは可視性属性であり、保護属性ではない。 しかし、このトレイトの名前はこのような変更より前のものであり、そのため他のすべてのドキュメントと矛盾していた。 と矛盾していた。 今回の変更では新しい名前が導入されただけで、getProtection は非推奨のままになっている、 新しい名前を使用することは、最新バージョンしかサポートしていないユーザーには推奨されるが 新しい名前を使うことは、最新バージョンのみをサポートするユーザーには推奨されるが、非推奨にする予定はない。

  10. プレーンsynchronized ステートメントは、ランタイムに割り当てられたミューテックスを使用するようになった。

    synchronized文には、synchronizedsynchronized(exp) の2つの形式がある。 式の引数がない場合、グローバル・ミュテックスは、プラットフォーム依存のクリティカル・セクションの型とそれを格納するのに十分な大きさのスタティック・バッファを使用して作成される。 バッファが作成される。 ポインタ・フィールドを使用する。

    例:

    void main()
    {
        synchronized {
            // __gshared byte[40 + 8] __critsec;
            // _d_criticalenter(&__critsec[0]);
            // scope(exit) _d_criticalexit(&__critsec[0]);
            (cast() counter) += 1;
        }
    }
    

    この実装にはいくつかの欠点がある。サイズも critsec アラインメントのどちらも、OSのクリティカルセクションタイプから取得していない。 型から取得されない。その結果、コンパイラが割り当てたサイズが小さすぎたり その結果、コンパイラが割り当てたサイズが小さすぎたり、プラットフォームが厳しいアラインメント要件を持っていたりすると、プログラムのランタイムが同期セクションに入るときにクラッシュしてしまう。 ランタイムがクラッシュする。

    このコードは、実行時にクリティカルセクションを遅延的に確保する新しい実装を呼び出すことになる。 セクションを遅延的に確保する新しい実装を呼び出すようになった。

  11. 単一表現関数の実装を短縮できるようにした。

    -preview=shortenedMethods が追加された。これにより、ラムダ関数と同様の形式で関数を記述できるようになる:

    // この2つは同等である
    int foo() { return 1; }
    int foo() => 1;
    

    この構文では、=> expr 、関数本体を置き換えることができる。{ return expr; }

ランタイムの変更

  1. druntime オプションcallStructDtorsDuringGC が削除された。

    2.088で非推奨となった。

  2. mount に属する statvfs からの FreeBSD 宣言が削除された。

    2.082で非推奨となり、core.sys.freebsd.sys.mount.

  3. 実験的な llvm-libunwind ベースのバックトレース表示が追加された。

    現在、druntimeはデバッグ情報(アドレスと関数名)を提供するためにbacktracebacktrace_symbols 関数を使用している。 関数を使用してデバッグ情報(それぞれアドレスと関数名)を提供している。

    このことは、Musl libcのようなbacktrace を提供しないターゲットには問題を引き起こす可能性がある。 さらに、backtrace インターフェースは本質的に制限されている。 X フレーム(ここでX はバッファのサイズである)までしか取得できない。 をメモリに保存し続けなければならない。backtrace_symbols も同様である。

    一方、libunwindはアンワインドとスタックトレース検査の業界標準である。 様々なプラットフォームに移植されており、シンプルかつ柔軟なAPIを持っている、 GCCの一部であり、同様のライブラリーはLLVMの一部である。

    本リリースから、druntimeはLLVMのlibunwindをバックトレース・プロバイダーとして使用できるようになった。 このサポートは、Alpine Linuxで利用可能なLLVMバージョンのlibunwindに限定されている、 に限定されている。

    パッケージャーにとっては、druntimeをビルドする際にDRuntime_Use_Libunwind 、 を定義することができる。

ライブラリの変更

  1. 非推奨std.math : approxEqual

    浮動小数点数を比較するためのテンプレートapproxEqual は廃止された。 は非推奨となった。

    代わりにisClose 。 を使用してほしい。

    現在のapproxEqual(a, b) の動作を(ほぼ)維持するには isClose(a, b, 1e-2, 1e-2)を使うことをお勧めする。 isClose(a, b) で動作するようにコードを調整することをお勧めする。

dubの変更

  1. DMDによる「リンカーdflags」の増加

    -betterC -L… と もリンクに使われるようになった。 -Xcc=… dflags

  2. copyFiles が VisualD プロジェクトで使用できるようになった。

    アプリケーションの実行に必要なファイルは、copyFiles ビルド・オプションで指定できる、 これにより、これらのファイルがターゲット・パスにコピーされる。VisualD のdubのジェネレーターは、この挙動を再現する。 VisualD用のdubのジェネレーターは、この動作を再現するようになったので、この種のアプリケーションをVisual Studioで正常にデバッグできるようになった。


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

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

  1. Bugzilla 20661: opEqualsがAAキーで認識されない(take two)
  2. Bugzilla 21319: DMDが不変循環参照でクラッシュする
  3. Bugzilla 21547: コンストラクタ宣言の順序が構造体のイニシャライザに影響する。
  4. Bugzilla 21678: 連鎖配列の長さ割り当てで"_d_arraysetlengthT is not callable using argument type" が発生する。
  5. Bugzilla 21696: DMD 2.095.1コンパイルのクラッシュ

DMDコンパイラのバグ修正

  1. Bugzilla 5713: intsの最終スイッチが壊れていた
  2. Bugzilla 10619: テンプレートのエイリアス引数として渡されるローカル変数が正しくない。
  3. Bugzilla 11717: CTFE: 配列とベクトル操作で定数でない値を指定する。
  4. Bugzilla 13667: ICE: このメソッドの再帰的エイリアス内で自己参照キャストを使用したスタックオーバーフロー。
  5. Bugzilla 14831: 各関数のローカルシンボルは一意のマングル名を持つべきである。
  6. Bugzilla 15225: エイリアスされた関数リテラルを直接オーバーロードすることはできない。
  7. Bugzilla 16635: ref const(typeof(this)) "への暗黙の変換のためのエイリアスthisはdmdのセグメンテーションフォールトを引き起こす
  8. Bugzilla 17105: [ICE] SIMD 最適化による内部エラー: backend/cgcod.c 6807
  9. Bugzilla 18867: ベクトル要素への代入で backend/cgcod.c がクラッシュする。
  10. Bugzilla 19788: vectorとして型付けされた列挙型をスライスするとコンパイラがクラッシュする
  11. Bugzilla 20041: ベクトルとして型付けされたenumをスライスする際のコンパイラのクラッシュ : "__vector" でのCTFEの不正な結果
  12. Bugzilla 20111: asm VCVTPS2PH が正しくエンコードされない
  13. Bugzilla 20235: C++ ABIが構造体の引数をデストラクトしない。
  14. Bugzilla 20565: 異なるスコープでのローカルテンプレート宣言が捕捉されない名前の衝突を引き起こす
  15. Bugzilla 20695: コピーコンストラクタはデフォルトの構造体コンストラクタを無効にする。
  16. Bugzilla 20821: エイリアスされたテンプレート・メソッドがオーバーロード解決を混乱させる
  17. Bugzilla 20868: DIP1000: スコープデリゲートが安全でないコードでエラーを引き起こす。
  18. Bugzilla 21214: simd: サポートされていないベクトルによる間違った診断
  19. Bugzilla 21352: enum メンバに親 enum 宣言の UDA を与えるべきではない。
  20. Bugzilla 21469: mm_set1_epi16を実装する際にICE core.simdを使用する。
  21. Bugzilla 21471: バックエンドのアサーションが-checkation=context-inline
  22. Bugzilla 21472: -checkaction=context では動作しない。tupleof
  23. Bugzilla 21474: ICEでcore.simdと-O(Illegal Instruction)を使用した場合 : : に動作しない。
  24. Bugzilla 21481: テンプレートがエイリアスをオーバーロードすると、オーバーロードされたテンプレート内の関数が失われる。
  25. Bugzilla 21489: エイリアス宣言の内部で "ミックスイン"を使用したテンプレートのインスタンス化が重複する。
  26. Bugzilla 21490: SSE4.1未満のマシンでSSE整数乗算がない場合、オプティマイザがSSE整数乗算を追加できるようになった。
  27. Bugzilla 21501: [REG 2.089.1] ミックスインと循環インポートを使用した場合にパッケージ内で未定義の識別子が発生する。
  28. Bugzilla 21508: ファイルp.dのプライベートクラスpがファイル(モジュール)の外から見える。
  29. Bugzilla 21515: extern(C)とextern(C++)が間違った順序でcrealを返す。
  30. Bugzilla 21518: デリゲートはconst配列の属性が一致するかチェックしない
  31. Bugzilla 21522: オーバーロードされた関数テンプレートをエイリアシングすると関数が失われる。
  32. Bugzilla 21526: 一部のプラットフォームでx87の代入の精度が丸められない
  33. Bugzilla 21530: dtoh:予約されたC++キーワードに関して識別子をサニタイズする必要がある。
  34. Bugzilla 21534: dtoh:dtoh: default ctorのデフォルトパラメータにテンプレート引数がない。
  35. Bugzilla 21543: エイリアスのthisとstd.typecons.Nullableでdmd無限ループが発生する。
  36. Bugzilla 21553: statementsem.dのexpressionSemantic()の呼び出しが正しくない。
  37. Bugzilla 21598: checkaction=contextは失敗時にデバッグブロックで純粋関数を再実行する。
  38. Bugzilla 21640: liveがテンプレートで機能しない
  39. Bugzilla 21647: pragma(msg)はvoid型を表示できるようにすべきである。
  40. Bugzilla 21659: [OSX] core.stdc.config.__c_ulonglongがsizeofを探す際に前方参照される。
  41. Bugzilla 21662: 外部リンケージ変数はデフォルトの構造が無効な型にはできない。
  42. Bugzilla 21668: refパラメータを不透明型で宣言できない。
  43. Bugzilla 21682: 静的演算子オーバーロードを使用する式でcheckaction=contextが失敗する。

DMDコンパイラの機能強化

  1. Bugzilla 7176: ラムダ => 関数とメソッドの構文も追加された。
  2. Bugzilla 10445: ベクトル型に"@min"、"@max "などのプロパティを追加した。
  3. Bugzilla 19632: [SIMD] エラー:無効なforeach集約
  4. Bugzilla 20788: カラー出力と非カラー出力の違い
  5. Bugzilla 21527: SIMDコードにおけるメモリへの不要なストア
  6. Bugzilla 21593: 書き込まれるファイルがすでに存在する場合のみ、ファイル時刻を更新する

phobosリグレッションの修正

  1. Bugzilla 21663: std.concurrency.receiveOnlyがタプルで動作しない。

phobosのバグ修正

  1. Bugzilla 13663: 浮動小数点フィールドを持つタプルの比較
  2. Bugzilla 15136: toStringzが完全に正しいことを望むなら、'˶'のチェックを止める必要がある。
  3. Bugzilla 17269: Null可能な文字列を持つ構造体のformattedWriteが失敗する。
  4. Bugzilla 20508: std.math.pow(-infinity, y)が虚数や複素数の結果に対してNaNを返さない
  5. Bugzilla 20539: std.conv.to: キャッチオール opEquals オーバーロードを持つ基本型を持つ列挙型に対する内部オーバーロードの衝突(?)
  6. Bugzilla 20848: formatValueImplのバグ
  7. Bugzilla 21103: isDynamicArrayが不要なテンプレートをインスタンス化する。
  8. Bugzilla 21444: 静的assertメッセージで文字列の連結がうまくいかない。
  9. Bugzilla 21555: std.container.array:insertBackは間違っており、Array!boolでテストされるべきである。
  10. Bugzilla 21556: std.container.array:insertAfterは間違っている。
  11. Bugzilla 21609: LinearCongruentialEngine は m = 0 で失敗する。
  12. Bugzilla 21634: std.bitmanip:ビットフィールドが無効な変数を生成する可能性がある。
  13. Bugzilla 21635: std.bitmanip:bitfieldsは間違ったパラメータでより良いエラーメッセージを生成すべきである。
  14. Bugzilla 21636: std.bitmanip: bitfield のサイズを使用する型のサイズと照合すべきである。

phobosの機能強化

  1. Bugzilla 21523: Microsoft Windows std.stdio.File.lock()、tryLock()、unlock():エラーメッセージが必要でない時にエラーメッセージ用のメモリを割り当てない。
  2. Bugzilla 21559: 幅の狭い文字列に対する walkLength を高速化
  3. Bugzilla 21629: std.csv は空の入力に対して1レコードを報告する。
  4. Bugzilla 21638: std.typecons.RefCounted!(T, RefCountedAutoInitialize.no)がT.this()にアノテーションされている場合でも動作するようにした。@disable

Druntimeリグレッションの修正

  1. Bugzilla 21309: core.thread.threadbaseのドキュメントが見つからない。
  2. Bugzilla 21642: [REG 2.084] 共有列挙型を再帰的に含む一部の構造体/共用体において、hashOfのコンパイルに失敗する。

Druntimeのバグ修正

  1. Bugzilla 8046: simd.dにいくつかのドキュメントが必要
  2. Bugzilla 21544: -checkaction=context は列挙型を基本型としてフォーマットする。
  3. Bugzilla 21666: Win64で-checkaction=contextを指定したreal のprintfフォーマット指定子が間違っている。

Druntimeの機能強化

  1. Bugzilla 14790: カバレッジ・マージは変更されたソースコードを検出する必要がある。

dlang.orgのバグ修正

  1. Bugzilla 21292: ChromeがデフォルトでHTTP経由の.dmgや.exeファイルのダウンロードをブロックするようになった。
  2. Bugzilla 21493: ドキュメントのstd.stdioのハイパーリンクが壊れた。

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

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

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