Boost 勉強会メモ

感想

今更ですが更新.まずは,皆様ありがとうございました.周り全部はじめましてなせいもあって,あまりしゃべれませんでしたが,次があればもう少ししゃべっていこうと思います.

自分の発表に関しては,内容どうこうよりも詰まりすぎとかそっちの方で残念な感じでした.人前で発表するのは 2, 3 年ぶりだったのですが,定期的にやってないとダメだなと実感.これを教訓に,人前しゃべられる場所を探していくようにしようと思います(w

発表に関しては,kinaba さんのプレゼンスキルに感動しました.時間的には予定の約半分だったので 2 倍速でしゃべっていたと言うことでしょうか.その割に内容はしっかりと分かると感じで,凄いなぁと感じました.

ポリシー・クラス

LT 枠では,ポリシー・クラスの実装例と言う形で,TokenizerFunc の中で自分の書いたものをさらっと紹介しました.実は,私は Boost にはあまり精通していないので何を話そうかなぁと考えていたのですが,自分が書いた中で比較的 Boost と関係のある話題がいいかなぁと思っての選択でした.

ポリシーポリシー言うのはいいのですが,クラスの中のどの「動き」に対してインターフェースを定義してカスタマイズ性を持たせておいた方がいいのか,と言うのは結構センスの問われる部分で,少なくとも私はあまりうまくその辺を定義できずにいます.CLX のようにライブラリを書いている時はそれでも多少は気にしながらクラス設計をするのですが,そうではない時(特定のアプリケーションのコードを書いてるときなど)は,「言うは易し行うは難し」みたいな状況になりやすい話かなぁとは思います.

そう言う訳で,今回もそうでしたが,既に誰かが定義したインター・フェースに沿ってポリシー・クラスを実装する,と言う形で付き合う事が多い話題かもしれません.

Boost ライブラリ一周の旅

id:faith_and_brave による Boost ライブラリの紹介.Boost ライブラリって何個のライブラリが存在しているのだろうと言うのは,自分で調べるのはめんどいけど何となく知りたい(笑)と言う疑問だったので良かったです.Boost 1.40.0 時点で 74 個 のライブラリが存在しているとの事.1.41.0 だと PropertyTree がプラスされる感じでしょうか.

shared_ptr 凄い

今回の発表の中でも取り分け評判だった id:Cryolite による shared_ptr & weak_ptr のお話.「参りました」の一言でした.

前半は,shared_ptr の設計思想に関する話がメインでしょうか.スマートポインタ考察 II などのように shared_ptr が取り上げられる際にはしばしば速度の話が出てきますが,これに対する反論などを設計思想などを交えながら語られていました.

後半は,shared_ptr と weak_ptr の連携のお話.私は,「weak_ptr は循環参照が起こるようなときに使う」と言う適当な認識しか持っていなかったので,どう言うケースで weak_ptr を使うかと言う説明は勉強になりました.とは言いつつまだあまり理解していないのですが・・・そのうち,資料を読み返そうと思います.

「このセッションは永久保存版」「書籍化はいつですか?」と大評判だったので,資料などは一度目を通して見ると良いのではと思います.

メモ

id:faith_and_brave の発表を聞きながらメモったもの.Boost ライブラリの Index 代わり.

  • accumlator ..... 統計計算のためのフレームワーク
  • any ..... 何でも入るクラス.一つの vector に複数の型のインスタンスを格納したい場合などに使う
  • array ..... 固定長配列をライブラリにしたもの
  • asio ..... 非同期通信全般ライブラリ.最初はネットワーク通信だけ(?)だったが,最近はそれ以外のものも増えてきている
  • assign ..... v.push_back(1) のようなコンテナへの代入を簡略化するためのライブラリ
  • bimap ..... std::map<T, U> と std::map<U, T> を同時に実現する map
  • bind ..... this を bind するような用途が便利
  • compressed_pair
  • concept_check ..... コンパイラのエラーメッセージの分かりにくさ軽減する
  • conversion ..... lexical_cast とか
  • date_time ..... 日付,時間を扱うためのライブラリ
  • dynamic_bitset
  • enable_if
  • exception
  • filesystem ..... 次の次の標準ライブラリに入る予定
  • flyweight
  • foreach ..... foreach(first, last, f); f に渡した関数(オブジェクト)に [first,last) の各要素が順番に渡される
  • format ..... printf() 風の機能を実現するライブラリ
  • function
  • function_traits
  • fusion
  • gil ..... JPEG などの画像のリサイズなどがいろいろできる
  • graph
  • interprocess ..... プロセス間メモリ共有
  • interval ..... double の誤差チェックなどに使う?
  • intrusive ..... 侵入コンテナ.オブジェクトのコピーではなく,オブジェクト自身を格納する
  • io_state_server ..... 変更直前のストリームのフラグ状態を記憶しておくためのライブラリ
  • iostreams ..... ストリームクラスを簡単に作るためのライブラリ
  • iterators ..... イテレータを簡単に作るためのライブラリ
  • lambda ..... 無名関数のためのライブラリ
  • math ..... 数学の特殊関数群
  • mem_fn
  • mpl ..... テンプレートメタプログラミングのライブラリ
  • multi_array ..... 多次元配列
  • multi_index .... あるシーケンスに対して,複数の順序を与えるためのライブラリ
  • numeric::converter
  • operators ..... 演算子定義の補助.< を定義したら >, <=, >= を自動的に定義してくれるなど
  • optional ..... エラー値 (0, -1, NULL, ...) を統一するためのライブラリ
  • parameter
  • pointer_container ..... 「スマートポインタのコンテナ」よりもコストが低い
  • pool ..... メモリプール
  • preprocessor ..... BOOST_PP_* と言うマクロ?がたくさん
  • property_map
  • proto ..... 遅延評価みたいなもの?→遅延評価とは違うらしい.高速化のためのライブラリ
  • python ..... C++Python のライブラリを相互利用するためのライブラリ
  • random ..... 次の標準ライブラリに入る予定
  • range ..... RangeEx が入る予定
  • ref ..... boost::bind 辺りと組み合わせて使う事が多い
  • scope_exit ..... Boost 1.38.0 辺りで入ったライブラリ
  • serialization ..... クラスに serialize と言うメソッドを用意するだけで良い
  • signal2
  • SmartPointers ..... shared_ptr とか
  • spirit ..... 構文解析ライブラリ
  • statechart ..... 状態マシン.別のライブラリ,meta_state_machine がレビュー中
  • static_assert
  • StringAlgorithms ..... 各種文字列操作関数群
  • swap ..... std::swap の強化版.クラスが swap メソッドを持っていたらそれを使う?
  • system ..... 各 OS のエラーコードをラップして汎用化
  • test ..... ユニットテストのライブラリ
  • thread ..... 次の標準ライブラリに入る予定
  • timer ..... 時間計測を行うためのライブラリ.boost::timer のインスタンスを作成した時点からの経過時間を測る
  • tokenizer ..... 文字列分割
  • tribool ..... true/false 以外にもう一つの bool 値(不定とか)を持たせる
  • tuple ..... std::pair の拡張.3 個以上の組み合わせ
  • typeof ..... C++0x の auto と decltype をエミュレーション.VC++ の最新版では動かない?
  • uBLAS ..... 線形代数のライブラリ
  • units ..... 単位 (cm, km, ....) を扱うためのライブラリ.異なる単位間での計算とか
  • unordered ..... ハッシュ表の連想コンテナ.boost::unordered_map<std::string, int> m; のような形で使う
  • utility ..... noncopyable とかいろいろ
  • variant
  • wave ..... C99, C++プリプロセッサを拡張できるライブラリ
  • xpressive ..... 正規表現