Boost.勉強会 にいってきたよ!

今日は Faith and Brave 氏 http://d.hatena.ne.jp/faith_and_brave/ の主催する Boost.勉強会 ってイベント(?)に行ってきました:
http://atnd.org/events/1839
正直キャンセル待ちが多くて諦めてたのですが、昨日ついったーで「飛び入りもOK」らしいと聞き、急遽参戦。最悪は立ち見だな、とか思ってましたが、会場は意外と余裕があって安心。
10時から18時過ぎまでという長丁場の勉強会でしたが、むちゃくちゃ密度の高い時間だったせいもあって、体感的には本当に一瞬でした。
そこで今日の随筆は、その Boost.勉強会 について、適当にまとめてみようと思います。
その多くは、ついったー #boostjp で呟いたことですが、どうせすぐログも流れちゃうですしね。



まず細かい流れですが、こちら
http://d.hatena.ne.jp/hiratara/20091212/1260577791
を参照すれば分かるので省略。
基本的にこの場では、僕の感じたことを書いていこうかと。
なお、その「感じたこと」がやたら偉そうなのは、プログラマの三大美徳ゆえ仕方ないのでスルーで。

Boostライブラリ一周の旅

  • テンプレートメタプログラミングの説明に二分弱。まぁ一分は無理があった。実際問題として妥当か
  • 各ライブラリ解説。俺俺ライブラリ作っていると、やはり多くのライブラリに触るので、馴染みあるのが多くてホッとする
  • BOOST_FOREACH は現在、積極的に使ってないけど、もっと使っていいかと思った
  • Format 萌え。 はやく銀天研のプログラミング小ネタ ページで解説しなきゃっ
  • boost::optional<T> オブジェクトは boost::none_t 型(の変数 boost::none )から暗黙変換で生成できることを初めて知った。デフォルトコンストラクタ呼ぶより分かりやすいし、以降はそっちを使おう
  • Parameter, Scope Exit はとてもじゃないが美しくなくて使えないと思った。実際にはRAII用補助クラスをわざわざ作るほうが美しくない気もするが
  • Pointer Container なんてのもあるのね。本当、なんでもあるもんだ
  • Proto は、いい加減 僕も使い方を覚えるべきかもしれぬ
  • Signals2 は萌えすぎて困る
  • scoped_ptr のことも少しでいいから思い出してあげてください・・・。便利なのにっ
  • Tokenizer は使えそう・・・だが Spirit でも足りるっちゃ足りるんだよな。使い方覚えて損はないか
  • Xpressive も萌え、説明を省略された静的正規表現が素敵過ぎて涙が出てくる(いい意味で

Boost.MultiIntrusivedex

  • マルチインデックス。 メイドロボ+禁書目録、この二つが合わさると無敵だ、という話
  • 単純に「挿入順が記録された set/map 」というだけでも十分使えるが、さらに複数のキーを使えたり、単純に set/map の代替としても普通に有用だったりで、隙がない
  • intrusive はすごい、用途によって使う木構造を切り替えられるとか
  • さらにここで両者をフュージョン。メイドシスターっぽいのにスネークが潜入すると 萌えと燃えが両方そなわり最強に見える  Boost 以外が実装すると逆にソースがおかしくなって死ぬ
  • といっても Boost にはまだ MultiIndex と Intrusive の両者を統合したコンテナはない。ので MultiIndex のソースをみて解析。・・・へー。こんな風になってたのか
  • というか独自研究で分かるというのが凄い。さすがに Let's Boost の人は格が違った

LT

  • Spirit でいいや、と思っていた Tokenizer が便利そうに見えてくる不思議
  • Polygon すげー。これがあったらゲームライブラリ作るの超楽じゃね?
  • Coroutine 萌え。かなりダークなことやってるけど気にしない、実際動くしね!

Boost.Preprocessor

  • Boost を代表する変態ライブラリの片割れ。変態のくせに実用性抜群な憎いヤツ
  • いろいろパフォーマンスを見せていただいたが、プレゼンテータDigitalGhost氏曰く「あったからやってみた」らしい。ですよねー

バグベアード入門

  • Boost とは関係ないが便利そうなデバッグ用ライブラリ
  • いわゆる「おまじない」的なコードを「悪魔との契約」と表現するのにセンスを感じる
  • ・・・と思ったら、本当に悪魔と契約していた。やばい。こいつは僕は自重しておこう

Boost.SmartPtr

  • 本編。設計思想という点からの、よく練られたレクチャーに圧巻。C++使いは絶対見るべきレベル
  • 銀天ライブラリ製作で shared_ptr の魅力は知り尽くしてるはずの僕にも、かなり学ぶべきことは多かった
  • その万能性はよく知っていたつもりだったが、バイナリ境界も超えられるとは知らなんだ。すごすぎるぜ
  • shared_ptr<void> を使った解放遅延。僕にも RAII クラスを shared_ptr に入れる発想はあったが、そうか、型を void にすることで汎用性をさらに上げられるのか
  • 他にも「カスタムデリータでマップエントリを削除する」「複数のオブジェクトをまとめて管理することで循環参照を回避する」とか、目から鱗な話ばかり
  • 「これで本書きましょう」「えっ」 ・・・どう考えても書くべきです。というか書いて欲しいです
  • ついったーでの反応:「このログ上司に見せたら『宗教じみててきもい』と言われるかも」。それほど素晴らしいレクチャーでした

Boost.MPL

  • Boost を代表する変態ライブラリのもう片方。やはり変態のくせに実用性抜群な憎いヤツ
  • が、今回のレクチャーは流石に高度すぎやしませぬか? もっと気軽に使えるライブラリなのにっ
  • コンパイル時無限リストの生成とか () 演算によるメタ関数適応とか
  • 挙句の果てには preprocessor による「トークン生成」と組み合わせてみたり。へ、変態だー!(無論いい意味で

Boost.PHP

  • 実際にはBoostじゃないよ、Boost.Python 風の PHP インターフェイスってだけだよ
  • つまり gintenlib::lua を早く作れってことですね分かります(ぇ

総括

やはりBoostは頼りにされていたブースとベんキョウかイでの戦いで おれは申し込みに遅れてしまったんだがちょうど(席が)あきはじめたみたいでなんとか滑りこめたみたいだった 以下略。
真面目に言いますと、やはり、ほぼ丸一日の勉強会で「これじゃ全然、勉強し足りないよな」と思わせるだけのライブラリである Boost は凄いな、と。
一番凄い点は、ちょっとした小道具から、最早なくてはならない圧倒的に便利なもの、マニアックな変態ライブラリまで、 Boost の中身は本当に多種多様で、しかし、その多様さが全く Boost の魅力を損ねていない所ですね。並大抵のライブラリじゃこうはいかない。


というわけで銀天研究所は、これからも Boost を研究していこうと思います。
最後に、Boost.勉強会に関わった全ての人に、無上の感謝を。本当にありがとうございました、勉強になったよ!