変更ログ 2.076.0
Download D 2.076.0
2017年9月1日リリース
コンパイラの変更
ライブラリの変更
D 2.076.0の全バグ修正と機能強化のリスト。
コンパイラの変更
- DIP 1010の実装 -スタティックforeach
static foreach のサポートが追加された。
static foreach は条件付きコンパイルの構成要素で、 にとっては にとっては のようなものである。 繰り返しによって宣言や文を生成する便利な方法である。 foreach static if if
import std.conv: to; static foreach(i; 0 .. 10) { // `static foreach`本体は入れ子のスコープを導入しない // (`static if`と同様)。 // 以下のmixin宣言はモジュール・スコープにある: mixin(`enum x` ~ to!string(i) ~ ` = i;`); // 10個の変数x0, x1, ..., x9を宣言する } import std.range: iota; // 標準の`foreach`ループで反復処理できるすべての集約型は、 // static foreachでもサポートされている: static foreach(i; iota(10)) { // 最初の`static foreach`で生成された宣言にアクセスする pragma(msg, "x", i, ": ", mixin(`x` ~ to!string(i))); static assert(mixin(`x` ~ to!string(i)) == i); } void main() { import std.conv: text; import std.typecons: tuple; import std.algorithm: map; import std.stdio: writeln; // `static foreach`は宣言とステートメントの両方の形式を持つ // (`static if`に似ている)。 static foreach(x; iota(3).map!(i => tuple(text("x", i), i))) { // 3つのローカル変数x0、x1、x2を生成する。 mixin(text(`int `,x[0],` = x[1];`)); scope(exit) // これは`main`の範囲内である { writeln(mixin(x[0])); } } writeln(x0," ",x1," ",x2); // 最初の実行時出力 }
- -betterC 強化
dmdの-betterC の実装に多くの改良が加えられた。 特に、-betterC でコンパイルされたプログラムは、未使用の druntimeシンボルを参照しなくなったこと、アサートがCの<assert.h> 呼び出しとして実装されたこと、そして "phobos"がデフォルトではリンクされていないことである。 はデフォルトではリンクされない。
詳細は "Better Cの仕様を参照のこと。
- -mcpu=avx2 アーキテクチャとしてAVX2が追加された。
これにより、バックエンドがAVX2命令を発行できるようになった。コンパイラは 定義済みバージョン D_AVX2. AVX2サポートは-mcpu=nativeで自動的に検出される。
- 問題 17697 の修正 - Ddoc: マクロ引数外の URL を自動的にハイライトする。
Ddocテキストに表示されるURL:
/**** * http://www.fooa.com/test1 */
は書かれたものとして扱われる:
/**** * $(LINK http://www.fooa.com/test1) */
クリック可能なハイパーリンクが.htmlファイルに出力される。
この検出は、URLがマクロ引数の一部である場合には起こらない:
/**** * $(DOLLAR)$(LPAREN)ABC http://www.fooa.com/test1$(RPAREN) */
その動作に変更はない。URLはhttp:// またはhttps://
http: および行頭の は、もはやセクション見出しとして扱われない。 はセクション見出しとして扱われなくなった。 https:
ランタイムの変更
- 処理されなかった例外のトレースを表示し、rt_trapExceptionsがfalseの場合は中止する。
D例外処理はトップ・レベルの例外ハンドラを想定していた、 従って、全ての例外はどこかで処理される。rt_trapExceptions がクリアされた場合、このハンドラは有効にならず、このアサーションは失敗する。 は失敗し、プログラムは中断される。 例外についての情報はない。これが変更され、例外情報 が標準エラー出力に出力され、その後にアボートが続く。
ライブラリの変更
- Base64URLNoPadding (パディングなしのURLセーフBase64)を追加した。
std.base64.Base64URLNoPaddingパディングなしでエンコード/デコードできるようになった:
import std.base64 : Base64URLNoPadding; ubyte[] data = [0x83, 0xd7, 0x30, 0x7b, 0xef]; assert(Base64URLNoPadding.encode(data) == "g9cwe-8"); assert(Base64URLNoPadding.decode("g9cwe-8") == data);
- std.digest.digest は に改名された。std.digest
Motivation:
ダイジェスト関数のテンプレートの完全修飾名はstd.digest.digest.digest であった。 これはstd.digest がパッケージで、その中にdigest という名前のモジュールがあり、その中にdigest という関数があるからである。
std.digestには以前のstd.digest.digest パッケージが含まれている。
- std.meta.Stride が追加された。
std.meta.Strideステップサイズとオフセットでテンプレートのサブセットを選択できるようになった:
alias attribs = AliasSeq!(short, int, long, ushort, uint, ulong); static assert(is(Stride!(3, attribs) == AliasSeq!(short, ushort))); static assert(is(Stride!(3, attribs[1 .. $]) == AliasSeq!(int, uint)));
- Config.detached spawnProcess フラグが追加された。
Config.detached フラグが追加され、現在のプロセスから独立して実行されるプロセスを生成できるようになった。このフラグで生成されたプロセスを待つ必要はなく、終了後にゾンビ・プロセスが残ることもない。 を呼び出そうとする std.process.waitまたは std.process.killを呼び出そうとするとスローされる。
- std.range.chunks が非フォワード入力範囲をサポートするように拡張された。
これにより、std.range.chunks 、順方向でない入力範囲も使用できるようになった。 範囲でない入力範囲でも使用できるようになった。
import std.algorithm.comparison : equal; int i; // ジェネレーターは状態を保存しないので、前方範囲にはならない。 auto inputRange = generate!(() => ++i).take(10); // チャンク単位で処理することはできるが、シングルパスのみとなる。 auto chunked = inputRange.chunks(2); assert(chunked.front.equal([1, 2])); assert(chunked.front.empty); // チャンクを繰り返し処理すると、チャンクが消費される chunked.popFront; assert(chunked.front.equal([3, 4]));
- std.socket.UnixAddress が抽象アドレスに対応した。
UNIXドメインソケットは通常パス名で識別される。Linuxは、このスキームの移植不可能な拡張として Linuxでは、抽象ソケットアドレスとして知られる、このスキームの非可搬拡張を提供している、 これはファイルシステムに依存しない。抽象ソケットアドレスは ヌルバイト ('\0') で始まる:
auto addr = new UnixAddress("\0/tmp/dbus-OtHLWmCLPR");
- インターフェースの自動実装時にベースクラスを使用する可能性が追加された。
つ目の std.typecons.AutoImplementテンプレートが追加された。 既存のものとは異なり、追加の型パラメーターを受け付ける。追加の パラメータは、インターフェースを自動実装する際に派生するクラスを指定する。
使用する基底クラスは、デフォルト以外のコンストラクタを含むことができる。適合するコンストラクタ は自動実装されたクラスで作成され、すべての引数を持つ を呼び出すだけで実装される。
ツールの変更
- rdmdは、Dコンパイラー・バイナリーが最初にあるディレクトリをチェックするようになった。
コンパイラの入ったzip/tarファイルをダウンロードしてから rdmdを実行した場合、システムからDコンパイラを起動するようになった。 PATH システムからDコンパイラーを起動する。 PATH 。rdmd 。 にない場合は失敗する。 PATH にフォールバックするだけだ。rdmdに特定のコンパイラを実行させたい場合は、。 rdmdに特定のコンパイラを実行させたい場合は、いつものように--compiler フラグを追加して強制する。 を追加する。
のコンパイラだけを使うという以前の動作を復元するには、(または )を追加する。 PATH からコンパイラのみを使用する以前の動作を復元するには、--compiler=dmd (またはldmd2 またはgdmd )を追加する。
D 2.076.0におけるすべてのバグ修正と機能強化のリスト:
DMDコンパイラのリグレッション
- Bugzilla 16680: dmdがdruntimeに最適化された減算配列演算を使用しない。
- Bugzilla 17522: win64.makが壊れている
- Bugzilla 17582: [REG2.059] struct宣言にconstを適用するとstruct型がconstになる。
- Bugzilla 17612: [REG2.063] Bad object.dでセグメンテーションフォールトが発生する。
- Bugzilla 17684: [REG 2.062]static alias this バグか不完全な実装か?
- Bugzilla 17690: [REG2.066.0] スコープガードの宣言漏れ
- Bugzilla 17695: [Reg 2.076] ベクトル否定を持つICE
- Bugzilla 17761: [REG2.075] dmd 2.075.1はld.bfdでリンクできないオブジェクトファイルを作成する。
DMDコンパイラのバグ
- Bugzilla 4014: CodeViewデバッグ型情報がライブラリからリンクされない
- Bugzilla 11881: -betterC スイッチがビットローテーションに苦しんでいる。
- Bugzilla 11997: rdmdはコンパイラのバイナリパスを検索すべきである。
- Bugzilla 13512: shebang行でUTF-8以外のエンコーディングを許可する
- Bugzilla 15432: Win64: デバッグ行番号情報のコードオフセットが正しくない。
- Bugzilla 16640: void fun(string file=__FILE_FULL_PATH__) は相対パスを返す。
- Bugzilla 17380: 未定義シンボルでのコンパイラのセグメンテーションエラー
- Bugzilla 17388: [スコープ] e[] はスコープに関しては &e のように扱うべきである。
- Bugzilla 17430: [scope] デリゲートはコンテキストptrをエスケープできる
- Bugzilla 17484: vbroadcastsd の -mcpu=avx でのペナルティが大きい。
- Bugzilla 17489: ddmd/argtypes.dのICE
- Bugzilla 17551: VCビルド: 実テンプレート引数の不正なマングリング
- Bugzilla 17629: package.di ファイルが使用できない
- Bugzilla 17660: static foreach で ICE : AssertError@ddmd/visitor.d(39)
- Bugzilla 17688: staticなforeachを直接switchの中で使うICE
- Bugzilla 17689: finally節は宣言を漏らす
- Bugzilla 17721: シフトオペランドを持つベクター拡張を使った間違った式型
- Bugzilla 17722: traits(compiles,e1 && e2)式を使った間違った診断。
- Bugzilla 17735: AssertError@ddmd/target.d(357): 魚演算子を使用したハンドルされていない op
DMD コンパイラの機能強化
- Bugzilla 9287: 入力ファイルが"-"の場合、DMDは標準入力から読み込むべきである。
- Bugzilla 9731: Ddocは(DDOC_BLANKLINE)の代わりに段落ごとのマクロを出力するようにした。
- Bugzilla 17392: レキサーとパーサーのDubファイルを追加した。
- Bugzilla 17428: [scope] クラスフィールドの割り当てでスコープパラメータをエスケープできるようにした
- Bugzilla 17499: -betterCスイッチで、druntimeのassert失敗関数ではなくCのassert失敗関数を呼び出すようにした。
- Bugzilla 17521: -betterC プログラムはデフォルトで Phobos ランタイムライブラリにリンクされないようにした。
- Bugzilla 17590: 静的ローカル構造体を返す際に不要なGC allocが発生する。
- Bugzilla 17697: Ddoc: マクロ引数外のURLを自動的にハイライトする
phobosのリグレッション
- Bugzilla 17650: [REG v2.075.0 b1-b4] std.getoptの範囲違反。
- Bugzilla 17661: 新しいisInputRangeは有効な入力範囲を拒否する
- Bugzilla 17724: digestはテンプレート宣言ではなくモジュールである
phobos バグである
- Bugzilla 6718: "nWayUnion" => "nWayMerge"、プラス真 nWayUnion
- Bugzilla 12260: std.stdio.readfの空白を含む場合のエラーを改善した。
- Bugzilla 12866: std.container.Arrayに固定サイズの配列を追加する。
- Bugzilla 16079: memoizeはオブジェクトもキャッシュするべきだ
- Bugzilla 16191: std/digest/digest.d を package.d にリネームした。
- Bugzilla 17389: std.trait.hasNestedは同じ型のメンバを持つクラスでは失敗する。
- Bugzilla 17458: [std.regex] package.dでアサーションに失敗した。
- Bugzilla 17539: std.parallellism.parallelがrdmd_testスイートで'statement not reachable'警告を引き起こす
- Bugzilla 17562: Tangent関数がabs(input) >= 2^63でNaNを返す
- Bugzilla 17574: std.getopt:getoptのAA解析における範囲違反
- Bugzilla 17616: makeIndex がインデックス型の範囲を完全に使用できない。
- Bugzilla 17640: std.concurrenctのwritelnがunittestsのstd.stdioのwritelnとコンフリクトする。
- Bugzilla 17673: マルチ正規表現でwhichPatternを変更した場合、間違ったwhichPatternになる
- Bugzilla 17711: std.array.byPairはconst AAで使用可能であるべきである。
- Bugzilla 17780: std.rangeのDDOCリンクが不正
phobos が強化された
- Bugzilla 2137: ZIPアーカイブに追加する際、データがその場で圧縮されない
- Bugzilla 6384: std.trait.isComparableを追加した。
- Bugzilla 15759: チャンクは入力範囲のみで動作するはずである。
- Bugzilla 15771: FileLoggerは出力ディレクトリが存在しない場合、作成すべきである。
- Bugzilla 16062: OutBuffer (std.outbuffer) に 'clear' メソッドを追加した。
- Bugzilla 16993: toSimpleStringとtoStringのドキュメントに違いが書かれていない。
- Bugzilla 17250: ProcessPipes (std.process)はnull pidのテストを提供すべきである。
- Bugzilla 17365: https://dlang.org/phobos/std_experimental_checkedint.html に "スロー"フックの記述がない。
- Bugzilla 17369: [モジュール std.traits] ドキュメントにdittoが表に記載されている。
- Bugzilla 17525: std.algorithm.searching.skipOverはpredバージョンで単一の引数を持つべきである。
- Bugzilla 17540: std.net.curl: HTTP で CURLOPT_NOPROXY を設定できない。
- Bugzilla 17587: JSONOptions:フォワードスラッシュエンコーディングがない
Druntimeのリグレッション
- Bugzilla 15619: [REG 2.066] 浮動小数点 x86_64 codegen リグレッション(配列操作を含む場合
Druntimeのバグ
- Bugzilla 11594: "@synchronized" がErrorの代わりにsegfaultを引き起こす。
- Bugzilla 14319: core.demangleはメンバ関数の属性をサポートしていない。
- Bugzilla 14563: core.demangleはメンバ関数の属性をサポートしていない:コア.demangleはメンバ関数の属性をサポートしていない。
- Bugzilla 14576: [ddemangle]core.demangleはシンボルの曖昧さを扱えない
- Bugzilla 16856: libunwind のため、FreeBSD current (最終的に 12 になる予定) では D が動作しない。
- Bugzilla 17609: core.demangleはデリゲート変数を関数としてデマングルする。
- Bugzilla 17610: core.demangleはテンプレートエイリアス引数の戻り値の型を表示する。
- Bugzilla 17611: core.demangle は関数属性を持つデリゲートをデマングルできない。
- Bugzilla 17624: https://dlang.org/library/object/exception.html の Fields ドキュメントセクションにタイプミスがある。
- Bugzilla 17665: T[]のWin64 atomicLoadはsize_t[2]からキャストできない。
Druntimeの機能強化
- Bugzilla 16664: core.demangle関数は@safeや純粋なコードからは呼び出せない。
dlang.orgのバグ
- Bugzilla 17159: コンパイル時の共用体の動作が文書化されていない。
- Bugzilla 17224: ForeachのドキュメントがまだAliasSequencesではなくTypeTuplesを参照している。
- Bugzilla 17305: [SPEC] ABIページには、依然として "D1 Phobos"への言及がある。
- Bugzilla 17509: [typo]「参照される」("referred to")とある。
- Bugzilla 17510: 509はどうしてバイト値なのだろうか?
- Bugzilla 17513: [english] "列挙型" -> "列挙型"
- Bugzilla 17702: codemirrorがFirefoxを数秒間ハングアップさせる
dlang.orgの機能強化
- Bugzilla 13153: dlang.org: 言語と標準ライブラリのバージョン別ドキュメントを提供する。
- Bugzilla 17262: rdmdのドキュメントを改善した。
- Bugzilla 17322: Dを使う組織にMagikcraftを追加した。
- Bugzilla 17480: [ダウンロード]
- Bugzilla 17524: [Cプリプロセッサ vs D】「心配する必要がある」のか?
- Bugzilla 17560: 機能強化: オフラインコンパイル/プレイのためのフルコード例の表示とコピー
- Bugzilla 17581: BetterC "の動作を文書化する
- Bugzilla 17594: DDOC_BLANKLINEを空のHTML段落として定義し、(P ...)でテキストをラップする必要性をなくした。
ツールのバグ
- Bugzilla 17731: 32767以上のシンボルがあるとビルドに失敗する
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku