Boost.勉強会のまとめとか感想とか今後についてとか

Boost.勉強会 - ATND


12/12(土)にグリー株式会社様のセミナー会場をお借りして
Boost.勉強会を開催しました。id:sotarokさんありがとうございました!


【発表のまとめと感想】

・Boostライブラリ 一周の旅(id:faith_and_brave, @cpp_akira)

  Boost 1.40.0に含まれるライブラリのうち、74ライブラリを紹介し、
  それに加えて「一分でわかるテンプレートメタプログラミング」というのを話しました。
  (1分以内には終わらなかったのと、もうちょっとじっくりやりたかったです。)


  今回の勉強会ではじめてBoostを知った、という方にはBoostを使い始めるきっかけと
  なっていただければ幸いです。


  反省点としては、1時間セッションの予定が気づいたら40分もオーバーしてしまっていたことですね。
  解説するライブラリが74個もあったというのはありますが、時間管理ができてなかったのが
  大きかったですね…。その後のセッションが急ぎ足になってしまってごめんなさい。



・Boost.MultiIntrusivedex(k.inaba, @kinaba)

  私が最近ハマってるライブラリであるBoost.MultiIndexと、Boost.Intrusiveを紹介していただきました。


  Boost.MultiIndexは、たとえば以下のようなニーズがあった場合に
  ・連想コンテナとしてのアクセスとシーケンスコンテナとしてのアクセスが同時にほしい
  ・複数のキーをもつ連想コンテナがほしい
  アクセス順序をコンテナのポリシーとして設定することによって
  変幻自在に対応できる夢のようなコンテナです。


  内部実装はパラメータ化継承を使った継承のチェーンによるものになっていて
  非常に効率的であること、また(アンドキュメントな)Indexを自作する方法を話していただきました。
  今後の展望としてはMultiIndexのポリシーとして「挿入がO(1)である」のような各操作における計算量を
  指定できるようにすればかなり便利なんじゃないか、といった話もでていました。


  究極的には、標準コンテナとしてstd::containerというただひとつのクラスが提供され、
  vectorやmapを、std::containerのポリシーの組み合わせの別名にする、
  みたいなことになるとおもしろいんじゃないかなーと思ってたりします。
  Boost.MultiIndexは「複数のインデックスを持つ」という単純な名前からは
  想像できないような可能性を持っているので今後が楽しみです。


  私のセッションのあとで時間が押しているにも関わらずそれを全く感じさせず、
  当初の予定通りの時間きっかりにおわらせるというすばらしい発表でした。ありがとうございます。



・俺Tokenizerを作る〜Boost.Tokenizerのカスタマイズ〜(id:tt_clown, @tt_clown)

  Policy-Based Designを学ぶために、Boost.Tokenizerの設計がどうなっているのか、
  どうやってカスタマイズするのかを紹介していただきました。


  クラスの振る舞いを外部から指定することで、カスタマイズ可能なクラスにする
  『Modern C++ Design』で広まったPolicy-Based Designという設計方法についてのセッションです。
  Policy-Based Designはいくらでも応用のきくものなので、はじめて知った方はぜひ
  クラステンプレートを設計する際の選択肢として加えていただければと思います。



・Boost.Graphの入門の入門(Egtra, @egtra)

  グラフ構造を表現するためのBoost.Graphライブラリを紹介していただきました。


  グラフ構造とは何か〜簡単な使い方までを非常に丁寧に解説していただきました。
  私もずっと学びたいと思い、なかなか手を出しにくかったライブラリであったので
  個人的にぜひBoost.Graphを語れるひとがほしい!ということでTwitterで
  それらしい発言をしていたegtraさんをつかまえて発表していただくことになりました。
  Boost.Graphは日本語資料が少ないので、egtraさんには引き続きBoost.Graphについていろいろ話してもらいたいですね。



・Introduction to The Boost.Polygon library(id:dark-yoshi, @dark_yoshi_cpp)

  先日、Boostに採択されたばかりのBoost.Polygonを紹介していただきました。


  以前、私のブログでも紹介したことはあるのですが、ドキュメントをさらっと読んで書いたものだったので
  こういった専門特化としたセッションで紹介してもらった方が百万倍いいですね。
  サンプルのコードでちょっと思ったのは、コンストラクタによる初期化で済ませられそうなところが
  コンストラクタ + set_なんとか、になっていたのは、ライブラリ設計上の事情があったのか
  単にサンプルが非効率なものになっているのかがどうなんだろ、というとこ。
  (すいません、ドキュメント読まずに書いてます)


  あと、boost::polygonネームスペースの別名としてgtlという名前にしてるのは
  このライブラリの元々の名前が「GTL(Geometry Template Library)」だったからですね。
  正式入りが決まったばかりなのでドキュメントが古いのかもしれません。



・Boost.Coroutine(id:melpon, @melponn)

  Boostには正式に含まれてはいませんが、非常に強力なライブラリであるBoost.Coroutineを紹介していただきました。
  正式入りしていないライブラリのため、使い方よりも「コルーチンとは何か」や内部実装、
  コルーチンのユースケースなどを話してもらいました。


  会場には、Boost.Coroutineの作者と議論して拡張された、Hamigaki.Coroutineライブラリの
  作者である郵便はみがきさん(id:y-hamigaki)も来られていました!
  ブログで何度も助けていただいたのでぜひお会いしていろいろお話を聞きたかった&直接お礼を言いたかったので
  今回お会いできてうれしかったです。


  コルーチンというものが、スレッドをなんでも自分で制御したものだと聞き、悶々してた部分が解消されました。
  ユースケースも、見方を変えることによっていくらでも使い道があるようなので、何か考えていきたいですね。



・Boost.Asio(id:xyuyux, @yuyu_type)

  Boostの非同期入出力(ネットワーク)ライブラリであるAsioを紹介していただきました。


  私もちょこちょこAsioを触ってはいたのですが難しくてなかなか理解できないところがあったので
  こういったチュートリアル的な内容は非常に助かります。
  それと、COMポートと通信できるとは思っていませんでした。
  これができるならあのとき・・・といろいろと悔やまれたり、これからはAsioを使える!と楽しみだったりします。



・Boost.Preprocessorでプログラミングしましょう(id:DigitalGhost, @DecimalBloat)

  はい、魔術のお時間です。(PPの内部実装的な意味で。)
  プリプロセッサメタプログラミングのライブラリであるBoost.Preprocessorを紹介していただきました。


  PPの使いどころはやっぱり可変引数だよね、と思ったのと次あたり、もしくはブログででもいいのですが
  C++0xだとどれくらいのマクロを消し去れるのかを紹介してくれるとすごくうれしいです。
  それと、C++(runtime)のコードをPPに置き換えていく思考の過程はとても勉強になりました。
  私も最近PPをはじめて、テンプレートメタプログラミングみたいにはいかないな、と思ってたので
  こういった置き換え過程を載せてもらえたのは非常にうれしいです。



・バグベアード入門(id:wraith13, @wraith13)

  Boostに含まれているライブラリではありませんが非常に強力なライブラリである
  道化師さん(id:wraith13)作のバグベアードを紹介していただきました。


  私も以前から使おうと思っていたのですがなかなか手が出なかったのでこの機会に触ってみようと思います。
  if (optional p = f())みたいなコードに対応できないのはちょっと残念ですが
  プロファイラやカバレッジとして使えるのは非常にうれしいのでぜひ試してみます。


・shared_ptr & weak_ptr(id:Cryolite, @Cryolite)

  Boost.SmartPtrライブラリに含まれる、boost::shared_ptr, boost::weak_ptrについて解説していただきました。


  shared_ptrの基本的な使い方に始まり、「所有」、「所有カウンタ」といった概念、
  shared_ptrの設計思想などを語っていただきました。
  少なくてもこのセッションにおいては私がうだうだ書くよりもUstreamに録画保存されている
  セッション動画を実際に見ていただいたほうがいいと思います。
  このセッションは永久保存すべきであり、ぜひブログでも書いていただき
  全てのプログラマに読んでもらうべき内容であり、個人的には書籍化されたら
  本屋の開店前から並んででも買って読むべき内容だと思います。



・Boost.MPL(id:uskz, @uskz)

  テンプレートメタプログラミングのライブラリであるBoost.MPLについて話していただきました。


  このセッションでは、Placeholder Expressionの内部実装、コンパイル時無限リスト、
  メタ関数の適用を山カッコではなく通常の関数適用のように丸カッコで書けるようにする
  ハックなどを紹介していただきました。


  個人的な要望としては、資料内の解説をもう少し充実させていただきたかったです。



・Boost.Python & Boost.PHP(id:moriyoshi, @moriyoshi)

  急遽、飛び入りでショートセッションをいていただくことになりました。
  Boostに正式には含まれていませんが、PHPの拡張モジュールを書ける
  moriyoshiさん作のBoost.PHPを紹介していただきました。


  私はPHPもPythonも使ったことがないのでこれらのライブラリでの開発効率のみを見ていたのですが
  拡張モジュールを書くコードはどちらもとてもコンパクトで、PHP/Python側から使用する場合は
  (おそらく)それらの言語の関数を呼び出すのと全く同じように使用できるようです。
  この機会にぜひBoostに提案していただきたいですね。

  
  それよりmoriyoshiさんのタイピング速度は神がかっていましたね!
  あんなの始めてみました!入力補完使ってないらしいですよ。
  世の中にはこんな恐ろしい人がいたんですね(褒め言葉ですよ!)


  Boost.PHPのくわしい説明はこちらをご参照ください。
  http://wiki.github.com/moriyoshi/boost.php



【今後について】

大盛況のうちに終わったBoost.勉強会ですが、第二回、第三回と続けていければと思っています。
すでにid:repeatedlyさんが関西でのBoost.勉強会を開催すべく動いてくれているようです。(参照)
関東の方もスピーカーが集まり、予定さえ合えばまた開催しようと思うのでみなさんぜひご協力お願いします。


【セッション動画について】
Boost.勉強会当日のセッション動画についてはUstreamのサイトにて録画保存されておりますので
ぜひごらんください。

http://www.ustream.tv/channel/boostjp