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

変更ログ 2.104.0

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

Download D 2.104.0
リリース 2023年06月01日

2.104.0には、11の大きな変更と63のBugzillaの問題の修正が含まれている。 多大なる感謝を 38人の貢献者 2.104.0を可能にしてくれた

D 2.104.0 におけるすべてのバグ修正と機能拡張のリスト

コンパイラの変更

  1. 属性推論がコールスタックで失敗した場合のエラーメッセージを改善した。

    ある関数が属性推論に失敗すると、その関数のすべての呼び出し元も属性推論に失敗する。 その結果表示されるエラーメッセージは、属性が明示されている最上位の関数のみを指す:

    void main() @nogc
    {
        fun();
    }
    
    auto fun()
    {
        funImpl();
    }
    
    auto funImpl()
    {
        int[] a = [1, 2, 3];
    }
    

    app.d(4): Error: @nogc function D main cannot call non-@nogc function app.fun
    

    これでは、@nogcfun 属性が推論されなかった根本的な理由が分からず、より良い情報を得るために回避策を使うことになった。 新しいエラーメッセージは、属性の推測に失敗した関数を示す:

    app.d(4): Error: @nogc function D main cannot call non-@nogc function app.fun
    app.d(7):        which calls app.funImpl
    app.d(14):        which wasn't inferred @nogc because of:
    app.d(14):        array literal in @nogc function app.funImpl may cause a GC allocation
    

    注釈: これは2.101以降、すでに@safe に実装されていたが、現在は@nogcnothrowpure に拡張されている。

  2. ; を空の文として使用することはエラーになった。

    これはエラーになりやすいため、2.075.0から非推奨となっている:

    void main()
    {
        foreach (i; 0 .. 8);
        {
            // 上のセミコロンが誤っているため、
            // このブロック文は一度だけ実行される。
            // ループ本体ではない
        }
    }
    

    これでエラーになる。

    app.d(3): Error: use { } for an empty statement, not ;
    

  3. extern(D)/extern(C++) 以外の関数でのin パラメータの使用は非推奨である。

    -preview=in をデフォルトで有効にするための準備である、 DリンクもC++リンクもない関数でin パラメータを使用することは非推奨である。 ユーザはin のインスタンスをconst またはscope const で置き換えることができる。 v2.101.0の変更履歴を参照のこと。 を参照のこと。

  4. in ref onパラメータは非推奨となり、代わりに-preview=in

    in ref (またはref in) を関数のパラメータに使用することは非推奨となった。 ユーザーは、ref を削除し、-preview=in でコンパイルすることが推奨される、 でコンパイルすることが推奨される。このコンパイルは、パラメータが参照渡しか値渡しかを推論する。 特定のABIを必要とするユーザーは、代わりにscope const ref を使用することが推奨される。 これはauto ref in にも適用されることに注釈:in-preview=in は等価である、 と等価であるが、後者は関数をテンプレート化する必要はない。

  5. 修飾されたオブジェクトをスローすることは非推奨となった。

    以前は、immutableconstinoutshared の例外をスローし、非修飾の 節でキャッチすることができた。 をスローし、非修飾のcatch (Exception e) 節でキャッチすることができた。 これでは型安全性が壊れてしまう。 修飾されたオブジェクトをスローすることは非推奨となった。これは これは、catch 節の中で、不変オブジェクトの変異を防ぐのに役立つ。

    ランタイムはまた、(例えばスタックトレースを含むように)スローされたオブジェクトを修正する。 トレースを含むように)修正することもある。これは、const またはimmutable オブジェクトに違反する可能性がある。オブジェクトに違反する可能性がある。 オブジェクトをスローすることは、この理由からも非推奨となっている。

  6. ユーザー定義属性はテンプレート引数を解析するようになった。

    UDAに型を記述することはすでに許されていたが、パーサーは直接記述された基本型を拒否し、エイリアスを使用する必要があった。

    alias Tint = int;
    
    @Tint void f();
    

    また、テンプレートのインスタンス化において、括弧なしで現れる単純なリテラル(例:foo!"arg" )は、属性として使われるときに括弧を必要とする:

    @("my test") unittest
    {
    
    }
    

    現在では、テンプレートのインスタンス化foo! の後に現れる引数も、@ 属性の後に現れることができる。

    @int void f();
    
    @"my test" unittest
    {
    
    }
    

ライブラリの変更

  1. のstatic assertメッセージが改善された。std.algorithm.comparison.clamp

    これまでは、clamp 、渡された型が使えるかどうかをチェックするためにテンプレート制約を使っていた。 が使えるかどうかをチェックしていた。もしそうでない場合、その原因を突き止めるのは非常に面倒だった。

    テンプレート制約はオーバーロードの解決には使われないので、制約を静的アサー トに移した。 制約を、表現力豊かなエラーメッセージを持つstatic assertに移した。 メッセージに移される。

  2. std.typecons.Rebindable すべての型をサポートするようになった。

    Rebindable を含むあらゆる型の値の保存とリバインドに使用できるようになった。 値を含む。 immutable struct

    安全性を確保するため、保存された値は参照によってアクセスできない。 を参照することはできない。

    これまでサポートされていたすべての型(クラス、インターフェイス、配列)の実装は変更されていない。 および配列)に使用される実装に変更はない。

ツールの変更

  1. rdmdがサポートする-shared

    rdmdはDMDの-shared スイッチを理解し、-lib と同じように、デフォルトの出力ファイル名を適切に設定するようになった(プラットフォームによって、.dll.so.dylib )。

dubの変更

  1. SDL/JSON に新しいプロパティ 'cSourcePaths' と 'cImportPaths' を追加した。

    cSourcePaths 指定されたすべてのディレクトリにある C ソースファイルをコンパイラに渡す。 cImportPaths' に指定されたディレクトリで見つかったすべての C ソースが D コンパイラに渡される。 これにより、D ソースファイルとは別に C ソースを保存していたプロジェクトを D に移植する際の後方互換性が確保される。

    2番目のキーワード「cImportPaths」は、Cヘッダーの検索パスを追加する。これらのディレクトリはDコンパイラに渡される。 に渡される。インクルード・パスは現在 Dインポートパスと一緒になっているからである。将来的には、Dコンパイラーに渡されるCの独立した検索パスをサポートするように変更されるかもしれない。

  2. パッケージの内部保存方法が変更された

    以前のバージョンのdubでは、パッケージは次のような形式で保存されていた: $CACHE_PATH/$PACKAGE_NAME-$PACKAGE_VERSION/$PACKAGE_NAME/ このバージョンからは、以下の形式になる: $CACHE_PATH/$PACKAGE_NAME/$PACKAGE_VERSION/$PACKAGE_NAME.

    新しいレベルを導入することで、ユーザーが実際にインストールされているパッケージを素早く一覧できるようになる。 また、頻繁に更新される可能性のあるパッケージが見えにくくなる。 頻繁に更新されるパッケージが見えにくくなる。また、様々なコマンド(例:du)がより便利になる。 様々なコマンド(例えば )をより便利なものにし、パッケージのGC関数への道を開き、手動での閲覧を容易にする。 ブラウジングを容易にする。

    さらに重要なのは、将来のバージョンのdubが、パッケージへのパスからバージョンを推測できるようになることだ。 パッケージへのパスからバージョンを推測できるようになる。 を読む(あるいは編集する)必要がなくなる。


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

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

  1. Bugzilla 23764: メッセージが2回表示される。
  2. Bugzilla 23832: dmd リグレッション 2.103.0 実行時にデコードを呼び出せないサイレントエラー
  3. Bugzilla 23874: -profile=gc segfaults / ICE リグレッション
  4. Bugzilla 23882: ICE(segfault)が厄介なエイリアスにこのコード
  5. Bugzilla 23905: SumTypeを不透明な列挙型で初期化するとICEが発生する。
  6. Bugzilla 23913: いくつかのCシンボルで__traits(getMember)が失敗する

DMDコンパイラのバグ修正

  1. Bugzilla 12118: 不変のデータを "スロー"で変更する。
  2. Bugzilla 18493: [BetterC] postblitで集約型が使えない。
  3. Bugzilla 19454: 無名関数パラメータとの名前の衝突 : [betterC] postblitで集約型を使用できない。
  4. Bugzilla 19706: 構造体の属性推論に失敗した。
  5. Bugzilla 20737: TLS 変数が Windows MSVC ターゲットの -betterC で使用できない。
  6. Bugzilla 21667: スコープ・パラメータが「前方参照のためサイズがない」原因になる。
  7. Bugzilla 22760: CppMangleVisitor.template_argのセグメンテーション・フォールト
  8. Bugzilla 22785: joinerがimmutableの範囲をサポートしていない。
  9. Bugzilla 22960: importC: K&Rスタイルの関数は可変長引数関数を想定している。
  10. Bugzilla 23014: ImportC:静的スレッドローカルが機能しない。
  11. Bugzilla 23055: ImportC:CTFEで複合リテラル配列をポインタとして使用すると「無効なポインタの参照解除」が発生する。
  12. Bugzilla 23402: importC: インクルードから関数定義をインポートすると、D名の衝突を引き起こす可能性がある。
  13. Bugzilla 23427: ImportC: ビットフィールドの組み合わせによっては、間違ったサイズの構造体になってしまう。
  14. Bugzilla 23509: ImportC: GLibCのassert()に文式の拡張が必要である。
  15. Bugzilla 23691: compilable/test22294.i:16:1: コントロールZがファイルの終わりと解釈される
  16. Bugzilla 23715: ImportC: C11 6.2.4-5に従って "static "なしで関数スコープで宣言された_Thread_local変数を拒否しない。
  17. Bugzilla 23727: ImportCは虚数の実数をサポートする。
  18. Bugzilla 23784: ImportC: __ptr32, __ptr64 をサポートした。
  19. Bugzilla 23787: ImportC: __unaligned をサポートする。
  20. Bugzilla 23789: ImportC: __declspec(align(n)) : ImportC: __unaligned : ImportC: __unaligned : ImportC: __unaligned(n)
  21. Bugzilla 23795: Complex!doubleを_Complex!floatにキャストできない。
  22. Bugzilla 23801: ImportC: 列挙定数がintに収まらない。
  23. Bugzilla 23802: ImportC: __volatile__はvolatileの別名である。
  24. Bugzilla 23808: #ImportC: __volatile__はvolatileのまた別のエイリアスである。
  25. Bugzilla 23822: 非推奨の構造体エイリアスは完全に無視される。
  26. Bugzilla 23826: テンプレートに渡された非推奨型メンバが警告しない。
  27. Bugzilla 23836: 非静的メンバのtypeof(super)に対して2つのエラーが表示される
  28. Bugzilla 23837: Windowsのx86ではImportCのリンクに失敗するが、x64では成功する。
  29. Bugzilla 23838: DMD lexer / parser の例はコンパイルできないかもしれない。
  30. Bugzilla 23861: refとaliasでコンパイラのセグメンテーションフォールトが発生する。
  31. Bugzilla 23863: typeofAliasSeq!() を引数として拒否する
  32. Bugzilla 23866: ImportC: 複数の __declspecs が拒否される。
  33. Bugzilla 23867: ImportC: 識別子が未定義である。__builtin_isnan
  34. Bugzilla 23869: ImportC:未定義の識別子isfinite
  35. Bugzilla 23873: [ICE] インポート時にセグメンテーションエラーが発生した。static if ; else auto x
  36. Bugzilla 23885: [CI] g++ による C++ 相互接続テストが失敗する

DMDコンパイラの機能強化

  1. Bugzilla 13577: foreachループのimmutableが拒否された場合のエラーメッセージをより分かりやすくした。
  2. Bugzilla 17374: 属性推論エラー・メッセージの改善
  3. Bugzilla 20268: 匿名関数のパラメータ不一致エラーにパラメータが含まれないようにした。
  4. Bugzilla 22559: ImportC:gnuの大文字と小文字の範囲をサポートした。
  5. Bugzilla 23401: ImportC: Cプリプロセッサを選択するために-cpp=ファイル名スイッチを追加した。
  6. Bugzilla 23862: with文は列挙型を持つ式を受け入れるべきである。

Phobos バグ修正

  1. Bugzilla 19642: std.range.slide!(No.withPartial) の長さのない前方範囲:1つのウィンドウを期待すると空になる
  2. Bugzilla 22147: DListがpostblitを無効にした構造体を受け付けない。
  3. Bugzilla 22786: maxElement などは immutable の range をサポートしていない。
  4. Bugzilla 23834: std.file : c関数へのファイルリンクが無効で更新が必要である。
  5. Bugzilla 23846: std.math が macos rosetta でコンパイルできない。

phobosの機能強化

  1. Bugzilla 6106: replace関数中の変更を追跡する
  2. Bugzilla 14478: isInputRangeはコピー不可能な要素の範囲を許すべきである。
  3. Bugzilla 23769: Lambdaはコンパイルできない単項述語ではない

Druntimeのバグ修正

  1. Bugzilla 14891: ヌル終端文字列を持たない profilegc_setlogfilename が fopen 時に失敗することがある。
  2. Bugzilla 23949: FreeBSDとDragonFlyBSDのcore.stdc.assert_が正しくない。

Druntimeの機能強化

  1. Bugzilla 11989: TickDurationのフェーズアウト

dlang.orgのバグ修正

  1. Bugzilla 14932: 言語仕様では共有属性が何をするのか定義されていない
  2. Bugzilla 23698: ImportC: __stdcallがMSVC/DMCの拡張機能としてサポートされていることが文書化されていない。
  3. Bugzilla 23699: ImportC: struct/union/enumが暗黙のtypedefを導入するという不明瞭なドキュメントがある。
  4. Bugzilla 23872: C言語とのインターフェイス: printfセクションの呼び出し" の間違った例

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

このリリースを可能にしてくれたすべての素晴らしい人々に心から感謝する。

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