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

変更ログ 2.091.0

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

Download D 2.091.0
2020年03月08日リリース

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

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

コンパイラの変更

  1. クラス・デアロケータが言語から削除された。

    クラス・デアロケータはv2.080.0で非推奨となった。 (変更履歴を参照)、 で非推奨となり、v2.087.0でエラーとなった。 現在、これらは言語から完全に削除され、パーサーも認識しなくなった。

  2. GNUエラースタイルで行番号を報告できるようになった。

    DMDは、GNUエラースタイル、つまり、filename:line[:column]: message でエラーと警告を報告できるようになった。 これにより、既存のIDEとの互換性が容易になるかもしれない。

    このスタイルを有効にするには、-verror-style=gnu でDMDを呼び出す。

  3. extern(C|C++) 宣言からの実験的なC++ ヘッダー生成を追加した。

    DMD は、 または としてマークされた既存の D ファイルの宣言のバインディングを含む C++ ヘッダーファイルを作成できるようになった。 extern(C) extern(C++)のバインディングを含むC++ヘッダーファイルを作成できるようになった。

    この機能は、以下のコマンドラインスイッチで利用できる:

    • -HC:生成されたヘッダーを標準出力に書き出す
    • -HCf=<file>:生成されたヘッダーをファイルに書き出す
    • -HCd=<directory>:生成されたヘッダーをファイルに書き出す (未実装)

    次の例を考えてみよう:

    module a;
    
    extern(C) int foo(int a) { ... }
    extern(C++) void bar() { ... }
    void ignored() { ... }
    
    module b;
    
    extern (C++) struct S
    {
        string name;
        this (string name) { ... }
        bool bar() { ... }
    }
    
    module c;
    
    import a, b;
    
    extern (C++) class C
    {
        S[] s;
        this () {}
        bool bar() { ...}
    }
    
    

    これらのモジュールをdmd -c -o- -HC a.d b.d c.d でコンパイルすると、以下のヘッダーが生成される:

    #pragma once
    
    // dmd -HCによって自動的に生成
    
    #include <assert.h>
    #include <stddef.h>
    #include <stdio.h>
    #include <string.h>
    
    #define _d_void void
    #define _d_bool bool
    #define _d_byte signed char
    #define _d_ubyte unsigned char
    #define _d_short short
    #define _d_ushort unsigned short
    #define _d_int int
    #define _d_uint unsigned
    #define _d_long long long
    #define _d_ulong unsigned long long
    #define _d_float float
    #define _d_double double
    #define _d_real long double
    #define _d_char char
    #define _d_wchar wchar_t
    #define _d_dchar unsigned
    typedef _d_long d_int64;
    #define _d_null NULL
    
    // Parsing module a
    // Parsing module b
    // Parsing module c
    struct S;
    extern "C" _d_int foo(_d_int a);
    
    extern _d_void bar();
    
    // リンケージのため関数a.ignoredを無視
    struct S
    {
        DArray< _d_char > name;
        S(DArray< _d_char > name);
        _d_bool bar();
        S() : name() {}
    };
    
    class C
    {
    public:
        DArray< S > s;
        C();
        virtual _d_bool bar();
    };
    

    C++の相互運用に関する詳細は、ドキュメントを参照のこと。

    この機能は実験的なものであり、正しく動作しないことがある。 この機能を使用中にバグに遭遇した場合は、バグトラッカーに課題を登録してほしい。

ランタイムの変更

  1. ところどころにpthread_attr_destroy が欠けていたのを追加した。

    freebsdやsolarisなど一部のOSでのメモリリークを防ぐため、pthread_attr_destroy

  2. core.sys.windows.securityのバインディングを拡張した。

    多くの列挙型メンバが欠落していたが、リストがある程度最新になった。

  3. 追加core.stdcpp.memory.unique_ptr

    C++std::unique_ptr に対応するcore.stdcpp.memory.unique_ptr を追加した。

  4. TFD_TIMER_CANCEL_ON_SET を追加した。

    リアルタイムクロックが使用されている場合、タイマーをキャンセル可能としてマークするTFD_TIMER_CANCEL_ON_SET オプションを追加した。

ライブラリーの変更

  1. std.bigint 現在@safe

    アセンブリ・ルーチンや変更可能なデータから不変のデータへのキャストのために、多くのBigInt 操作が@system となっていた。 これらの部分は@trusted とマークされ、BigInt@safe コードで使用できるようになった。

  2. std.math.内のapproxEqualisClose で置き換えた。

    浮動小数点数の比較用テンプレートapproxEqual は テンプレートisClose に置き換えられた。 に置き換わった。

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

    次のリリースでは、approxEqual は非推奨となり、最終的には削除される。 最終的には削除される。

  3. 非推奨のstd.format.Mangle を削除した。

    基本型の揶揄された名前を含む非推奨の列挙型Mangle は削除された。 は削除された。マングル化された名前を解析するには、代わりにstd.demangle.demangle を使用すること。

  4. 非推奨の構造体ByLine,ByChunk,ByRecordstd.stdio から削除した。

    非推奨の構造体ByLine,ByChunk,ByRecord は、以下のサイトから削除された。 std.stdio.代わりに関数byLine,byChunk,byRecord を使用する。

  5. から非推奨関数を削除した。std.string

    非推奨関数inPatterncountcharsremovecharssqueeze およびstd.stringmunch は削除された。まだそれらを必要とするコードは 削除された。

  6. std.algorithm.sorting.schwartzSort バイナリ変換関数もサポートしている。

    transform テンプレート・パラメータは、次のようになる。 std.algorithm.sorting.schwartzSort のテンプレートパラメータは、要素を取る単項関数に限定されなくなった。 は、要素を取る単項関数に限定されなくなった。 を取るバイナリ関数にもなる。

    したがって、元のインデックスは、変換された でソートする。

  7. std.functionalにカレーを追加した。

    複数のパラメータを持つ関数を1つのパラメータを持つ関数に変換する。 パラメータがなくなるまで、1パラメータの関数を返す。 関数を評価する。 基本的には:f(x, y, z) == curry(f)(x)(y)(z)

インストーラの変更

  1. インストールスクリプトが Windows で実行されるようになった

    Dインストールスクリプト(install.sh。 dlang.org/install.sh)で利用できる。 がWindows上でPOSIXライクな環境をサポートするようになった。 これにより、例えばCygWinやMSys2からDMD、LDC、DubのWindows版をインストールして使うことができる。 をCygWinやMSys2などからインストールして使うことができる。 Dコンパイラーをインストールする統一された方法を提供する。

  2. Windowsのインストールは、いくつかのアップデートを受けた。

    • リリースされたdmd.exeはLDCでビルドされるようになり、コンパイル時間が30-40%短縮された。 時間が30-40%短縮された。
    • dmd.exe、dub.exe、ld-link.exeの64ビットビルドがbin64フォルダに追加された。
    • バンドルされるWindowsライブラリと定義が、MinGW 5.0.2からMinGW 7.0.2に変更された。 からMinGW 7.0.0に変更された(ワイド文字列main エントリポイントが追加された)。
    • WindowsにバンドルされているLLDリンカーが9.0.0にアップグレードされた(Winで例外が動作するようにするパッチを含む)。 Win32上で例外が動作するようにするパッチを含む)。
    • MinGW インポートライブラリとリンクされた VC ランタイムが次のようにアップグレードされた。 msvcr120.dll(ユニバーサルCランタイムに依存せず、単純なコピーが可能な最後のバージョン)にアップグレードされた。 にアップグレードされた。)再配布可能なDLLは、それぞれのbinフォルダに追加された。 フォルダに追加された。
    • curl ライブラリ/DLL が 7.68 に更新された。
    • 古代の windbg.exe がインストールから削除された。
    • インストーラーが VS 2019 のインストールを検出するようになった。VCのインストールが見つからない場合 ダウンロードされるのはVS 2017ではなく、VS 2019である。

dubの変更

  1. 環境変数SOURCE_FILESが追加された。

    新しい環境変数$SOURCE_FILES が追加された。 ソースファイルを含む。

  2. DUBにzsh補完機能が追加された

    scripts/zsh-completion/_zsh にzsh補完スクリプトが追加された。 このスクリプトは、ユーザーの好みのfpath にインストールすることができ、最も一般的な コマンドのオプションの補完と、パッケージのリストを提供する。 dub 補完を提供する。 dub add(ローカルパッケージに基づく) パッケージのリストも提供する。


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

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

  1. Bugzilla 10100: ダブルアンダースコアとallMembersを持つ識別子
  2. Bugzilla 15812: extern(C++)クラス内のstatic構造体は連想配列のキーとして使用できない。
  3. Bugzilla 16709: [Reg 2.068] Error: common.dのcommon.toがcommon.dのcommon.toと衝突する。
  4. Bugzilla 17098: コンパイルに数時間かかり、その後Internal error: backend/cgreg.c 405で失敗する。
  5. Bugzilla 17145: [REG2.066.0] ローカル列挙型宣言のタプル展開エラー

DMDコンパイラのバグ

  1. Bugzilla 9937: CTFE浮動小数点が正しくオーバーフローしない
  2. Bugzilla 11847: サブパッケージが修飾名として利用できない
  3. Bugzilla 17257: 間違った再帰テンプレート・デストラクタ・リフレクション
  4. Bugzilla 18147: デバッグ情報のサイズに制限がある
  5. Bugzilla 19479: ミックスインテンプレートの静的foreachにおける文字列ミックスインのゴミ.init
  6. Bugzilla 19504: C++のデストラクタでpragma(mangle)が無視される
  7. Bugzilla 19515: POSIX,C++:テンプレートの引数パックが誤ってマングルされる
  8. Bugzilla 20362: dmd がデリゲートのスコープ・パラメータを推測できない
  9. Bugzilla 20375: std.typecons.RefCountedがcheckaction-contextで動作しない
  10. Bugzilla 20421: lld-linkでリンクすると例外が動作しない
  11. Bugzilla 20474: 非推奨関数テンプレート化された関数内部で非推奨の警告が出る。
  12. Bugzilla 20507: デバッグ文がテンプレート化された関数の属性推論に影響する。
  13. Bugzilla 20514: obj-c の情報が __objc_const セクションに正しく配置されていない。
  14. Bugzilla 20530: is(<...> == module/package)が文字列列ミックスインで動作しない。
  15. Bugzilla 20537: isPackage/isModuleおよびis(package/module)トレイトが単一レベルのpackage.dインポートで失敗する。
  16. Bugzilla 20538: 不正な列挙型定義がコンパイルされる
  17. Bugzilla 20545: 無効な AA リテラルのパースで Segfault/Assertion が失敗する
  18. Bugzilla 20547: 連想配列を "new"しようとすると間違ったエラーメッセージが表示される
  19. Bugzilla 20551: safeコードやデリゲートを使用すると、関数フレームへの参照をエスケープすることができる。
  20. Bugzilla 20592: [GCC ASM] [ICE] dmd/iasmgcc.d(332):アサーション失敗
  21. Bugzilla 20613: betterCの文字列スイッチが7つ以上のラベルで失敗する

DMDコンパイラの機能強化

  1. Bugzilla 20569: [DIP1000]scope 構造体フィールドのアドレスを取ることができるようになった。

phobosのリグレッション

  1. Bugzilla 7006: std.math.pow (integral, integral)が負の指数でクラッシュする

