変更ログ: 2.069.0
Download D 2.069.0
2015年11月3日リリース
ライブラリの変更
- パッケージ std.experimental.allocatorが追加された。
- より多くの phobos 関数が改良された。
- libcurl が動的にロードされるようになった。
- バックトレースにファイル名と行番号が含まれるようになった。
- VS2015ライブラリとのリンクをサポートした。
- phobosのドキュメントが改善された。
- moveEmplace 追加された
- テストに isPermutationを使って つの範囲が互いに順列であるかどうかをテストするために使用する。
- 新しい isSameLengthは を比較するよりも効率的である。 walkLength新しい を比較するよりも効率的である。
- getUDAsが追加された。 が追加された。
- getSymbolsByUDAが追加された。 特定のユーザー定義属性を持つシンボルを見つけるために追加された。
- cmpが追加された。 が追加された。
- FreeBSDに共有ライブラリlibphobos2.soが追加された。
D 2.069.0における全てのバグ修正と機能強化のリスト。
コンパイラの変更
- DMDがDに移植された。
DMDフロントエンドのコードがDに移植された。 コンパイラーをセルフ・ホストすることで、D言語の生産性とモデリング能力が向上した。 の恩恵を受けることができる。
- Objective-Cを基本的にサポートしている。
Objective-Cのクラス、インターフェイス、インスタンス・メソッドの基本サポート。 これは、新しいリンケージ属性Objective-C を追加することで実装される、 とコンパイラが認識するUDA@selector を追加することで実装されている。 リンケージ属性は、クラスまたはインターフェイスで使用される。UDAはメソッドに付けられる。 詳細は "Objective-Cとのインターフェイス"を参照のこと。 を参照。
- -property スイッチは
は廃止された。
-property スイッチは、"@property"以外のプロパティを括弧なしで呼び出すことを禁止していた。 を括弧なしで呼び出すことを禁止していた。このスイッチはしばらくの間、"phobos"のビルドには使われていない。 をビルドするのに使われていない。そのため、当然ながら -property と互換性のないコードが入り込んでいる。つまり、このスイッチは Dでは事実上サポートされていない。
-property スイッチの動作は好まれなかった、 非推奨となり、使用しても効果がないようになった。
この@property 属性は影響を受けず、ほとんど装飾的なキーワードのままである。 そのセマンティクスは将来見直される予定である。
- DMDのcodegenは改善された。
バックエンドのcodegenにいくつかの改良が加えられた。パラメータ とスタックフレームのセットアップが最適化され、PUSH の代わりにSUB/MOV を使うようになった、 の代わりに / を使うように最適化された。としてマークされた関数は、BPスタックフレームを生成しなくなった。 nothrow としてマークされた関数は Windows と Linux 上で BP スタックフレームを生成しなくなった。
ライブラリーの変更
- より多くのphobos関数がレンジ化された。
2.068.0でリリースされた作業の後、さらにphobos関数が改良された。
変更された関数": モジュール 関数" を使用する。 std.stdio File.this std.file append chdir copy exists getAttributes getLinkAttributes getSize getTimes getTimesWin isDir isFile isSymlink mkdir read readText remove rename rmdir setAttributes setTimes timeLastModified write - libcurlが動的にロードされるようになった
std.net.curlを共有ライブラリとしてロードするように変更された。 ライブラリとしてロードするように変更された。 これにより libcurlとリンクしたり、開発用ライブラリをインストールする必要がなくなった。 ライブラリをインストールする必要がなくなった。
実装はまた、実行ファイル自体から必要なcurlシンボルを取得しようとする。 を取得しようとする。そのため、特定の バージョンとリンクすることも可能である。
これを動作させるには、それぞれ--export-dynamicでリンクする必要がある Windowsでは.DEFファイルを使用する(後者についてはwikiを参照)。 を参照)。
- バックトレースにファイル名と行番号が含まれるようになった。
linux と FreeBSD のデフォルトのトレースハンドラは、バックトレースにファイル名と行番号を追加するために DWARF デバッグ情報を解析してバックトレースにファイル名と行番号を追加するようになった。
std.conv.ConvException@DPL/dmd/src/../../phobos/std/conv.d(1720): Unexpected 'a' when converting from type string to type ulong DPL/dmd/src/../../phobos/std/conv.d:1720 pure @safe ulong std.conv.toImpl!(ulong, immutable(char)[]).toImpl(immutable(char)[]) [0x43b339] DPL/dmd/src/../../phobos/std/conv.d:298 pure @safe ulong std.conv.to!(ulong).to!(immutable(char)[]).to(immutable(char)[]) [0x437717] example.d:5 ulong example.foo(immutable(char)[]) [0x4376c7] example.d:10 _Dmain [0x4376e5] ??:? _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv [0x444576] ??:? void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate()) [0x4444cc] ??:? void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).runAll() [0x444532] ??:? void rt.dmain2._d_run_main(int, char**, extern (C) int function(char[][])*).tryExec(scope void delegate()) [0x4444cc] ??:? _d_run_main [0x444429] ??:? main [0x44039f] ??:? __libc_start_main [0xc3ae96ff]
- VS2015ライブラリとのリンクをサポート。
VS2015で配布されているMicrosoftランタイム・ライブラリに対するリンクのサポートが追加された。 に対するリンクのサポートが追加された。これはWin64用の64ビットビルドと、MSランタイム(-m32mscoff)をターゲットとした32ビットビルドの両方に影響する。 MSランタイム(-m32mscoff)をターゲットとする32ビットビルドの両方に影響する。
コンパイラーは、リンクコマンドラインを自動的に調整するために、ライブラリーのバージョンを検出する。 リンクにdmdを使用しない場合は、VS2015ランタイムに対してリンクする際に、legacy_stdio_definitions.libをコマンドラインに追加する。 をコマンドラインに追加する。
- Phobosのドキュメントが改善された。
Phobosの関数の大部分はドキュメントが改善された。 これには、スペルミスの修正、明確化、関数やテンプレート化された関数パラメータの説明の改善、戻り値の説明の改善などが含まれる。 パラメーターの説明、戻り値の説明などである。
- moveEmplace が追加された。
moveEmplace効率的に組み合わせる moveである。 emplace従って 初期化されていないデータに移動する前に値を初期化して破棄する必要がなくなる。
T* moveToHeap(T)(ref T value) { import core.memory : GC; auto ptr = cast(T*)GC.malloc(T.sizeof); // 値を移動してptrに置く moveEmplace(value, *ptr); return ptr; }
また、次のようなものもある。 moveEmplaceAll と moveEmplaceSomeがある。 moveAllと moveSome.
D 2.069.0におけるすべてのバグ修正と機能強化のリスト:
DMDコンパイラのリグレッション
- Bugzilla 13720: [REG2.067] std.datetimeにつまらないデストラクタを追加すると内部エラーが発生する。
- Bugzilla 14430: [REG2.060] Nullパラメータが非Nullとして検出される。
- Bugzilla 14572: dmd をソースからビルドできなくなった:'g++ -m64:g++ -m64: No such file or directory' : もうソースからdmdをビルドできない。
- Bugzilla 14588: [REG2.067] -debugオプションでスタティックライブラリをリンクする際に未定義参照エラーが発生した。
- Bugzilla 14682: [REG2.037] ~ []の解釈が正しくない。
- Bugzilla 14699: [REG2.062] ICE: サイズが0の配列でセグメンテーションエラーが発生する
- Bugzilla 14710: テンプレート化された可変引数関数IFTIでVC-built DMDがクラッシュする。
- Bugzilla 14731: [REG2.068a] CTFE時のエラー位置が不十分である。
- Bugzilla 14735: [REG2.068-b1] std.string.indexOfがchar引数の関数を推論できない。
- Bugzilla 14737: [REG2.058] 配列リテラルと静的配列の連結は動的配列を作るべきである。
- Bugzilla 14754: [REG2.068b1] -inlineを使用した64bitの間違ったコード
- Bugzilla 14779: require/in-contract の引数のアドレス指定が正しくない。
- Bugzilla 14829: [REG2.066.0] -O -inlineの間違ったコード
- Bugzilla 14886: [REG2.066] std.parallelism.parallelで大きな静的配列があるとコンパイルがハングするようだ
- Bugzilla 14926: dmd 2.068を使用してコンパイルされたプログラムがダミーのprofilegc.logファイルを生成する
- Bugzilla 14952: FSTPの前に冗長なREX.WがValgrindを混乱させる
- Bugzilla 14991: OSX 32ビットでdmdがビルドできない。
- Bugzilla 15045: [Reg 2.069-devel] hasElaborateCopyConstructorがopDispatchを持つ構造体に対してtrueになる。
- Bugzilla 15072: [REG2.069-devel] codegenのパフォーマンスリグレッション14805を再導入した。
- Bugzilla 15079: [REG2.068.1] アサーション `fd->semanticRun == PASSsemantic3done' が失敗した。
- Bugzilla 15092: [REG2.066.0] クラスメンバ内の重複した構造体宣言に関するICE
- Bugzilla 15123: [REG2.069.0-devel] 単純なSIMDコードのコンパイル時にsegfaultが発生する。
- Bugzilla 15126: [REG2.069.0-devel] 配列リテラルの解析時にdmdがクラッシュする。
- Bugzilla 15138: [REG2.068.2] stdx.data.jsonの基本的な使い方でICEが発生する。
- Bugzilla 15149: [REG2.068.1] コンパイル時にリンカエラーが発生する
- Bugzilla 15150: [REG2.068.1] パブリックセレクティブインポートが競合を引き起こす
- Bugzilla 15152: [REG2.069.0-devel] 引数がテンプレートである場合、テンプレートのインスタンス化に失敗する。
- Bugzilla 15168: [REG2.068.0] std.variant.Algebraicが文字列のエイリアスと相互作用が悪い。
- Bugzilla 15176: [REG2.069.0-b1]ICE(glue.c):glue.cの-inlineクラッシュでコンパイルを分離する
- Bugzilla 15177: [REG2.069.0-b1] 2.069ベータ1でのミックスインとトレイトの問題
- Bugzilla 15181: SYSCONFDIR が壊れている
- Bugzilla 15200: [REG2.068.2] -inlineでコンパイルするとICE(glue.c)になる。
- Bugzilla 15207: [REG2.069.0-b1]-inlineで間違ったcodegenが生成される。
- Bugzilla 15210: [REG2.064][ICE] (glue.c at 1489) タプルとAAがある
- Bugzilla 15214: [REG2.065.0] Mangler::mangleFunc の ICE
- Bugzilla 15251: [REG2.069.0-rc1] -inlineでのstd.datetimeのバグ修正
- Bugzilla 15253: [REG2.069.0-rc1] インライナーがコンパイルを妨げる
- Bugzilla 15272: [2.069-rc2,inline] -inlineが設定されている場合、出力に何も書き込まれない
DMDコンパイラのバグ
- Bugzilla 1747: クラスから基本インターフェースへの静的キャストが正しくない場合がある。
- Bugzilla 2013: インターフェイスからインターフェイスへの動的キャストが正しくない場合がある
- Bugzilla 2091: D2 finalが変数に適用できない
- Bugzilla 2354: 条件付きコンパイルで、宣言が1つのプラグマの場合、elseが拒否される
- Bugzilla 3243: インスタンス化された'static this()'はコンパイラに「: __gateはスレッドローカルです」というメッセージを表示する。
- Bugzilla 6417: 仮想クラスのメンバ関数の契約において、ネストされた関数のコンテキストが正しくない。
- Bugzilla 7625: インライン化は明示的なelse分岐でのみ機能する
- Bugzilla 7979: このエイリアスはswitchでは機能しない
- Bugzilla 9383: クロージャ[dis]がオーバーライド関数に現れると、関数の契約(contract)のコンテキストがおかしくなる。
- Bugzilla 9891: ref/outパラメータのデフォルト値を使ってimmutableを変更することができる。
- Bugzilla 12487: DMDは過剰なCTFE再帰を正しく報告するが、テンプレート再帰は報告しない
- Bugzilla 12744: 自動参照がASSERTでDMDをクラッシュさせる
- Bugzilla 13007: 間違ったx86コード: long negate
- Bugzilla 13203: "static if"で競合するエイリアスが許される。
- Bugzilla 13244: inlineとforeach/map/allの間違ったコード
- Bugzilla 13652: 2D Static Array Initが間違った結果を生成する(-m64/-m32)
- Bugzilla 13792: 不透明な列挙型ポインタでのセグメンテーションエラー
- Bugzilla 14140: イミュータブル構造体のCTFE共用体イニシャライザーの不正なコード生成。
- Bugzilla 14459: 文字列リテラル・マージ・バグによる不正な実行時プログラムの動作
- Bugzilla 14510: 静的配列のテール・コール最適化の不具合
- Bugzilla 14541: Tuple.opAssignのテンプレート前方参照で "duplicate COMDAT"リンカー・エラーが発生する。
- Bugzilla 14653: foreachクラッシュにおけるスコープ付き範囲(scoped!
- Bugzilla 14669: 関数パラメーターのauto属性は常にエラーであるべきである。
- Bugzilla 14709: dmd/samples/listener.d socket.acceptの例外処理が正しくない。
- Bugzilla 14743: TemplateInstance::needsTypeInference()でテンプレートの前方参照がICEになる
- Bugzilla 14745: デリゲート・リテラルの修飾子が拒否される
- Bugzilla 14747: コンパイラが不必要なreturn文にこだわる
- Bugzilla 14753: pragma(inline) がエイリアス "string" を隠す
- Bugzilla 14768: エラー:静的配列のインデックス174762のオーバーフロー
- Bugzilla 14802: テンプレートの引数控除は引数の順序に依存する
- Bugzilla 14815: 静的配列の代入でデストラクタが呼び出されない
- Bugzilla 14818: テンプレート・オーバーロード・セットと一致しない」エラー
- Bugzilla 14846: 暗黙のネストされたラムダによるコンテキスト推論が不十分である。
- Bugzilla 14858: テンプレートと非テンプレートをエイリアスを介してオーバーロードする際に、"Error: overload alias 'foo' is not a variable "という偽のエラーが発生する。
- Bugzilla 14860: ブロック代入でデストラクタが呼び出されない
- Bugzilla 14862: オーバーラップ構造体のコンストラクタでグローバル変数が正しく初期化されない。
- Bugzilla 14874: __traits(getFunctionAttributes)が新しいreturn 属性をサポートしていない。
- Bugzilla 14875: 非推奨のシンボル/型を持つテンプレート・インスタンスが不必要に "Deprecation:"メッセージを繰り返す。
- Bugzilla 14876: Deprecation メッセージが重複することがある
- Bugzilla 14906: dmdが不正な列挙型宣言でコアをダンプする
- Bugzilla 14928: BetterCスイッチと-m32mscoffスイッチがDMDのヘルプに表示されない。
- Bugzilla 14950: enum値を他のenumの最後のメンバに設定するとintのオーバーフローエラーが発生する。
- Bugzilla 14996: Tが文字列の場合、only(EnumMembers!T)がメモリを食い尽くしてしまう。
- Bugzilla 15001: if文で行番号のないエラーメッセージが重複する
- Bugzilla 15014: Win64: 複数の長い引数に対する無効なC++マングリング
- Bugzilla 15018: Win64: サイズ4の構造体をスライスに代入する際にICEが発生する。
- Bugzilla 15019: [ICE] OS X 32ビットで非自明なプロジェクトでハイゼンクラッシュが発生する
- Bugzilla 15065: 連想配列がキーのプロパティを持たない。
- Bugzilla 15080: extern(C++)クラスの静的データレイアウトが正しくない。
- Bugzilla 15089: エラーの発生箇所として間違った行をマークする
- Bugzilla 15127: パーサーが間違ったコードにアサーションする
DMDコンパイラの機能強化
- Bugzilla 12421: ラムダ・テンプレートの宣言をよりシンプルな構文にする
- Bugzilla 14717: Ddocマクロの再帰制限が低すぎる
- Bugzilla 14755: profile=gcは、Xバイトが割り当てられるに至った割り当て回数も示してくれないだろうか?
- Bugzilla 14975: DMDが構造体コンストラクタのインライン化を拒否する
phobosのリグレッション
- Bugzilla 14564: [REG2.067] dmd -property -unittestの組み合わせでコンパイラーエラーが発生する。
- Bugzilla 14685: [REG2.067] enforceとカスタム例外によるサイレントな不正動作
- Bugzilla 14712: GIT HEAD : std.net.curlのリグレッション
- Bugzilla 14817: [REG-master] copy("foo", "bar") std.algorithm/std.fileの衝突。
- Bugzilla 14881: [REG] posix.makがzipファイルをビルドする際にpackage.dファイルを省略する
- Bugzilla 15027: rangified関数がエイリアスthisされた文字列(例えばDirEntry)で動作しなくなった。
- Bugzilla 15039: AlgebraicがTypedef'ed型と共にTypedefを格納できない
phobosのバグ
- Bugzilla 10895: std.array.joinが文字列のようなクラスの配列でエイリアスのthisを使用した場合の動作が正しくない。
- Bugzilla 13650: std.algorithm.copyがchar/wcharで動作しない。
- Bugzilla 13856: std.stdio.readlnが配列を踏みつぶす
- Bugzilla 14282: executeShellはshを使用し、SHELL環境変数を無視すべきである。
- Bugzilla 14605: RefAppenderがisOutputRangeに失敗する。
- Bugzilla 14724: std.getopt:config.requiredが壊れる --help
- Bugzilla 14760: セグメンテーションフォールトをなくすためにlibcurlオプションのcontent-lengthをクリアする。
- Bugzilla 14762: 持続的接続で他のメソッドオプションを使用しない。
- Bugzilla 14799: std.zlib.compress のドキュメントが正しくない。
- Bugzilla 14868: MmFileのデストラクタがメモリを破壊しているようだ。
- Bugzilla 14880: findSkipの要約が間違っている
- Bugzilla 14884: among docs broken link to andfind canFind
- Bugzilla 14924: std.uriの定義/記述にエラーがある。
- Bugzilla 14925: replaceInPlaceのコンパイルに失敗した
- Bugzilla 14949: クローズされたファイルに書き込もうとしたときに、"Enforcement failed "と記述されない
- Bugzilla 14994: std.mmfileでマップの失敗が正しく処理されない
- Bugzilla 14995: std.mmfileがcctorのエラーを正しく処理していない
- Bugzilla 15000: userShellの変更を元に戻すか、std.processのドキュメントを更新する必要がある。
- Bugzilla 15003: assumeSortedがデバッグモードでGCメモリを割り当てる
- Bugzilla 15033: float iotaの要素型はdoubleである。
- Bugzilla 15115: std.typetupleのstd.metaへのリンクは404である。
- Bugzilla 15187: アロケータの dispose が壊れている
- Bugzilla 15188: deallocate メモリリークを引き起こす
phobosの機能強化
- Bugzilla 5945: redBlackTreeの表示
- Bugzilla 12752: std.algorithm.isPermutation
- Bugzilla 12966: stdのヒープソートのコードとstd.rangeのバイナリヒープをマージする。
- Bugzilla 13596: 並べ替えの範囲
- Bugzilla 14433: std.encodingは中央ヨーロッパのISO-8859-2とCP1250エンコーディングをサポートしない。
- Bugzilla 14763: curlのオプション関数にoptionsData引数を使う。
- Bugzilla 14777: std.zlib.adler32 の初期値が 0 ではない。
- Bugzilla 14798: [etc.c.sqlite3]sqlite3_errstrの定義がない。
- Bugzilla 14877: std.net.curl に PATCH http メソッドが必要である。
- Bugzilla 14938: std.net.curlのテストはlocalhostを使うか、スタブを使うべきである。
- Bugzilla 14940: より複雑なオブジェクトでロガーを呼び出せない
druntimeのリグレッション
- Bugzilla 14750: druntime/test/coverageはdruntimeに追加されたが、MANIFESTには追加されなかった。
- Bugzilla 14882: [REG] MANIFESTにtest/common.makがない。
- Bugzilla 14990: druntime.zip'が必要とする`src/core/sys/windows/stdio_msvc12.d'をターゲットにするルールがない。
- Bugzilla 14993: InvalidMemoryOperationErrorをスローする代わりにデストラクタでアロケートする。
- Bugzilla 15012: Druntime Makefileがコンパイラをホワイトリスト化する
Druntimeのバグ
- Bugzilla 11414: druntimeはデバッグunittestを実行する必要がある
- Bugzilla 14327: C++/Dアプリケーションのwriteln()で未処理の例外が発生する
- Bugzilla 14663: 共有ライブラリテスト - link_linkdep - FreeBSD 10 でセグメンテーションエラーが発生する。
- Bugzilla 14776: 共有ライブラリテスト - loadDR - FreeBSD 10 で -release でビルドしないとセグメンテーションエラーが発生する。
- Bugzilla 14785: core.checkedint でいくつかのコーナーケースが正しく処理されない。
- Bugzilla 14870: core.time の環境エラーを検出するための assert の使用方法が正しくない。
- Bugzilla 15009: Object.destroyが静的配列オブジェクトの破棄に不必要なポストブリットを呼び出す。
- Bugzilla 15036: SimpleDllMainは、様々なシンボルが未修飾で利用可能であると仮定している。
- Bugzilla 15104: finallyブロックでファイバーを切り替えるとEHが壊れる
Druntimeの強化
- Bugzilla 15076: 現在のスレッドのIDを取得する
- Bugzilla 15137: core.time:Duration/DurationとDuration%Durationをサポートする。
dlang.orgの回帰
- Bugzilla 15046: [REG2.068] isForwardRangeのドキュメントが問題14544を文書化している
dlang.orgのバグ
- Bugzilla 12072: Regex article needs update
- Bugzilla 14579: [SPEC] TypeDelegateシンボルの修飾子に関する仕様がない。
- Bugzilla 14695: [dlang.org] std.uuid がインデックス・ページに掲載されていない。
- Bugzilla 14879: タプルのドキュメントがリンク切れしている
- Bugzilla 15095: ドキュメント・リンクのURLが不正
dlang.orgの機能強化
- Bugzilla 14328: 用語集に "l値"と "r値"を追加した。
- Bugzilla 14522: Postfixの配列宣言の例をarrays.htmlから削除した。
- Bugzilla 14808: phobosサイドバーの"D Lib"リンクをホームページに戻した。
- Bugzilla 14933: pragma(mangle)の仕様が曖昧である。
ツールのバグ
- Bugzilla 15031: rdmd は --compiler が変更されたら強制的にリビルドする必要がある
ツールの機能強化
- Bugzilla 14715: ツール・リポジトリにREADME.mdを追加する
インストーラーのバグ
- Bugzilla 13234: Windows インストーラー:アップデート時にアンインストーラーが間違ったインストールディレクトリを報告する。
- Bugzilla 14801: OS X インストーラが OS X 10.11 と互換性がない。
インストーラの機能強化
- Bugzilla 14714: README.mdをインストーラリポジトリに追加する
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku