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