Boost.勉強会に参加してきました!
12/12に開催されたBoost.勉強会に参加してきました。
当日は会場も広く、非常にいい環境だったと思います。
ネット接続については、wifiに繋ぐのに乗り遅れて、外向けのセッションを張れなくなってしまったので(ルータの上限数?)
N82でテザリングしてつぶやいたりしてました。
後半つぶやきが減ってるのは、ソフトバンクにセッションを切断されまくってたからですw
では、当日のつぶやきと感想をそれぞれのセッションについて書いておきます。
10:10〜11:00:Boostライブラリ一周の旅(faith_and_brave)
つぶやき
lexical_castってConversionライブラリの一部だったのか。というかlexical_cast以外の型変換系があったことを知らなかった #boostjp
Formatは便利。Qt使ってるとQString.arg()でにたことできるからあんまり最近使わないけど #boostjp
Function Typesは試しに実装してみると楽しそう #boostjp
FusionってLoki::Typelist+実行時にうにゅうにゅみたいなやつだったんだ。使った事ないな #boostjp
Intervalなんてあるんだ。今作ってる計測系のソフトで使えそう #boostjp
後ろに座りすぎてスライド見えないなー。移動しようかな #boostjp
お!Operatorsなんてあるのか! C#だとやってくれるのにめんどくせー って思ってたけどこれで解決じゃん #boostjp
Parameterはverilogの明示的なモジュール接続みたいな感じ。便利そう #boostjp
Protoなんてあったんだ・・・。偽ETみたいなの自作してたよ・・・ #boostjp
BLASとかもProto使ってるのかな。登場時期からすると使ってないか #boostjp
Range気になってるけど使った事ないなー #boostjp
あーrefってそういう意味合いだったんだ。boost::thread使うときに適当に使ってた記憶が・・・ #boostjp
Signal2だ!Qt5はこういう感じでmocとuicをなくしてほしい #boostjp
Boost::threadってまだスレッド優先度の設定できないんだっけ? #boostjp
お、uBLASきた! 微妙に使うのめんどいけどはやい(らしい) #boostjp
shared_from_thisとかもutilとかに入ってるのかな。 #boostjp
感想
正直boostはライブラリ数多すぎで、「きっと自分が知らない便利な物があるんだろうなー」っていうもやもやがずっとあったので、
一周の旅で全ライブラリを紹介してもらえてすごくありがたかったです。
1ライブラリに割く時間が短かったのですが、非常に用途用例がわかりやすいものが多くて
今の何? ってこともありませんでした。
とりあえずセッション中につぶやきながら取ったすごくラフな自分用メモを晒しておきます(普段使わないライブラリについて主にメモ)
・Circler Buffer 古いもの捨てられていくバッファ ・Concept Check エラーメッセージがわかりやすく ・Convarsion lexical_castとその仲間たち ・CRC まあCRC ・enable_if type_traits使ったオーバーロード ・Flyweight Flyweightデザインパターンの実装(リソースの共有) ・foreach マクロで実現されたforeach ・Function Types 関数の型を取得するメタ関数 ・Fusion Loki::typelist+実行時 ・Interprocess プロセス間共有メモリ ・Interval 区間計算 ・Intrusive 侵入型のコンテナ ・IO State Server iostreamの状態管理(出力のhexとかをスコープ抜けた時に戻す) ・Iostreams お手軽stream作成 ・Iterators お手軽Iterator作成 ・Math 数学の特殊関数形が定義されてるよ(クオータニオンとか ・Member Function std::mem_funとstd::mem_fun_refを一般化したもの ・Multi Array 多次元配列 ・Multi Index indexed_by<>で取り出し方法を指定できるindex ・Numeric Conversion 数値型同士の変換(桁の処理方法とか指定できるっぽい) ・Operators 関連する演算子の自動生成(C#みたいな感じ) ・Optional 無効値の統一的な表現 ・Parameter verilogの明示的モジュール接続みたいな ・Pointer Container ヒープオブジェクトのポインタ用コンテナ(スマートポインタより早い) ・Pool メモリープール ・Preprocessor 暗黒面 ・Property Map iterator_traitsの拡張みたいなもの(要調査) ・Proto ETできるよ! ・Python ぱいそん! ・Random 次期標準疑似乱数生成ライブラリ ・Range れんじ! ・Ref 明示的に参照にする(型が値として推論されないように) ・Scope Exit スコープ出た時の実行コード(キャプチャできるよ!) ・Serialization シリアライズ・デシリアライズ ・Signal2 しぐなる! ・Smart Pointers scoped_pointerとか ・Spirit パースできる ・StateChart 状態マシン ・Static Assert 0xのstatic_assert()を実現したマクロ ・String Algo 文字列周りのアルゴリズム(大文字に変換とか右の空白を除去とか) ・Swap 組み込み配列もswapできる(vectorの場合は専用アルゴリズムを使用) ・System 各OSのエラーコードをラップして汎用化 ・Test ゆにっとてすとー ・Timer 簡単な時間計測(スコープベースとか) ・Tribool 3値bool ・Tuple std::pairの3つ以上版 ・Typeof 0xのautoとdecltypeをエミュレーション ・Units 単位計算(mとかcmとか) ・Unordered ハッシュ表の連想コンテナ(要調 ・Wave C++のプリプロセッサを拡張できる(要調査) ・Xpressive 正規表現(コンパイル時にもできるらしい?)
11:10〜12:00:Boost.MultiIntrusivedex(k.inaba)
つぶやき
あのindexの継承関係の作成って渡されたindexのタイプリストをどんどん展開していく感じで実装されてるのかな。読んでみたい #boostjp
感想
multiIndexについては、以前使ったことがあったのですが、Intrusiveに関してはほとんど無知だったのでだいぶ勉強になりました。
特に、"ドキュメントに載っていない独自研究”についての情報が得られたのはすごく有益だったんじゃないかと思います。
13:00〜13:30:LT:egtra, tt_clown, dark-yoshi ひとり10分くらい
つぶやき
boost:.graphはすさまじく長いtypedefを書かないといけないってイメージしかないなー #boostjp
テンプレート引数の多さに挫折しかけるってあるあるw > Boost.Graph #boostjp
ぽりごんきたー! #boostjp
Boost.Polygonが結構普通のライブラリでほっとした。もしかしたらポリゴンをタイプリストであらわしてコンパイル時にブーリアン演算やっちゃうとか恐ろしいものなのかとか想像してた #boostjp
感想
tokenizerがポリシーベースにデザインされてることを知らなかったので、今回実際にポリシーの入れ替えを行って
自作scanfを作るデモは非常に参考になりました。ちょっと自分でも改造してみようかなとか
polygonは、boostにしては意外と普通のライブラリーだな(笑)とか思ってました。
この辺はCGAL等競合ライブラリも多いので今後どうなるんだろう(外部ライブラリ依存性が少ない点ではboost.polygonもいいかも?)
graphに関しては、時間の都合上非常に入門的な内容だったので、次回egtraさんがフルセッションで
深いところを突っ込んでくれるのを期待してますw
13:30〜14:00:Boost.Coroutine(melpon)
つぶやき
coroutineは用途が割と具体的で面白かった。ちょっと使ってみよう #boostjp
感想
coroutine便利そうですねこれ!
正式に採用されてないのが気になりますが、例としてあげていた弾の移動とかがすごくわかりやすい実用例でいいなーと思いました。
あとARMでのアセンブラによる実装まで踏み込む辺りがさすが・・・!というかそんな感じでした。
14:10〜14:40:Boost.Asio(xyuyux)
つぶやき
え、ASIOってCOMポート扱えるの・・・! #boostjp
タイマーきた。Asioってネットワーク触らずにタイマーベースな非同期処理としてだけ使っても結構便利 #boostjp
そうか普通にSIPとかもASIOでなんとかなっちゃうのか #boostjp
シリアルポートはすごくうれしいというか家に帰ったらすぐ使ってみよう。QtのextSerial使う予定だったけどBoostでマルチプラットフォーム対応できるならこれでいいな。 #boostjp
14:50〜15:20:Boost.Preprocessorでプログラミングしましょう(DigitalGhost)
つぶやき
とりあえずBoost..PPとBoost.waveはやばいとおもう。うん #boostjp
感想
世界一短いHello World(笑)はおいといて、Boost.PPやべえ・・・ みたいなセッションでした。
個人的にマクロを避けてたので、細かい部分についてはよくわからないところも多かったのですが、
繰り返し記述用に使ってみるのもありかなーと思います。
15:30〜16:00:バグベアード入門(wraith13)
つぶやき
なし(手元でスライド見てたので)
16:10〜17:00:Boost.SmartPtr:shared_ptr + weak_ptr(Cryolite)
つぶやき
ここ最近なんでもかんでもポリシーにすればいいんじゃない的考え方になりかけていたのですこしドキッとした #boostjp
あーそうか。たしかにバイナリ互換性は重要だな。ポリシーベースだとああはならないからな #boostjp
shared_ptrにこんな使い方あったのか・・・ > voidのっけて開放遅延 #boostjp
概念や理念をはっきりさせるのは大切だなー。shared_ptr,weak_ptrの使い方ぐらいなら誰でも大体知ってるんだけどそういうことだけじゃどうにもならないレベルがあるというか #boostjp
感想
なんていうか一番感動したセッションでした。
shared_ptrの使い方とか、weak_ptrがobserverに便利とかは結構みんな知っていることだと思うのですが、
個人的には具体例に入る前の、"そもそもsmartptrってなんなの?"っていう定義づけの部分が素晴らしいなと。
ライブラリの使い方ではなく、設計思想をきちんと解説してくれる物は数少ないと思うので、必見だと思います!
17:10〜18:00:Boost.MPL(uskz)
つぶやき
なし(コード追うのに必死でした・・・)
感想
ペースが速すぎてよくわかりませんでした(笑)
ということで今uskzさんのblogからソース持ってきて解読中です。
最近多少TMP的なコードを自分でも書いてるので、多少戦えるかと思ったのですが
C++の壁は厚いなーととても実感。
懇親会
1次の懇親会はどうみてもキャバクラおしゃれなバー、二次会は国際色豊かなバーでした。
食べ物少なすぎでしたが、いろいろな方とお話しできたので良かったです。
当日はどうせ配らないだろうと思って名刺を10枚しか持っていかなかったので、
twitterで見かけたことのある方に挨拶するのがやっとで、他の方にあまり渡したり出来なかったので残念です。
帰りはTXが無くなったので、ミッドナイトつくば号でバス酔いしながら帰る感じでした。
まとめ
LLの勉強会って本当にたくさんあると思うんですが、C++の勉強会となると驚くほど少なくて、
今回こういう形で集まることが出来てすごく良かったです。
参加してる方のレベルもすごく高くていろいろ勉強になりました。
ATNDの枠の埋まる早さなどを見るに需要はあるみたいなので、今後もどんどん継続してやっていってほしいなーと思います!(次回は大阪らしいです)