phobosのバグ

  1. Bugzilla 5232: [パッチ] std.conv.to & std.conv.roundTo が非常に大きな数に対して無効なオーバーフローを報告する。
  2. Bugzilla 5628: [patch] std.math unittest 無効 - SSE2 の pow() で丸め誤差が発生する。
  3. Bugzilla 7446: [TDPL] 非同期ファイルコピーの例がOwnerTerminatedでクラッシュする。
  4. Bugzilla 8388: std.trait.MemberFunctionsTupleがコンストラクタやデストラクタで動作しない
  5. Bugzilla 12461: 型定義と opOpAssign
  6. Bugzilla 15891: std.algorithm.mapの2階層後にstd.algorithm.cacheを実行するとコンパイラエラーが発生する。
  7. Bugzilla 17427: std.concurrencyで未初期化メールボックスの内部エラー
  8. Bugzilla 20232: WhiteHoleは@safeインターフェイス関数で使えない。
  9. Bugzilla 20259: [Socket.bind関数] どんな例外をスローするのかがわからない。
  10. Bugzilla 20493: BigInt * BigInt の結果が正しくない。
  11. Bugzilla 20521: Wine / XP で空の変数のチェックと取得に失敗する
  12. Bugzilla 20540: (White|Black)Holeがreturn|scope関数で動作しない。
  13. Bugzilla 20542: std.math.nextafter(NaN, y)とnextafter(x, NaN)はNaNを返すべきである。
  14. Bugzilla 20544: unix ドメインのソケットピアで socket.remoteAddress がメモリ不足エラーを投げる
  15. Bugzilla 20585: std.stdio.Fileのopen()に失敗するとFileが無効な状態になる
  16. Bugzilla 20639: いくつかのBitArrayメソッドはconst/pure/nothrow/...であるべきだ。

phobos の機能拡張

  1. Bugzilla 20146: std.bigint.BigIntから組み込み浮動小数点型へのキャストを許可する。
  2. Bugzilla 20480: std.getopt を DIP 1000 に対応させた。
  3. Bugzilla 20548: RandomCoverで選択肢が1ワードにまとめられない場合、bool[]の代わりにビットベクタを使用する
  4. Bugzilla 20566: std.sformatは浮動小数点値を表示するときにメモリの割り当てを避けるべきである

Druntimeのリグレッション

  1. Bugzilla 19322: デバッグ時に例外をスタックトレース付きでフォーマットすると、多くのメモリが消費され、システムに解放されない。

Druntimeのバグ

  1. Bugzilla 15322: バージョン(Unicode)はデフォルトのエイリアスのみに影響する。
  2. Bugzilla 16658: Win32API: デフォルトの IE ver.
  3. Bugzilla 19489: Null関数呼び出しでスタックトレースされない。
  4. Bugzilla 19909: core.stdc.errnoでWindowsのPOSIXエラーコードが見つからない
  5. Bugzilla 20459: ランタイムargの解析は'--'で止めるべきである。
  6. Bugzilla 20468: emplaceがコンストラクタ引数の(l/r)値を転送しない。
  7. Bugzilla 20476: chainTogetherが-dip1008で例外をリークする
  8. Bugzilla 20512: memchrの戻り値の型はvoid*ではなくinout(void)*であるべきである。
  9. Bugzilla 20513: wmemchr の戻り値の型は wchar_t* ではなく inout(wchar_t)* であるべきである。
  10. Bugzilla 20591: スタックトレースを表示する際に、ldcがファイルのディレクトリを表示しない。
  11. Bugzilla 20629: atomicStoreが-m64を使用する構造体ではコンパイルされない。

Druntimeの機能強化

  1. Bugzilla 19218: object.destroyは静的配列のクラスをチェックすべきである。
  2. Bugzilla 20550: GCでトレープに固定シードを使う
  3. Bugzilla 20567: GCは単純なプログラムでは並列マーキングのためにスレッドを起動しないようにする。
  4. Bugzilla 20577: WindowsのUACに関連するシンボルを追加した。

dlang.orgのバグ

  1. Bugzilla 20500: ホームページで例を実行すると "1 unittests passed "としか表示されない。

インストーラの強化

  1. Bugzilla 20489: インストーラがインストール後にファイルを削除する

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

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

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