C++1y ネットワーク関係のミーティング議事録

N3491 Minutes: SG4 Networking, October 2012


ポートランド会議での、ネットワーク関係のミーティング議事録。
C++11までは、コア言語、ライブラリ、進化という大きく3つのワーキンググループに分かれて策定作業が行われていました。
C++1yでは、TR2という大きな枠組の中でライブラリを議論するのではなく、並行関連やネットワーク関連に深い知識のあるメンバを集めた専門家グループを立てて、議論が進められています。

※SGはStudy Groupの略


今回公開されたのはネットワーク関係の議事録です。


まずAsioについて。C++1yではネットワークの基礎ライブラリとして、Boost.Asioの導入が提案されています。提案者はもちろん作者のChristopher Kohlhoffさん。以下のGitHubリポジトリで、C++11ベースの実装が行われています:
http://github.com/chriskohlhoff/asio/tree/cpp11-only


Asioの議論では、「オブジェクトの寿命に関する明示的なサポートがない」という指摘が行われたようです。これはたしかにそうだと思います。「送受信バッファをメンバ変数に持たないためのイディオム」のようなものはとくにそうですが、io_serviceクラスが内部でコンテナを持っているという実装に依存したイディオムになっています。これはドキュメントに関する指摘なので、明記すればいいだけだとは思います。


次にUrdl。これは、Asio作者のChrisさんが作ったAsioを抽象化したラッパーライブラリです。
たとえば、ファイルをダウンロードしながら、ダウンロード済みのものを順に処理していくストリームクラスといったものがあります。

// URLを開き、接続を確立してHTTPリクエストを送る
urdl::istream is("http://www.boost.org/LICENSE_1_0.txt");

// ダウンロードしたコンテンツを1行ずつ出力
std::string line;
while (std::getline(is, line)) {
  std::cout << line << std::endl;
}

これに関しては、エラーハンドリングの方法、タイムアウトの制御やプロキシといったものの不足が指摘されています。


残りのURIライブラリとインターネットプロトコルクラスはよく見ていません。