英語版
このページの英語版を見る

変更ログ 2.071.0

前バージョン: - 次のバージョン:

Download D 2.071.0
2016年4月5日リリース

ライブラリの変更

  1. 連想配列にclear メソッドが追加された。 配列に追加された。
  2. GCが再帰的ミューテックスの代わりにスピンロックを使うようになった。
  3. への呼び出しが無視されるようになった。 GC.freeへの呼び出しは、InvalidMemoryOperationErrorをスローする代わりに、ファイナライズ中に無視されるようになった(Bugzilla 15353を参照)。
  4. GC.addRootそして GC.addRangeが別のロックを使用するようになった。
  5. GCAllocator.goodAllocSize が追加された。
  6. の高レベルAPIが追加された。 std.net.curlが使われるようになった。 Appender を使うようになった。これにより、一般的にすべての呼び出しが若干速くなった。データ量が多い場合、最大200msまで速くなる。 になる。
  7. Repeatを追加した。 AliasSeqテンプレート引数からなる
  8. foldの代替として追加された。 reduce の代わりに引数の順序を入れ替えたものが追加された。
  9. std.math.にnextPow2とtruncPow2が追加された。
  10. bsf, bsrpopcntが使えるようになった。 が32ビットシステム上でulongsで動作するようになった。
  11. topNが 5% - 7% 高速化された。
  12. startsWithendsWith の単項オーバーロードが追加された。
  13. maxCount そして が追加された。maxPos
  14. コンビニエンス・ラッパーの範囲サポートが追加された。 redBlackTree の範囲サポートが追加された。

D 2.071.0におけるすべてのバグ修正と機能強化のリスト。

コンパイラの変更

  1. 完全修飾名のインポートアクセスチェックが修正された。

    完全修飾名を使用してプライベート・インポートをバイパスすることができなくなった。 次の例はpackage std.range is not accessible here で失敗する。

    import std.algorithm;
    
    static assert(std.range.isForwardRange!string);
    

    既存のコードの更新を容易にするため、古い動作は維持されたが、非推奨となった。

  2. 選択インポートやリネームインポートの保護が修正された。

    プライベートな選択インポートやリネームされたインポートを別のモジュールで使用することができなくなった。 次の例はa.File is not visible from module b で失敗する。

    module a;
    import std.stdio : File; // importはデフォルトでprivate
    
    module b;
    import a;
    
    File f; // Fileはprivate
    

    既存のコードの更新を容易にするため、古い動作は維持されたが、非推奨となった。 この修正は、DIP22で導入された可視性の変更に依存している。

言語の変更

  1. Importが外部スコープで宣言されたローカルを隠さなくなった。

    これらの変更は名前検索アルゴリズムに対して行われた:

    1. 非修飾名の検索が1パスから2パスに変更された。最初の 最初のパスはスコープを通過するが、インポート宣言はチェックしない。もし見つからなければ 2番目のパスはスコープを通過し、import宣言のみをチェックする。
    2. 修飾名検索、基底クラス検索、およびWithStatement検索は、モジュールが対象でない限り、インポート宣言を検索しなくなった。 ただし、モジュールがルックアップの対象になっている場合は別である。 の動作は以前のままである。

    これは既存のコードを壊してしまう可能性がある。 への依存は意図されたものではなく、それを修正することでコードのわかりやすさが向上する。破損の傾向 シンボルが未定義としてフラグ付けされるという形をとる。破損を修正するには 名前を完全に修飾するか、インポート宣言にエイリアスを追加する。

    古いルックアップの動作は、-transition=importコンパイラー・スイッチを使って復元できる。 コンパイラー・スイッチを使用する。 transition=checkimportsを指定すると、コンパイラーは次のような警告を出す。 古いルックアップと新しいルックアップで異なるシンボルが見つかると、コンパイラーは非推奨の警告を出す。 シンボルを見つけると、コンパイラーは非推奨の警告を出す。 両方のスイッチを組み合わせれば、古いルックアップを使用しても 非推奨の警告を出す。

    以下も参照のこと。Bugzilla 10378

  2. プライベート・シンボルは他のモジュールでは表示されなくなった。

    保護(private、package、protected)は、シンボル検索時にすでに強制されるようになった。 (private、package、protected)は、プライベートシンボルとパブリックシンボルの衝突を解決するために、シンボル検索時にすでに強制されるようになった。 の衝突を解決するためである。

    保護が混在するオーバーロードされたシンボルの可視性は、最も可視性の高いメンバによって決定される。 ただし、正確なシンボルに対する追加アクセス・チェックは、オーバーロード解決後に実行される。 シンボルに対する追加のアクセス・チェックがオーバーロード解決後に実行される。

    既存のコードの更新を容易にするため、非推奨の不可視シンボル検索が実行される。 旧来の検索動作(-transition=importまたは-transition=checkimportsコンパイラー・スイッチを使用)では、シンボルの可視性は無視される。 シンボルの可視性は無視される。 すべての既存のアクセス・チェックは、非推奨段階でも有効である。

    DIP22も参照のこと。

  3. マニフェスト定数を非推奨メッセージに使用できるようになった。

    マニフェスト定数(列挙型、static immutable)が、連結文字列と同様に、非推奨メッセージに使用できるようになった。

    例::

    string generateMessage() { return "Some deprecation message"; }
    enum DepMsg = generateMessage();
    
    deprecated(DepMsg) class Foo {}
    deprecated("Some long deprecation " ~ "message") class Bar {}
    

ライブラリーの変更

  1. すべての要素を削除する連想配列にclear メソッドが追加された。 メソッドが追加された。

    aa.clear() 、連想配列からすべての要素を削除できるようになった。 を使えるようになった。これにより これは、同じ配列へのすべての参照からすべての要素を削除することを可能にする(null に設定しても、参照はリセットされるだけで、他の参照から要素が削除されることはなかった)。 参照はリセットされるが、他の参照からの要素は削除されない)。

    auto aa = ["first" : "entry", "second": "entry"];
    auto aa2 = aa1; // reference to the same AA
    aa.clear(); // still retains its current capacity for faster imports
    assert(aa2.length == 0); // other references affected
    
  2. GCはpthread_mutexでラップされなくなった。 スピンロックを使うようになった。

    この結果、GCは平均で5%高速化され、GCを使用するマルチスレッド・プログラムに最も恩恵がもたらされる。 GCを使用するマルチスレッドプログラムに最も恩恵がある。詳細はdruntime#1447を参照のこと。 を参照のこと。

  3. std.mathにnextPow2とtruncPow2を追加。

    nextPow2そして truncPow2を追加した。 である。

    import std.math;
    
    assert(nextPow2(10) == 16);
    assert(nextPow2(4000) == 4096);
    
    assert(truncPow2(10) == 8);
    assert(truncPow2(4000) == 2048);
    
  4. startsWithendsWith の単項オーバーロードが追加された。

    startsWithそして endsWith が述語だけで使えるようになった。

    import std.algorithm.searching;
    import std.ascii : isAlpha;
    
    assert("abc".endsWith!isAlpha);
    assert(!"ab1".endsWith!(a => a.isAlpha));
    
    assert("abc".startsWith!isAlpha);
    assert(!"1ab".startsWith!isAlpha);
    
  5. maxCount そして が加えられた。maxPos

    が追加された。 の数を得るためには、minCount!"a > b" を使わなければならなかった。 この変更により、この問題を解決するための便利な関数が追加された。


D 2.071.0のすべてのバグ修正と機能強化のリスト:

DMDコンパイラのリグレッション

  1. Bugzilla 14965: [REG2.031] 関数呼び出しで "auto関数型"を使用している場合に、推測される戻り値の型を前方参照する。
  2. Bugzilla 14973: [REG2.068] コンパイラがネストされたマップのコンテキストを推測する機能が壊れているようだ。
  3. Bugzilla 15296: [REG2.069] 非インライン化ステートメントを呼び出す単純な関数をインライン化できない。
  4. Bugzilla 15422: [REG2.066] ネストされた構造体の連想配列 - 使用時にクラッシュする。
  5. Bugzilla 15455: [REG v2.065] 単純な入れ子構造に対するコンパイラのセグメンテーションエラー
  6. Bugzilla 15618: [REG-master] クラスメンバーのレイアウトが変更された。
  7. Bugzilla 15713: [REG-master] CTFEの文字列連結のテンプレートが壊れている
  8. Bugzilla 15729: [REG(master)] ライブラリのデバッグ情報が壊れた。
  9. Bugzilla 15733: [REG2.066] 継承に関する前方参照の問題
  10. Bugzilla 15744: [REG2.067] (SIGABRT) Error: オーバーロードセット t.Bar.__ctor が関数にエイリアスされている。
  11. Bugzilla 15778: [REG2.064] 多義文字列型が配列操作で動作しない。
  12. Bugzilla 15781: [REG2.069] 定数が異なる同じ型の変数でテンプレート型の推論に失敗する。
  13. Bugzilla 15785: [DMD HEAD] protectedスーパーを呼び出すと警告が表示される
  14. Bugzilla 15788: [REG2.069] オーバーロード関数でICEアサートが発生する
  15. Bugzilla 15814: [REG-master] カスタム非推奨メッセージが表示されない
  16. Bugzilla 15815: [REG2.071-devel] エイリアスされたテンプレートインスタンスの非推奨が表示されない
  17. Bugzilla 15817: [REG2.068] CTFE AAで'cannot index null array counts'の代わりにICE(スタックトレースなし)を使用する。
  18. Bugzilla 15839: [REG2.071-b1] this.outerの型が正しくない

DMDコンパイラのバグ

  1. Bugzilla 143: 'package'が全く機能しない
  2. Bugzilla 313: [モジュール] 完全修飾名がプライベートインポートをバイパスする
  3. Bugzilla 314: [module] 静的インポート、リネームインポート、選択的インポートは常にパブリックである。
  4. Bugzilla 1754: モジュール・メンバーの可視性はコンフリクトに影響しない
  5. Bugzilla 2991: [モジュール] 集約内のインポートはプライベート識別子との衝突を引き起こす
  6. Bugzilla 3254: [モジュール] モジュール・メンバーの可視性は宣言順序に依存する
  7. Bugzilla 6907: ice(interpret.d)式の削除はインタプリタをクラッシュさせる。
  8. Bugzilla 7516: 三項演算子から返された構造体に対してポストブリットが呼び出されない
  9. Bugzilla 7517: インターフェイス契約" : インターフェイス契約が破棄された。
  10. Bugzilla 11581: T...が与えられた場合、new T[0]は機能しない
  11. Bugzilla 12748: ICE:型名特殊化でtypeof(S.init[0])を使用している。
  12. Bugzilla 12829: nogc関数のクロージャ割り当てのエラー行番号が正しくない。
  13. Bugzilla 13702: GC割り当てを引き起こす可能性がある」エラーメッセージを1つ見落とした
  14. Bugzilla 14442: ネストされたクラスでのthis.outer参照が正しくない
  15. Bugzilla 14486: クラスの削除が@nogcを無視する。
  16. Bugzilla 14603: opDispatchの結果がテンプレートである場合、"not alias an expression" となる。
  17. Bugzilla 14604: opDispatchの結果がテンプレートの場合、「前方参照を解決できない」。
  18. Bugzilla 14686: Postblitが連結時に呼び出されないことがある
  19. Bugzilla 14730: inlineで間違ったクロージャのvarにアクセスする
  20. Bugzilla 14788: inout関数呼び出しの不正な拒否。
  21. Bugzilla 14895: 配列操作の結果が連結される際のICE
  22. Bugzilla 14989: オーバーロード・マージが機能しないことがある
  23. Bugzilla 14992: 静的配列のローカル変数は常に.initを必要とする
  24. Bugzilla 15309: [dmd-internal]ScopeExp.semantic()は常に型を設定すべきである。
  25. Bugzilla 15310: [dmd-internal] TemplateDeclarationは常にTemplateExpに変換されるべきである。
  26. Bugzilla 15332: ICE in e2ir.c: assert(irs->sthis) in visit(ThisExp), キーワード "関数"を持つ関数リテラルはメソッドを呼び出す。
  27. Bugzilla 15353: std.experimental.allocatorは、GCが祖先である場合、デストラクタでメモリを解放することができない。
  28. Bugzilla 15384: 代入が条件として受け入れられることがある
  29. Bugzilla 15389: extern(C++)の前方参照問題
  30. Bugzilla 15407: toElem e2ir.c:1962 でアサートがヒットする。
  31. Bugzilla 15411: 宣言スコープで変数にアクセスする関数リテラルがインライン呼び出しで不正なエラーメッセージを出す
  32. Bugzilla 15441: std.experimental.ndsliceを使ったdmdのセグメンテーションエラー
  33. Bugzilla 15450: 正規関数のCTFE中にICEが発生した。
  34. Bugzilla 15519: 循環インポートがエイリアスインポートでfwd refエラーにつながる
  35. Bugzilla 15535: 最終スイッチの"goto default"でエラーを出す
  36. Bugzilla 15565: 名前空間での前方参照エラー
  37. Bugzilla 15578: 同じモジュールから名前空間のプライベートシンボルにアクセスできるようにする必要がある
  38. Bugzilla 15579: extern(C++)とのインターフェイス/多重継承。
  39. Bugzilla 15610: extern(C++) の多重継承 - 間違った 'this' ptr で呼び出す
  40. Bugzilla 15623: is(M!N)はインスタンス化に失敗したM!Nに対してtrueと評価される。
  41. Bugzilla 15626: extern(C++) 呼び出しのクラッシュ
  42. Bugzilla 15638: const クラスに共通の型がない。
  43. Bugzilla 15647: 階層内のあるC++とのインターフェイスから別のインターフェイスへのキャストはnoopである。
  44. Bugzilla 15665: コンストラクタを持つテンプレート化されたスコープクラスがコンパイルされない。
  45. Bugzilla 15667: 無効な構文でdmdが無限ループする。
  46. Bugzilla 15669: エラーメッセージの行番号が正しくない。
  47. Bugzilla 15688: カンマ式による整数呼び出しでdmdのセグメンテーションエラーが発生した。
  48. Bugzilla 15784: コンストラクタ内部からのオーバーロード・セット・コンストラクタ呼び出しをサポートすべきである。
  49. Bugzilla 15789: TemplateInstanceのsemanticTiargsのICEアサート
  50. Bugzilla 15794: ラムダがコードジェネレーションを実行する機会を得られない
  51. Bugzilla 15811: transition=importと-transition=checkimportの挙動がおかしい。
  52. Bugzilla 15825: dmdの-transition=checkimportsはタプル__dollarに対して偽陽性を報告する。

DMDコンパイラの機能強化

  1. Bugzilla 10378: ローカルインポートがローカルシンボルを隠すのを防ぐ
  2. Bugzilla 12954: 非推奨:文字列の連結や文字列リテラル以外では動作しない
  3. Bugzilla 14383: [ddoc] ドキュメント化されたunittestはモジュール宣言では機能しない。
  4. Bugzilla 15644: オブジェクト・レイアウトのABIをMIスタイルに変更する

phobosのリグレッション

  1. Bugzilla 15222: phobosのzipファイルからstd.experimentalが省略されている。
  2. Bugzilla 15782: [Reg 2.071-devel] Aliasがユーザー定義型から修飾子を取り除かなくなった。
  3. Bugzilla 15807: Array!boolのinsertBackが壊れている

phobosのバグ

  1. Bugzilla 1238: インポートされたモジュールのプライベート識別子がパブリック識別子と衝突する。
  2. Bugzilla 15543: [ndslice] assumeSameStructureに無駄なフラグがある。
  3. Bugzilla 15545: csv Readerの改行に失敗する。
  4. Bugzilla 15549: ndslice] byElement is broken for packed slices : [ndslice] byElement is broken for packed slices.
  5. Bugzilla 15553: topN は非常に非効率[topN(0)でもソートより遅い]が、O(n)でなければならない
  6. Bugzilla 15561: std.typecons.ProxyはNaNの比較を間違える
  7. Bugzilla 15639: std.experimental.allocatorは抽象クラスのインスタンス化を可能にする
  8. Bugzilla 15654: SysTime.toISOStringがタイムゾーンを正しくフォーマットしない。
  9. Bugzilla 15655: SysTime.from*Stringが1桁のタイムゾーンと分を正しく受け付けない > 59
  10. Bugzilla 15659: SList: clear()がクラッシュすることがある
  11. Bugzilla 15663: writefln("%#o", 0)は"00"ではなく"0"を返すべきである
  12. Bugzilla 15677: std.experimental.allocators.expandArrayオーバーロードのinitは配列をref.で受け取るべきである。
  13. Bugzilla 15683: DDocのリンク切れ
  14. Bugzilla 15686: std.uniオーバーロードのドキュメント
  15. Bugzilla 15715: [ndslice] rangeHasMutableElementsが定義されていない。
  16. Bugzilla 15721: インターフェースでMallocator.disposeを呼び出すとフリーエラーになる
  17. Bugzilla 15772: emplaceは抽象クラスでは動作するが、抽象クラスでは動作しないはずである。

phobosの機能強化

  1. Bugzilla 15377: std.stdio:Windows COFF で MSVCRT の _fseeki64 / _ftelli64 を使う。
  2. Bugzilla 15532: [ndslice] iota(5).sliced(2,2) はエラーをスローするはずである。
  3. Bugzilla 15596: デリミタで区切るか?
  4. Bugzilla 15714: [ndslice] byElementにはいくつかのスライスプリミティブが欠けているようだ。

Druntimeのリグレッション

  1. Bugzilla 15224: 'クリーン'な結果をゴミコマンドにする
  2. Bugzilla 15779: スタック・スタンピング(-gx)を使用するとDWARF EHが失敗する。
  3. Bugzilla 15822: ファイナライザからGC.removeRange/Rootを呼び出すとInvalidMemoryOperationErrorが発生する

Druntimeの機能強化

  1. Bugzilla 15628: ファイバー内の例外が /SAFESEH で捕捉されない

dlang.orgのバグ

  1. Bugzilla 10987: extern (C++)' クラスのドキュメントを追加。
  2. Bugzilla 15344: m32mscoff スイッチがドキュメントにない。
  3. Bugzilla 15666: 文法が静的コンストラクタのメンバ関数属性を許可しない。
  4. Bugzilla 15696: Microsoft Edgeを使用している場合、ウェブサイトのロゴがLearnタブに重なる
  5. Bugzilla 15697: 今週のD」のスクリプトは、HTTPでウェブサイトにアクセスしてもHTTPで提供される。
前のバージョン: - 次のバージョン: