Boost.勉強会(at グリー)

  • C++童貞から脱出すべく参加してきました
  • 一言でまとめると、とてもおもしろかった
  • 主催のid:faith_and_braveさんおよび会場を貸してくださったグリーの方々ありがとうございました
  • 当日の朝、早起きしてkinabaさんの本(サイン入り)でにわか予習
    • bind、function、lambdaあたり
  • おかげでなんとかついて行けた

Boost C++ Librariesプログラミング第2版

Boost C++ Librariesプログラミング第2版

  • FLTVのスピーカーがやたら来てた印象
  • FLTVで発表した12人のうち、本編に参加していたのは6人
  • 懇親会も含めると、見かけなかったのは3人だけ
  • つまりC++抜きの未来はありえない、と。そんな気はする
  • C++0xの機能を普通に使ってる人が結構いた
  • autoとかlambda(BoostじゃなくてC++0xの方)とか
  • Boost使いの間ではC++0xはすでに標準らしい

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

  • 初心者としては、全体がわかるこういうプレゼンはとてもありがたい
  • 時間が40分オーバーw

Boost.MultiIntrusivedex(@kinaba)

  • 内容はさすがのkinabaさんクオリティ
  • 前の発表が長引いて時間が20分に短くなったのに、その時間に合わせて発表できるのもすごい
  • 白石さんの最近の連載(これとかこれとか)を思い出した
  • Boost.MultiIndexでは複数のソート/アクセス順をコンテナに持たせられる
  • 一つのノードの中に複数のデータ構造の情報を保持することで実現
  • Boost.Intrusiveは使えるsetがマニアック。splay-setとかtreap-setとか
  • MultiIndexでIntrusiveのsetを使えるようにしたのがMultiIntrusivedex
  • ソース置き場は http://github.com/kinaba/mint

LT

昼ごはん食べてて10分くらい遅刻

Boost.Tokenizerのカスタマイズ(id:tt_clown @tt_clown)
Boost.Graphの入門の入門(@egtra)
Boost.Polygon(id:dark-yoshi @dark_yoshi_cpp)
  • Boost.Polygonは11月にアクセプトされたばかりで1.41.0(最新版)でもまだ入ってない

Boost.Coroutine(id:melpon @melponn)

  • 関数の実行を途中で凍結
  • 自分には継続にしか見えなかったんだけど、人によってマイクロスレッドと言ったりfiberと言ったりするらしい
  • いわばコンテキストの切り替えをユーザーが行うスレッド
  • 同期が取りやすい
  • Boost Vaultから持ってくる
  • 組み込み環境で特に有効
  • コンテキストの作り方
    1. 必要な情報を保存
    2. スタックポインタを書き換え
    3. 必要な情報を読み込み
    4. プログラムカウンタを書き換え
  • 別にBoost.Fiberというのも出てきたらしい

Boost.Asio(id:xyuyux @yuyu_type)

  • 非同期I/O
  • みんな「エーエスアイオー」ではなく「アジオ」と発音してた
  • 1.35で入った。さらに1.36ではファイルとかも扱えるように
  • Cで書くと長くて見づらくなるプログラムをすっきり書ける
  • tcp::iostreamはstd::iostreamと同じように使える
  • deadline_timerの同期版と非同期版
  • SSLとかシリアルポート接続とか
  • Asioの作者はマクロでcoroutine作ってる

Boost.Preprocessorでプログラミング(id:DigitalGhost @DecimalBloat)

  • プリプロセサでコンパイルなしでプログラムを実行
  • こういうバカっぽいのっていいなあ
  • 発想としてはこないだ自分が発表したピュアlambda階乗計算によく似てる
  • BOOST_PP_AUTO_RECに注意。詳しくはブログ見てねとのこと

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

  • 唯一、Boostに直接関係ない話
  • すごく侵襲的にゴージャスなprintfデバッグをする話
  • 機能は動作ログとプロファイリング(+不十分なカバレッジ測定機能)
  • 黒魔術っぽくて楽しげなんだけど、少なくとも仕事じゃ使えないよなあ

shared_ptr&weak_ptr(id:Cryolite @Cryolite)

  • プレゼンのクオリティが高かったし、内容もおもしろかった
  • 最初、普通の参照カウンタの話をして「え、これだけ?」と思わせておいて本論に入るという。うまいなあ
  • 「『所有』を制するものがC++を制する」
  • ポインタが指している先が生きているかどうかはC++は感知しない
  • 重要なのは「ポインタと同等の型互換性/バイナリ互換性」と「非侵入性」
  • 所有を開始するときに開放の処理を設定することで、バイナリ境界を超えられる
  • voidのシェアドポインタを使うことで開放を遅らせることができる
    1. thisへのweak_ptr
    2. オブザーバ↓。Boost.Signal2は実際にこんな感じで実装されてるとのこと
if (shared_ptr<void>p = wp.lock()){
  call_back();
} else サブスクライバーリストから削除する処理
  • キーが死んだかどうかを確かめるための2種類の実装
    1. マップをウィークポインタでクリーンアップ
    2. マップエントリも所有して、まとめて消すカスタムデリータを前もって設定
  • 循環所有をどうにかできるか?という話

Boost.MPL(id:uskz @uskz)

  • すごい人っぽいんだけど、とりあえず発表内容はぐだぐだ(笑)
  • テンプレートでコンパイル時にいろいろ生成
    • 遅延リストとか
    • < >を( )と書きたい、とか
    • 単位行列とか
  • こういう話はLisper(特にCLer)にはあまり新鮮味がない気が

Boost.PHPid:moriyoshi @moriyoshi)

  • PHP本体のコミッタをしている方
  • キー入力のあまりの速さに笑ってしまった
  • Boost.PythonPHP
  • PHPのモジュールを日常的に作ってる人にとっては画期的らしい

懇親会

  • 会場の雰囲気にみんなビビる
  • 飲み放題でウイスキーと焼酎のボトルが置いてあったのもビビった
  • でも、封が空いていたので詰め替えだと判明して安心
  • で、飲みすぎた
  • その後、つくばクラスタっぽい人たちと秋葉のファミレス
  • カレーを食べたのは覚えてるが、秋葉のどこのファミレスなのかをまるで覚えてない。ダメ大人

【ToDo】spiritで遊んでみる