変更履歴 2.099.0
Download D 2.099.0
リリース 2022年03月06日
コンパイラの変更
- パラメータにref scope return 属性が使用され、return scope が表示される場合、return はscope に適用され、ref には適用されない。
- __traits(parameters) がコンパイラーに追加された。
- ImportC にモジュールをインポートする機能が追加された。
- 互換性のあるシーケンス間のキャスト
- 関数ごとにアセンブラ・コードを出力する新しいコマンド・ライン・スイッチ -vasm が追加された。
- preview=intpromote' スイッチがデフォルトで設定されるようになった。
- -m32 ウィンドウをターゲットにした場合、MS Coff オブジェクトを生成するようになった。
- 非 root モジュール内の unittest を無視するようになった。
- main 型 を返せるようになり、戻り値推論をサポートする。noreturn
- スイッチケースを通過するとエラーになるようになった
- DIP 1034で提案されたスロー式が実装された
- 集約イニシャライザを取得するための __traits(initSymbol) が追加された。
ライブラリの変更
D 2.099.0のすべてのバグ修正と機能強化のリスト。
コンパイラの変更
- パラメータにref scope return 属性が使用され、return scope が表示された場合、return はscope に適用され、ref には適用されない。
以前は、return がref に適用されることがあった。 混乱を招くことがある。return scope が隣接し、その順番で表示されない場合、 に適用される。return はref に適用される。
- __traits(parameters) がコンパイラに追加された。
関数内で使用された場合、この特性はその関数のパラメータのタプルを返す。 例えばその関数のパラメータのタプルが得られる:
int echoPlusOne(int x) { __traits(parameters)[0] += 1; return x; }
これは、関数のパラメータを単純に転送する(別の関数の引数になる)ために使用できる、 事実上、可変長引数関数と通常の関数を統一することができる。 つまり、次のようなパターンが可変長なしで可能になる:
int add(int x, int y) { return x + y; } auto forwardToAdd(Pack...)(Pack xy) { return add(xy); }
になるだろう。
int add(int x, int y) { return x + y; } auto forwardToAdd(int x, int y) { return add(__traits(parameters)); }
ネストされた関数やラムダの内部で使用された場合、トレイトはそのネストされた関数やラムダの引数を取得する。 を取得し、その中に含まれる引数は取得しない。
例えば、以下のような主張が成り立つ:
int testNested(int x) { static assert(typeof(__traits(parameters)).length == 1); int add(int x, int y) { static assert(typeof(__traits(parameters)).length == 2); return x + y; } return add(x + 2, x + 3); }
オーバーロードされたopApply を使ってforeach の内部で使われた場合、トレイトはforeach関数ではなくデリゲートにパラメータを渡す。 デリゲートへのパラメータを生成し、foreachが内包する関数は生成しない。
class Tree { int opApply(int delegate(size_t, Tree) dg) { if (dg(0, this)) return 1; return 0; } } void useOpApply(Tree top, int x) { foreach(idx; 0..5) { static assert(is(typeof(__traits(parameters)) == AliasSeq!(Tree, int))); } foreach(idx, elem; top) { static assert(is(typeof(__traits(parameters)) == AliasSeq!(size_t, Tree))); } }
- ImportCにモジュールをインポートする機能を追加する。
ImportCは、__importキーワードを使って、Cコードでモジュールをインポートできるようになった:
__import core.stdc.stdarg; // Dのソースファイルをインポートする __import test2; // ImportCファイルをインポートする
int foo() { va_list x; 1 + Aを返す; }
test2.cである:
enum E { A = 3 };
キーワードの後の__import の構文は、Dのimport 宣言と同じである。
- 互換シーケンス間のキャスト
このリリース以前は、同じ型の組み込みシーケンス間のキャストは認められていなかった。
このリリースから、同じ長さのシーケンス間のキャストは、キャストされたシーケンスの基礎となる型がターゲット・シーケンスの型に暗黙のうちに変換可能である場合に受け入れられる。
alias Seq(T...) = T; void foo() { Seq!(int, int) seq; auto foo = cast(long) seq; pragma(msg, typeof(foo)); // (int, int) auto bar = cast(Seq!(long, int)) seq; // 許可 pragma(msg, typeof(bar)); // (long, int) }
- 関数ごとにアセンブラ・コードを出力する新しいコマンドライン・スイッチ -vasm
新しい-vasmコンパイラー・スイッチは、生成されたアセンブラー・コードをコンソールに出力する。 コードをコンソールに出力する。典型的なディザスエンブラーとは異なり、すべての定型文が省略され、各関数のアセンブラ・コードだけが出力される。 各関数のアセンブラ・コードだけを出力する。例えば次のようになる、 次のコードをコンパイルする:
// test.d int demo(int x) { return x * x; }
dmd test.d -c -vasm :
_D4test4demoFiZi: 0000: 89 F8 mov EAX,EDI 0002: 0F AF C0 imul EAX,EAX 0005: C3 ret
- preview=intpromote」スイッチがデフォルトで設定されるようになった。
整数の昇格はCの積分昇格ルールに一貫して従うようになった。 これは、byte,ubyte,short,ushort,char, またはwchar 型のオペランドを持つ単項演算子- および~ に影響する。 演算子が適用される前にオペランドはint に昇格し、結果の型はint になる。
古い動作に戻すには、'-revert=intpromote'スイッチを使うか、単項演算子の結果を明示的に小さい積分型に戻す:
void main() { // 注釈: byte.max = 127, byte.min = -128 byte b = -128; int x = -b; // 新しい動作: x = 128 int y = cast(byte)(-b); // 古い動作: y = -128 byte b2 = cast(byte) -b; // キャストが必要になった }
- -m32 ウィンドウをターゲットにした場合、MS Coffオブジェクトが生成されるようになった。
-m32mscoff スイッチは非推奨であり、代わりに-m32 を使うべきである。 OMF用のコードを生成するための新しいスイッチ-m32omf が追加された。このスイッチ OMFはまもなくサポートされなくなるので、このスイッチの使用は推奨されない。
- 非ルート・モジュールのunittestを無視する
これは主に、テンプレート内のunittestが、以下の場合にのみインスタンス化されることを意味する。 テンプレートがレキシカルに宣言されているモジュールがルート・モジュールのひとつである場合にのみインスタンス化されるようになった。
例えば、あるプロジェクトを-unittest 。 unittestsを実行しない。
テンプレート内部でunittestを宣言することはアンチパターンとみなされる。ほとんどの場合 ほとんどの場合、ユニテストはテンプレートのパラメータに依存せず、固定引数でテンプレートをインスタンス化する。 固定引数でテンプレートをインスタンス化する(例えば、Nullable!T "unittests インスタンス化するNullable!int など)。 テンプレートのインスタンス化ごとに同じテストをコンパイルして実行することは望ましくない。 しかし、テストされる関数のすぐ下にunittestを追加することは、間違いなく局所性のために良いことである。 そのため、unittestはテンプレート内部で終わってしまう。
テンプレートのunittestを確実に実行するには、同じモジュールでインスタンス化する必要がある。 同じモジュールでインスタンス化されなければならない。
この変更により、 特殊なケースを排除した、よりストレートなテンプレート・エミッション・アルゴリズムへの道が開かれた。 -unittest アルゴリズムに道を開いた。 -allinst 、ルート・モジュールでインスタンス化されたすべてのテンプレートを排出するようになった。 を排出するようになった。
- main noreturn 型を返すことができるようになり、戻り値の推論をサポートした。
無限ループや常に例外を投げるために)main が返らない場合、 を返すと宣言できるようになった。 noreturnを返すと宣言できるようになった。 https://dlang.org/spec/type.html#noreturn を参照のこと。
main がauto とともに宣言されている場合、推論される戻り値の型は 、 、 のいずれかでなければならない。 void int noreturnのいずれかでなければならない。
- スイッチ・ケースを通過するとエラーになる
これは2.072.2で非推奨になったもので、switchケースの最後にbreak 文を忘れるというよくあるミスがあったからだ。 非推奨の警告は、現在ではエラーに変わっている。
あるケースから次のケースへと制御フローを継続させたい場合は、goto case; 。
void parseNumFmt(char c, out int base, out bool uppercase) { switch (c) { case 'B': // フォールスルーが許可され、caseにはコードがない case 'b': base = 2; // エラー、case 'X'への偶発的なフォールスルー case 'X': uppercase = true; goto case; // 許可、明示的なフォールスルー case 'x': base = 16; break; default: break; } }
- DIP1034で提案されたスロー式が実装された。
このリリース以前は、throw 。 他の式の中に記述することはできなかった。これは面倒だった。 ラムダから式をスローしたい場合などだ:
SumType!(int, string) result; result.match!( (int num) => writeln("Found ", num), // (string err) => throw new Exception(err) // 期待される式 (string err) { throw new Exception(err); } // OK、明示的なボディを導入 );
throw は、DIP1034 [1]で規定されているように式として扱われるようになった。 より柔軟で使いやすくなった。
SumType!(int, string) result; result.match!( (int num) => writeln("Found ", num), (string err) => throw new Exception(err) // 動作する );
[1] https://github.com/dlang/DIPs/blob/master/DIPs/accepted/DIP1034.md
- 集約イニシャライザーを得るために__traits(initSymbol)が追加された。
__traits(initSymbol, A) A が または のインスタンスの初期状態を保持する が得られる。 スライスは、 のイニシャライザー・シンボルを指すか、 がゼロイニシャライザーであれば、 のインスタンスの初期状態を保持する が得られる。 がゼロ初期化されている場合は、 の動作と一致する。 class struct const(void)[] A A null A TypeInfo.initializer()
このトレイトは、例えば、malloc のクラス・インスタンスを、 : に依存せずに初期化するために使うことができる。 TypeInfo に頼ることなく、クラス・インスタンスを初期化することができる:
class C { int i = 4; } void main() { const void[] initSym = __traits(initSymbol, C); void* ptr = malloc(initSym.length); scope (exit) free(ptr); ptr[0..initSym.length] = initSym[]; C c = cast(C) ptr; assert(c.i == 4); }
ランタイムの変更
- OpenBSD ioctls のサポートを追加。
OpenBSDの/usr/include/sys/filio.h、/usr/include/sys/ioccom.h、/usr/include/sys/ioctl.h、/usr/include/sys/ttycom.hにあるOpenBSDのioctlsをサポート。
- @safe クラスのサポートを追加する。opEquals
object.opEquals 比較される静的型が メソッドを提供し、そのメソッドも である場合、 となる。 opEquals @safe @safe
ライブラリーの変更
- checkedintをexperimentalから移動した。
std.experimental.checkedintはstd.checkedintになった。古い名前 はまだ利用可能で、新しいものを公にインポートしている。 非推奨である。
- chunkBy @safe フォワードレンジとsplitWhen @safe
std.algorithm.iteration.splitWhen を使うようになった、 ほとんどのPhobosレンジがそうであるように、 。 のインスタンス化もそうなる。 。 の推論はまだ実装されていない。 std.algorithm.iteration.chunkBy chunkBy
@safe void fun() { import std.algorithm; // 各要素の特定の属性によるグループ化: auto data = [ [1, 1], [1, 2], [2, 2], [2, 3] ]; auto r1 = data.chunkBy!((a,b) => a[0] == b[0]); assert(r1.equal!equal([ [[1, 1], [1, 2]], [[2, 2], [2, 3]] ])); auto r2 = [1, 2, 3, 4, 5, 6, 7, 8, 9].splitWhen!((x, y) => ((x*y) % 3) > 0); assert(r2.equal!equal([ [1], [2, 3, 4], [5, 6, 7], [8, 9] ])); }
- std.csv オプションでカラム数が可変のcsvファイルを扱えるようになった。
デフォルトでは、std.csv 、行の列数が最初の行の列数と等しくない場合にスローされる。 をスローする。 可変カラム数を許可または不許可にするには、bool を渡すことができる。 csvReader に渡すことができる。
string text = "76,26,22\n1,2\n3,4,5,6"; auto records = text.csvReader!int(',', '"', true); assert(records.equal!equal([ [76, 26, 22], [1, 2], [3, 4, 5, 6] ]));
- std.experimental.loggerのデフォルトのログレベルをLogLevel.warningに変更する。
std.experimental.logger.core.sharedLog がデフォルトで返されるようになった。 に設定された logger を返すようになった。
- std.conv.to std.typecons タプルを受け付ける
旧バージョンのto では std.typecons 変換をサポートしていなかった。このリリースから このリリースから、タプルは次のようにサポートされるようになった。 以下の例で強調されている:
void main() { import std.conv : to; import std.typecons : Tuple; auto data = ["10", "20", "30"]; auto a3 = data.to!(int[3]); // 以前のバージョンと現在のバージョンで受け入れられた auto t3 = data.to!(Tuple!(int, int, int)); // 過去のバージョンでは拒否され、現在は了承されている }
dubの変更
- Windowsに対応した:PDBファイルをtargetPath にコピーする。
実行ファイルまたはDLLのリンク時にデフォルトのPDBファイルが生成される場合 (のリンク時にデフォルトのPDBファイルが生成される場合(例:/PDB:my\path.pdb lflagなし)、それはターゲット・ディレクトリにもコピーされる。 ディレクトリにもコピーされる。
D 2.099.0のすべてのバグ修正と機能強化のリスト:
DMDコンパイラのリグレッション修正
- Bugzilla 17635: [REG 2.066.0] 一意なimmutable(int)**をimmutableに変換できない。
- Bugzilla 21367: 名前なし共用体はコピーコンストラクタとデストラクタを全メンバーに伝播する。
- Bugzilla 21538: デリゲートパラメータでより多くの属性でのオーバーライドが許可される
- Bugzilla 21674: [REG v2.086]alias this 関数呼び出し時に間違った非推奨メッセージが表示される。
- Bugzilla 21719: [REG 2.072] クラスの"auto"メソッドが属性を正しく推測しない。
- Bugzilla 22130: [REG2.080.1][DIP1000] 純粋ファクトリー関数が動作しなくなった。
- Bugzilla 22163: [REG 2.094.0] static float配列とそれにアクセスするデリゲートによる間違ったコード
- Bugzilla 22226: [REG 2.095.1] __ctfe + コンストラクタで構造体メンバの初期化に使用される条件式での関数呼び出しがICEを引き起こす。
- Bugzilla 22254: テンプレートが2回インスタンス化されると、異なる不変修飾子になる
- Bugzilla 22512: importC: 不完全な配列型はイニシャライザを持たなければならない。
- Bugzilla 22659: [REG master] Error: '(S[2] arr = __error__;)' はまだ CTFE に実装されていない。
- Bugzilla 22676: fullyQualifiedNameが2.098.1でコンパイルに失敗する -- __traits(isScalar ...) の呼び出しに何らかの問題がある。
- Bugzilla 22705: ImportC: struct typedefへの前方参照がすでに存在する構造体を与える。
- Bugzilla 22714: ICE:ClassDeclaration::isBaseOfのアサーションに失敗した。
- Bugzilla 22730: master:"dmd -i" はインポートされたモジュールのユニットテストを含まない。
- Bugzilla 22738: std.file.tempDirが既に/を持っていても追加/を追加する
- Bugzilla 22761: [REG 2.099] importC: Error: 異なる "型"で再宣言された。
- Bugzilla 22780: [REG 2.090] スコープクラスへの変数参照はスコープでなければならない。
- Bugzilla 22804: [REG 2.099] リンクせずに複数のファイルをコンパイルすると壊れたオブジェクトファイルが生成される
- Bugzilla 22816: [REG 2.099] パーサーが他の拡張子のファイルを読み込む
- Bugzilla 22817: [REG 2.099] ファイルが見つからないと誤解を招くエラーメッセージが表示される
- Bugzilla 22826: [REG 2.098] #line が"ImportC" ラインマーカーフラグを受け付ける
DMDコンパイラのバグ修正
- Bugzilla 2: 新しいdmdコマンドライン引数をフックアップする
- Bugzilla 3: MatchExp::toElem の終了または削除
- Bugzilla 3818: 間違ったforeachに対する一般的なエラーメッセージ
- Bugzilla 8346: リテラル 00 - 07 を UFCS で使用すると奇妙なエラーが発生する
- Bugzilla 10584: ネストされたクラスを構築する際のデフォルトエラー
- Bugzilla 15711: 再帰テンプレート経由で渡された[char]/文字列を構造体フィールドから抽出する際の型推論が正しくない。
- Bugzilla 15804: 入れ子構造体テンプレートのUDAが見つからない。
- Bugzilla 17870: 親クラスのメンバと子クラスのメンバが混在したエイリアスを作成できない。
- Bugzilla 17977: [DIP1000] デストラクタで一時的な構造体インスタンスへの参照をエスケープできるようになった。
- Bugzilla 18960: DIP1000]デストラクタは一時的な構造体インスタンスへの参照をエスケープできる。
- Bugzilla 19320: -covと-O yield変数がセットされる前に使用される
- Bugzilla 19482: 静的foreachローカル変数に属性が正しく適用されない。
- Bugzilla 19873: preview=dip1000の場合でも、関数はデフォルトで@systemであるべきである。
- Bugzilla 20023: コンパイル時にdip1000とdip1008を分けてコンパイルする @safety
- Bugzilla 20691: スコープ静的配列からスコープ動的配列への変換はエラーにすべきである。
- Bugzilla 20777: ユーザー定義型を列挙型の基本型にするとコンパイルに失敗する。
- Bugzilla 20904: dip1000 暗黙の変換でエラーになる。
- Bugzilla 21431: switchのケース範囲の最大数と実際の数が正しく報告されない
- Bugzilla 21844: makedepsオプションがスプリアス/不正な依存関係を追加する
- Bugzilla 21969: importC: Error: ビットフィールドがサポートされていない。
- Bugzilla 22124: preview=dip1000でコンパイルするとクロージャが破損する。
- Bugzilla 22127: UDA と関数リテラルでコンパイラのアサーション失敗パーサが発生する。
- Bugzilla 22137: -preview=dip1000 を指定すると、tupleof の可視性チェックが有効になる。
- Bugzilla 22139: コンパイラが -preview=dip1000 でコンパイルする際の object.dup の特殊なケースを指定する。
- Bugzilla 22233: importC: (identifier)() がキャスト式として正しく解析されない。
- Bugzilla 22236: sizeof an empty C struct should be 0, not 1.
- Bugzilla 22245: importC: Error:. が見つかった。)
- Bugzilla 22267: ImportC: RHSが括弧で囲まれた型付き変数の初期化が解析されない。
- Bugzilla 22277: 強く純粋な関数呼び出しの削除は間違った最適化である。
- Bugzilla 22283: -preview=in -inlineはobject.d内で奇妙なエラーを引き起こす。
- Bugzilla 22285: マークダウン・テーブルが正しくパースされない
- Bugzilla 22287: Windowsのextern(C++)の仮想関数が曖昧である。
- Bugzilla 22298: [DIP1000] ネストされた関数のスコープ・パラメータは、それを囲む関数の変数に代入することができる。
- Bugzilla 22305: ImportC":インポートC: #pragma STDC FENV_ACCESS がサポートされていない。
- Bugzilla 22311: DWARFでdmdスライスの長さが間違っている
- Bugzilla 22323: DLL の C++ クラスの仮想デストラクタでリンクエラーが発生した。
- Bugzilla 22339: importC: 文字リテラルのエラーメッセージが文字リテラルではなく整数として報告される。
- Bugzilla 22342: importC: Error: function 'func()' is not callable using argument types '(int)'.
- Bugzilla 22344: ImportC: 関数のオーバーロードは許可されていない。
- Bugzilla 22356: 関数の戻り値の型をミックスインすることはできない。
- Bugzilla 22361: インポートに失敗すると、誤解を招くエラーメッセージが表示される。
- Bugzilla 22365: コンパイラのクラッシュ: Semantic3パスのStatementSemanticVisitor.visitor(TryCatchStatement)のtcs.body_ null (dmd/statementsem.d:3956)
- Bugzilla 22366: (dmd/statementsem.d:3956) : [dip1000] スコープ変数を連想配列に代入できる
- Bugzilla 22372: ループインデックスが-release -Oで正しく最適化されていない。
- Bugzilla 22387: Noreturn initは型修飾子を失う。
- Bugzilla 22401: importC: Error: 暗黙的に'const(int[1])'型を'const(int*)'型に変換できない。
- Bugzilla 22415: importC: Deprecation: switch case fallthrough - 'goto case;'を使用する。
- Bugzilla 22421: static foreachはインデックス変数と反復変数の間に意味上の違いをもたらす
- Bugzilla 22467: DWARF: wchar_tが間違ったDECL属性を報告する。
- Bugzilla 22510: コピーコンストラクタを持つ構造体をデフォルトコンストラクタでヒープ割り当てできない。
- Bugzilla 22515: 修飾子を持つ集約定義は構造体とクラスの間で矛盾がある。
- Bugzilla 22517: [REG 2.093][ICE] dmd/lexer.d:398でバスエラーが発生した。
- Bugzilla 22527: 範囲外の浮動小数点値を符号付き整数にキャストするとオーバーフローする
- Bugzilla 22533: OpenBSD:32 ビット用の正しい size_t 互換を使用する
- Bugzilla 22535: ImportC: gcc/clang の math intrinsics が拒否された。
- Bugzilla 22553: ImportC: 未定義の識別子。__uint128_t
- Bugzilla 22566: Error: unknown architecture feature4+avx for-target
- Bugzilla 22573: Illumos/Solaris上のDMDコンパイラのエラー
- Bugzilla 22590: importC: 静的関数にデバッグ情報が生成されない。
- Bugzilla 22598: importC: __extension__ キーワードのサポートを追加した。
- Bugzilla 22607: ImportCはfで終わるいくつかのfloat値を見逃している。
- Bugzilla 22619: コピーCTORによって引き起こされる__copytmpテンポラリのinout置換が欠落している。
- Bugzilla 22623: ImportC: typedefされた構造体定義タグがシンボルテーブルに置かれていない。
- Bugzilla 22624: ImportC: 静的イニシャライザーの構造体メンバが以下のビットフィールドのアラインメントを間違えていた。
- Bugzilla 22625: ImportC: コンパイル時に型定義された構造体の元の名前がDに表示されない。
- Bugzilla 22632: を使用してCTFEが連想配列とNULLを比較するとクラッシュする。
- Bugzilla 22634: シンボルが多すぎる場合のアサートはエラーにすべきである。
- Bugzilla 22655: rdtscでの逆アセンブラのアサーション
- Bugzilla 22656: SSE2 命令がディスアセンブラ出力で一貫性のないレイアウトになる
- Bugzilla 22665: ImportC: D側では修飾列挙子はint型ではなくenum型であるべきである。
- Bugzilla 22666: ImportC: Error: 属性は関数定義の前に指定すべきである。
- Bugzilla 22668: 非推奨メソッドが別の非推奨メソッドをオーバーライドする場合
- Bugzilla 22685: ラムダとオーバーロードでインスタンス化されたテンプレート関数が正しくネストされていない。
- Bugzilla 22686: ICE:static関数内の無効なメンバ参照でdmdがセグメンテーションエラーになる。
- Bugzilla 22698: ImportC: ネストされた構造体タグが誤ったスコープに格納された。
- Bugzilla 22699: ImportC:代入を条件として使用できない
- Bugzilla 22703: ImportC: C++11のスコープされていない列挙型が、Cの一部の型を拒否する。
- Bugzilla 22708: 未定義のシンボルを含む switch 文は多くのエラーを引き起こす。
- Bugzilla 22709: [dip1000]静的配列のスライスはref引数を使って@safeでエスケープできる
- Bugzilla 22710: ビットフィールドのCTFEはフィールド幅を考慮しない
- Bugzilla 22713: ImportC: op=がビットフィールドに対して正しく実装されていない。
- Bugzilla 22717: object.TypeInfo_Struct.equalsがlhsとrhsのパラメータを入れ替える
- Bugzilla 22725: ImportC: -Hでコンパイルするとセグメンテーションエラーが発生する。
- Bugzilla 22726: ImportC: タグ付き列挙型のtypedefがコンパイルに失敗する。
- Bugzilla 22727: ImportC: 32ビットWindowsビルドでは__stdcallと__fastcallのサポートが必要である。
- Bugzilla 22734: ImportC: Dから使用する場合、typedefの匿名enumメンバが使用できない。
- Bugzilla 22749: ImportC: C11ではビットフィールドのアドレスを取ることができない。
- Bugzilla 22756: importC: __builtin_offsetof がない。
- Bugzilla 22757: importC: typedefが前方参照エラーを引き起こす
- Bugzilla 22758: ImportC: 括弧式がキャスト式と混同される
DMDコンパイラの機能強化
- Bugzilla 5096: より読みやすい非対括弧エラー
- Bugzilla 7925: extern(C++) デリゲート?
- Bugzilla 11008: ユーザー定義のmain関数が存在する場合でも-mainスイッチを許可する。
- Bugzilla 20340: [betterC]-mainはbetterCでもDメイン関数を挿入する。
- Bugzilla 20616: エラー:未定義の識別子 __dollar
- Bugzilla 21160: DWARF: DW_AT_main_subprogramは_Dmainに対して発行されるべきである。
- Bugzilla 22113: メイン関数の型としてnoreturn 。
- Bugzilla 22198: 静的配列のコンパイル時境界チェック
- Bugzilla 22278: [条件付きコンパイル] inとoutのフラグが必要である。
- Bugzilla 22291: __traits(arguments)は関数の引数のタプルを返す。
- Bugzilla 22353: ヘッダー生成で属性宣言の末尾に空白が生じる
- Bugzilla 22354: ヘッダー生成で列挙型宣言の末尾に空白が生じる
- Bugzilla 22355: mscoffのLLDフォールバックがVSの古いバージョンで壊れている。
- Bugzilla 22377: Windowsのextern(C++)マングリングICEの場所を表示する。
- Bugzilla 22379: OpenBSD: -lexecinfo をリンクしてバックトレースシンボルを取得する。
- Bugzilla 22419: mainの戻り値の型推論を許可する。
- Bugzilla 22423: DWARF DW_TAG_subprogram は DW_AT_decl_column を生成すべきである。
- Bugzilla 22426: DWARF DW_AT_noreturnは関数がnoreturnの場合に存在すべきである。
- Bugzilla 22459: DWARF: デリゲートの型名は区別できるべきである。
- Bugzilla 22468: DWARF: dchar型にエンコーディングがない。
- Bugzilla 22469: DWARF: いくつかのデバッグ情報型の名前が間違っている。
- Bugzilla 22471: DWARF: 生成された main が DW_AT_artificial としてマークされていない。
- Bugzilla 22494: dmd.conf の検索パスが dmd man ページから抜けている
- Bugzilla 22508: DWARF: 連想配列は _AArray_
_ の代わりに修飾名を報告すべきである。 - Bugzilla 22519: [dip1000] のアドレスを取ることができないref return
- Bugzilla 22541: DIP1000: ref-return-scopeパラメータの曖昧さを解消する。
- Bugzilla 22631: ImportC: C++11のスコープなし列挙型をサポートする。
- Bugzilla 22672: ValueSeq を互換性のある TypeTuple にキャストできるようにした。
- Bugzilla 22733: hdrgen が ~this() の STC 属性の順序に矛盾を生成する。
- Bugzilla 22746: nothrowとマークされた "スロー"が不正なエラーを発生させる。
- Bugzilla 22753: インポートモジュールのための非推奨メッセージは、メッセージがないときにhifenを生成すべきではない。
- Bugzilla 22754: ヘッダ・ジェネレータは可視性宣言で末尾の空白を生成すべきではない
phobosのバグ修正
- Bugzilla 17037: std.concurrencyにランダムなセグメンテーション・フォールトがある。
- Bugzilla 19544: moveFrontでサポートされていない範囲でinputRangeObjectを呼び出せない。
- Bugzilla 20554: std.algorithm.searching.allの"static assert"が文字化けしたエラーメッセージを生成する。
- Bugzilla 21022: std.range.onlyがconstで動作しない。
- Bugzilla 21457: std.functional.partialは関数のオーバーロードを無視する。
- Bugzilla 22105: std.container.array.Array.lengthセッターがinit-less型の値を生成する
- Bugzilla 22185: std.array.array()は要素のコピーをスローしない。
- Bugzilla 22249: std.experimental.checkedint:Warn.onLowerBoundがコンパイルされない。
- Bugzilla 22255: JSONValue.opBinaryRight!"in"が定数である。
- Bugzilla 22297: minElementとmaxElementが空の場合の挙動がドキュメント化されていない
- Bugzilla 22301: パケットを実際に受信した場合にのみ 'from' を使用する
- Bugzilla 22325: void-returning 関数でインスタンス化されたテンプレート化された型では ReplaceType は失敗する。
- Bugzilla 22359: 空の前方範囲オブジェクトに対するjoinerはsegfaultになりやすい。
- Bugzilla 22364: 戻り値のないcollectException[Msg]でUnreachable警告が出る。
- Bugzilla 22368: has[Unshared]Aliasingがnoreturnのインスタンス化に失敗する
- Bugzilla 22369: std.concurrencyでnoreturn値/コールバックを持つステートメントが到達不能になる。
- Bugzilla 22383: ボトム型の配列が範囲として認識されない。
- Bugzilla 22384: castSwitchがnoreturnハンドラで混乱する
- Bugzilla 22386: noreturn値を持つassertThrownのunreachable警告が表示される。
- Bugzilla 22394: std.getoptは"-"を扱えない。
- Bugzilla 22408: AllImplicitConversionTargets に複数の問題がある。
- Bugzilla 22414: clamp(a,b,c)は常にtypeof(a)を返すべきである。
- Bugzilla 22561: only().joinerが不変要素型で失敗する
- Bugzilla 22572: Nullableでイミュータブル構造体上のSumTypeを定義できない。
- Bugzilla 22608: RandomAccessInfiniteは有効なランダムアクセス範囲ではない
- Bugzilla 22647: [std.variant.Variant]ヌル比較に準拠した型と'null'との比較はできない。
- Bugzilla 22648: [std.variant.Variant]間違ったunittestsが書かれている
- Bugzilla 22673: .array of a range with length is preallocates without checking whether the length was lying or not.
- Bugzilla 22683: core.math.rndtonlがリンクできない。
- Bugzilla 22695: std.trait.isBuiltinTypeがtypeof(null)に対してfalseである。
- Bugzilla 22704: public unittestsを実行するとリンカエラーになる。
- Bugzilla 22838: std.bitmanip.BitArray.count()でデータサイズが整数size_tの倍数のときにデータを超えて読み込む
phobosの機能強化
- Bugzilla 13551: std.conv.toがstd.typeconsのタプルにも使えるようになった。
- Bugzilla 17488: getTempDir()のプラットフォーム非整合な動作
- Bugzilla 18051: formattedRead/unformatValueの列挙型サポートの欠落。
- Bugzilla 21507: SysTime.toISOExtStringはロギングや一貫性のあるファイル名作成には使えない。
- Bugzilla 22117: SumTypeにスコープポインタを格納できない。
- Bugzilla 22340: totalCPUsは正確なCPU数を返さないかもしれない
- Bugzilla 22370: std.concurrency.spawn*はnoreturn callablesを受け入れるべきである。
- Bugzilla 22511: テンプレート型が精巧なコピーCTORを持っている場合、Nullableはコピーできない。
- Bugzilla 22532: std.experimental.logger デフォルトのログレベルをLogLevel.warningかLogLevel.offに変更した。
- Bugzilla 22701: std.typecons.applyは述語が呼び出し可能かどうかを不必要にチェックする
Druntimeのリグレッションを修正した
- Bugzilla 22136: [REG 2.097.1] 継承順序が異なるため、hashOfのコンパイルに失敗する。
Druntimeのバグ修正
- Bugzilla 22328: Windowsの型エイリアスの代わりに特定のD型が使用される。
- Bugzilla 22336: コア.lifetime.moveが精巧な非ゼロ構造体に対してBetterCで動作しない。
- Bugzilla 22523: DRuntimeのオプションが--の後に渡されると、現在のプロセスに影響する。
- Bugzilla 22552: moveEmplaceは非入れ子構造体に含まれる入れ子構造体のコンテキストポインタを消去する。
- Bugzilla 22630: VCライブラリがインストールされていなくても、VSをインストールしてVCディレクトリを提供することは可能である。
- Bugzilla 22702: druntimeがD仕様に準拠していない。
- Bugzilla 22721: importC: いくつかのgnu buildinsが拒否される。
- Bugzilla 22735: __builtins.diが__builtin_bswap64を正しく実装していない。
- Bugzilla 22741: importC: Error: bswapはテンプレートではない
- Bugzilla 22744: ImportC: __builtins.di で定義されたビルドインが未定義シンボルリンカーエラーを引き起こす。
- Bugzilla 22777: core.sys.windows.statのstat構造体はCRuntime_DigitalMarsを仮定している。
- Bugzilla 22779: druntime:NULLポインタから構造体へのセグメンテーションで__deleteを呼び出すとエラーが発生する。
druntimeの強化
- Bugzilla 14892: -profile=gcはGC APIの割り当てを考慮していない。
- Bugzilla 20936: core.sync.rwmutexは共有オーバーロードを持つべきだ(そして@safeコードで使えるようにする)。
- Bugzilla 21005: 連想配列のhashOfを高速化する。
- Bugzilla 21014: aa.byKeyValue、byKey、byValueのドキュメントが非常に不足している。
- Bugzilla 22378: OpenBSD: execinfo.d と unistd.d がインストールされない。
- Bugzilla 22669: OpenBSD:ソケットを同期する
- Bugzilla 22670: BSD kqueue-backed API 互換の inotify shim ライブラリをサポート。
dlang.orgのバグ修正
- Bugzilla 19136: is式がドキュメント通りに動作しない。
- Bugzilla 21717: [ページが見つからない]
- Bugzilla 22064: phobos core.builtinsのドキュメントページが見つからない。
- Bugzilla 22281: 次期2.099変更履歴の引用符が読めない。
- Bugzilla 22363: https://dlang.org/spec/abi.html の"ガベージコレクション" のリンクが間違っている。
- Bugzilla 22417: スライス代入演算子オーバーロード" の例が正しくない。
- Bugzilla 22504: spec/type.html: 6.1 基本データ型:d,w}charのデフォルト値にバックスラッシュがない。
- Bugzilla 22518: [dip1000] スコープ/参照が指定されずに返される
- Bugzilla 22544: [spec] C++とObjective-Cはシングルトークンではない
- Bugzilla 22692: Underground Rekordzのリンクが切れている
- Bugzilla 22711: インスタンス・メンバーに対するテンプレートUDAの効果は文書化されていない
dlang.orgの機能強化
- Bugzilla 22425: 配列の暗黙的変換に関するドキュメントが不完全である。
- Bugzilla 22431: サードパーティダウンロードリストに OpenBSD を追加。
インストーラの拡張
- Bugzilla 18362: LTO および PGO で dmd をビルド。
- Bugzilla 22078: install.sh:ARM64をアーキテクチャとして認識する
このリリースへの貢献者 (100)
このリリースを可能にしてくれたすべての素晴らしい人々に多大な感謝を捧げる。
- 12345swordy
- Adam D. Ruppe
- aG0aep6G
- Andrei Alexandrescu
- Andrej Petrović
- Anton Curmanschii
- Antonio Cabrera
- Arun Chandrasekaran
- Ate Eskola
- Atila Neves
- BarrOff
- Bastiaan Veelo
- Ben Jones
- Bianca Fodor
- bistcuite
- Boris Carvajal
- Brian Callahan
- David Gileadi
- Dennis
- dkorpel
- DoctorNoobingstoneIPresume
- Domenico Teodonio
- Dorian Verna
- dorianverna17
- dteod
- Eddy Schauman-Haigh
- Eduard Staniloiu
- etienne02
- Florian
- fourst4r
- Gabriel
- Gabriel Dolberg
- giacomo.ratto00
- H. S. Teoh
- Harrison
- Harry T. Vennik
- Hasan Kashi
- Hiroki Noda
- human
- Iain Buclaw
- Ilya Yaroshenko
- Imperatorn
- James S Blachly
- Jan Jurzitza
- Jeremy DeHaan
- Johan Engelen
- John Colvin
- John Kilpatrick
- João Lourenço
- jpiles
- jrfondren
- Julian Fondren
- Laeeth Isharc
- Lionello Lunesu
- Lio李歐
- lucica28
- Lucien Perregaux
- Luís Ferreira
- Manu Evans
- Marcelo Silva Nascimento Mancini
- Martin Kinkelin
- Martin Nowak
- Mathias Lang
- Mathis Beer
- Max H Haughton
- Max Haughton
- Max Samukha
- Mike Parker
- MoonlightSentinel
- Nathan Sashihara
- Nicholas Wilson
- Nick Treleaven
- Paul Backus
- Per Nordlöw
- Petar Kirov
- quassy
- Razvan Nitu
- Richard Andrew Cattermole
- rikki cattermole
- Robert burner Schadek
- Ryan Frame
- Sebastian Wilzbach
- Sebastien Alaiwan
- sorin-gabriel
- Stanislav Blinov
- Stefan Koch
- Sönke Ludwig
- teo
- Teodor Dutu
- thaven
- Tim Schendekehl
- tim-dlang
- Tobias Pankrath
- Tomáš Chaloupka
- Victarus
- Vladimir Panteleev
- Walter Bright
- Walter Waldron
- wolframw
- Ömer Faruk IRMAK
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku