変更ログ 2.081.0
Download D 2.081.0
2018年07月01日リリース
コンパイラの変更
- 静的ブロック内でのコンストラクタ宣言を非推奨とする。
- 型としてのthis とsuper の使用を廃止する。
- DIP 1009の実装 - 式ベースの契約構文の追加
- extern (C++) 構築、破壊、演算子、その他のマングリングの改善
- 反復テンプレート・オーバーロードのサポート
- __traits(getLinkage,...)が構造体、クラス、インターフェイスで動作するようになった。
- 暗黙のcatch 文がエラーになるようになった。
- 異なる列挙型を暗黙的に比較するとエラーになるようになった。
- 暗黙の文字列連結がエラーになることがある。
- IRETQ インライン・アセンブラがサポートされた。
- static フィールドのみを使用する場合、ランタイムなしでインターフェースとクラスを使用できるようになった。
- 冗長なストレージ・クラスを指定するとコンパイラー・エラーになることがあった。
ランタイムの変更
ライブラリの変更
D 2.081.0におけるすべてのバグ修正と機能強化のリスト。
コンパイラの変更
- 静的ブロック内でのコンストラクタ宣言を非推奨とする。
パッチ前 言語仕様では、静的コンストラクタは "static this()"という構文を使って定義される。 static this() "という構文を使って定義される。静的ブロック内で 静的ブロック内でコンストラクタを定義しても、コンストラクタには何の影響もない。 コンストラクタに影響を与えない。以下のコード・サンプルは コンストラクタに影響を与えない:
static: this() {}
static { this() {} }
コンパイラーは、上記のコード・サンプルに対して警告やエラーを発しない。 の前に実行されない通常のコンストラクタを生成する。 関数の前に実行されない。このため コンパイラーは問題を正しく示すことができない:
class A { static { this() {} } this() {} } void main() { new A(); }
このコードでは、次のようなエラー・メッセージが表示される。 というエラーメッセージが表示される。 に複数の定義があることを示すエラーメッセージが表示される。
パッチ後: 静的コンテキストでコンストラクタに遭遇するたびに、次のような非推奨メッセージが発行される。 という非推奨メッセージが発行される。static キーワードはコンストラクタに影響を与えない。 解決策は、コンストラクタを の外側で宣言することである。 コンストラクタ (static this()) として宣言することだ。
- this 、super の型としての使用を廃止する。
このリリース以前は、this とsuper をデータとしても型としても使うことができた。 として使うことができた。 このリリースから、this またはsuper を型として使用するとコンパイラー・エラーになる。
class C { shared(this) x; // Deprecation: 型として`this`を使用することは非推奨である。代わりに`typeof(this)`を使用 } class D : C { shared(super) a; // Deprecation: 型として`super`を使用することは非推奨である。代わりに`typeof(super)`を使用 super b; // Deprecation: 型として`super`を使用することは非推奨である。代わりに`typeof(super)`を使用 }
代わりにtypeof(super) 、typeof(this) 。
class C { shared(typeof(this)) x; } class D : C { shared(typeof(super)) a; typeof(super) b; }
- DIP 1009の実装 - 式ベースの契約構文の追加
式ベースの契約構文が追加された。単一のアサーションで構成される契約をより簡潔に記述できるようになり、同じ関数に対して複数のin またはout 契約を指定できるようになった。
例: 「式」ベースのコントラクト構文が追加された:
class C { private int x; invariant(x >= 0); // ... } int fun(ref int a, int b) in(a > 0) in(b >= 0, "b cannot be negative") out(r; r > 0, "return must be positive") out(; a != 0) { // ... }
- extern (C++) 建設、破壊、オペレーター、その他揶揄するような改善
今回のリリース・サイクルでは、extern(C++) のエクスペリエンスに多くの改良が加えられている。
揶揄の改善には以下が含まれる:
- コンストラクタ/デストラクタのマングリングがC++と一致する。
- 互換性のあるD言語のスタイル演算子が、C++の演算子としてマングルされるようになった
- nullptr_t 正しくマングリングされる
- 様々なマングリングのバグが修正された
extern(C++) nullptr_t を使用する API は、D 側で を使用できる: typeof(null)
alias nullptr_t = typeof(null); extern (C++) void fun(nullptr_t);
extern (C++) 演算子のマングリングは、意味的に等価なすべての演算子に対して行われる。 このリストには、 、 、 、 、 、 、 、 のすべてのインスタンスが含まれる。 2つの顕著な例外は、互換性のある実装を持たない と C++ である。 opUnary opBinary opAssign opOpAssign opCast opEquals opIndex opCall opCmp operator !
extern (C++) class のコンストラクタとデストラクタのマングリングは機能している。
このリリースにはABIの修正も含まれており、デストラクタが仮想テーブルに正しく追加されるようになり、コンストラクタ/デストラクタの呼び出しセマンティクスがC++と一致するようになった。 これにより、どちらの言語でもコンストラクタ/デストラクタがサポートされ、混合言語のクラス階層が動作するようになった。
- 反復テンプレート・オーバーロードのサポート
__traits(getOverloads) のサポートが拡張され、真の値を持つオプション・パラメーターが渡されたときにテンプレートのオーバーロードを返すようになった。
struct S { static int foo()() { return 0; } static int foo()(int n) { return 1; } static int foo(string s) { return 2; } enum foo(int[] arr) = arr.length; } alias AliasSeq(T...) = T; alias allFoos = AliasSeq!(__traits(getOverloads, S, "foo", true)); static assert(allFoos.length == 4); static assert(allFoos[0]("") == 2); static assert(allFoos[1]() == 0); static assert(allFoos[2](1) == 1); alias foo3 = allFoos[3]; static assert(foo3!([]) == 0);
- __traits(getLinkage,...)が構造体、クラス、インターフェイスで動作するようになった。
構造体、クラス、インターフェースに指定された言語ABIを検出できるようになった。
class MyClass {} extern (C++) struct MyCPPStruct {} extern (C++) interface MyCPPInterface {} extern (Objective-C) interface MyObjcInterface {} static assert(__traits(getLinkage, MyClass) == "D"); static assert(__traits(getLinkage, MyCPPStruct) == "C++"); static assert(__traits(getLinkage, MyCPPInterface) == "C++"); static assert(__traits(getLinkage, MyObjcInterface) == "Objective-C");
- 暗黙のcatch 文はエラーになる。
非推奨機能 を参照のこと。
暗黙のcatch 文は2.072で非推奨となった。 このリリースから、暗黙の catch 文はコンパイラのエラーとなる。
import std.stdio; void main() { int[] arr = new int[](10); // これはRangeErrorをスローする try { arr[42]++; } catch // エラー: 例外指定のない`catch`ステートメントは非推奨である; // 古い動作には`catch(Throwable)`を使用 { writeln("An error was caught and ignored"); } }
- 異なる列挙型を暗黙的に比較するとエラーになるようになった。
詳細は非推奨機能を参照のこと。
異なる列挙型の暗黙の比較は、2.075で非推奨となった。 このリリースから、異なる を暗黙的に比較すると、コンパイラはエラーを出す。
enum Status { good, bad } enum OtherStatus { ok, no } static assert(Status.good == OtherStatus.ok); // エラー: 異なる列挙型`Status`と`OtherStatus`の比較; // この動作を意図している場合は、`std.conv.asOriginalType`の使用を検討する
- 暗黙の文字列連結はエラーになる。
詳細は非推奨機能を参照のこと。
暗黙の文字列連結は2.072で非推奨となった。 このリリースから、暗黙的な文字列連結はコンパイラのエラーとなる。 はエラーを発する。
void main() { string s = "Hello" ", World!"; // エラー: 暗黙的な文字列の連結は非推奨である、変わりに"" ~ ""を使用 }
- IRETQ がインラインアセンブラでサポートされた。
IRETQ は、すでにサポートされている 命令の64ビット版である。この命令により これにより、純粋なD言語で64ビット割り込みサービス・ルーチンを書くことが可能になった。 を記述できるようになった。 IRET
void isr() { asm { naked; // ... iretq; } }
- インターフェイスやクラスは、"static"フィールドだけを利用すれば、ランタイムなしで使用することができる。
このリリース以前は、インターフェイスやクラスをランタイムなしで使おうとすると、 の欠如によりコンパイル・タイム・エラーが発生した。 しかし、クラスがインスタンス化されない限り、TypeInfo 。 TypeInfoは必要ない。
このリリースから、コンパイラーは、TypeInfo が見つからないというエラーを出さなくなった。 インターフェイスやクラスがインスタンス化されず、shared static のメンバーだけが利用されている限り、コンパイラーは、 の欠落に関するエラーを出さなくなった。 利用される。
例:
module object private alias extern(C) int function(char[][] args) MainFunc; private extern (C) int _d_run_main(int argc, char** argv, MainFunc mainFunc) { return mainFunc(null); // 単純化のために`void main()`を仮定している }
interface I { shared static int i; } class A : I { shared static int a; } class B : A { shared static int b; } void main() { B.b = B.a + B.i; }
dmd -conf= -defaultlib= main.d object.d -of=main size main text data bss dec hex filename 1867 1208 32 3107 c23 main
共有でない静的メンバも使用できるが、スレッドローカルストレージ(TLS)の実装が必要になる。 例えば、Linuxの場合、TLS実装はCランタイムとC標準ライブラリによってすでに提供されている。 標準ライブラリによって提供されている。 TLS実装を取り込む。
例2".
module object private alias extern(C) int function(char[][] args) MainFunc; private extern (C) int _d_run_main(int argc, char** argv, MainFunc mainFunc) { return mainFunc(null); // 単純化のために`void main()`を仮定している }
interface I { static int i; } class A : I { static int a; } class B : A { static int b; } void main() { B.b = B.a + B.i; }
dmd -conf= -defaultlib= main.d object.d -of=main size main text data bss dec hex filename 2123 1296 28 3447 d77 main
プラットフォームによっては、TLS実装にリンクするために、TLS実装コードや特殊なビルド手順が必要になる場合がある。 を必要とする場合がある。
これによって、ランタイムなしでDを使用したり、Dを新しいプラットフォームに移植したりする際の摩擦が減ることが期待される、 Dを新しいプラットフォームに移植したり、他の言語からDを使用したりする際の摩擦を減らすと同時に、Dのより多くの機能やイディオムをそれらのユースケースで使用できるようにする。
- 冗長なストレージ・クラスを指定すると、コンパイラー・エラーが発生するようになった。
冗長なストレージ・クラスの指定はかなり前に非推奨となり、当初は2.068リリースからコンパイラー・エラーを出す予定だった。 このリリースでその約束は果たされた。
@safe void f() @safe {} // エラー: `@safe`属性が冗長である
ランタイムの変更
- macOS のスタックトレースにファイル名と行番号が追加された。
例外がスローされ、キャッチされなかった場合、スタックトレースが出力される。Linuxでは FreeBSDおよびDragonFlyBSDでは、このスタックトレースにファイル名と行番号が含まれる、 アプリケーションがデバッグ情報を有効にしてビルドされた場合。この機能は現在 macOSにも追加された。
macOSではデバッグ情報がリンカによって取り除かれるため、コンパイラのサポートが必要だ。 リンカによって取り除かれるからだ。
例":
void bar() { throw new Exception("bar"); } void foo() { bar(); } void main() { foo(); }
dmd -g main.d上記のコードをデバッグ情報を有効にしてコンパイルする。 アプリケーションを実行すると、次のような出力が得られる:
object.Exception@main.d(3): bar main.d:3 void main.bar() [0x71afdfb] main.d:8 void main.foo() [0x71afe0c] main.d:13 _Dmain [0x71afd78]
- object.destroy() extern(C++) クラスをサポートしている。
object.destroy() が クラスで呼び出されるとクラッシュしていた。現在は正しくデストラクトされ、オブジェクトが にリセットされる。 extern(C++) init
- 不足していた宣言をcore.sys.darwin.mach.getsect
mach-o/getsect.hに欠けていた宣言がcore.sys.darwin.mach.getsect に追加された。
ライブラリーの変更
- 非推奨のstd.c パッケージが削除された。
代わりにcore.stdc パッケージを使用すること。
- std.algorithm.iteration.joiner のパフォーマンスが改善された
DMD
> dmd -O -inline -release ./joiner.d && ./joiner before.joiner = 57 secs, 834 ms, 289 μs, and 3 hnsecs new.joiner = 44 secs, 936 ms, 706 μs, and 5 hnsecs
LDC
> ldmd -O3 -release -inline joiner.d && ./joiner before.joiner = 5 secs, 180 ms, 193 μs, and 7 hnsecs new.joiner = 3 secs, 168 ms, 560 μs, and 6 hnsecs
ベンチマークコードはここにある。
- std.algorithm.mutation.remove オフセットとして、積分値または積分値のペアのみを受け付けるようにした。
以前は、ドキュメントに明記されていなかった、 std.algorithm.removeはどんな値でもoffset として受け入れていた。 この動作は非常にエラーになりやすかった:
import std.algorithm, std.stdio; [0, 1, 2, 3, 4].remove(1, 3).writeln; // 0, 2, 4 -- 正しい [0, 1, 2, 3, 4].remove([1, 3]).writeln; // 0, 3, 4 -- 正しくない
このリリースでは、配列を個々の要素として使うことはできなくなった。 std.typecons.tupleを明示的に示すために使用できる。 start からstop までの範囲(非包囲)が削除されるべきであることを明示的に示すために使用できる:
import std.algorithm, std.stdio, std.typecons; [0, 1, 2, 3, 4].remove(tuple(1, 3)).writeln; // 0, 3, 4
しかし、この直感的でないシナリオを避けるため、2タプルのみが許される:
import std.algorithm, std.stdio, std.typecons; [0, 1, 2, 3, 4].remove(tuple(1, 3, 4)).writeln; // 0, 4?
- NaNに関するstd.math.{fmin,fmax}のセマンティクスを変更した。
のセマンティクスを変更した。 std.math.fminと std.math.fmaxのセマンティクスが 引数の一方がNaNの場合、もう一方を返す。 を返す。これには std.math.isNaNチェックを行う。使用方法 std.algorithm.comparison.minと std.algorithm.comparison.max を使う。
import std.math; assert(fmin(real.nan, 2.0L) == 2.0L); assert(fmin(2.0L, real.nan) == 2.0L); // 以前は: NaN assert(isNaN(fmin(real.nan, real.nan))); import std.algorithm.comparison; assert(min(real.nan, 2.0L) == 2.0L); assert(isNaN(min(2.0L, real.nan))); assert(isNaN(min(real.nan, real.nan)));
dubの変更
- DUBは "customCachePaths"をサポートし、読み取り専用のパッケージパスを提供する。
今回のリリースでDUBは、/etc/dub/settings.json 、または、 に "customCachePaths"フィールドを定義することで、"(name)-(version)/(name)/"のパターンでサブフォルダにパッケージを含む追加のパスを定義できるようになった。~/.dub/settings.json.
"customCachePaths"は、(ディストリビューション・パッケージのメンテナ用など)ビルド済みのDUBライブラリを提供するために使用できる。
D 2.081.0におけるすべてのバグ修正と機能強化のリスト:
DMDコンパイラのリグレッション
- Bugzilla 18068: スタックトレースにファイル名と行番号が表示されない
- Bugzilla 18821: 関数の外で安全でない操作を行うと、DMDがセグメンテーションフォールトを起こす。
- Bugzilla 18905: [Reg 2.079] C++クラスが-betterCで使用できなくなった。
- Bugzilla 18936: 内部エラー: dmd/backend/cgxmm.c 684
- Bugzilla 19024: [REG 2.081-beta] AssertError@dmd/dsymbolsem.d(4317):アサーション失敗
DMDコンパイラのバグ
- Bugzilla 5153: 構造体ポインタから構造体変数への代入エラーメッセージ
- Bugzilla 7443: 間違った静的コンストラクタの診断が改善された。
- Bugzilla 11742: 静的コンストラクタで初期化されたstatic変数をinizializeできない。
- Bugzilla 12764: 構造体デフォルト構築の無効化を回避した。
- Bugzilla 12807: UFCSは "alias this"属性が呼び出されていなくてもチェックする。
- Bugzilla 13435: struct がクラスメンバで opAssign が適用された場合、奇妙なエラーが発生する。
- Bugzilla 13741: std.trait.moduleNameとpackageNameがパラメータを持つ関数で動作しない。
- Bugzilla 14178: C++ linuxのname manglingでは、const型の標準的な省略形が扱えない。
- Bugzilla 14739: テンプレートへの不変エイリアスがdmd assertを引き起こす
- Bugzilla 15068: 型をテンプレートとして使用しようとすると間違ったエラーメッセージが表示される。
- Bugzilla 15388: extern(C++) - typeof(null)はnullptr_tとしてマングルされるべきである。
- Bugzilla 15475: Ddoc のコードサンプルで、paren がマクロとして出力される。
- Bugzilla 15574: リンカ引数の順序が間違っている
- Bugzilla 15755: DMDのsegfaultがalias on alias on __trait(getAttributes, ...)で発生した。
- Bugzilla 15869: RVOは引数を上書きできる
- Bugzilla 16088: 文中のimport式の構文解析エラー
- Bugzilla 16206: トレイト(getOverloads)がオーバーロードの1つがテンプレート化された関数の場合に失敗する。
- Bugzilla 17373: traits getOverloads + 複数インターフェースの継承で、インターフェースのオーバーロードが1つしか表示されない。
- Bugzilla 18228: this(this a){}はポストブリットクタを生成しないが、this(this){}は生成する。
- Bugzilla 18236: enumのキャスティングエラーで無効な行が報告された。
- Bugzilla 18266: ICE: 関数内の分離されたスコープで宣言された識別子の再利用を許可すべきである。
- Bugzilla 18365: ヘッダーファイルの生成にreturn属性が含まれていない
- Bugzilla 18584: 'this'を指定しない場合、識別子が未定義になる。
- Bugzilla 18730: dmdが-Oでcore.bitop.btをミスコンパイルする
- Bugzilla 18746: 等式で空の構造体を返す関数が呼び出されない。
- Bugzilla 18775: DMDはUFCSで使用されていない非推奨の暗黙キャストを非推奨と誤って報告する。
- Bugzilla 18803: ネストされたインポートで "static if"を使うとDMDがクラッシュする。
- Bugzilla 18828: [-betterC] object.dでエラーになる。
- Bugzilla 18858: switch 'skips declaration' テストは最後の宣言しかチェックしない
- Bugzilla 18868: 分離コンパイルで2つのstatic this関数が生成され、2回実行される。
- Bugzilla 18888: extern(C++) のテンプレートの arg/alias arg のマングリングの問題
- Bugzilla 18890: extern(C++) は全てのデストラクタを同じようにマングリングする。
- Bugzilla 18891: extern(C++) のデストラクタのプロトタイプはリンクするだけでよい。
- Bugzilla 18892: 静的メンバとエイリアスのエラーメッセージの型が正しくない。
- Bugzilla 18916: Typedefと__LINE__を使用したICE。
- Bugzilla 18922: dmdは異なるモジュール/ファイル内のC++名前空間の置換を行わない
- Bugzilla 18928: extern(C++)の間違ったコード生成、間違った呼び出し規約
- Bugzilla 18951: パッケージの static メソッドがクラスの public static メソッドでマスクされる
- Bugzilla 18953: Win32:extern(C++)構造体のデストラクタが実行時に正しく呼び出されない。
- Bugzilla 18957: extern(C++) は posix システム上では 'std' を正しくマングルしない。
- Bugzilla 18966: extern(C++)コンストラクタはvtableを代入するC++のセマンティクスに合わせるべきである。
- Bugzilla 18970: opDispatch による DMD のセグメンテーションフォールト
- Bugzilla 18976: エイリアスによるオーバーロードのマージに不整合がある。
- Bugzilla 18984: 返されたスタック構造体をデバッグすると、デバッグ情報が不正になる。
DMDコンパイラの機能強化
- Bugzilla 14086: コンストラクタ/デストラクタのextern C++名が無効である。
- Bugzilla 15589: extern(C++)仮想デストラクタがvtbl[]に入れられない。
- Bugzilla 15691: 構造体メンバ・イニシャライザのエラーメッセージを改善した。
- Bugzilla 18859: クラスアロケータ/デアロケータが"deprecated"とマークされている場合、非推奨の警告を表示しないようにした。
- Bugzilla 18963: パラメータがポインタでない場合の'return'パラメータの制限を緩和する
phobosのリグレッション
- Bugzilla 18937: [REG 2.080.0] std.experimental.allocator:make をコンパイルする際に、静的配列を含む構造体に対して不当な量のメモリを必要とする。
- Bugzilla 18993: UTF文字に対してtoLowerが壊れている。
phobosのバグ
- Bugzilla 12086: std.algorithm.remove+インデックスの範囲指定が間違った結果を生成する
- Bugzilla 17084: 構造体の配列をエイリアスのthis: swapでソートできない。
- Bugzilla 17806: processAllocatorのgetterはgetterが一度でも呼ばれる前に設定されていれば設定値を上書きする
- Bugzilla 18415: 型定義は@disabledデフォルトコンストラクタを無視する
- Bugzilla 18470: std.algorithm.splitterはカスタムpredのフレームアクセスに問題がある
- Bugzilla 18525: std.algorithm.mutation.removeの制約がchar[]で失敗する。
- Bugzilla 18760: theAllocatorは使用するアロケータへの参照を保持する必要がある
- Bugzilla 18847: std.allocator:リージョンは設定する前に.parentを使う
- Bugzilla 18934: std.concurrency receiveはメッセージがconstデータを含む構造体の場合、アサーション失敗を投げる
- Bugzilla 18940: [std.net.curl]ページの例を実行できない。式...char[] を暗黙的に変換できない。string
- Bugzilla 18952: std.experimental.checkedint.Saturateが積分促進の非推奨メッセージを表示する
- Bugzilla 19020: findSkip、findSplit、findSplitBeforeが間違った結果を返す
- Bugzilla 19023: findSplitBeforeとfindSplitAfterは間違ったbool結果を返す
phobosの機能強化
- Bugzilla 18178: std.pathを@safeで使えるようにした。
- Bugzilla 18593: std.datetime.stopwatch.benchmarkは関数を最適化すべきではない。
- Bugzilla 18766: std.typecons.Tuple.toHashは改善された。
- Bugzilla 18813: fromStringzはchar, wchar, dcharで動くべきだ。
- Bugzilla 18837: MMFileはopDollarを持つべきだ。
- Bugzilla 18948: std.uni.toLowerとstd.uni.toUpperはランダムアクセス範囲で動作すべきである。
Druntimeのリグレッション
- Bugzilla 18996: std.container Array に間接を含む型を挿入すると SIGILL(4) を引き起こす。不正な命令。
- Bugzilla 19005: [REG2.081-b1] object.hashOfがstd.datetime.date.Dateに対して機能しなくなった。
Druntime バグ
- Bugzilla 14536: C++のexternクラスでdestroy()を呼び出すとセグメンテーションフォールトが発生する。
- Bugzilla 18932: core.internal.hash.hashOf(val, seed)はvalが生ポインタの場合、seed を無視する。
- Bugzilla 18989: OSX32では、core.stdc.time.clock()はclock$UNIX2003()に解決されるべきである。
- Bugzilla 19008: core.internal.convert.toUbyteが列挙型で動作しない
Druntimeの機能強化
- Bugzilla 18768: object.getArrayHashにカスタムtoHashを指定した場合、配列要素のハッシュを合計するだけにならないようにした。
- Bugzilla 18920: core.internal.hashがスカラーの配列のハッシュを返すようになった。@safe
- Bugzilla 18924: 順序に依存しないハッシュの組み合わせにはXORではなく加算を使う。
- Bugzilla 18925: core.internal.hashはスカラーフィールドの構造体に対する自動ハッシュであるべきである。@safe
- Bugzilla 18943: core.internal.hashはDMDの非整列読み出しのための時代遅れの特殊ケースを削除する。
dlang.orgのバグ
- Bugzilla 18752: std.file.readの実行可能な例が失敗する
- Bugzilla 18761: assumeUniqueドキュメントのページが正しく表示されない
dlang.orgの機能強化
- Bugzilla 14099: DPaste(dpaste.dzfl.pl)をrun.dlang.orgに昇格させた。
- Bugzilla 18869: Dを使う組織にJumia Foodを追加した。
- Bugzilla 18874: thatneedle.comをDを使う組織に追加する。
- Bugzilla 18959: [変更履歴:2.079.0] std.algorithm.iterationにsubstitutionが追加されたが、変更履歴はstd.algorithm.searchingを指している。
このリリースへの貢献者 (51)
このリリースを可能にしてくれたすべての素晴らしい人々に多大な感謝を捧げる。
- aG0aep6G
- Alexandru Jercaianu
- Andrei Alexandrescu
- Basile Burg
- Bastiaan Veelo
- BBasile
- carblue
- David Bennett
- David Gileadi
- Diederik de Groot
- Dmitry Olshansky
- Eduard Staniloiu
- Giles Bathgate
- Iain Buclaw
- Jack Stouffer
- Jacob Carlborg
- jercaianu
- Joakim Noah
- Johan Engelen
- John Colvin
- Jonathan Marler
- kinke
- Leandro Lucarella
- leitimmel
- Manu Evans
- Martin Nowak
- Mathias Lang
- Mathis Beer
- Mike Franklin
- Mike Parker
- Nathan Sashihara
- Nicholas Lindsay Wilson
- Nick Treleaven
- Quirin F. Schroll
- Radosław Rusiniak
- Radu Racariu
- Rainer Schuetze
- Razvan Nitu
- Remi Thebault
- Roman Chistokhodov
- Sebastian Wilzbach
- Simen Kjærås
- Steven Schveighoffer
- Tero Hänninen
- thaven
- Thibaut CHARLES
- Timon Gehr
- Timoses
- Tomáš Chaloupka
- Vladimir Panteleev
- Walter Bright
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku