変更ログ 2.084.0
Download D 2.084.0
2019年01月01日リリース
コンパイラの変更
- エイリアスを__trait から直接作成できるようになった。
- ランタイム・チェックの各カテゴリーをオン・オフできる -check スイッチを追加。
- -checkaction=D|C|halt コンパイラー・スイッチを追加。
- -color および は常にカラー化されたコンソール出力を出力するようになった。-color=on
- mixin "ステートメントによって生成されたコードを-ミックスイン"で保存できるようになった。
- 無効なバイナリ・リテラルを廃止
- extern(Pascal) リンクの非推奨化
- プライベート・インポートをバイパスする完全修飾名の非推奨フェーズが終了した。
- POSIXでテンプレートが正しくマングルされるようになった。
- Cの正しいマングリング型として__c_wchar_t 。wchar_t
ランタイムの変更
dubの変更
D 2.084.0におけるすべてのバグ修正と機能強化のリスト。
コンパイラの変更
- エイリアスは__trait から直接作成できる。
エイリアスは、シンボルやタプルを返すトレイトから直接作成できる。 これにはgetMember,allMembers,derivedMembers,parent,getOverloads 、 getVirtualFunctions getVirtualMethods getUnitTests getAttributes そして最後にgetAliasThis がある。 以前は、これらの戻り値のエイリアスを作成するためにAliasSeq が必要だった。 この文法により、より短い宣言を書くことができるようになった:
struct Foo { static int a; } alias oldWay = AliasSeq!(__traits(getMember, Foo, "a"))[0]; alias newWay = __traits(getMember, Foo, "a");
これを可能にするためには、単にエイリアスの構文を変更するよりも、基本型に__trait 。 単にエイリアスの構文を変更するよりも、基本型に。そのため、さらに、"型"が現れるところならどこでも が現れるところならどこでも、例えば変数宣言で__trait :
struct Foo { static struct Bar {} } const(__traits(getMember, Foo, "Bar")) fooBar; static assert(is(typeof(fooBar) == const(Foo.Bar)));
- ランタイム・チェックの各カテゴリーをオン・オフするための -check スイッチが追加された。
オプション("check=[assert|bounds|in|invariant|out|switch][=[on|off]]"、 デフォルト、-boundscheck、-release、-unittestオプションを上書きして、特定のチェックを有効または無効にする。
- assert: アサーションチェック
- bounds配列の境界
- inクラス/構造体の不変性:クラス/構造体の不変性をチェックする。
- invariantクラス/構造体の不変量。
- outアウト契約" : out contract
- switchスイッチ・デフォルト
- on 指定されたチェックが有効である。
- off指定されたチェックは無効である。
- -checkaction=D|C|halt コンパイラー・スイッチを追加する。
これは、アサートが失敗したとき、境界チェックが失敗したとき、あるいは最後のスイッチエラーが発生したときに実行されるアクションをカバーする、 または最終的なスイッチ・エラーが発生したときの動作をカバーする。Dは、通常のDの動作である ErrorCは、Cランタイム・ライブラリのアサート失敗関数を呼び出すことを意味する。 関数を呼び出すことを意味し、 haltはプログラムの実行を停止することを意味する。
haltはここでの主な追加機能で、非常に軽量なアサートが可能になる。
- -color また、 、常にカラー化されたコンソール出力を出力するようになった。-color=on
このリリース以前、-color は、端末検出に失敗した場合、カラー化されたコンソール出力を出力しなかった。 を出力しなかった。 このリリースでは、auto という新しいオプションが導入された。-color=<value> このオプションは引き続きデフォルトとなる:
- autottyが検出された場合、カラー出力を有効にする(デフォルト)。
- on常にカラー出力を使用する
- off色付き出力を使用しない。
したがって、-color (-color=on のショートカット)を使って、DMDに色つきのコンソール出力をさせることができる。 を使うことができるようになった。 例えば、これでカラー化されたコンソール出力が使われる:
> echo $(echo "test" | dmd -color - 2>&1) __stdin.d(2): Error: no identifier for declarator test
- mixin "ミックスイン"で生成されたコードを保存できるようになった。
これはコンパイル時のエラーをデバッグするのに便利で、デバッガが要求したときに表示するソースを提供する。
- 無効なバイナリ・リテラルを廃止する
このリリース以前は、接頭語0b が有効であった。これは現在では非推奨となっている。
auto foo = 0b; // 非推奨 auto bar = 0b_; // 非推奨 auto baz = 0b0; // conforming equivalent
- 非推奨extern(Pascal) リンク
このリンケージは数十年前の遺産であり、まったく使われていない。 さらに、DMDによってのみサポートされており、曖昧さを引き起こす。
- プライベート・インポートをバイパスする完全修飾名の非推奨フェーズは終了した。
// a.d import std.stdio;
// b.d import a; void main() { std.stdio.writefln("foo"); // パッチ前は非推奨、現在はエラー }
例 "を正常にコンパイルするためには、public を、 : または にあるインポートに追加する必要がある。 をa.d:public import std.stdio; にあるインポートに追加する必要がある。import std.stdio; b.dに追加する必要がある。
- POSIXでテンプレートが正しくマングルされるようになった。
このバージョン以前は、extern(C++) テンプレートを含む を含むものは、OSX、Linux、FreeBSD上では正しくマングルされず、リンカーエラーを引き起こしていた。
- Cの正しいマングリング型として__c_wchar_t を追加した。wchar_t
これにより、wchar_t を使用する C++とのインターフェイス・コードが正しくリンクできるようになる。 のメモリ型として、wchar (Windows) とdchar (Posix) を置き換える。 DRuntimeエイリアスwchar_t 。
ランタイムの変更
- core.stdcpp.array を追加した。
C++とリンクするcore.stdcpp.array を追加した。std::array
- Darwinのlibc/crt_externs.hにDヘッダーファイルcore.sys.darwin.crt_externs を追加した。
Dヘッダーファイル core.sys.darwin.crt_externsDarwinのlibc/crt_externs.hにDヘッダファイルを追加する。
- object.destroy() にinitialize テンプレート引数を追加した。
object.destroy() 破壊後にオブジェクトを再初期化するかどうかを指定する 引数を受け取るようになった。 initialize
- core.stdcpp.string_view を追加した。
core.stdcpp.string_view を追加した。std::string_view
ライブラリの変更
- オーバーロードの追加std.random.unpredictableSeed!UIntType
std.random.unpredictableSeedオーバーロード版 std.random.unpredictableSeed!UIntType が追加された。 UIntTypeを生成するために使用できる。
import std.random : unpredictableSeed; auto a = unpredictableSeed!uint; static assert(is(typeof(a) == uint)); auto b = unpredictableSeed!ulong; static assert(is(typeof(b) == ulong)); // 古い構文はまだ使える。 uint c = unpredictableSeed;
さらに、unpredictableSeed の実装品質も改善された。 の実装品質が改善され、高速化された。 ビットの明らかなパターンを取り除いた。(ただし、unpredictableSeed はまだ暗号的に安全ではないことを覚えておいてほしい。 暗号的に安全ではないことに留意されたい)。
dubの変更
- コマンドを追加する
add コマンドは、dub.json/dub.sdl レシピファイルに依存関係を追加する。
dub add vibe-d を実行すると、レジストリからvibe-dの最新バージョンを問い合わせる。 レジストリから最新バージョンのvibe-dを取得し、新しい依存関係を追加してレシピファイルを書き換える。
dub.json
"dependencies": { "vibe-d": "~>X.Y.Z" }
dub.sdl:
dependency "vibe-d" version="~>X.Y.Z"
複数のパッケージを一度に追加することも可能である。 単純なバージョン指定 を追加することもできる。
例えばdub add vibe-d='~>0.8.2' mir-algorithm=3.1.21 。 レジストリに問い合わせることなく、与えられた2つの依存関係をレシピファイルに追加する。
バージョン指定のあるパッケージとないパッケージを1回の呼び出しで混在させることができる。
バージョン指定のあるパッケージとないパッケージは、1回の起動で混在させることができる。 を使うこともできる。
- dub は$DUB 変数
このリリースでは、ビルドコマンドから以下の方法でdubを呼び出すことができる:
// dub.sdl: preBuildCommands "$DUB run --single somebuildscript.d"
これは、dubが$PATH にない場合や、複数のバージョンのdubがインストールされている場合に便利である。
$DUB は、ビルドコマンドのプロセスでも環境変数としてアクセスできる。
$DUB は、ライブラリとして使用されている場合を除き、実行中の実行ファイルを指す。 その場合、 は、 で最初に見つかったdubの実行ファイルを解決する。 $DUB $PATH
- 実行前/実行後コマンドの追加
DUBは、ターゲットランの前に実行されるpreRunCommandsと、ターゲットランの後に実行されるpostRunCommandsのコマンドをサポートするようになった。 およびターゲット実行後に実行されるpostRunCommandsをサポートするようになった。 環境変数DUB_TARGET_EXIT_STATUSはターゲットの実行ファイル呼び出しステータスを含んでおり、postRunCommandsで利用できる。 が含まれており、postRunCommandsで使用できる。
- 拡張子.dのないシェバング
dubのシングル・ファイル・パッケージ、例えばapp.d は、.d 拡張子なしで呼び出せるようになった。 dub app.d --param に加えて、dub app --param を呼び出すことができる。
また、拡張子が.dでないファイルも単一ファイル・パッケージとしてサポートされるようになった。
- JSONをソートする
JSONファイルはdub.jsonに書き込まれる前にソートされるようになった。これはdub.jsonが更新されたときにJSONプロパティの順番が変わってしまうのを防ぐためである。
- ビルドキャッシュの効率を改善する実験的な機能を追加した。
特定の機能を設定するためにバージョン識別子を使用すると、多くの場合、そのバージョンを使用していない依存関係の不要な再構築につながることがある。 不要なリビルドにつながることがある。 を使用しない依存関係のリビルドが不要になることがある。ビルド・キャッシュの効率を改善するために、dubは新しい 実験的な--filter-versions スイッチが追加された。
ビルド、テスト、生成コマンドに--filter-versions を渡すと、 dub はパッケージが実際に使っているバージョン識別子をすべてgrepし、ビルド時にそれらのみを適用する を適用する。これにより、例えば、キャッシュされたビルドを再利用することができる。 ライブラリのキャッシュされたビルドを再利用することができる。 ライブラリがそのどれかを使っていなくても、異なるバージョン識別子を使う2つのアプリケーション間で、キャッシュされたライブラリのビルドを再利用することができる。
以下の正規表現は、バージョン識別子を検索するために使用される。
enum verRE = ctRegex!`(?:^|\s)version\s*\(\s*([^\s]*?)\s*\)`; enum debVerRE = ctRegex!`(?:^|\s)debug\s*\(\s*([^\s]*?)\s*\)`;
ミックスインや自動生成ソースでバージョン識別子を使用するパッケージの場合、 でバージョン識別子を使うパッケージでは、適用可能なバージョン識別子のリストを パッケージファイルの中で明示的に指定することができる。
dub.jsonである:
"-versionFilters": ["Have_vibe_d"] "-versionFilters-posix": ["UseUnixSockets", "UseMMap"] "-debugVersionFilters": ["ValidateRequests"]
dub.sdl:
x:versionFilters "Have_vibe_d" x:versionFilters "UseUnixSockets" "UseMMap" platform="posix" x:debugVersionFilters "ValidateRequests"
推論されたバージョン識別子はキャッシュされ、一般にgreppingは非常に高速である。 そのため、バージョン識別子を明示的に指定するのは、必要な場合のみである。 必要な場合にのみ使用すべきである。
また、versionFiltersとdebugVersionFiltersのどちらかを指定すると、両方の推論が無効になることに注意すること。 を指定すると、その両方の推論が無効になる。
reserveredバージョン識別子noneは、バージョン識別子やデバッグ・バージョン識別子をまったく使用しないパッケージに使用できる。 バージョン識別子やデバッグ・バージョン識別子を全く使わないパッケージに使うことができる。
dub.json:
"-versionFilters": ["none"]
dub.sdl:
x:debugVersionFilters "none"
D 2.084.0におけるすべてのバグ修正と機能強化のリスト:
DMDコンパイラのリグレッション
- Bugzilla 15206: [REG2.077] ICE on optimized build, tym = x1d Internal error: backendcgxmm.c 547
- Bugzilla 16284: [REG2.067] CTFE内部エラー: bad compare
- Bugzilla 18938: テストリリースでこのdubのパッケージをコンパイルすると Dmd segfault が発生する。
- Bugzilla 19103: モジュール内のシンボルをミックスインで構造体にインポートできるようになった。
- Bugzilla 19202: 非推奨の同名テンプレートは警告を表示しない
- Bugzilla 19227: S.initはfloatメンバを持つ構造体に対して失敗する。
- Bugzilla 19389: 構造体メンバに対して多重代入は機能しない。
- Bugzilla 19409: static if (__traits(compiles, __traits(identifier, ...)) は式だけではtrueと評価されるがfalseと評価される。
- Bugzilla 19447: [REG2.066] CTFEの固定サイズのスライス代入が配列との接続を失う
- Bugzilla 19473: DMD 循環構造体参照でセグメンテーションエラーが発生した。
- Bugzilla 19491: スコープ変数を共有型で初期化する際にICE(segfault)が発生する
- Bugzilla 19510: [2.084 REG] NOLOGO.dファイルが見つからないというランダムでスプリアスなエラーが発生する
DMDコンパイラのバグ
- Bugzilla 5973: alias thisがスーパークラス検索で考慮されない。
- Bugzilla 6777: エイリアスのthisがクラスのキャストを無効にする。
- Bugzilla 9274: is + alias this = 誤ったコード
- Bugzilla 10692: alias thisで非推奨がチェックされない。
- Bugzilla 11499: is式は'alias this'で誤動作する。
- Bugzilla 13392: クラス + エイリアス this + cast(void*) == 大袈裟なキャスト
- Bugzilla 13953: AA.remove擬似メソッドがalias this経由で動作しない。
- Bugzilla 14632: エイリアスthisを使った無効なキャストの診断改善
- Bugzilla 15876: パーサー・エラーのフォーマット時にSEGFAULTが発生する様々なケース
- Bugzilla 16082: モジュールと同じ名前のalias thisメンバーにアクセスできない。
- Bugzilla 16086: インポートされた関数名がエイリアス this メンバーの影になる。
- Bugzilla 16479: C++のテンプレート化された関数のパラメータをマングリングする際に置換が欠けていた。
- Bugzilla 16633: エイリアスのthisがオブジェクト自身より先に試行されるケース
- Bugzilla 16976: foreach_reverseでのulongからintへの暗黙の変換。
- Bugzilla 18010: BetterC "で配列をコピーする際に_d_arraycopyへの参照が未定義であった。
- Bugzilla 18456: の場合、crt_constructor/crt_destructor のセグメンテーションエラーが発生する。
- Bugzilla 18572: AliasSeq のデフォルト引数が壊れている
- Bugzilla 18979: テンプレートコンストラクタがprivateをバイパスする
- Bugzilla 19014: コンパイラが実際にはインポートされていないシンボルをインポートしてしまう。
- Bugzilla 19086: 例外発生時のスタックトレース不良
- Bugzilla 19307: クロージャに移動した変数がデバッガで無意味に表示される
- Bugzilla 19318: 外部関数から取り込んだ変数がデバッガに表示されない。
- Bugzilla 19319: std.mathでx^ ^yが見つからない場合、行番号が表示されない。
- Bugzilla 19336: [ICE] 無効なコードでセグメンテーションエラーが発生する
- Bugzilla 19376: コマンドラインで渡された.diファイルからオブジェクトファイルを生成しない
- Bugzilla 19381: ネストされた関数のキャプチャポインタは "this"と呼ぶべきではない。
- Bugzilla 19415: メンバ関数がreturn属性を持つ場合、return非コピー構造体は失敗する。
- Bugzilla 19464: typeofの不変のフィールドは順序に依存する。
- Bugzilla 19497: dmdに-Oを付けるとプログラムがクラッシュする。
- Bugzilla 19520: assert(TypeExpはTypeExp): 空の構造体でコンパイルする。
DMDコンパイラの機能強化
- Bugzilla 1870: 文字列ミックスイン "のエラーメッセージで問題のある行を再現する
- Bugzilla 7804: traitsを直接エイリアスできない。
- Bugzilla 12790: コンパイラはデバッグのためにミックスインファイルを残しておくべきである。
- Bugzilla 16165: ミスマッチ時に関数の引数の数を表示する。
- Bugzilla 19246: バイナリ・リテラル0b_
- Bugzilla 19278: extern(C++, "name") は式を受け付けない。
- Bugzilla 19439: 非集約型に対して"__traits(getAliasThis)"が空のタプルを返すようにする。
phobosのリグレッション
- Bugzilla 13300: 純粋な関数'std.array.Appender!(T[]).Appender.secureAddable'は純粋でない関数 "test.T.__fieldPostBlit"を呼び出せない。
- Bugzilla 18824: [REG 2.080] タプルの配列にタプルを追加するよりもタプルの opBinaryRight が優先される
- Bugzilla 19133: core.exception.rangeerror@std/file.d(3812):
- Bugzilla 19213: gotoはstd.algorithm.iteration.joinerの変数宣言をスキップする
phobosのバグ
- Bugzilla 4957: std.concurrencyが構造体フィールドにTidを渡すことを許さない
- Bugzilla 18327: std.random.XorshiftEngineがUIntTypeでパラメータ化されているがuintでしか動作しない
- Bugzilla 18680: std.random.LinearCongruentialEngineはopEqualsを持つがtoHashを持たない
- Bugzilla 18755: std.typecons.Rebindableは"@safe-ty"を壊す
- Bugzilla 18778: std.format:位置引数がネスティングで期待通りに動作しない
- Bugzilla 18796: std.algorithm.substituteが空の範囲でアサートする
- Bugzilla 19331: std.regex.internal.ir.SmallFixedArray.toHashがconstでないため無視される
- Bugzilla 19338: std.bitmanip.BitArray.countがempyのBitArrayに対してsegfaultを返す
- Bugzilla 19366: findSplit,findSplitBefore,findSplitAfterでopCast(bool)をconstとして修飾する。
- Bugzilla 19367: std.net.curlはHTTP/2ステータスラインを理解しない
- Bugzilla 19456: ParameterIdentifierTupleが無名パラメータを持つ抽象メソッドに対して正しくない
phobosの機能強化
- Bugzilla 5502: 連想配列を作成する便利な方法が増えた
- Bugzilla 9702: std.string.replaceは単一文字も置換するのか?
- Bugzilla 10930: std.array.replaceで配列の要素を単純に置換できない。
- Bugzilla 18595: std.random: UIntTypeのun unpredictableSeedを追加した。
- Bugzilla 19197: typeid(T).getHash(...)のインスタンスをhashOfで置き換える
- Bugzilla 19238: no-argスプリッタは文字の範囲に対して機能すべきである。
- Bugzilla 19308: std.string.stripLeftの最適化
- Bugzilla 19364: 文字列関数のテンプレート化された関数" の肥大化を減らす。
- Bugzilla 19396: [BetterC] ScopeBufferはbetterCではインラインでは使えない。
- Bugzilla 19403: 文字配列のstd.string.stripLeftを@nogc nothrowにする。
- Bugzilla 19404: std.string.stripRightの最適化
- Bugzilla 19405: stripRightの逆方向UTF-8デコードを高速化し、文字列のnogcをnothrowにする。
- Bugzilla 19429: indexOf("a", "b")はnothrow/@nogcとすべきである。
- Bugzilla 19466: functionLinkageのドキュメントでいくつかの値が省略されている。
Druntimeのリグレッション
- Bugzilla 19498: 未定義の識別子 rt_loadLibraryW
Druntimeバグ
- Bugzilla 8872: Windowsヘッダーに拡張ウィンドウスタイル(WS_EX_...列挙)がない。
- Bugzilla 11168: core.stdc.time.asctime()が誤って@trustedとマークされている。
- Bugzilla 11174: AF_PACKETとSO_BINDTODEVICEの両方が未定義である。
- Bugzilla 11294: このエイリアスを使用したオブジェクトの破壊
- Bugzilla 19087: final switch は -betterC では使えない。
- Bugzilla 19090: core.internal.hash.bytesHashユニットテストがBigEndianマシンで不正なテストベクタを使用する。
- Bugzilla 19204: hashOfはSIMDベクトルを受け付けない。
- Bugzilla 19332: hashOf はSIMDベクトルを受け付けない。 : constでないtoHashを持ち、全てのフィールドがビット単位でハッシュ可能な構造体では、hashOfはコンパイルに失敗する。
- Bugzilla 19401: core.internal.trait.hasElaborateDestructorとhasElaborateCopyConstructorの静的配列エイリアスを持つstructとネストされたstruct/unionのバグを修正した。
- Bugzilla 19433: rt_cmdline_enabledがfalseの場合、--DRT-*オプションを消費しないようにした。
Druntimeの強化
- Bugzilla 19214: object.destruct()をサポートし、効率的な(そして正しい!)破棄を可能にした。
- Bugzilla 19398: core.atomic.MemoryOrderの意味をドキュメント化した。
- Bugzilla 19414: ビッグエンディアン・アーキテクチャのobject.__cmp(T[])が任意のサイズの符号なし整数に対してmemcmpを使えるようになった
- Bugzilla 19416: core.exception.onOutOfMemoryErrorをBetterCで動作するようにした。
- Bugzilla 19421: BetterCでpureMallocなどを使えるようにする
- Bugzilla 19423: core.stdc.errno で OpenBSD & NetBSD の __errno を直接リンクするようにした。
- Bugzilla 19424: Haikuのサポートをcore.stdc.errnoに追加した。
- Bugzilla 19468: 循環依存エラーメッセージの改善
dlang.orgのバグ
- Bugzilla 19374: 文法でTypeVectorが定義されていない
dlang.orgの機能強化
- Bugzilla 19321: 共用体はデストラクタを持つフィールドを "持ってはいけない"
インストーラーのバグ
- Bugzilla 19434: ~/.gnupgがない状態でinstall.shを使用すると "Invalid signature "となる
このリリースへの貢献者 (53)
このリリースを可能にしてくれたすべての素晴らしい人々に多大な感謝を捧げる。
- aG0aep6G
- Andrei Alexandrescu
- Andu033
- ARaspiK
- Arun Chandrasekaran
- Basile Burg
- BBasile
- Chris
- David Gileadi
- Diederik de Groot
- dukc
- Eduard Staniloiu
- H. S. Teoh
- HANATANI Takuma
- Iain Buclaw
- Jacob Carlborg
- jmh530
- Joakim Noah
- Johan Engelen
- Johannes Pfau
- jsatellite
- kinke
- Laurent Tréguier
- look-at-me
- Manu Evans
- Martin Nowak
- Mathias Lang
- Mathis Beer
- Mike Franklin
- Mike Parker
- Nathan Sashihara
- Nicholas Lindsay Wilson
- Nicholas Wilson
- Nick Treleaven
- Oleksandr Palamar
- Paul Backus
- Per Nordlöw
- Petar Kirov
- Pharap
- Rainer Schuetze
- Razvan Nitu
- Richard Palme
- Robert burner Schadek
- Roman Chistokhodov
- rracariu
- Sebastian Wilzbach
- Simen Kjærås
- Stanislav Blinov
- Steven Schveighoffer
- Thomas Mader
- Vladimir Panteleev
- Walter Bright
- wolframw
DEEPL APIにより翻訳、ところどころ修正。
このページの最新版(英語)
このページの原文(英語)
翻訳時のdmdのバージョン: 2.108.0
ドキュメントのdmdのバージョン: 2.109.1
翻訳日付 :
HTML生成日時:
編集者: dokutoku