変更ログ 2.064
Download D 2.064
2013年11月5日発売
言語機能の強化
- パッケージ・モジュールの定義とインポート機能を導入。
- 新しい同名テンプレート構文が導入された。
- new 式の後に Postfix 式を指定できるようになった。
- 暗黙関数テンプレート化された関数のインスタンス化が、型/スコープの推論をサポートするようになった。
- DDocコメント中のシンボル名が実際のコードと一致しない場合、DDocがユーザーに警告するようになった。
- スライスされた文字列リテラルが暗黙的にcharポインタに変換されるようになった。
- テンプレート化された関数とテンプレート化されていない関数が互いにオーバーロードできるようになった。
- モジュール間のテンプレート宣言でオーバーロード・セットを作成できるようになった。
コンパイラの変更
コンパイラの強化
Phobos の機能強化
- 構造的タイプセーフ変換関数wrap とunwrap を導入した。
- std.conv.to と は純粋関数となった。std.string.format
- 汎用関数strip/stripLeft/stripRight を導入。
- std.string.translate のオーバーロードを導入し、バッファを取ることができるようになり、暗黙のメモリ割り当ての必要性がなくなった。
- 現在実行中のプロセスの実行可能パスを取得するthisExePath 関数を導入した。
- std.regexmatch/replace 関数用の新しい API を追加した。
- コンパイル時std.regex.ctRegex 、実行時と同様にルックアラウンドをサポートするようになった。
D 2.064 のすべてのバグ修正と機能強化のリスト。
言語機能の強化
- パッケージ・モジュールの定義とインポート機能を導入した。
新しいパッケージ・インポート機能では、ライブラリ・モジュールを定義することができる。 を定義することができる。ユーザーはこの1つのモジュールをインポートするだけで、ライブラリーをまるですべてのモジュールを一度にインポートしたかのように使うことができる。 をインポートすることができる。例::
libweb/client.d:
module libweb.client; void runClient() { }
libweb/server.d:
module libweb.server; void runServer() { }
libweb/package.d:
module libweb; public import libweb.client; public import libweb.server;
パッケージモジュールのファイル名は常にpackage.d でなければならない。モジュール名 はパッケージの修飾名である。次に、ユーザーは標準のimport構文を使用して、パッケージをインポートする。 パッケージ・モジュールをインポートするには、単にモジュール宣言名を使ってパッケージをインポートする:
test.d:
module test; import libweb; void main() { startServer(); startClient(); }
以下は、サブパッケージのパッケージモジュールの例である:
libweb/utils/package.d:
module libweb.utils; // "utils"だけでなく、パッケージの完全修飾名を指定する! // 'libweb.utils'パッケージからモジュールをpublicインポートする。 public import libweb.utils.conv; public import libweb.utils.text;
このサブパッケージをインポートするには、標準モジュールのimport宣言を使う:
test.d:
module test; import libweb.utils; void main() { }
根拠:このような理由で、このような決断を下したのである:
これまでは、public importモジュールは実装可能であったが、それは慣例によるものであった。ユーザーは通常 libweb.all libweb._のようなライブラリ作者が指定した特定のモジュールをインポートしなければならない。 パッケージのインポート機能を導入することで、このライブラリ作者共通の慣例が標準化される。
- 新しい同名テンプレート構文を導入した。
新しい同名テンプレート構文により、従来の同名テンプレートのようにテンプレート名を明示的に定義することなく、より短いテンプレートを記述できるようになった。 従来の同名テンプレートを使用する際に、テンプレート名を明示的に定義し、繰り返すことなく、より短いテンプレートを書くことができる。 例えば、2.064以前の同名テンプレートは以下のように記述され、使用されていた:
template Tuple(T...) { alias Tuple = T; } template isIntOrFloat(T) { static if (is(T == int) || is(T == float)) enum isIntOrFloat = true; else enum isIntOrFloat = false; } void main() { alias Tup = Tuple!(int, float, string); static assert(isIntOrFloat!(Tup[0])); // intはintまたはfloatである static assert(isIntOrFloat!(Tup[1])); // floatはintまたはfloatである static assert(!isIntOrFloat!(Tup[2])); // stringはintでもfloatでもない }
新しい同名構文により、実装コードは非常にシンプルになった:
alias Tuple(T...) = T; enum isIntOrFloat(T) = is(T == int) || is(T == float); void main() { alias Tup = Tuple!(int, float, string); static assert(isIntOrFloat!(Tup[0])); // intはintまたはfloatである static assert(isIntOrFloat!(Tup[1])); // floatはintまたはfloatである static assert(!isIntOrFloat!(Tup[2])); // 文字列はintでもfloatでもない }
このようなテンプレートの宣言は、キーワードenum で始めるのではなく、alias または で始める必要があることに注意してほしい、 で始めるのではなく、template で始める必要がある。
制限事項
現在のところ、これらのタイプのテンプレートに対してテンプレート制約を定義することはできない。 この制限は将来のリリースで解除されるかもしれない。
- new 式の後にPostfix式を指定できるようになった。
2.064以前では、 式を括弧でくくることなく、新しいクラスをインスタンス化して、メソッドを呼び出したり、オブジェクトのプロパティにアクセスしたりすることはできなかった。 new を括弧で括らなければならなかった:
class Server { this(string[] args) { } void run() { } } void main(string[] args) { (new Server(args)).run(); }
2.064ではこの制限が解除され、以下のようにコードを書くことができるようになった:
class Server { this(string[] args) { } void run() { } } void main(string[] args) { new Server(args).run(); }
注釈:デフォルトのコンストラクタでクラスをインスタンス化する場合、フィールドにアクセスしたりオブジェクトのメソッドを呼び出したりする前に、空の括弧を挿入しなければならない。 を挿入しなければならない:
class Server { this() { } void run() { } } void main() { new Server.run(); // エラー new Server().run(); // OK }
- 暗黙の関数テンプレート化されたインスタンス化は、包含型/スコープ推論をサポートするようになった:
- DDocコメント中のシンボル名が実際のコードと一致しない場合、DDocがユーザーに警告を出すようになった:
- スライスされた文字列リテラルは、暗黙的にcharポインタに変換されるようになった:
- テンプレート化された関数とテンプレート化されていない関数が互いにオーバーロードできるようになった:
- モジュール間のテンプレート宣言がオーバーロード・セットを作れるようになった:
IFTIが改良され、以下のようなコードが書けるようになった:
struct A { struct Foo { } } struct B { struct Foo { } } /** テンプレート化された関数で、 第2引数が'T'型にネストされた'Foo'型であることを想定している。 */ void call(T)(T t, T.Foo foo) { } void main() { auto a = A(); auto a_f = A.Foo(); call(a, a_f); // OK auto b = B(); auto b_f = B.Foo(); call(b, b_f); // OK call(a, b_f); // 失敗: b_fはA.FooではなくB.Fooとして型付けされている }
このIFTI機能により、シンボルのモジュールを、型パラメータではなくalias このIFTI機能により、型パラメータではなくテンプレート・パラメータを使ってシンボルのモジュールを取得することもできる:
module my_module; struct A { struct B { } } void foo(alias Mod)(Mod.A, Mod.A.B) { // 'Mod'は構造体'A'を囲むモジュール'my_module'であると推論される static assert(__traits(isSame, Mod, my_module)); } void main() { A a; A.B b; foo(a, b); // OK }
これはドキュメント化された関数の例で、パラメータ名が間違ってドキュメント化されている:
/** これがsum関数である。 params: x = 1番目のパラメータ y = 2番目のパラメータ */ int sum(int a, int b) { return a + b; }
警告を有効にしてドキュメントを生成すると、次のようになる:
dmd -D -c -w test.d
test.d(8): Warning: Ddoc: function declaration has no parameter 'x' test.d(8): Warning: Ddoc: function declaration has no parameter 'y'
この機能は、ライブラリ・コードのドキュメントを常に最新に保つのに役立つ。
注釈: -D スイッチを使ってドキュメントを作成する場合は、-w スイッチを使うことを忘れないこと。 を使用することを忘れないこと。
文字列をヌル終端ポインタとして期待するCライブラリとのやりとりを容易にする、 文字列をヌル終端ポインタとして期待する C ライブラリとの相互作用を容易にするために、文字列literals (変数ではない!) をスライスすると、そのようなポインタへの暗黙の変換が可能になった:
extern(C) void call(const(char)* str) { } void main() { const(char)* abc = "abc"; call(abc); // 以前は許可されていた const(char)* ab = "abc"[0 .. 2]; call(ab); // 2.064では許可されている }
auto foo(int n) { return 1; } auto foo(T)(T t) { return 2; } void main() { assert(foo(100) == 1); assert(foo("a") == 2); // 整数リテラル10Lは、精度を失うことなくintに変換できる。 // そして、呼び出しはfoo(int n)にマッチする。 assert(foo(10L) == 1); // long型の実行時変数'num'は暗黙的にint型に変換できない。 // この場合、呼び出しはfoo(T)(T t)にマッチする。 long num = 10L; assert(foo(num) == 2); }
テンプレート化された関数は、通常の関数宣言と同様にオーバーロードできるようになった。複数のモジュールの名前が一致するテンプレートは、オーバーロードセットを導入する:
module a; template Traits(T) if (is(T == double)) { enum Traits = "abc"; } auto func(T, A...)(A args) if (is(T == double)) { return 1; }
module b; template Traits(T) if (is(T == string)) { enum Traits = "def"; } auto func(T, A...)(A args) if (is(T == string)) { return 2; }
module c; import a, b; static assert(Traits!double == "abc"); // a.Traitsにマッチする static assert(Traits!string == "def"); // b.Traitsにマッチする void main() { assert(func!double(1, "msg") == 1); // a.func(T, A...)にマッチする assert(func!string(1, "msg") == 2); // b.func(T, A...)にマッチする }
制限事項:
エイリアス宣言を使ったテンプレートのオーバーロード・セットのマージは現在サポートされていない。 この制限は将来のリリースで解除される予定だ。
コンパイラの変更
- ツール・サポートのため、依存関係を標準出力に出力できるようにした:
ファイル名を指定しなくても-deps スイッチを使えるようになった。 依存関係は標準出力に出力され、ユーザーとツールの両方が出力から依存関係を調べることができる。 が出力される。
出力される依存関係の型は以下の通りである:
depsImport:モジュールのインポートが見つかった (-deps=file 出力と同じ。ただし、先頭に depsImport が付く)。
depsVersion:バージョン(標準のものとモジュール自体に設定されているものを除く。)
depsFile:見つかったインポート文字列(例:string x = import("foo.txt");
depsLib:で指定されたライブラリpragma(lib) statement
depsDebug:見つかったdebug() 文(モジュール自体に設定されているものを除く)
コンパイラの強化
- ユニテストの検索とカスタム実行のためにgetUnitTests トレイトを導入した:
- 仮想関数のインデックスを取得するためにgetVirtualIndex 特性を導入した:
- 関数がオーバーライドされているかどうかを示すisOverrideFunction 特性を導入した:
新しいgetUnitTests 特性を使うと、モジュールや集合体のすべてのユニテストを検索し、手動でテストを実行することができる。 のすべての unittest を取得し、手動でテストを実行することができる。以下は、カスタムの実行例である。 を実装した例である:
import core.runtime; import core.exception; import std.stdio; shared static this() { // これは、デフォルトのDランタイムのユニットテストのランナー関数をオーバーライドする、 // __traitsベースのものをメイン関数で提供しているからだ。 Runtime.moduleUnitTester = { return true; }; } unittest { assert(1); // 合格。 } unittest { assert(0); // 失敗。 } unittest { assert(1); // 合格。 } void main() { Throwable[] errors; // スローされた例外をすべて収集する。 size_t passCount; // 合格したユニットテストの数を数える。 // 各ユニテストを繰り返し処理する(これはタプルになる)。 foreach (test; __traits(getUnitTests, my_module)) { try { test(); passCount++; } catch (Throwable error) { errors ~= error; } } // エラーや統計情報を出力する。 if (errors.length) { writeln("Some unittests failed:\n"); foreach (error; errors) writeln(error); } else { writefln("All unittests passed. Passed unittest count: %s", passCount); } }
注釈:ユニテストを取得できるようにするには、-unittest フラグを付けてコンパイルする必要がある。
注釈:デフォルトでは、Dランタイムは独自のユニテスト実行関数を提供する。 実行時に(main関数が呼ばれる前に)この関数が呼び出されるのを避けたい場合は、以下のようにカスタム関数を設定する必要がある。 モジュールのコンストラクタでRuntime.moduleUnitTester 。 上記のテストケースで使われているものは、単にtrue を返すだけで、main 関数を呼び出すことができる。 関数が呼び出されるようにする。
注釈: getUnitTests トレイトは再帰的ではない。つまり、モジュール を呼び出すと、そのモジュール内のアグリゲートにネストされたユニテストは取得できない。
この trait を使用すると、仮想メソッドテーブル内の仮想メソッドのインデックスを取得できる:
class C { void foo() { } void bar() { } } class D : C { void doo() { } void doo(int) { } void doo(double) { } } void main() { /** 各クラスは暗黙のうちにObjectクラスを継承しているため、 以下のクラスはインデックス0で始まらない可能性が高いことに注意しよう。 */ pragma(msg, __traits(getVirtualIndex, D.foo)); pragma(msg, __traits(getVirtualIndex, D.bar)); /** オーバーロードを扱う場合、getOverloadsトレイトを使えば、 特定のメソッドをインデックスすることができる */ pragma(msg, __traits(getVirtualIndex, __traits(getOverloads, D, "doo")[0])); pragma(msg, __traits(getVirtualIndex, __traits(getOverloads, D, "doo")[1])); pragma(msg, __traits(getVirtualIndex, __traits(getOverloads, D, "doo")[2])); }
class Base { void foo() { } } class Foo : Base { override void foo() { } void bar() { } } static assert (__traits(isOverrideFunction, Base.foo) == false); static assert (__traits(isOverrideFunction, Foo.foo) == true); static assert (__traits(isOverrideFunction, Foo.bar) == false);
phobosの機能拡張
- 構造的タイプセーフ変換関数wrap とunwrap を導入した:
- std.conv.to と が純粋関数になった:std.string.format
- ジェネリックstrip/stripLeft/stripRight 関数が導入された:
- std.string.translate のオーバーロードが導入され、バッファを受け取ることができるようになり、暗黙のメモリ割り当ての必要性がなくなった:
- 現在実行中のプロセスの実行可能パスを取得するthisExePath 関数を導入した:
- std.regexmatch/replace 関数の新しい API:
- コンパイル時のstd.regex.ctRegex 、実行時と同様にルックアラウンドをサポートするようになった:
特定のインターフェイスの引数型を期待する関数でクラスが使えるようにしたいが、必ずしもそのインターフェイスを継承するようにクラスを編集したくない場合がある。 しかし、必ずしもそのインターフェイスを継承するようにクラスを編集したいわけではない。 また、そのクラスはソースコードを持っていない別のライブラリで実装されている可能性もある、 つまり、そのクラスの継承リストを編集することはできない。
新しい "wrap "関数を使えば、構造キャストを行うことができる。 あたかも別の型のオブジェクトであるかのように振る舞うことができる。例: (注釈: 今のところ、コンパイル時に-allinstフラグをdmdに渡してほしい):
import std.typecons; interface IDrawable { void drawLine(int x1, int y1, int x2, int y2); } class ImageDraw // 注釈: IDrawableを継承しない。 { void drawLine(int x1, int y1, int x2, int y2) { } } /** Draw a rectangle outline. */ void drawRect(IDrawable draw) { draw.drawLine( 0, 0, 100, 0); draw.drawLine(100, 0, 100, 100); draw.drawLine( 0, 100, 100, 100); draw.drawLine( 0, 0, 0, 100); } void main() { auto imageDraw = new ImageDraw(); drawRect(imageDraw); // エラー: ImageDrawはIDrawableではないので呼び出せない。 // 構造キャストを行う。 IDrawable i = wrap!IDrawable(imageDraw); drawRect(i); // これでimageDrawはIDrawableとして動作できる。 }
wrap 関数は、例えばopDispatch 関数を定義しているクラスでも使うことができる:
import std.typecons; interface IDrawable { void drawLine(int x1, int y1, int x2, int y2); void drawRect(int x, int y, int width, int height); } class ImageDraw { void opDispatch(string name, Args...)(Args args) if (name == "drawLine") { // ... } void opDispatch(string name, Args...)(Args args) if (name == "drawRect") { // ... } } /** いくつかの図形を描く。 */ void drawShapes(IDrawable draw) { draw.drawLine(0, 100, 100, 0); draw.drawRect(0, 0, 100, 100); } void main() { auto imageDraw = new ImageDraw(); IDrawable i = wrap!IDrawable(imageDraw); drawShapes(i); }
構造キャストされたオブジェクトをアンラップして元の型に戻すことができる:
interface IDrawable { void drawLine(int x1, int y1, int x2, int y2); } class ImageDraw { void drawLine(int x1, int y1, int x2, int y2) { } } void main() { auto imageDraw = new ImageDraw(); // 構造キャストを実行する(単純なUFCS構文であることに注意)。 IDrawable i = imageDraw.wrap!IDrawable; // 元の型を取得する(UFCS構文を使用して、同様)。 ImageDraw draw = i.unwrap!ImageDraw; }
また、複数のインターフェイス型に構造キャストすることもできる:
import std.typecons; unittest { interface IStoppable { void stop(); } interface IRunnable { void run(); } class Timer { void run() { } void stop() { } } auto timer = new Timer(); auto obj = timer.wrap!(IStoppable, IRunnable); // ラップされた型から // 構造キャストされた型を取り出す。 IStoppable iStop = obj; IRunnable iRun = obj; iRun.run(); iStop.stop(); }
2.064以降、純粋関数はto とformat を利用できる。例:
import std.conv; import std.string; void main() pure // このmainは純粋関数である。 { string date = format("%s.%s.%s", 2013, 12, 10); int one = to!int(1.0); }
新しい汎用ストリップ関数を使えば、文字列だけでなく、その他の入力範囲もストリップできる。 (stripLeft) や双方向範囲 (strip/stripRight) もストリップできる:
import std.algorithm; void main() { // 空白を取り除く。 assert(" foobar ".strip!(a => a == ' ')() == "foobar"); // 音声波形を取り出す。 float[] data = [0.0, 0.0, 0.1, 0.5, 0.2]; // 波形の先頭の無音部分を取り除く。 assert(data.strip!(a => a < 0.1)().length == 3); }
暗黙のメモリ割り当てを回避するため、translate のオーバーロードを導入した。 を取ることができるオーバーロードが追加された。例::
import std.array; import std.string; void main() { dchar[dchar] transTable = ['a' : '1', 'b' : '2', 'c': '3']; // PhobosのAppenderを使って出力範囲を作成する。 auto buffer = appender!(dchar[])(); auto toRemove = null; // 文字を削除しない。 translate("abcdef", transTable, toRemove, buffer); assert(buffer.data == "123def"); // もしくは、ヒープ割り当てを避けるために静的配列を使う。 // 注釈: バッファが小さすぎると例外がスローされる。 dchar[6] dbuffer; translate("abcdef", transTable, toRemove, dbuffer[]); assert(dbuffer == "123def"); }
thisExePath 関数を使用すると、現在の実行可能パスを取得できる:
import std.file; import std.stdio; void main(string[] args) { // 現在実行中の実行ファイルのフルパスを表示する。 // 注釈: これはargs[0]と同じかもしれないし、そうでないかもしれない。 // args[0]の内容はアプリケーションの起動方法に依存するが、thisExePath() // は依存しない。また、コードのmain以外の部分からthisExePath()に // アクセスすることも可能である。 writeln(thisExePath()); }
g"(=グローバル)フラグに基づく古いAPIは、混乱を招き、エラーを起こしやすかった。 さらに、"g"(=global)フラグがすでに関数によってオーバーライドされている場合もあった。 std.regex.splitter のように、すでに関数によってオーバーライドされている場合もあった。
新しいバージョンは、操作とその関数を結びつける。 新しいバージョンは、操作と関数を結びつけている。今のところ、"g"フラグはそのまま使用されている。 しかし新しいAPIは、適用可能な場合には常にそれを上書きする。新しい 新しいAPIに追加されたもう1つの機能は、replace 関数のオーバーロードである。 出力範囲を直接操作するためのオーバーロードである。
APIの違いを理解するために、以下の2つのサンプルを比較してみよう。
2.064以前
void main() { import std.regex, std.algorithm, std.range, std.stdio, std.string; auto m = "3.141592".match(`(\d+)\.(\d+)`); // mは範囲である assert(m.front.equal(["3.141592", "3", "141592"])); // グローバル vs 非グローバル auto word = regex(`(\w)\w*`); auto gword = regex(`(\w)\w*`, "g"); auto list = "tomatoes, potatoes, pineapple"; // これは'tomatoes'だけを表示する、これは多くの問題を引き起こした foreach(item; list.match(word)) writeln(item.hit); // while this will print each of them foreach(item; list.match(gword)) writeln(item.hit); auto justFirst = replace!(m => toUpper(m[1]) ~ m[0].drop(1))(list, word); assert(justFirst == "Tomatoes, potatoes, pineapple"); auto allOfThem = replace!(m => toUpper(m[1]) ~ m[0].drop(1))(list, gword); assert(allOfThem == "Tomatoes, Potatoes, Pineapple"); }
2.064以降:
void main() { import std.regex, std.algorithm, std.range, std.stdio, std.string; auto m = "3.141592".matchFirst(`(\d+)\.(\d+)`); // mは単純にサブマッチの範囲である assert(m.equal(["3.141592", "3", "141592"])); auto word = regex(`(\w)\w*`); auto list = "tomatoes, potatoes, pineapple"; // サブマッチを反復するので、2行表示される: // tomatoes // t foreach(item; list.matchFirst(word)) writeln(item); // というように、マッチ全体を表示する: assert(list.matchFirst(word).hit == "tomatoes"); // "g"オプションがあるかどうかをチェックする必要はない // 関数名を見れば一目瞭然だ foreach(item; list.matchAll(word)) writeln(item.hit); auto justFirst = replaceFirst!(m => toUpper(m[1]) ~ m[0].drop(1))(list, word); assert(justFirst == "Tomatoes, potatoes, pineapple"); auto allOfThem = replaceAll!(m => toUpper(m[1]) ~ m[0].drop(1))(list, word); assert(allOfThem == "Tomatoes, Potatoes, Pineapple"); // 新機能 - アロケートする必要がない場合、結果の文字列 // 置換は直接ワイヤ(OutputRange)に送られる auto sink = stdout.lockingTextWriter(); replaceAllInto!(m => toUpper(m[1]) ~ m[0].drop(1))(sink, list, word); }
最終的には非推奨となる予定だが、古いAPIはまだ動作する。 また、*Into関数の形で、置換を出力範囲に直接転送する新しい機能にも注釈が必要である。 置換を直接出力範囲に転送し、ヒープへの余分な負荷を回避する *Into 関数という形の新機能にも注目してほしい。
ctRegex では、文字クラス内の集合代数を除き、ランタイムと同じ構文をすべてサポートしている。 代数を除いて、実行時の構文スペクトルをすべてサポートするようになった。例えば、以下のようにコンパイルして パスする:
void main() { import std.regex; // 単語だが、タイトルケースのASCIIではない // ()内の?<!は"負のルックビハインド"を意味する auto pat = ctRegex!`\w+(?<![A-Z][a-z]*)`; assert(!"Hello".match(pat)); assert("good_bay".match(pat)); }
D 2.064のすべてのバグ修正と機能強化のリスト:
DMDコンパイラのリグレッション
- Bugzilla 6014: rt_finalize Segmentation fault, dmd 2.053 on linux & freebsd
- Bugzilla 10074: dmdのsegfault
- Bugzilla 10197: [REG2.063] オーバーロードされたテンプレート・プロパティの結果をキャストできない。
- Bugzilla 10212: デリゲートリテラルの型が不一致でセグメンテーションフォールトが発生した。
- Bugzilla 10215: リグレッション(2.063リリース): constが間違ったfloat計算を引き起こす
- Bugzilla 10220: array が無効化されたデフォルト構築では動作しない。
- Bugzilla 10255: lib ファイルを作成する際、dmd がモジュールを複数の obj ファイルに分割しなくなった。
- Bugzilla 10299: [REG2.063] テンプレートのアドレス取得でICEが発生する。
- Bugzilla 10330: Regresfsion (2.063.2):VERSION__ の設定が間違っている。
- Bugzilla 10337: エラー:glwtf.input.SignalWrapper!().SignalWrapper.Signal!().~thisという変更可能なメソッドがある。
- Bugzilla 10352: リグレッション (2.063): --eval は RDMD で壊れている。
- Bugzilla 10357: std.typecons.Nullable!(SysTime).Nullable.__ctor!() エラーのインスタンス化
- Bugzilla 10373: 前方参照を解決できない (dmd2.063)
- Bugzilla 10375: [REG2.061] インポートモジュールのプライベートテンプレートがテンプレート型のパラメータをハイジャックしている(!)
- Bugzilla 10382: リグレッション (2.059):不正な型をキャッチする際にICEが発生する
- Bugzilla 10394: opBinaryRight!"in"とタプル
- Bugzilla 10397: 存在しないシンボルで文字列を連結する際の ICE
- Bugzilla 10425: テンプレートとのリンクエラー
- Bugzilla 10440: OSX の共有ライブラリ:2.062 で動作、2.063 / 2.063.2 で失敗する
- Bugzilla 10441: 静的ライブラリが大きすぎる
- Bugzilla 10456: 2.063以降、enum X, alias X this and a dynamic arrayを含む構造体がコンパイルできなくなった。
- Bugzilla 10481: メモリ不足エラー
- Bugzilla 10486: typeof(null) を静的配列に代入する際のセグメンテーションエラー
- Bugzilla 10498: __traits(compiles, ...) プログラムの動作に影響する
- Bugzilla 10503: 8進数の列挙型が機能しなくなった。
- Bugzilla 10505: 匿名列挙型メンバは異なる型を持つことができない。
- Bugzilla 10537: yield "例で前方参照エラーが発生する。
- Bugzilla 10548: [REG 2.064a] 引数に識別子がない。
- Bugzilla 10558: struct.c:741でアサーションに失敗した。
- Bugzilla 10561: リグレッション(2.064 HEAD): anon enumメンバがenum基本型を持たなくなった。
- Bugzilla 10573: 連想配列のキャストで変なリンクが発生する [DMD 2.63] : 2.063 Mixin Regression (2.063 Mixinで動作)
- Bugzilla 10577: 2.063 ミックスイン回帰 (2.062で動作)
- Bugzilla 10579: リグレッション 062=>063:コンパイル時にTypeInfoを解釈できない
- Bugzilla 10592: オーバーロードされたテンプレート関数の回帰
- Bugzilla 10600: regression(2.063.2) ICE:Assertion failed: (type->ty != Tstruct || ((TypeStruct *)type)->sym == this), function semantic, file struct.c, line 741.
- Bugzilla 10612: リグレッション(2.064 HEAD):相互モジュールのインポートで enum をハッシュキーとして使用する際の ICE
- Bugzilla 10617: -profile -debug の契約は "nothrow" である。
- Bugzilla 10624: [REG2.064a] タプル比較のICE
- Bugzilla 10626: ベクトル演算のICE
- Bugzilla 10628: [REG2.063] spurious "hidden by"の非推奨警告。
- Bugzilla 10669: CTFE: 初期化された static const クラスメンバの使用が機能しなくなった。
- Bugzilla 10673: interpret.c のメモリ破壊
- Bugzilla 10682: [ICE](cgcod.cの1561行目)で^^演算子とulongを使用していた。
- Bugzilla 10684: 配列リテラルで配列 op を拒否した
- Bugzilla 10687: コンパイル時にuint[]からuintベースの列挙型の配列へのキャストを拒否された。
- Bugzilla 10713: [REG2.063] メソッドシグネチャのtypeof(this.nonExistingField)を持つICE
- Bugzilla 10721: ポストコンディションを持つコンストラクタを持つICE
- Bugzilla 10722: リグレッション(2.064 git-head):コンパイル時に構造体を解釈できない
- Bugzilla 10726: opEquals が定義されループを持つ場合、不正な循環参照エラーが発生する。
- Bugzilla 10727: リグレッション(dmd-2.061) -- DMD dumps core
- Bugzilla 10734: cast.c'の1546行目の'0'でアサーションに失敗した。
- Bugzilla 10736: リグレッション (2.064 git-head):モジュールのインポートとモジュールの順序によってインスタンス化に失敗する。
- Bugzilla 10744: [リグレッション git-head v2.064] 有効なインターフェースの継承が拒否される。
- Bugzilla 10782: 文字列ミックスイン、CTFE、クラス、非リテラルイニシャライザでdmdのセグメンテーションエラーが発生する。
- Bugzilla 10788: リグレッション: 他のモジュールから列挙型メンバEを前方参照する。
- Bugzilla 10789: 構造体のデストラクタが誤って呼び出された。
- Bugzilla 10804: リグレッション(2.063=>2.064) Appenderかdmdの問題?
- Bugzilla 10808: [REG2.064a] テンプレート引数のtypeidが正しくない。
- Bugzilla 10836: 最適化されたビルドでは "errors compiling the function "となる。
- Bugzilla 10946: の代わりに整数定数式が期待される。
- Bugzilla 10949: インデックス作成エラー後のCTFE ICE
- Bugzilla 10964: [REG][2.063] 静的配列の代入/ブレット例外がキャッチブロックをすり抜ける。
- Bugzilla 10981: 純粋なクラスメソッドの"契約"は役に立たない。
- Bugzilla 10994: [REG] voidで初期化された静的配列を持つ静的構造体を宣言できない。
- Bugzilla 10998: [REG 2.063] コンパイル時のポストブリット・コール・チェックが正しく抑制されない。
- Bugzilla 11010: リグレッション(2.063.2) typeidがインスタンスのメンバで動作しない。
- Bugzilla 11039: 循環インポートからの未定義のインスタンス化
- Bugzilla 11054: ICE: interpret.c:357: virtual void Statement::ctfeCompile(CompiledCtfeFunction*):アサーション0 に失敗した。
- Bugzilla 11062: thisとopIndexAssignのエイリアスを持つインラインice
- Bugzilla 11069: DMD (github HEAD) リンカのリグレッション。
- Bugzilla 11081: Win64:COMDATが重複し、ラムダを使ったコンパイルに失敗した。
- Bugzilla 11086: dmd segfault
- Bugzilla 11105: 構造体の要素から多次元の静的配列を初期化する際にエラーが発生する。
- Bugzilla 11117: 擬似モジュール __entrypoint.d が -deps で依存関係としてリストされている。
- Bugzilla 11121: ddocの出力で括弧の省略が間違っている
- Bugzilla 11127: std.range.cycleリンカエラー
- Bugzilla 11153: リグレッション(2.064 git-head):戻り値の型が見つからない場合の診断中の ICE
- Bugzilla 11163: [ICE](ctfeexpr.cの355行目)のpragma(msg)が間違った式になっている。
- Bugzilla 11186: 回帰 (2.061):Variant フィールドと const フィールドが存在すると opAssign が起動する
- Bugzilla 11197: [DMD 2.064a] postblitを持つ構造体を配列のAAに追加できない。
- Bugzilla 11203: extern (C++) クラスが壊れている。
- Bugzilla 11220: マスターのリグレッション:XXX__lambda2がXXX関数のフレームにアクセスできない。
- Bugzilla 11223: タプル代入とif/elseによるインライン・アイス
- Bugzilla 11225: モジュールの依存性サイクルにより、テンプレート内のtypeof()式内のimport文が失敗する。
- Bugzilla 11228: エイリアスによって静的配列のコピーが混乱する
- Bugzilla 11230: [REG2.064a] テンプレート化された関数リテラルの不正なマングリング。
- Bugzilla 11233: 大きな静的配列構造体フィールドでDMD HEADが非常に遅くなる。
- Bugzilla 11237: ゼロ初期化子が読み取り専用データセグメントに出力され、コンパイルに時間がかかる。
- Bugzilla 11242: [REG2.064beta] inoutのテンプレート引数の推論に失敗する。
- Bugzilla 11245: [REG 2.063] クラス内から静的配列の長さにアクセスできない。
- Bugzilla 11246: [REG 2.063] コンストラクタで初期化された構造体が最初に破壊される。
- Bugzilla 11256: struct with disabled default construction and templated with lambda struct : デフォルトの構造を無効にした構造体とラムダ構造体を混在させるとエラーが発生する。
- Bugzilla 11261: foreachで明示的なスライスがないと型を推論できない
- Bugzilla 11262: std.regex.replaceがStaticRegexを受け付けない
- Bugzilla 11265: structの内部で定義されたクラスのインスタンスメソッドを呼び出す際にSegfaultが発生した。
- Bugzilla 11267: 実行ファイルのサイズが大きく変わる
- Bugzilla 11271: [REG 2.063] auto ref opAssign + destructor + struct literalが失敗する。
DMDコンパイラのバグ
- Bugzilla 952: 警告メッセージの接頭辞に "Error:"が付くことがある。
- Bugzilla 1982: [CTFE] コンパイル時のNULLの問題
- Bugzilla 2407: 関数のポインターを列挙型の基本型として使用することができない。
- Bugzilla 2486: スライスr値のアドレスを取ることは許されない
- Bugzilla 3096: EnumBaseType
- Bugzilla 3646: テンプレートをインスタンス化された関数の引数のデフォルト値は無視される。
- Bugzilla 3866: デフォルトのパラメータを持つ匿名デリゲートは、別の匿名デリゲートとクロストークする。
- Bugzilla 4018: テンプレートのデフォルト・パラメーターである"__FILE__"と"__LINE__"が、仕様に従ってインスタンス化ポイントに設定されない
- Bugzilla 4481: ICE(glue.c,!vthis->csym)またはコンパイルされる。
- Bugzilla 4611: 構造体の静的配列が 16MB を超える場合、スタックオーバーフローまたは ICE(cgcod.c)が発生する。
- Bugzilla 4841: -inline は特定のネストされた構造体を破壊し、"***はネストされた関数であり、***からはアクセスできない" というエラーを引き起こす。
- Bugzilla 4899: Ddoc:モジュール・コメントのファイル番号と行番号を含めないようにした。
- Bugzilla 5012: ICE(cod3.c): インラインasmでネストされた関数を処理する。
- Bugzilla 5655: static foreach 内のラムダがカウンタの間違った値を保存してしまう。
- Bugzilla 5842: ハッシュテーブルの破損
- Bugzilla 5911: クロージャはスローされた例外を破棄する。
- Bugzilla 5988: テンプレートは既にインスタンス化されたテンプレート型を受け入れる
- Bugzilla 6107: ICE(expression.c)は、構造体の中に'__ctor'という名前の非テンプレートメンバが存在し、そのコンストラクタを呼び出そうとした場合に、そのメンバのインスタンス化を受け付ける。
- Bugzilla 6169: [CTFE] 純粋関数は、純粋とマークされていない関数を使用して定数を計算することはできない。
- Bugzilla 6178: AA 内の構造体が正しく init されない。
- Bugzilla 6310: エイリアスのテンプレート・パラメータでエラーが発生した場合に、"template instantiation "トレースバックが見つからない。
- Bugzilla 6461: typeidとmultiobjを使用した複数定義。
- Bugzilla 6711: "with"が"alias this"で機能しない。
- Bugzilla 6720: ICE(cod1.c)がvoid関数のreturnをboolにキャストする。
- Bugzilla 6799: ICE(type.c) AAと構造体へのポインタを含む。
- Bugzilla 6906: opAssignを含む場合、連想配列に値を代入できない。
- Bugzilla 7051: 安全でないデストラクタを持つクラス・メンバは混乱を招く。
- Bugzilla 7156: ICE(go.c):199または200の繰り返し整数インクリメントでは、-Oのみである。
- Bugzilla 7202: 型システムの穴はデリゲートにも存在する。
- Bugzilla 7254: ICE(cod3.c)は文字列を静的配列として返す。
- Bugzilla 7436: ICE(cg87.c)のubyte=ubyte op=浮動小数点数
- Bugzilla 7474: ICE(cgcs.c) フィールドとデストラクタをタプルに持つ構造体のインスタンス化について
- Bugzilla 7522: ICE(interpret.c):静的でないメンバにアクセスする場合
- Bugzilla 7524: D1:#行__LINE__が解析されない。
- Bugzilla 7533: 純粋なstatic ctorで行番号がないエラー
- Bugzilla 7538: あらゆる種類のプロパティ関数は、typeof内部で型を取得する前に呼び出されるべきである。
- Bugzilla 7565: ICE(cg87):202、doubleパラメータのポストインクリメント、64ビットのみ
- Bugzilla 7656: 例: ddocがコメントされた括弧を誤って解釈する
- Bugzilla 7715: DDocはd_codeセクションの中で, , , などを食べる。
- Bugzilla 7727: 静的でない共用体にも "静的イニシャライザー"がある。
- Bugzilla 7746: 匿名ネストされたクラスの列挙型を宣言する "TOK232"のエラー
- Bugzilla 7780: テンプレートミックスインのメンバが正しくオーバーロードされない
- Bugzilla 7806: ICE(gloop.c)が-Oでコンパイルされるとidoubleで反復処理される
- Bugzilla 7848: unittestブロックでpureとnothrowが無視される。
- Bugzilla 7892: ctorが@disableの場合、コンパイラが生成した構造体のコピーがエラーになることがある。
- Bugzilla 7976: ICE(backend/cg87.c)複素数型の動的配列の2つの要素への代入。
- Bugzilla 7988: [CTFE] CTFEの戻り値はコンパイル時式で許可されるべきである。
- Bugzilla 8119: void*から転送された構造体ポインタにキャストできない。
- Bugzilla 8179: ICE(e2ir.c)で固定サイズ配列のキャストに失敗した
- Bugzilla 8253: CTFE ICE: 非CTFEクラス変数のメンバ関数の呼び出し
- Bugzilla 8285: CTFE関数から返されるスライスの問題
- Bugzilla 8352: 間違った"__overloadset isn't a template "エラー
- Bugzilla 8360: アサートで初期化されていない一時構造体が破壊される。
- Bugzilla 8361: [ICE](eh.c316行目)でassertにdtorを持つ構造体を指定する。
- Bugzilla 8441: テンプレート化された関数を含むミックスインがコンパイラエラーを引き起こす。
- Bugzilla 8563: 例外segfault
- Bugzilla 8579: デフォルトのパラメータが関数変数のtypeof().stringofの一部である。
- Bugzilla 8651: スライスop スライスは例外(エラーではない)をスローする。
- Bugzilla 8733: Windowsで-ofパスを正規化する
- Bugzilla 8795: "switch"や"interface;"を混ぜるとdmdがsegfaultする。
- Bugzilla 8911: -propertyは関数のfullyQualifiedNameを失敗させる。
- Bugzilla 8956: コンストラクタ/ポストブリット/デストラクタで型システムを壊すことができる(例えば不変のトラクタを変更する)。
- Bugzilla 8977: 静的構造体のイニシャライザーで型システムを壊すことができる(例:immutableの変更)。
- Bugzilla 9017: __traits(compiles,{列挙型 e = <式タプル>; })は真だが、コードはコンパイルされない。
- Bugzilla 9235: テンプレートミックスインでは矛盾しないオーバーロードをミックスすることができない。
- Bugzilla 9247: コンパイラは関数ポインタ宣言の値で返される不透明構造体を受け入れる。
- Bugzilla 9319: ある特定の状況において、コンパイル時に__traitsが予期せぬ挙動をする。
- Bugzilla 9364: [ICE] エラー:CTFE 内部エラーペインティング S* : CTFE 内部エラーペインティング S* : CTFE 内部エラーペインティング S
- Bugzilla 9396: ネストされた列挙型を構造体に代入する際の行番号が正しくない。
- Bugzilla 9524: ditto に続いて Unittest ddocs が表示されない。
- Bugzilla 9531: unittestブロック内で定義された型に対して"__traits(parent, ...)"は機能しない。
- Bugzilla 9534: 分散CHMファイルにスタイルがない
- Bugzilla 9546: getProtection "トレイトが"ミックスイン"や"getMember"で動作しない
- Bugzilla 9571: 無名 funcliteral で一意な ID を使用することによるリンクエラー
- Bugzilla 9578: はネストされた関数であり、"関数"からアクセスすることはできない。
- Bugzilla 9586: Win64 5/6/7 の構造体は以下を返す。
- Bugzilla 9628: foreachループのラムダ vs. static foreachループのラムダ
- Bugzilla 9634: [CTFE] 構造体の配列を連結する間違ったコード
- Bugzilla 9665: opAssignを持つ場合、構造体の定数メンバは初期化できない。
- Bugzilla 9710: ポインタ列挙型のクラッシュ dmd
- Bugzilla 9733: Debian x86_64 で -m64 を指定すると Hello world がセグメンテーションエラーになる
- Bugzilla 9782: RTInfo!Tを実装すると非推奨型でエラーが発生する
- Bugzilla 9859: デリゲートでinoutは使えない
- Bugzilla 9904: .sizeof がポインタのサイズと等しい場合、typeof(null) は集約型にキャストできる。
- Bugzilla 9921: void型の列挙型変数は不正である。
- Bugzilla 9923: [ICE](interpret.c行167)でcountUntilがTypedef[]に指定されている。
- Bugzilla 9938: CTFEでグローバルインターフェース変数を使用するICE
- Bugzilla 9954: CTFEで作成されたグローバル・インターフェイス変数を使用したランタイムの間違ったコード
- Bugzilla 9982: CTFE におけるポインタ非参照の ICE
- Bugzilla 10007: 関数はオーバーライドするが、共変でない。
- Bugzilla 10037: コンパイラは opEquals メソッドを暗黙的に生成すべきではない。
- Bugzilla 10064: opDollarはガベージで呼び出される
- Bugzilla 10065: コンパイラはタプルマップに対してエラーメッセージを出さずに失敗する。
- Bugzilla 10079: 組み込みで生成されるopAssignはデフォルトで純粋なnothrow @safeであるべきである。
- Bugzilla 10082: ICE(e2ir.c) 複数の"ミックスイン"テンプレートのインスタンスがチェックされない。
- Bugzilla 10083: IFTI/eponymousテンプレートの指定が不十分である。
- Bugzilla 10086: ICE(glue.c)、またはテンプレート値パラメータとして変数を渡す際のコードが正しくない。
- Bugzilla 10094: 静的配列で返すNRVOは機能するはずだ
- Bugzilla 10099: 無効化されたデフォルト構築の診断が改善されるべきである。
- Bugzilla 10113: switch文の中で列挙型(enum : string)を使用できない
- Bugzilla 10141: Tuple!(int)のエラーメッセージがおかしい:エラー: static assert "Cannot put a char[] into a Appender!(string)" : static assert "char[] をAppender!(string)に入れられない。
- Bugzilla 10156: テンプレート化された関数でTypeTuple引数を扱えない。
- Bugzilla 10196: RDMD: MSysからRDMDは使えない。
- Bugzilla 10198: CTFE: 多次元ブロック割り当てのコードが正しくない。
- Bugzilla 10208: 初期化値を持つモジュールレベルのconst/不変の変数はUDAをサポートしない。
- Bugzilla 10211: CTFE: S* -> D* がサポートされている場合、S** から D** へのキャストをサポートする。
- Bugzilla 10214: 要素ごとの代入の方が良い」という誤った警告が出る
- Bugzilla 10243: [CTFE] 再参照された配列ポインタを参照渡しする際のコード誤り
- Bugzilla 10244: ICE: expression.c:8364: virtual Expression* CallExp::semantic(Scope*):アサーションtd 失敗
- Bugzilla 10249: オーバーロードされたシンボルのマングリングが正しくない。
- Bugzilla 10252: CTFE: 有効範囲外のシフトに対してエラーを生成する必要がある
- Bugzilla 10254: コンストラクタで純度の正しさが壊れている。
- Bugzilla 10273: ICE(ctfeexpr.c): 構造体のデフォルト値でエラーが発生した後に CTFE を使用する。
- Bugzilla 10274: DMD 2.063 で壊れたバイナリが生成される
- Bugzilla 10275: CTFE: 構造体リテラルのconstキャストを許可する。
- Bugzilla 10277: TypeInfoの再宣言時のエラーファイルと行が正しくない。
- Bugzilla 10279: 型安全な可変長引数関数を@safe関数から呼び出すとエラーになる。
- Bugzilla 10280: CTFE:循環変数初期化子は正しく検出されるべきである。
- Bugzilla 10283: ICE(interpret.c): 失敗したイニシャライザを持つ構造体をCTFEに渡す。
- Bugzilla 10288: 直接ラムダ呼び出しと純粋性推論のバグ
- Bugzilla 10289: コンパイラはエラーがスローされてもnothrowを推論すべきである。
- Bugzilla 10296: テンプレート化された関数の呼び出しと純粋性推論のバグ
- Bugzilla 10298: 配列リテラルの初期化でCTFEが失敗する
- Bugzilla 10302: パッケージ・モジュールとパッケージ名の衝突
- Bugzilla 10319: safe/pure/nothrowエラーは完全修飾名を表示すべきである。
- Bugzilla 10325: ddoc: テンプレート制約が生成されたhtmlに矛盾して表示される
- Bugzilla 10327: DIP37の'package.d'が見つからない場合、より良いエラーメッセージが必要である。
- Bugzilla 10341: switch文のないRange caseはDMDをクラッシュさせる。
- Bugzilla 10343: グローバルtypeof内のテンプレートへの前方参照を解決できない。
- Bugzilla 10344: Dmainの終了は、すべてのFILE*をフラッシュし、失敗時にゼロ以外を返すべきである
- Bugzilla 10346: 未定義のテンプレート識別子で行番号エラーが発生しない
- Bugzilla 10354: DIP37: package.dを通して間接的にインポートされたテンプレートを使用する際のICE
- Bugzilla 10359: safeモードでポインタスライスを許可する
- Bugzilla 10381: 無意味な連想配列比較
- Bugzilla 10386: 静的ライブラリでパッケージインポート機能が壊れる。
- Bugzilla 10389: 自己参照的なStructLiteralExpの表示における無限再帰
- Bugzilla 10390: ClassReferenceExpを表示する際のICE
- Bugzilla 10405: void 関数で非 void を返すと、冗長な "expression has no effect" エラーが発生する。
- Bugzilla 10414: 遅延可変長引数関数の代入引数は第一引数でのみ推論される。
- Bugzilla 10415: const クラスインスタンスの const プロパティで不正なエラーメッセージが表示される。
- Bugzilla 10418: 悪いエラーメッセージ:プロパティではない" : bad error message: "not a property"
- Bugzilla 10419: 正しいエラーメッセージの後にdmdで未処理の例外が発生する
- Bugzilla 10421: 'package'アクセスはpackageモジュールで動作するはずである。
- Bugzilla 10429: RDMD: --loop オプションがシンボル衝突のため動作しない
- Bugzilla 10431: ICE(DMD 2.063) in struct.c:741
- Bugzilla 10432: RDMD: --dry-run オプションが存在しないファイルを読み込もうとする
- Bugzilla 10433: テンプレート化された関数での配列和の操作
- Bugzilla 10435: rdmd は -op 引数をサポートしていない。
- Bugzilla 10451: 不透明構造体へのポインタの配列で前方参照エラーが発生する。
- Bugzilla 10452: CTFE: 代議員を == または 'is' で比較できない。
- Bugzilla 10462: インターフェイスthunkがEBXを保持しない
- Bugzilla 10479: refでout契約にキャストした結果を暗黙的に基底クラスに渡すことができない。
- Bugzilla 10495: デフォルト構造が無効なフィールドを持つクラスでラムダを使用すると、不正確な「initializer required」エラーが発生する。
- Bugzilla 10497: ポインタからポインタ型へのポインタにおいて、不透明構造体を再参照できない。
- Bugzilla 10504: タプルエラー:"int"型のプロパティ"offsetof"がない。
- Bugzilla 10506: ミックスイン文では純度をチェックすべきではない。
- Bugzilla 10519: doc-unittestコード内のstray-parenが間違ったドキュメントを生成する。
- Bugzilla 10526: IFTIによるopDispatchはUFCSを無効にすべきではない。
- Bugzilla 10534: デリゲートの加算と減算が許される
- Bugzilla 10539: [REG][2.063] .ptrプロパティの配列への暗黙的なポインタ参照に失敗する
- Bugzilla 10542: 暗黙的に生成されたクラス・コンテナは基底クラス・コンテナの属性を継承しない。
- Bugzilla 10551: [CTFE] 再参照された配列ポインタをref 2で渡す際のコードが間違っている
- Bugzilla 10568: CTFE は関数ポインタの安全キャストを拒否する。
- Bugzilla 10583: DMD 2.063は__traits(getProtection, ...)を含むミックスインでコアをダンプする。
- Bugzilla 10595: エイリアスのthisとハッシュを使うと間違ったコードが生成される
- Bugzilla 10596: アウト契約とオートリターン型を持つメソッドはセグメンテーションフォールトを引き起こす。
- Bugzilla 10597: opDollarがstatic constextで呼び出せない。
- Bugzilla 10599: CTFE: アサートの失敗 interpret.c 310
- Bugzilla 10609: traits(compile)でUFCSが拒否された。
- Bugzilla 10610: interpret.c:4067 アサーション失敗
- Bugzilla 10618: 動的配列の割り当てでテンプレートインスタンスメンバーアクセスが許可されない
- Bugzilla 10630: デフォルトの構造が無効な構造体はout パラメータとして使用できない。
- Bugzilla 10633: Win64: %= で間違ったコード生成
- Bugzilla 10634: Win64: 小さい構造体の.initによる間違ったcodegen
- Bugzilla 10639: Win64: 複雑なフィールドを持つ構造体リテラルでの間違ったオプティマイザコード生成 : Win64: 複雑なフィールドを持つ構造体リテラルでの間違ったオプティマイザコード生成
- Bugzilla 10642: Win64: 異なるサイズの整数引数を比較する間違った codegen
- Bugzilla 10646: 動的配列/静的配列からクラス参照への無効なキャストに対するフロントエンド・エラーは発生しない
- Bugzilla 10651: throwableでないオブジェクトをスローするとICEが発生する。
- Bugzilla 10676: 最適化されたPICビルドでの過剰なコンパイル時間
- Bugzilla 10677: Win64: cfloat の戻り値が関数の引数として正しく転送されない。
- Bugzilla 10678: Win64: 関数の引数として小さな固定サイズの配列を渡すコードが間違っている。
- Bugzilla 10694: 不純なデストラクタを持つ静的変数の誤った純度チェック
- Bugzilla 10695: 文字列ミックスイン内の"__MODULE__"がコンパイラをクラッシュさせる。
- Bugzilla 10715: オプティマイザが否定ビットテスト(bt)を認識しない。
- Bugzilla 10735: symbol_generate()のバッファオーバーフローのバグ。
- Bugzilla 10746: Win64: 非常に長いシンボルでデバッグ情報が破損する
- Bugzilla 10752: プライベートでキャッシュされたシンボルに2度目アクセスしても__traits(compiles, ...)でエラーが発生しない
- Bugzilla 10758: inoutの不健全な型チェック。
- Bugzilla 10761: 不特定のinoutマッチングでDMDがクラッシュする。
- Bugzilla 10768: DMDが'override'キーワードが見つからない場合の非推奨メッセージを表示しない
- Bugzilla 10781: ctRegex!が巨大なエラーをスローする。
- Bugzilla 10783: switch文とwith文で存在しないシンボルを使用するとICEと不正な診断が行われる
- Bugzilla 10792: 新しい同名列挙型テンプレート構文で不正な診断が行われる
- Bugzilla 10793: void*から不透明な構造体ポインタへのキャストにおける前方参照エラー。
- Bugzilla 10809: [REG] ダーウィン32のdmdリリースが壊れた
- Bugzilla 10811: 順序依存のIFTI失敗
- Bugzilla 10813: ICE(DMD2.063) template.c:6040: Identifier* TemplateInstance::genIdent(Objects*):アサーションglobal.errors 失敗
- Bugzilla 10834: exprの型が構造体の場合、cast(void)exprは使えない。
- Bugzilla 10840: [CTFE] *this._data.arr はコンパイル時にまだ実装されていない。
- Bugzilla 10842: [CTFE]*this._data.arrはコンパイル時にまだ実装されていない : いくつかの整数キャストはオペランドの副作用を誤って除去する。
- Bugzilla 10857: ICE(glue.c, bugzilla 2962?)またはコンパイルする。
- Bugzilla 10858: ポインタの配列の比較における CTFE の間違ったコード
- Bugzilla 10862: if条件の中の代入がまだ受け入れられることがある
- Bugzilla 10869: Ddocは "const"を持つメソッドを2回マークする
- Bugzilla 10870: インターフェースに "abstract"を追加する
- Bugzilla 10937: CTFEで "共用体"内の構造体が初期化されていないエラーが発生する。
- Bugzilla 10942: ICE on 1087+ initializers (内部エラー: backendcgcv.c 203)
- Bugzilla 10944: [ICE](interpret.cの310行目)で、見つからない変数に対する算術演算が発生する。
- Bugzilla 10947: const out パラメータが正しく拒否されない
- Bugzilla 10953: 属性継承は契約にも適用する必要がある。
- Bugzilla 10968: 配列要素のコピー(1-NとN-N)がポストブリット属性を無視する
- Bugzilla 10969: 変数化されたテンプレートパラメーターの関数シグネチャーでの再使用。
- Bugzilla 10970: gなしでコンパイルした簡単なテストでセグメンテーション・エラーが発生した。
- Bugzilla 10980: postblitを無効にした不変構造体の静的初期化に失敗する。
- Bugzilla 10984: フレームアクセス診断の改善
- Bugzilla 10989: [CTFE] メッセージがリテラルでなかった場合、捕捉されなかった例外メッセージがきれいに出力されない。
- Bugzilla 10990: モジュールをミックスインとして"__traits(getUnitTests)"に渡すと、モジュールを直接渡すのとは異なる振る舞いをする。
- Bugzilla 10992: getUnitTestsは集合体が複数のテストを含んでいる場合、最初のテストをスキップする。
- Bugzilla 10993: 戻り値の型推論の際に、ラムダによるvoldemort型のマングリングが変更される。
- Bugzilla 10995: void初期化メンバを持つ構造体に対するCTFEの失敗。
- Bugzilla 11002: コンパイラーがstd.sys.linux.epoll.を見ない。
- Bugzilla 11075: ICE(struct.c)の構造体フィールドイニシャライザでギャグエラーが発生した。
- Bugzilla 11125: テンプレートのUFCSインスタンス化でテンプレート制約がスキップされる
- Bugzilla 11132: 共用体フィールドが存在する場合のC言語の構造体イニシャライザでの奇妙な診断
- Bugzilla 11134: ポインタ・サイズに依存するポストブリット呼び出し回数の矛盾
- Bugzilla 11136: 不正なモジュール宣言のICE
- Bugzilla 11137: 無効な出力パスによるスタックオーバーフロー
- Bugzilla 11141: phobos64 で .pdb ファイルが見つからない。
- Bugzilla 11142: opaque 構造体に対して "no size yet for forward reference" という誤ったエラーメッセージが表示される。
- Bugzilla 11144: typeid シンボルの診断を改善した
- Bugzilla 11145: 非推奨メッセージ "typedefの使用は非推奨です;"が重複している。
- Bugzilla 11146: "identity代入演算子オーバーロードは不正です"の行番号が誤っていた。
- Bugzilla 11147: 共用体内の入れ子構造体が正しく初期化されない。
- Bugzilla 11151: 重複初期化が検出されない
- Bugzilla 11159: [CTFE] 整数のべき乗が不正な値を与える。
- Bugzilla 11164: -mainでコンパイルしたときに生成される依存関係が間違っている
- Bugzilla 11182: 正規表現をコンパイルすると dmd がクラッシュする
- Bugzilla 11187: 構造体コピー時の小さな推移的定数バグ
DMDコンパイラの機能強化
- Bugzilla 658: with()内の構造体ポインタ。
- Bugzilla 767: コンパイラーは依存性とプラグマ(lib)を表示する。
- Bugzilla 5943: 2^符号なしに対するべき乗式の最適化
- Bugzilla 8635: newのためのpostfix式を許可する。
- Bugzilla 9022: IFTIは包含型/スコープ推論をサポートすべきである。
- Bugzilla 9097: 配列の束縛テストを無効にするための値域伝播 : : IFTIは型とスコープを囲む推論をサポートすべきである。
- Bugzilla 9565: 静的配列のインデックスがリテラル接尾辞を出力しないようにすべきである。
- Bugzilla 10022: パッケージのインポート
- Bugzilla 10117: C++ クラススコープの静的変数をサポートする
- Bugzilla 10236: Ddoc:間違ったパラメータ名に関する警告
- Bugzilla 10334: ddocは1つのパラメータを持つテンプレートのインスタンス化のためのシンプルな構文を好むべきである。
- Bugzilla 10367: DDocは "列挙型"を出力すべきである。
- Bugzilla 10688: privateオーバーライド "を試みたときの誤解を招くエラーメッセージ
- Bugzilla 10724: 文字列リテラルのスライスをconst(char)*に変換できるようにした。
- Bugzilla 10991: メソッドのvptrインデックスを取得するトレイトを実装する。
- Bugzilla 11088: 列挙型メンバのオーバーフローの診断が改善されるべきである。
- Bugzilla 11257: フィールドが1つ以上重なっている場合、全体の暗黙的な変換を可能にする。
phobosのリグレッション
- Bugzilla 10218: std.typecons.opAssignはCTFEableではない
- Bugzilla 10268: [REG2.063] std.typecons.Nullable!JSONValue - インスタンス化のエラー。
- Bugzilla 10355: fullyQualifiedNameが列挙型で動作しない
- Bugzilla 10468: リグレッション (2.063):ロックステップが iota で動作しなくなった。
- Bugzilla 10499: [REG 2.064] retro が CTFE できなくなった。
- Bugzilla 10686: 不変タプルに対する[]演算子オーバーロードがない。
- Bugzilla 10866: リグレッション (2.064 git-head) コンパイラの大幅な速度低下
- Bugzilla 10896: 現在のところ tools/ddemangle は git master 上でコンパイルできない。
- Bugzilla 10906: [2.064 git-head] Windows で "Phobos" をコンパイルする際のメモリ不足
- Bugzilla 10913: [2.064 git-head] 正規表現/範囲指定のコンパイルに失敗する
- Bugzilla 11009: リグレッション (2.064 git-head):多数の項目を含む列挙型をコンパイルするとDMDが膨大なメモリを消費する
- Bugzilla 11057: [REG2.064dev] 新しいstd.uniはicmp()の一部が壊れている。
- Bugzilla 11165: std.typecons._d_toObjectがstd.signals._d_toObjectと衝突している。
- Bugzilla 11283: [REG 2.064] std/windows/syserror.dにassertを追加した。
Phobos のバグ
- Bugzilla 2717: OSX で alloca(0) がスタックをアンアラインにする。
- Bugzilla 4575: D2Phobosで非推奨のdelete文を使用する。
- Bugzilla 5224: std.algorithm.remove!(SwapStrategy.unstable)が動作しない。
- Bugzilla 5378: ファイル.byLineの終端文字列
- Bugzilla 5630: イテレート可能なイミュータブル項目のarray()
- Bugzilla 5692: 負の虚部を持つ複素数の表示
- Bugzilla 5942: ビットフィールドが誤って上書きされる
- Bugzilla 6342: 純粋関数におけるタプルフィールドアクセス問題
- Bugzilla 6407: take(map) 問題
- Bugzilla 6686: bitmanipのビットフィールドが64ビットで壊れている
- Bugzilla 6893: ubyteまたはulongで表現された列挙型メンバの書き込み
- Bugzilla 7756: iota(const doubles) 問題
- Bugzilla 8124: std.net.isemail が phobos.lib に含まれていない。
- Bugzilla 8330: std.algorithm.findが参照型の範囲を正しく扱わない
- Bugzilla 8474: bitfieldsが32ビットフィールドで動作しない
- Bugzilla 8806: fullyQualifiedName!Tが内部型に対して機能しない
- Bugzilla 9310: escapeShellCommandのunittestが実行されない
- Bugzilla 9384: std.socket:Linux などで UnixAddress が壊れる
- Bugzilla 9548: BigInt:比較結果が正しくない:BigInt("-1") > long.min
- Bugzilla 9557: std.array.arrayは不変構造体の配列である。
- Bugzilla 9559: Nullableの範囲はstd.array.arrayでは動作しない
- Bugzilla 9579: std.regex.replaceの書式引数が対象文字列と同じ定数を必要としない
- Bugzilla 9599: File.byLineがtakeで正しく機能しない。
- Bugzilla 9607: std.random.randomShuffleとpartialShuffleがXorshiftで動作しない。
- Bugzilla 9629: toUpperInPlaceがunicode文字で正しく動作しない
- Bugzilla 9725: std.string.formatが無駄なUTFデコードを行う
- Bugzilla 9824: Emplaceが壊れている
- Bugzilla 9967: ParameterIdentifierTupleがセッターで壊れている
- Bugzilla 10017: より大きな構造体を保持する別のVariantをVariantに代入できない
- Bugzilla 10078: std.string.indexOf(Char[], dchar, CaseSensitive)がコンパイル時に失敗する。
- Bugzilla 10130: iotaのマップとconstステップ
- Bugzilla 10161: std.datetimeのunittestの失敗 "リビア標準時"
- Bugzilla 10188: std.format.d(176)の間違ったドキュメントコメント
- Bugzilla 10216: std.process.kill の悪い警告
- Bugzilla 10265: RandomSample は InputRange を入力として渡されると失敗する
- Bugzilla 10269: RandomSampleは入力範囲をスキップするときにpopFrontNではなくpopFrontExactlyを使うべき
- Bugzilla 10322: std.random.RandomSample.index() は front() の前に呼ばれると間違った値を返す
- Bugzilla 10347: 絶対パスと相対パスを結合する際にbuildPathが相対パスを返す
- Bugzilla 10348: isRootedの指定が間違っているか、指定が不十分である。
- Bugzilla 10377: std.typecons.wrap はプライベート・メンバーを考慮しない
- Bugzilla 10408: std.algorithm.reduceはconst配列の2関数である。
- Bugzilla 10426: std.randomのunittestのコードカバレッジを改善した。
- Bugzilla 10463: dirEntries()がユーザがアクセスできないパスでセグメンテーションエラーになる
- Bugzilla 10469: std.processのWinAPI宣言はcore.sys.windows.windowsに移動すべきである。
- Bugzilla 10474: takeExactlyが新しい範囲型を返すとき、関連するすべての属性の伝播に失敗する。
- Bugzilla 10510: extern(C)関数を呼び出すことができない。
- Bugzilla 10517: readln(Char)(Char[] buf)はミュータブルでないバッファを受け付ける
- Bugzilla 10536: std.typecons.wrapはopCastを定義したクラスでは動作しない
- Bugzilla 10543: std.algorithm.mapが狭い文字列に対してソース範囲の長さを誤って使用する
- Bugzilla 10550: Xorshift32とXorshift160が一様分布乱数を生成しない。
- Bugzilla 10570: AutoImplement のhow 関数の例:" は抽象クラス以外でも動作するはずである。
- Bugzilla 10601: 拡張子が空の場合、std.path.setExtension は末尾のドットを残す。
- Bugzilla 10607: DirEntry にはコンストラクタがない
- Bugzilla 10608: std.typecons.RefCountedの診断機能は非常に貧弱である。
- Bugzilla 10644: Win64: ...を介して引数を渡すときに間違ったコードになる。
- Bugzilla 10647: AutoImplementはオーバーライドされたメンバ関数を "override"属性で実装すべきである。
- Bugzilla 10660: ddoc on std.algorithm:filter'のチートシートの記述が間違っている
- Bugzilla 10680: BigIntは非推奨のstd.trait.unsignedを使っている。
- Bugzilla 10732: std.utf.toUTFindexの"Examples:"が動作しない。
- Bugzilla 10773: std.algorithm.splitterが空の区切り文字で無限の範囲を生成する
- Bugzilla 10796: std.regex: 複数行モードにおける'.'と$のctRegexバグ
- Bugzilla 10797: std.regex: ctRegexの"codegen"バグ、特定のネストした無限ループが発生する
- Bugzilla 10799: std.regex: ctRegexのルックアヘッドサポート
- Bugzilla 10800: ParameterDefaultValueTupleがプロパティ関数のデフォルト値に対して空文字列を返す。
- Bugzilla 10801: std.regex: ctRegexのルックビハインドをサポートした。
- Bugzilla 10802: std.regex: ctRegex が後方参照でコンパイルに失敗する。
- Bugzilla 10874: std.conv.to は "ulong" から int ベースの列挙型への変換をサポートすべきである。
- Bugzilla 10893: phobosの多数のDDocパラメータ警告(10236によって発見された)。
- Bugzilla 10898: LockingTextWriterが.init状態でセグメンテーションエラーになる
- Bugzilla 10951: EnumMembersは重複したメンバを返すことを文書化すべきである。
- Bugzilla 11068: 文字と文字列の生のフォーマットが間違っている。
- Bugzilla 11089: std.string.toUpperが1:mマッピングで動作しない
- Bugzilla 11152: formatCharは以下の処理を行わない。\0
- Bugzilla 11160: 長さ32と64の縮退ビットフィールドでのビットフィールドのコンパイルエラー
- Bugzilla 11194: std.container.Array.reserveが初期化されていないデータに対してopAssignを呼び出す
- Bugzilla 11222: std.string.isNumericが"+"を受け入れる
- Bugzilla 11232: WindowsのsysErrorStringはASCIIしかサポートしていない
phobosの機能強化
- Bugzilla 4120: bigintを暗黙的にboolにキャストする
- Bugzilla 4124: BitArrayのtoString()
- Bugzilla 4850: std.conv.toは純粋ではない
- Bugzilla 6154: std.複素数でもstd.math.absが使える
- Bugzilla 6381: math.floor, math.ceilは純粋関数ではない。
- Bugzilla 6626: std.complex.expi()は純粋な関数ではない。
- Bugzilla 9699: strip関数はstripLeft/stripRightを持ち、汎用的であるべきである。
- Bugzilla 10092: std.range.chunksの名前をstd.range.chunkedに変更した。
- Bugzilla 10314: std.trait.signedを追加した。
- Bugzilla 10538: std.typecons.wrapはopDispatchを考慮すべきである。
- Bugzilla 10621: dirEntryは(今は)役に立たない。
- Bugzilla 10717: std.ascii.toLowerとtoUpperはdcharの代わりにcharを返すべきだ。
- Bugzilla 10868: std.string.translateはオプションのバッファを取るべきだ。
- Bugzilla 10881: std.complex.complexの%fフォーマットをサポートする。
- Bugzilla 10909: std.conv.to!(bool)(int): integerからboolへの変換。
- Bugzilla 11020: 現在の実行可能パスを取得する関数を追加した。
- Bugzilla 11123: std.getopt は関数をサポートすべきである。
Druntimeのリグレッション
- Bugzilla 10976: メイン終了後のthread_joinAllの実行が遅すぎる。
Druntime バグ
- Bugzilla 6210: 配列キーを持つ連想配列がしばしば等化できない。
- Bugzilla 6372: ガベージコレクタのバグによるデータ損失の可能性。
- Bugzilla 7741: getHashがconst(char)[]とchar[]および文字列で矛盾する。
- Bugzilla 8435: BigIntsは連想配列ではうまく動作しない。
- Bugzilla 9783: 再帰関数呼び出しをプロファイリングすると、ツリーのタイミングが悪くなる。
- Bugzilla 9852: 空の連想配列はプログラムをクラッシュさせる
- Bugzilla 10027: ローカル関数のデマングル名フォーマットが間違っている。
- Bugzilla 10118: 連想配列のキーとしてBigIntを使用するのは間違っている
- Bugzilla 10323: getAMDcacheinfoが不必要にアロケートする
- Bugzilla 10420: の関数属性が正しくない。core.exception
- Bugzilla 10436: ランタイムはスタック・トレースを(*nixのように)標準出力ではなく標準エラーに出力すべきである。
- Bugzilla 10457: 共有ライブラリで_d_toObjectが失敗することがある。
- Bugzilla 10593: 配列のリザーブや容量が事前に変更されているとおかしくなる。
- Bugzilla 10711: 共有phobosライブラリは_Dmainに依存すべきではない。
- Bugzilla 10720: ICEでis(aaOfNonCopyableStruct.nonExistingField)を使用する。
- Bugzilla 10894: druntimeで多数のDDocパラメータ警告が発生する(10236によって発見された)
druntimeの機能強化
- Bugzilla 9190: ベクトル演算がx86_64アーキテクチャに最適化されていない。
インストーラのバグ
- Bugzilla 10062: インストーラーはCDNを使うべきである
ウェブサイトのバグ
- Bugzilla 9533: CHM生成のクラッシュ
- Bugzilla 10031: dlang.orgの古いwikiへのリンク
- Bugzilla 10230: 実行可能な例のボタンが重複している。
- Bugzilla 10410: cast(void)のドキュメントを改善した。
- Bugzilla 10461: "評価順序に依存する"式の例に誤りがあった。
- Bugzilla 10565: 言語リファレンスにレベル5のタイトルがない
- Bugzilla 10605: ラムダ文法は十分ではない
- Bugzilla 10885: モジュールの説明表に[std.range] refRangeがない
- Bugzilla 11001: __traits(getVirtualIndex)のドキュメントが必要である。
- Bugzilla 11036: コード生成に .stringof を使うべきではないことを文書化する
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku