2012-03-03

2012-02 post-Kona mailingの簡易レビュー

2012-02 post-Kona mailingが公開された

最新のドラフトはN3376、変更点は、N3338 - Editor's Report 2012-01に書いてある。今回は、単なる字句修正以上の変更が入った。例えば10年越しの問題、C++ Standard Core Language Active Issues 388などが興味深い。実際には、issue 388は解決されていない。文面上の変更はない。なぜならば、この問題を解決するには、ABIの変更を伴うので、もう少し議論を煮詰めた方がいいと判断されたようだ。もちろん、これはドラフトなので、頼ってはいけない。

N3360: Networking Library Status Report

TR2に提案予定のネットワークライブラリの土台となるBoost.Asioの現状報告。すでに何千ものプロジェクトの現場で使われており、当初の目的であったネットワーク以上に発展していった背景を説明している。

N3361: C++ Language Constructs for Parallel Programming

kona meetingで、並列プログラミングについてIntel® Cilk™ Plusを例に、Intelがプレゼンした際に使ったスライドのようだ。これはTR2の提案ではなく、Intelの開発してきた補助ライブラリのプレゼンである。本物の提案は、次回、発表されるらしい。一口に並列プログラミングといっても様々だ。スレッドは明確に実行コンテキストが独立するので分かりやすい概念だが、スレッドの作成にはコストがかかる。そこで、スレッドよりも軽い単位の並列実行である、タスクを説明している。また、コンパイラーがSIMDコードを生成できるよう補助する機能も説明している。

N3362: Terminology: "indirection" versus "dereference" (revision 2)

用語を統一するために、dereference a pointerという表現を、indirection through a pointerに置き換える。この変更が適用されれば、デリファレンスという用語は規格上、ポインターを経由した間接的なアクセスを意味する用語としては正しくなくなる。もちろん、これは規格の文面をより厳格にするためである。現実では、派生と継承がごちゃまぜになっているように、規格外では何も変わらない。

N3363: A Rational Number Library for C++

TR2に有理数ライブラリの提案。この提案は、むしろ今後の議論の叩き台にするためにでっち上げたようなものだろう。有理数ライブラリは、過去に一度提案されたこともあるし、Boostにも転がっている。どちらも、内部の数値表現型をテンプレート化している。この提案では、初心者に簡単に使えることを目指し、有理数クラスは非テンプレートである。内部的にはstd::intmax_tを使うようだ。

素人考えでは、そのようなあまり汎用的ではない簡易な数値計算のライブラリは、全員の要求を満たすことができず、参考書の外は誰も使わないオモチャライブラリに成り下がると思う。

N3365: Filesystem TR2 Proposal

TR2にファイルシステムライブラリの提案。Boostのファイルシステムライブラリを土台としている。ファイルの名前の取り扱いやサイズ取得やコピー、ディレクトリの作成、シンボリックリンクやハードリンクの作成など、一般的なファイルシステムに対する操作を提供している。ファイルを読み書きするライブラリではない。

しかし、このついでに、もっと使いやすいシンプルな設計の入出力ライブラリが欲しいと思うのは私だけだろうか。私の考えでは、入出力と文字列処理は、明確に分けるべきである。iostreamのように、入出力ライブラリが文字列操作をするべきではない。また、ロケールなどという考え方も馬鹿げている。そんなライブラリは実用にならないし、そもそも現実には、文字列をなにか一つの言語や文化に縛るこということも馬鹿げている。

だれかIOライブラリの提案を書いてくれないかな。ASIOは結局、iostreamに頼っているのでダメだ。

N3366: Runtime-sized arrays with automatic storage duration

実行時にサイズを指定できる自動ストレージ上に構築される配列の提案。C99にもこの機能がある。ただし、C++では、C99ほど馬鹿げた仕様にはならない。たとえば、多次元配列はサポートされないし、関数のシグネチャにもならないし、sizeofは実行時のサイズを返したりしない。typedefも変更なし。

void f( int n )
{
    int a[n] ;
}

ライブラリによる実装は、いずれも完全ではない。たとえば、動的にサイズを変えるクラスなどというのは、コンパイラーのサポートが必要になるし、allocaは型安全ではない上、コンストラクターやデストラクターも自動で実行されない。std::vectorなどはヒープ上に構築されるので使えない。さらに、固定サイズ+動的なヒープなライブラリという案もあるが、やはりこれもヒープから確保するので使えない。

N3370: Call for Library Proposals

ライブラリの提案の公募の告知。TR2に提案したいライブラリがある人は、このペーパーを読んで、提案すべし。

N3371: Status List for Library Proposals

今までに採用されたライブラリと提案、考慮されたライブラリの一覧。

N3374: SG4: Networking

Kona meetingで、ネットワークを研究するためのグループが結成されたようだ。TR2には本当にネットワークライブラリが入るかもしれない。

N3375: Proposal for Unbounded-Precision Integer Types

無限精度整数ライブラリの提案。やはりこの手のライブラリは、標準で用意すべきだ。

N3378: A preliminary proposal for work executors

GoogleによるTR2へのスレッドプールライブラリの提案。いや、スレッドプールというとスレッドを少しラップしただけの低級なライブラリという誤解を招く。むしろ、ワークという小粒な単位の実行を実現する高級ライブラリである。

No comments: