変更ログ 2.072.0
Download D 2.072.0
2016年10月30日発売
言語の変更
コンパイラの変更
ライブラリの変更
- TypeInfo.init は非推奨となった。
- 新しいdruntimeスイッチ--DRT-oncycle が追加され、モジュールのサイクル検出時の動作を指定できるようになった。
- 間違った @trusted 属性は から削除された。 etc.c.curl関数" から削除された。 curl_easy_escape, curl_escape, curl_easy_unescapeそして curl_unescape.
- MurmurHashの実装のダイジェストである。
- std.process でのプロセス作成が高速化された。 が追加された。
- algorithm.iteration.cumulativeFold が追加された。
- std.range.padLeft と が追加された。std.range.padRight
- std.regex.regex これにより が複数のパターンのマッチをサポートした。
- std.regex.splitter これにより が、結果の範囲内でパターン・マッチを保持することをサポートした。
- findLocalMin std.numeric に追加された。
- ptr プロパティとパブリックコンストラクタが追加された。 が に追加された。std.experimental.ndslice.slice.Slice
- toHash メソッドが が追加された。std.experimental.ndslice.slice.Slice
- slice shape ndarrayメソッドが追加された。 ユーティリティがstd.experimental.ndslice.slice に追加された。
- as にlazy tensorが追加された。 .std.experimental.ndslice.slice
- iotaSlice に遅延テンソルが追加された。 .std.experimental.ndslice.selection
- indexSlice 遅延テンソルが .std.experimental.ndslice.selection
- repeatSlice 遅延テンソルが .std.experimental.ndslice.selection
- mapSlice 遅延テンソルが .std.experimental.ndslice.selection
- 数学インデックス順序の部分的サポートがstd.experimental.ndslice.slice.Slice に追加された。
- std.algorithm.mutation.swapAt に追加された。 公開された
- std.range.iota's .length` プロパティは、イテレートされる "型"の代わりにsize_t に固定される。
- std.uni.isNumberに修正された。 std.uni.isPunctuationに修正された、 ASCII入力用に最適化されたパスを使用するようになった。
- std.uni.isAlphaNumこれは std.ascii.isAlphaNum が追加された。
- std.regex.regex(?#...)構文によるインライン・コメントをサポートした。
- std.regexに多くの最適化が適用された。 std.regex.ctRegex が一般的に高速化された。
- std.range.primitives.moveAtsize_t インデックス 引数のみを受け付けるようになった。
- std.algorithm.sorting.isStrictlyMonotonicを許さない が追加された。
- std.file.readLinkそして std.file.symlinkが追加された。 化された。
- std.conv.toImpl のオーバーロードがすべて非公開になった。以下の std.conv.to代わりに
- std.algorithm.searching.{min,max}Element 範囲が追加された。
- std.typecons.Ternaryが追加された。 ロジックを追加した。
- std.math.quantizeが追加された。 が追加された。
- std.traits に3つの新しいトレイトが追加された。
- std.range.generate 適切な に修正された。
- std.numericを検証するためにenforce を使用しなくなった。 を使用しなくなった。
- Final に追加された。 std.experimental.typecons
- std.traits.isInnerClass が追加された。 アクセス可能な ポインタを持つネストされたクラスを識別する。outer
- std.conv.emplace はもはや許されない。 を指定せずに、他のクラスの中に直接ネストされたクラスを配置することはできなくなった。 を指定することなく、他のクラスの内部に直接クラスを配置することができなくなった。outer
- 実行時に実行時にGC実装を選択するスイッチが追加された。
- 手動でのメモリ管理を可能にするGC実装が追加された。メモリ管理が追加された。
D 2.072.0におけるすべてのバグ修正と機能強化のリスト。
言語の変更
- カンマ式の結果の使用は非推奨。
カンマ式はしばしば混乱やバグの原因となることが判明している。 例はこちらを参照のこと。
カンマ式の結果を使用すると、非推奨メッセージが表示されるようになった。
例:":
void main () { // OK、インクリメントの結果は直接使用されない for (int i, j; i != 3; i++, j++) {...} auto r1 = getRange!int, r2 = getRange!int; // OK for (; !r1.empty && !r2.empty; r1.popFront, r2.popFront) {...} // 非推奨 - ループ条件が常に使われる for (; !r1.empty, !r2.empty; r1.popFront, r2.popFront) {...} MyContainerClass mc; // OK - 表現式、結果は使用されない if (!mc) (mc = new MyContainerClass), mc.append(new Entry); int i; // 非推奨 mc = (i++, new MyContainerClass); }
- 暗黙のcatch文は非推奨である。
暗黙のcatch文は、型を指定しないcatch文である。 これらはデフォルトでThrowable をキャッチする。
例:":
int[] arr = new int[](10); // これはRangeErrorをスローする try { arr[42]++; } catch { writeln("An error was caught and ignored"); } // 前の行は以下と等価である: // catch (Throwable) { writeln("An error was caught and ignored"); }
- 暗黙の文字列連結は非推奨である。
文字列リテラルの暗黙的な連結は非常に初期の機能であり、現在では連結演算子('~')に取って代わられている。 連結演算子('~')に取って代わられた。
その結果、配列式でカンマを見逃してしまうという見つけにくいバグが発生する可能性がある:
void foo () { string[] arr = [ "Hello", "buggy" "World" ]; assert(arr.length == 3); // 失敗、配列の長さは2、中身は[ "Hello", "buggyWorld" ] }
- ユニオンフィールドにおけるポストブリットとデストラクタの制限が解除された。
ポストブリット(this(this))、デストラクタ( )、または不変量( )を持つフィールドをユニオンの中に持つことができるようになった、 デストラクタ(~this())、または不変量(invariant())を持つフィールドを共用体に持つことが許されるようになった。 実際に正しいフィールドをデストラクトまたはブリットするのはプログラマーの義務である。 プログラマーの義務である。
例:
struct S { this(this) {} ~this() {} } union U { int var; S s; } unittest { U u; // uがスコープ外に出てもs.~thisを呼び出さない u = U(); // メモリをコピーするだけなので、代わりにフィールド単位の代入を使う u.s = S(); // 通常の構造体代入のように動作する destroy(u.s); // 現在使われているフィールドを破棄する }
- Align属性はCTFEable式で使用できる。
例:
version (D_LP64) enum n = 8; else enum n = 4; align (n) struct Data { align (n == 8 ? 2 : 1): ubyte[3] buffer; int flags; } version (D_LP64) static assert(Data.flags.offsetof == 4); else static assert(Data.flags.offsetof == 3);
- scope は、間接法のない値パラメータでは無視されるようになった。
間接表現を持たないコピーされた値パラメータに対して、scope のストレージクラスが無視されるようになった。
例::
import std.traits; void valueParam(scope int param); static assert(ParameterStorageClassTuple!valueParam[0] == ParameterStorageClass.none); void scopeParam(scope int* param); static assert(ParameterStorageClassTuple!scopeParam[0] == ParameterStorageClass.scope_);
コンパイラの変更
- OS X 64ビットでのネイティブTLS。
コンパイラがアップデートされ、OS Xの64ビット版コンパイル時にネイティブのスレッド・ローカル・ストレージ (TLS) を使用するように更新された。つまり C/C++のTLS変数とリンクできることを意味する。この変更はABI を破壊する変更であり、ライブラリーの再コンパイルが必要になる。
コンパイラと生成されたバイナリを実行するために最低限必要なバージョンは、Mac OS X Lion (10.7)である。 Mac OS X Lion (10.7)である。
Xcode 7.3には、いくつかのTLS変数に対してリンカー・エラーを引き起こすバグがある。 Xcode 7.3.1ではこのバグが修正されている。7.3より古いバージョンでも同様に動作する。
- インポートされたモジュールのエイリアスの解析が延期される。
例:
module lib; template ExpensiveApiImpl(int ver) { ... void func() {} pragma(msg, "instantiated ExpensiveApiImpl ", ver); } alias api1 = ExpensiveApiImpl!(1); alias api2 = ExpensiveApiImpl!(2);
import lib; void main() { // OK、"instantiated ExpensiveApiImpl 1"と表示される api1.func(); // インスタンス化された"instantiated ExpensiveApiImpl 2"と表示されない、 // エイリアス名'api2'が使われていないからだ。 }
- 特別なキーワードは、ソースファイルの絶対ファイル名に置き換えられる。
特殊キーワード"__FILE_FULL_PATH__"は、コンパイラによって現在のソース・ファイルの絶対パスに置き換えられる。 に置き換えられる。
例:":
import std.stdio; import std.path; import std.file; void main() { writeln("The main source file lives here: ", __FILE_FULL_PATH__); writeln("The contents are:"); foreach(line; File(__FILE_FULL_PATH__, "r").byLine) { writeln(line); } writeln(); writeln("Other files in the same directory are:"); foreach(entry; dirEntries(__FILE_FULL_PATH__.dirName, SpanMode.shallow)) { writefln(" - %s", entry.name); } }
- -verrors=spec スイッチを追加する。
次のような投機的コンパイルによるエラーを表示する:
void foo(int i) { int p; bool b = __traits(compiles, { p = &i; }); }
通常は表示されない:
(spec:1) test.d(13): Error: cannot implicitly convert expression (& i) of type int* to int
spec: の後の数字は、投機的コンパイルのネストである。
ライブラリーの変更
- TypeInfo.init 非推奨
は廃止された。
これは、TypeInfo.init を削除するためのステップである。 型プロパティinitとの名前の衝突を解決するために必要である。
代わりにTypeInfo.initializerを使用する。
- 新しいdruntimeスイッチ--DRT-oncycle 。
モジュールのサイクル検出時に何をするかを指定できる。
モジュールのサイクルが検出されたときのデフォルトの動作は、サイクルを表示し、実行を中断することである。 を表示し、実行を中断することである。しかし、多くの場合、サイクル は有害ではない。新しい--DRT-oncycle スイッチを使えば、サイクルが検出されたときに サイクルが検出されたときに
- --DRT-oncycle=abort
- これはデフォルトの動作であり、最初のサイクルが検出されると、stderr にサイクルを表示して中断する。
- --DRT-oncycle=print
- 検出されたすべてのサイクルをstderr にプリントするが、実行は停止しない。初期化の順序は、バイナリ内のモジュールの順序に基づいて任意に選択される。
- --DRT-oncycle=ignore
- 何も表示せず、実行を停止しない。初期化の順序は、バイナリ内のモジュールの順序に基づいて任意に選択される。
extern(C) __gshared string[] rt_options = [ "oncycle=ignore" ];
($P詳細については、D言語仕様書、第4章のサイクル検出アボートのオーバーライドのセクション、および第28.7章のガベージ・コレクタの設定を参照のこと) および第28.7章 ガベージ・コレクタの設定 を参照のこと)。 - std.digest.murmurhash の実装。
std.digest.murmurhashの実装が追加された。MurmurHashは 一般的なハッシュベースの検索に適した非暗号化ハッシュ関数である。これは に最適化されている。
// 便利なダイジェストテンプレートを使って、int型配列の32ビットハッシュ値を計算する。 import std.digest.murmurhash; ubyte[4] hashed = digest!MurmurHash3_32_opt32([1, 2, 3, 4]);
- std.process 、プロセス作成がPosix上で高速化された。
以前のPosixシステムでは、 が存在しない場合、3から最大ファイル記述子番号までのすべてのファイル記述子を閉じようとしていた。 inheritFDs を閉じようとする。 がspawnProcess 、pipeProcess などで指定されていない場合、Posixシステムは3から最大ファイル記述子番号までのすべてのファイル記述子を閉じようとした。 std.process現在は、poll() を使用して、どのディスクリプタを閉じる必要があるかを判断する。 ディスクリプタをクローズする必要がある。
- algorithm.iteration.cumulativeFold が追加された。
std.algorithm.iteration.cumulativeFold入力範囲の連続する を返す。
assert([1, 2, 3, 4, 5].cumulativeFold!((a, b) => a + b).array == [1, 3, 6, 10, 15]); assert([1, 2, 3].cumulativeFold!((a, b) => a + b)(100).array == [101, 103, 106]);
- std.range.padLeft そして
が加えられた。std.range.padRight
std.range.padLeftそして std.range.padRightは以下の関数である。 は、指定された要素を使用して指定された長さに範囲をパディングする関数である。
import std.range; import std.algorithm.comparison; assert([1, 2, 3, 4, 5].padLeft(0, 7).equal([0, 0, 1, 2, 3, 4, 5])); assert("Hello World!".padRight('!', 15).equal("Hello World!!!!"));
- std.regex.regex 複数のパターンを一度にマッチングできるようになった。
import std.regex; // マルチパターン正規表現 auto multi = regex([`\d+,\d+`,`(a-z]+):(\d+)`]); auto m = "abc:43 12,34".matchAll(multi); assert(m.front.whichPattern == 2); assert(m.front[1] == "abc"); assert(m.front[2] == "43"); m.popFront(); assert(m.front.whichPattern == 1); assert(m.front[1] == "12");
- std.regex.splitter パターンにマッチした
パターンのマッチを結果の範囲に保持するようになった。
import std.regex; import std.algorithm.comparison : equal; auto pattern = regex(`([\.,])`); assert("2003.04.05" .splitter!(No.keepSeparators)(pattern) .equal(["2003", "04", "05"])); assert("2003.04.05" .splitter!(Yes.keepSeparators)(pattern) .equal(["2003", ".", "04", ".", "05"]));
- findLocalMin が に追加された。std.numeric
std.numeric.findLocalMin実関数f(x) の実数最小値を括弧付けによって求める。
import std.numeric, std.math; auto ret = findLocalMin((double x) => (x-4)^^2, -1e7, 1e7); assert(ret.x.approxEqual(4.0)); assert(ret.y.approxEqual(0.0));
- ptr プロパティとpublicコンストラクタが追加された。
.std.experimental.ndslice.slice.Slice
ptr プロパティは、 'の下位ポインタや範囲にアクセスできる。 プロパティを使う前に の の内部バイナリ表現を参照すること。 プロパティはSlice std.experimental.ndslice.slice.Slice ptr "@property"で使用される。 プロパティを使用する。 Mirのdeveloper mirrorは LDC(LLVMのDコンパイラ)がDバージョン2.072をサポートし次第、Mirのdeveloper mirrorは削除される。 ndslice
Slice 、パブリックコンストラクタが追加された。 std.experimental.ndslice 統合 を追加した。
std.experimental.ndslice.slice.Slice.toHash メソッドが追加された。
import std.experimental.ndslice; // ハッシュ値は、割り当てられたデータでも生成されたデータでも同じである auto a = iotaSlice(3, 7); auto b = iotaSlice(3, 7).slice; assert(a.toHash == b.toHash);
- slice shape 、 、その他のユーティリティが追加された。
が に追加された。ndarray std.experimental.ndslice.slice
これらのユーティリティ関数は次のように追加された。 std.experimental.ndslice:
- std.experimental.ndslice.slice.makeNdarray,
- std.experimental.ndslice.slice.makeSlice,
- std.experimental.ndslice.slice.makeUninitializedSlice,
- std.experimental.ndslice.slice.ndarray,
- std.experimental.ndslice.slice.shape,
- std.experimental.ndslice.slice.slice,
- std.experimental.ndslice.slice.uninitializedSlice.
例":を使った一般的な2次元配列の転置ndslice
import std.experimental.ndslice; auto ar = [[0, 1, 2], [3, 4, 5]]; auto sh = ar.shape; // [2, 3]型のsize_t[2]は、 auto sl = slice!int(sh); // 対応する形状のスライスを確保する sl[] = ar; // arからの値でslを埋める ar = sl.transposed.ndarray; // 共通の2次元配列を確保する assert(ar == [[0, 3], [1, 4], [2, 5]]);
std.experimental.ndslice.slice.as 怠惰なテンソルが追加された。
import std.experimental.ndslice; auto matrix = slice!double([2, 2], 0); auto stringMatrixView = matrix.as!string; assert(stringMatrixView == [["0", "0"], ["0", "0"]]); matrix.diagonal[] = 1; assert(stringMatrixView == [["1", "0"], ["0", "1"]]);
- iotaSlice std.experimental.ndslice.selection に遅延テンソルが追加された。
std.experimental.ndslice.selection.iotaSlice は最速である 。Slice
import std.experimental.ndslice; auto sl = iotaSlice([2, 3], 10); assert(sl.transposed == [[10, 13], [11, 14], [12, 15]]);
std.experimental.ndslice.selection.indexSlice 怠惰なテンソルが追加された。
import std.experimental.ndslice; auto slice = indexSlice(2, 3); assert(slice == [[[0, 0], [0, 1], [0, 2]], [[1, 0], [1, 1], [1, 2]]]);
std.experimental.ndslice.selection.repeatSlice 怠惰なテンソルが追加された。
import std.experimental.ndslice; auto sl = iotaSlice(3).repeatSlice(4); assert(sl == [[0, 1, 2], [0, 1, 2], [0, 1, 2], [0, 1, 2]]); auto m = 4.repeatSlice(2, 3); assert(m == [[4, 4, 4], [4, 4, 4]]);
std.experimental.ndslice.selection.mapSlice 怠惰なテンソルが追加された。
import std.experimental.ndslice; auto s = iotaSlice(2, 3).mapSlice!(a => a * a); assert(s == [[ 0, 1, 4], [ 9, 16, 25]]);
- Math Index Order の部分的なサポートがstd.experimental.ndslice.slice.Slice に追加された。
import std.experimental.ndslice; auto sl = iotaSlice(3, 4); assert(sl[2, 3] == 11); // DとCのインデックス順序 assert(sl(3, 2) == 11); // MathとFortranのインデックス順序
- std.algorithm.mutation.swapAt が公開された。
std.algorithm.mutation.swapAtの要素を入れ替えることができる。 の要素を入れ替えることができる。
- std.range.iotaの.length プロパティは固定である。
をsize_t に固定する。
std.range.iota'の.length プロパティは常に次のように返されるようになった。 size_t. つまり、32ビットCPUで を使用している場合、長さはsize_t に切り捨てられる。 非リリースモードでは、 への呼び出しで長さが size_t.max iota を超えると例外が発生する。
- std.algorithm.searching.{min,max}Element
が追加された。
std.algorithm.searching.minElementそして std.algorithm.searching.maxElement は範囲の最小値と最大値を検索する関数である。 要素を検索する関数である。これらはカスタムアクセサ(map )をサポートしている。
import std.algorithm.searching; import std.range; import std.typecons; assert([3, 1, 4].minElement == 1); assert([4, 7, 5].enumerate.maxElement!`a.value` == tuple(1, 7));
- std.math.quantize を追加した。
std.math.quantizeある数値の最も近い倍数に丸める。 特徴
- 丸め方はrfunc パラメータで指定できる。デフォルトでは デフォルトでは、現在の丸めモードが使用される。 「である。
- ある基数のN桁目を丸める一般的なケースについては、オーバーロードが含まれている。 桁に丸める場合のオーバーロードが含まれている。
- コンパイル時に基数と指数(桁数)がわかっていれば、テンプレート・パラメータとして与えることができる。 をテンプレート・パラメータとして与えることができる。
import std.math; assert(12345.6789L.quantize(20.0L) == 12340.0L); assert(12345.6789L.quantize!(10, -2) == 12345.68L); assert(12345.6789L.quantize!(10, floor)(-2) == 12345.67L);
- std.traits に3つの新しいトレイトが追加された。
std.traits.isType, std.traits.isFunctionおよび std.traits.isFinalがstd.traits に追加された。
import std.traits; static assert(isType!int); struct S {} class C {} interface I {} static assert(isType!S); static assert(isType!C); static assert(isType!I);
import std.traits; void func(){} struct S { @property int prop(){ return 0; } } static assert(isFunction!func); static assert(isFunction!(S.prop)); // デリゲート型であり、関数型ではない static assert(!isFunction!(typeof(&S.prop)));
import std.traits; class C { void nf() {} final void ff() {} } final class FC {} static assert(!isFinal!(C)); static assert( isFinal!(FC)); static assert(!isFinal!(C.nf)); static assert( isFinal!(C.ff));
- std.range.generate を適切な範囲に固定した。
std.range.generateが呼び出されるたびに異なる値を返すように設定されていた。 front さらに、popFront は何もしなかった。これはつまり のような操作関数は何もしなかった。 std.range.dropなどの操作関数は何もしなかった。新しい 新しいバージョンでは、範囲定義の期待に応えるため、1要素のキャッシュを使用している。 定義の期待に応えるために1要素のキャッシュを使用する。また、ジェネレーターのref-nessも維持している。
- Final が に追加された。std.experimental.typecons
std.experimental.typecons.Finalは直接変異させることはできない。 しかし、参照は元の変異可能性で型付けされる。 これは Javaのfinal 、C#のreadonly に相当する。
auto a = makeFinal([1, 2, 3]); assert(a[0] == 1); // a = [2, 3]; // 再代入は不正である、 a[0] = 42; // 要素やフィールドは依然として変更可能である。 assert(a[0] == 42);
- std.traits.isInnerClass が追加された。
が追加された。outer
他のクラスの内部に入れ子になっている(関数の内部にはない)クラスは、 シンボルを定義していない。 outer シンボルを定義していないクラスは、outer フィールドを持つ。 フィールドがあり、入れ子になっている外側のクラスのインスタンスを取得したり、設定したりすることができる。 std.traits.isInnerClassこれにより、それらを識別することができる。を満たす "型"のサブセットである。 isInnerClass を満たす型は、isNested を満たす型のサブセットである。 を満たす型のサブセットである。後者には、outer を再定義したり、関数の中に入れ子になったクラスや構造体が含まれる。
class Outer { class Inner1 { } class Inner2 { int outer; // outerを再定義しているため、Outerインスタンスにはアクセスできない } static class Inner3 {} // 静的なので入れ子にならない } static assert(isInnerClass!(Outer.Inner1)); static assert(!isInnerClass!(Outer.Inner2)); static assert(!isInnerClass!(Outer.Inner3));
- std.conv.emplace を他のクラスの中に直接入れ込むことができなくなった。
を指定することなく、他のクラスの中に直接ネストされたクラスを配置することができるようになった。
ポインタouter
クラスが他のクラスの中に入れ子になっている場合(新しいトレイトがある std.traits.isInnerClassがある)、emplace 。 が必須パラメータとして追加された。この この変更以前は、配置にこのパラメータは必要なく、外側のクラスの変数にアクセスするとセグメンテーション・フォールトが発生した。 の変数にアクセスすると、セグメンテーション・フォールトが発生した。
class Outer { int x; class Inner { auto getX() { return x; } } } Outer outer = new Outer(); // auto inner = buf.emplace!(Outer.Inner)(); // これはもう許されない auto inner = buf.emplace!(Outer.Inner)(outer); // 代わりにこれを使う auto x = inner.getX(); // これはsegmentation faultを引き起こしていた; // 現在は期待通りに動作する
- GCの実装を選択するためのランタイムスイッチが追加された。
が追加された。
これにより、プログラム起動時にGCを選択できるようになった。
./my_d_exe --DRT-gcopt=gc:conservative # use conservative GC (default) ./my_d_exe --DRT-gcopt=help # list available GC options
gcoptの詳細についてはgc_configを参照のこと。
将来のリリースでは、別のGCとリンクすることで を拡張できるはずである。
- 手動GCが追加された。
--DRT-gc=gc:manual オプションを使用して手動 GC を選択する。
このGCはmallocとfreeの薄いラッパーであり、ガベージを収集しない。 ガベージを収集しない。このGCは GC.free. 配列やデリゲートのような、GCメモリを確保する可能性のある組込みの言語構文は、リークする可能性がある。 のような組み込みの言語構造はリークする可能性がある。 これはgcstubの実装に取って代わるものである。
手動GCは、メモリを決定論的に制御するアプリケーションに有用である。 リークする可能性のある隠れた割り当てを追跡するには、dmdの-vgc スイッチを使う。
valgrindのようなツールでメモリ破壊を見つけるのにも役に立つ。
D 2.072.0のすべてのバグ修正と機能強化のリスト:
DMDコンパイラのリグレッション
- Bugzilla 15726: [REG2.068.0] 循環クラス、RefCountedの前方参照エラー
- Bugzilla 15861: [REG 2.069] -Oによる間違ったダブルから文字列への変換
- Bugzilla 15925: -transition=[check]imports がミックスインテンプレートからのインポート宣言を無視する。
- Bugzilla 15992: [REG2.072a] インスタンス化された構造体のフィールド変数でのICE
- Bugzilla 16080: [REG2.071.0] 内部エラー: backendcgobj.c 3406 when building static library
- Bugzilla 16115: [REG2.067] コンマ演算子による誤ったコード
- Bugzilla 16233: [REG2.069] 誤ったコードでICEが発生する
- Bugzilla 16254: [REG 2.072-devel]大文字と小文字が混在した誤ったスイッチの初期化エラー
- Bugzilla 16292: [REG2.069] 偽のエラー: gotoが変数の宣言をスキップする
- Bugzilla 16536: DMDマスターがOS X 10.11.6/Xcode 7.3.1でビルドされない。
- Bugzilla 16570: [REG 2.072.0-b1] イニシャライザが解釈された列挙型メンバはイニシャライザの型が列挙型ではない
DMDコンパイラのバグ
- Bugzilla 1357: Unicode エスケープシーケンスで FFFF と FFFE を使用できない。
- Bugzilla 5305: 組込み関数へのポインターを取ることができない。
- Bugzilla 10225: XMM.STOUPSで__simd_stoを使用した場合のcore.simdの間違ったコード生成
- Bugzilla 10591: エラー:許可されるメインが1つしかないため、競合するメインシンボルの場所が表示されない
- Bugzilla 11047: UDA + getAttributesが純度/安全性チェックをバイパスする
- Bugzilla 11169: __traits(isAbstractClass)がクラスを抽象クラスとして設定する。
- Bugzilla 11585: ICE(cgcod.c)でSIMDと-Oを使用する。
- Bugzilla 12357: 未定義の文字列変数が無言で失敗する。コンパイラの警告は出ない。
- Bugzilla 12527: safeセクションで@system関数/delegateエイリアスを作れない。
- Bugzilla 12537: opEqualsをテンプレート化すると、コンパイラーが無限再帰を引き起こす。
- Bugzilla 12558: try/catchはException型を指定することなく暗黙的にエラーをキャッチすることができる。
- Bugzilla 12822: デリゲート.ptrの代入は@safeとみなされる。
- Bugzilla 12939: nothrowとnot @safe関数のエラーメッセージがより統一された。
- Bugzilla 13116: this'へのrefを返せないようにする。
- Bugzilla 13147: 裸のextern(C++)メソッドにおけるthisptrの間違ったcodegen
- Bugzilla 13536: デリゲートの共用体は@安全性を壊す。
- Bugzilla 13537: 共用体は不変性を壊す可能性がある。
- Bugzilla 13674: ICE(el.c)でshort8のsimd乗算を行う。
- Bugzilla 13698: ICE(e2ir.c)のsimd呼び出しで
- Bugzilla 13867: extern(C++)インターフェイスからメソッドをオーバーライドするには、メソッド定義にextern(C++)が必要である。
- Bugzilla 13975: ICE: -gcと列挙型メンバがimmutable intの場合にdmdがクラッシュする。
- Bugzilla 14162: ラムダに対する@safeの推論の誤り
- Bugzilla 14450: テンプレート構造体の不変のコンストラクタのオーバーロードが正しくない。
- Bugzilla 14496: インダイレクトを含むメンバの void 初期化は @safe であってはならない。
- Bugzilla 14504: Regex Optimizerが同等のスレッドをマージしない。
- Bugzilla 14532: スイッチ・ブロックは未初期化の変数を作成できる。
- Bugzilla 15116: 名前付き "ミックスイン"によるタプルフィールドアクセスの不合理な拒否。
- Bugzilla 15117: 名前付きミックスインによる不合理な循環参照エラー : : 名前付きミックスインによる不合理な循環参照エラー
- Bugzilla 15144: asm{movdqa...}のオペランドサイズが不正である。} の不正なオペランド・サイズにより、ubyte16イニシャライザ・エラーが発生する。
- Bugzilla 15191: DIP25: リターンのアドレスが正しく型チェックされていない。
- Bugzilla 15192: DIP25: 入れ子になった ref リターンの型チェックが不正である。
- Bugzilla 15193: DIP25 (実装):DIP25 (実装): テンポラリーの寿命が正しく追跡されない。
- Bugzilla 15258: DIP25 (実装): 一時的な要素の寿命が正しく追跡されない。
- Bugzilla 15306: コンテキストを共有するデリゲートは共有されないエイリアシングを持つことができる。
- Bugzilla 15326: ダングリングelse警告の誤検出
- Bugzilla 15333: Assertion failed: (!fd->vthis->csym), function FuncDeclaration_toObjFile, file glue.c, line 1034.
- Bugzilla 15372: DMDはextern(C++)自由関数のテンプレート化された関数に対して間違ったマングリングをする。
- Bugzilla 15399: 整列されていないポインタは@safeではない
- Bugzilla 15513: スレッドローカルオブジェクトのメモリ破壊
- Bugzilla 15573: -O -inlineはidiv命令で間違ったコードを引き起こす
- Bugzilla 15607: [ICE] CTFE内部エラー:デフォルトで初期化された配列の静的不変配列へのアクセス時の不正な比較
- Bugzilla 15672: void[]からT[]へのキャストが誤って「@safe」とみなされる
- Bugzilla 15680: typeof(null) の TypeInfo が壊れている。
- Bugzilla 15703: safeコードは特定の型の配列キャストを許可すべきではない。
- Bugzilla 15704: safeコードはvoid[]との間のコピーを許可すべきではない。
- Bugzilla 15757: D mainはネストされた関数であり、アクセスできない。
- Bugzilla 15760: __gsharedとselective importを使用した場合、コンパイル時にSegfaultが発生する : : __gsharedとselective importを使用した場合、コンパイル時にSegfaultが発生する : __gsharedとselective importを使用した場合、コンパイル時にSegfaultが発生する。
- Bugzilla 15762: const列挙型を含む配列キャストを@safeにすることができる。
- Bugzilla 15799: インターフェイスのセミコロンに続く契約に対する誤解を招くエラーメッセージ
- Bugzilla 15802: (SIGSEGV)CppMangleVisitor::ソース名
- Bugzilla 15816: ICE void ddmd.dclass.__assert(int) with error: 匿名クラスは許可されない
- Bugzilla 15835: 遅延引数からの typeid 呼び出しでセグメンテーションエラーが発生した。
- Bugzilla 15855: a[{for "でdmdがセグメンテーションフォールトを起こす
- Bugzilla 15913: 似たようなconst-codeがないと固定サイズの配列を初期化できない
- Bugzilla 15922: functionParameters()でDMDのセグメンテーションエラーが発生した。
- Bugzilla 15934: 非仮想スーパークラスのメンバ関数呼び出しが"this"型修飾子を無視する。
- Bugzilla 15957: postblit + テンプレートミックスインのブレークopAssignがエラーメッセージで混乱する。
- Bugzilla 15974: Spurious error: "ミックスイン"への引数は文字列でなければならず、文字列型の(expression())ではない
- Bugzilla 15999: インライン・アセンブラでエラーの代わりに拡張子が不正確であった。
- Bugzilla 16035: inout、テンプレート、再帰でコンパイラがクラッシュする
- Bugzilla 16094: エラー:重複スライス代入(CTFE)
- Bugzilla 16095: デリゲートが不変のデータを変更し、共有/非共有を破る可能性がある。
- Bugzilla 16096: 静的ライブラリへのリンク: __DATA/__objc_imageinfo を解析できない。
- Bugzilla 16142: dtor/postblitを追加すると(無効でも)opAssignが強制される。
- Bugzilla 16193: opApply()がクロージャをヒープ確保しない。
- Bugzilla 16195: deleteは@systemであるべきである。
- Bugzilla 16226: -dip25は戻り値の型が明示的でないと機能しない。
- Bugzilla 16228: DIP25の間違った適用に対する診断が不十分である。
- Bugzilla 16229: [Win64] 巨大なシンボルを生成するとクラッシュする
- Bugzilla 16340: version(unittest)の結果、elseがダングリングしているという不正な警告が出る場合
- Bugzilla 16365: デリゲートから関数ポインタを呼び出すことができない。
- Bugzilla 16439: タイプセーフでない可変引数関数は決して@safeになり得ない。
- Bugzilla 16466: 32ビットOSXでの構造体内部の実数のアラインメントは8ではなく16であるべきだ。
- Bugzilla 16525: C++のメンバ変数にはマングリングがない
- Bugzilla 16530: -O -covの相互作用は間違ったコード生成につながる
- Bugzilla 16534: RefRangeがlengthを定義するのであれば、opDollarを定義すべきである。
DMDコンパイラの機能強化
- Bugzilla 2659: カンマ演算子を削除する
- Bugzilla 3657: デバッグ情報のローカル変数の語彙スコープをなくした。
- Bugzilla 3827: 隣接する文字列リテラルの暗黙の連結を警告し、非推奨とする。
- Bugzilla 9766: align(n)をコンパイル時定数nで指定する。
- Bugzilla 11886: lambdaのlambdaで "cannot access frame "エラーが発生する。
- Bugzilla 13242: インポートされたエイリアスは遅延的に解析されるべきである。
- Bugzilla 14411: switch文: docs/behaviorが異なる。
- Bugzilla 15323: Module.membersと.deferred3は高速なルックアップが可能なデータ構造を使用すべきである。
- Bugzilla 16077: [CodeView] MS-COFFのデバッグ情報に言語情報がない。
- Bugzilla 16394: 静的配列のTypeInfo.init()は配列全体ではなく単一の要素を返す
- Bugzilla 16409: assign-styleスイッチのサポートを追加
phobosのリグレッション
- Bugzilla 15457: シンボル未定義 __lseeki64
- Bugzilla 15918: [2.070] findSplitの結果を互いに代入できなくなった。
- Bugzilla 16179: [REG2.072] git HEAD: multiSortがコンテキスト付きのデリゲートで呼び出せなくなった。
- Bugzilla 16291: phobosinitが呼び出されない(EncodingScheme.createが失敗する)
- Bugzilla 16544: File.reopenを追加した。
- Bugzilla 16580: [REG 2.072.0-b1] macOSでspawnShellがセグメンテーションエラーになる。
- Bugzilla 16587: split("", "x") は [] であるべきである。
phobosのバグ
- Bugzilla 4509: std.xmlのXMLパーサーがattr値をアポストロフィで囲むとTagExceptionをスローする。
- Bugzilla 7972: std.file.readが上限を指定してもファイルのサイズ分のバッファを確保する
- Bugzilla 7989: isInputRangeとisForwardRangeは未使用の変数を宣言している。
- Bugzilla 11791: std.file.writeが巨大ファイルの書き込みに失敗する
- Bugzilla 12368: std.file.writeがstd.stdio.writeと衝突する。
- Bugzilla 12897: std.json.toJSONがunicode文字(>=0x80)を" \XXXXXX" に変換しない。
- Bugzilla 13572: etc.c.zlibはnothrowでなければならない。
- Bugzilla 14136: std.uni.utfMatcherは@safetyを壊す
- Bugzilla 14137: std.socket.getAddressInfoが@safetyを破る。
- Bugzilla 14485: .front of empty filtertered zip range はアクセス可能である。
- Bugzilla 14615: std.regex.replaceFirstIntoはマッチしないと例外を投げる
- Bugzilla 14966: 2つのstd.xml.Documentを比較すると無限再帰になる
- Bugzilla 15341: std.signalsスロットでsegfaultが発生する
- Bugzilla 15658: isFileはテンプレートではない
- Bugzilla 15773: D言語の自由形式正規表現における文字クラスの空白の扱いはPerlと同じではない
- Bugzilla 15791: 格納されたネストされた構造体オブジェクトをVariantから取得できない。
- Bugzilla 15823: opIndexはconst std.variant.Variantでは動作しない
- Bugzilla 15827: std.variant.Variantを構造体で初期化できない。
- Bugzilla 15864: std.regexでchmgenが例外をトリガーする
- Bugzilla 15865: std.file.copy(from,to)はfromとtoが同じファイルを指定するとファイルを削除する
- Bugzilla 15872: [ndslice] スライスのインデックスを配列で指定すると、ndslice内部でエラーが発生する。
- Bugzilla 15874: structがUDAを持たない場合、getSymbolsByUDAは失敗する
- Bugzilla 15884: std.json.JSONValueにchar[]を代入すると、文字列ではなく配列が作成される。
- Bugzilla 15885: JSONに直列化されたfloatは精度を失う
- Bugzilla 15917: std.concurrencyモジュールのデストラクタでMessageBoxが無駄に生成される
- Bugzilla 15919: [ndslice] selection.reshape()でスペルミスが検出されない。
- Bugzilla 15920: std.trait.MemberFunctionsTupleが間違った結果を出す
- Bugzilla 15960: SetUnionは重複をフィルターすべきである
- Bugzilla 15963: std.uniに隠された未解決の前方参照の問題
- Bugzilla 15964: std.uni.sicmpのテンプレート制約が寛容すぎる。
- Bugzilla 15973: nextPow2とtruncPow2がプロセッサ固有の動作に依存している
- Bugzilla 15980: std.trait.Identityは文書化されていないが公開されている
- Bugzilla 16010: [ndslice] byElement はアサートエラーを投げる。
- Bugzilla 16026: std.math.frexp!float()は非常に小さいサブノーマル値に対して間違っている
- Bugzilla 16036: std.net.isemail - isEmailはEmailStatusCode.none(デフォルト)のメールに対して "valid: false"を返す。
- Bugzilla 16046: ScopedAllocatorがprevを設定しないため、segfaultが発生する。
- Bugzilla 16054: std.typecons.Rebindableでimmutableを壊すことができる
- Bugzilla 16070: std.meta.{ApplyLeft,ApplyRight}は型と値が混在した引数で失敗する。
- Bugzilla 16072: std.container.binaryheapは配列用に拡張可能であるべきだ。
- Bugzilla 16090: popFrontは破損したutf-8文字列に対して境界外の配列インデックスを生成する
- Bugzilla 16192: std.conv.toChars()のopSliceが10以外の基数に対して間違っている。
- Bugzilla 16219: std.experimental.allocator.makeArrayが長さのある範囲に対して不要な割り当てを行う
- Bugzilla 16238: std.string.lastIndexOfが-de付きでコンパイルに失敗する
- Bugzilla 16241: std.xmlが誤ってコメント中の"=="を禁止しているが、"--"は許可している。
- Bugzilla 16331: std.container.arrayコンストラクタは配置の結果をチェックすべきではない。
- Bugzilla 16351: std.container.arrayコンストラクタがemplacementの結果をチェックしない。
- Bugzilla 16372: ドキュメントのリンク切れ
- Bugzilla 16383: 代数的訪問がハンドラと const クラスを一致させない
- Bugzilla 16385: std.range: string.popFrontで0xffをスキップする際の動作が未定義である。
- Bugzilla 16386: std.concurrency:デストラクタがMessageとして渡されたオブジェクトに対して2回呼び出される。
- Bugzilla 16387: getSymbolsByUDAは構造体では動作するが、クラスでは失敗する。
- Bugzilla 16413: multiSortは@system比較関数では動作しない。
- Bugzilla 16420: std.getoptドキュメントの例が正しくない。
- Bugzilla 16501: packed ndslicesがコンパイルされない
- Bugzilla 16503: [ndslice]はfastmathのLDC属性を妨げる。
- Bugzilla 16506: std.experimental.allocatorでsegfaultsが発生する:GCAllocatorまたはMallocatorでFreeTreeを使用する
- Bugzilla 16507: std.experimental.allocator:FreeTreeはあまりにも熱心にクリアする
phobosの機能強化
- Bugzilla 2104: std.regex: 正規表現のエスケープ関数
- Bugzilla 7551: 文字クラスの右括弧の正規表現解析のバグを修正。
- Bugzilla 10777: std.range.SortedRangeを返すようにstd.algorithm.multiSortを変更した。
- Bugzilla 11229: std.string.toLowerが遅い。
- Bugzilla 12227: std.regexで複数のパターンを一度にマッチできるようにした。
- Bugzilla 12367: std.regex:(?# ... ) のコメント構文を認識する
- Bugzilla 12379: 最初の引数をファイルに書き出す "toFile"関数を追加した。
- Bugzilla 13409: std.range.padLeft/Rightが追加された。
- Bugzilla 13422: std.asciiにはisAlphaNumがあるが、std.uniにはない。
- Bugzilla 13796: phobos用のシンプルな "array head const"構造体
- Bugzilla 15229: BigInt(文字の範囲)もある。
- Bugzilla 15797: std.regex.splitterにマッチを落とさないオプションを追加した
- Bugzilla 15800: std.conv.to!intはどのような文字型の範囲でも動作しない
- Bugzilla 15803: std.fileはPOSIXで秒以下のファイル時間精度をサポートすべきである。
- Bugzilla 15860: lockstepはforeach_reverseをサポートすべきである。
- Bugzilla 15991: std.datetime.StopWatchは"@nogc"ではない
- Bugzilla 15995: std.conv.textとその仲間はstd.array.appenderで高速化できる。
- Bugzilla 16308: [ndslice]は常にプリミティブを保存する必要がある。
- Bugzilla 16311: スライスのtoHashが定義されていない
- Bugzilla 16315: [] ?=演算はパックされたスライス[ndslice]では動作しない。
- Bugzilla 16319: std.experimental.allocator.makeがネストしたクラスで微妙に間違っている
- Bugzilla 16363: frontTransversalを使ってランダムアクセス範囲を構築できない
- Bugzilla 16364: getUDAとhasUDAは一貫した結果を返さない。
- Bugzilla 16443: std.getopt: 空文字列オプションでセグメンテーションフォールトが発生する
Druntimeのリグレッション
- Bugzilla 1180: GCが大きな割り当て要求をうまく処理できない。
- Bugzilla 16211: [REG 2.058] 周期的依存関係がまた壊れた
Druntimeのバグ
- Bugzilla 6333: capacity "関数は純粋/nothrow/@safeではない。
- Bugzilla 14601: pthread関数が@nogcとマークされていない。
- Bugzilla 15111: 動的配列へのエイリアスを持つ構造体ではhashOfに失敗する。
- Bugzilla 15838: 多くのWin32 APIコールバック関数がextern(Windows)を見逃す。
- Bugzilla 15958: core.sys.windows関数のextern(Windows)が見つからない。
- Bugzilla 15959: core.sys.windowsモジュールはx64用に修正されるべきである。
- Bugzilla 15976: コア.sys.windowsモジュールはx64用に修正されるべきである。
- Bugzilla 15987: core.sys.windows.msacmは疑似定義のままである。
- Bugzilla 15997: winhttp の ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED の定数値が正しくない。
- Bugzilla 16007: いくつかの Win32 API 構造体の定義が間違っている
- Bugzilla 16049: core.sys.windows構造体のサイズと整列が正しくない。
- Bugzilla 16594: 以前に例外がスローされた場合、モジュールのデストラクタが再度呼び出される
Druntimeの機能強化
- Bugzilla 14117: core.atomicは"@safe"であるべきだ。
dlang.orgのバグ
- Bugzilla 15442: 同名テンプレートの制限はドキュメント化されるべきである
- Bugzilla 16004: 保護属性の変更を文書化する
- Bugzilla 16016: std.concurrencybaseをドキュメントから削除する。
- Bugzilla 16040: Dconfアナウンスを削除する。
- Bugzilla 16114: [ddox] "Improve this page" リンクが package.d モジュールで壊れている
- Bugzilla 16167: chm-nav.json の生成が壊れている
- Bugzilla 16186: [C プログラマのための D プログラミング] 生文字列構文の説明ではバックティックをエスケープすべきである。
- Bugzilla 16231: 言語仕様: std.regexp -> std.regex のリネーム
dlang.orgの機能強化
- Bugzilla 16141: 組織ページに到達できない
- Bugzilla 16152: dpl-docs/ddox が同名のテンプレートメンバーのドキュメントを表示しない。
- Bugzilla 16464: opCast のドキュメントが不十分
インストーラーのバグ
- Bugzilla 16349: install.sh スクリプトの curl リトライを改善した。
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku