2014-04-07

2014-02-post-Issaquah-mailingsのレビュー: N3940-N3949

N3940: Draft Filesystem Technical Specification

ファイルやディレクトリの操作を行う標準ライブラリ、FilesystemのTS(Technical Specification)のドラフト

N3941: Filesystem Study Group (SG3) Active Issues List

現在、標準化委員会で議論されている、Filesystemの文面に対する問題集

N3942: Filesystem Study Group (SG3) Closed Issues List

かつてFilesystem active issuesリストに載っていたが、解決されたか、対応するコンセンサスが得られないと判断されたため閉じられた問題集。

N3943: Filesystem Study Group (SG3) Defect Report List

かつてFilesystem active issuesリストに載っていたが、実は問題ではなかったと判断された問題集。

3947: URI - Proposed Wording (Revision 4)

URIを処理するための標準ライブラリの文面案。URIをパースしたり、構築したりといったライブラリである。これは規格ではなくて、TSである。

N3948: Feature-testing for C++ Technical Specifications

C++のTS用の、機能テスト用の標準マクロライブラリ。

理想では、あるC++実装は、C++03, C++11, C++14を、完全に規格準拠にサポートしているか、していないかの二択であるべきである。しかし現実では、C++コンパイラーは、個々の機能を独立して実験的に実装を進めている。また、ドラフト時の挙動と、正式な規格の挙動が異なることもある。

そして、現実では、複数のコンパイラーや、複数のバージョンのコンパイラー間で移植性のあるコードを書かなければならないことがよくある。その場合に、遺憾ながら多用されているのが、Cプリプロセッサーだ。

// よく使われているパターン

// コンパイラーに合わせてマクロを定義しておく

#if HAS_FEATURE_X
// 機能Xを使った実装
#else
// 機能Xを使わない実装
#endif

この論文は、そのような機能テスト用の標準のマクロの、TSに提案されている機能用のものを提案している

必要悪だろうか。いやしかし・・・

[せっかくいい気分でレビューしていたのをぶち壊すPDF] N3949: Scoped Resource - Generic RAII Wrapper for the Standard Library

汎用RAII(Resource Acquisition is Initialization)ラッパーライブラリの提案の改定論文。

指定したリソースを指定したデリーターに実引数として渡して実行する、unique_resource_t(実際に使用する際には、unique_resource関数テンプレートを利用する)、スコープを抜けた時にデリーターを実行してくれる、scoped_guard_t(とscoped_guard関数テンプレート)がある。

// 例
int main()
{
    {
        auto ur = std::unique_resource( new int, []( auto ptr ) { delete ptr ; } ) ;
    }

    {
        auto ur = std::scope_guard( []{ std::cout << u8"抜けたよ" << '\n' ;}
    }
}

unique_ptrは、ポインター用に特化していて、deleteをするデリーターがデフォルトで動く。unique_resourceは、もっと汎用的な設計になっている。

前回の提案からの変更点としては、unique_resource_checkが加わったところだ。

ドワンゴ広告

この記事はドワンゴ勤務中に書かれた。ところで、ドワンゴには4月からScalaエヴァンジェリストがいる。

ドワンゴは本物のC++プログラマーを募集しています。

採用情報|株式会社ドワンゴ

CC BY-ND 4.0: Creative Commons — Attribution-NoDerivatives 4.0 International — CC BY-ND 4.0

No comments: