読者です 読者をやめる 読者になる 読者になる

Boost.勉強会 #8 に参加しました

C++ Boost

2/11に大阪で行われた Boost.勉強会 #8 に参加してきました.
Boost.勉強会 #8 大阪 - boostjp

前々からBoost.勉強会には興味があってぜひ参加したいと思っていたので,今回の勉強会は即参加を決めました.

メンバ変数のメンバ関数内でのリソース管理 ( @cpp_akira さん )

メンバ関数内でメンバ変数のメモリ管理がしたい場合のお話.メンバ変数の寿命は所属しているインスタンスが尽きるまでなので,メンバ関数内でリソースの処理を完結させたい場合,スマートポインタではできません.
そこでBoost.ScopeExitを使います.Boost.ScopeExitを使うと,それを定義したスコープを抜けるときの処理を記述できます.
現在のBoostではBOOST_SCOPE_EXITのブロックの後にBOOST_SCOPE_EXIT_ENDを付けなければいけませんが,C++11によるラムダ式の実装でいずれ不要になるようです.
try文と何が違うのか的な質問が出ていて,僕は「ブロック全体をtryで囲ってその後finallyを付けるのと何が違うのか」的な質問かなーと思って聞いていたのですが,仮にC++にfinally文があったとしても,ネストが深くならないScopeExitのほうが自分好みですね.

カンマ演算子 ( @wraith13 さん )

カンマ演算子は普段for文ぐらいでしか使ったことがなかったので全然意識していませんでした.
基本的にはかなり可読性が落ちそうであまり使い所が無いと思っていたのですが,カンマ演算子と一時変数を用いてリソースを管理していたのは面白い方法だと思いました.
スライド内で出ていたのは,コンストラクタでロックしデストラクタでロックをはずすクラスauto_lockがあったとして,

auto_lock(), do_something;

とする方法です.生成されたauto_lockのインスタンスは文が実行し終わった時に寿命を迎え,デストラクタが走ります.

C++テスト駆動開発 ( @akineko さん )

C++でのテストライブラリはcppunit単体テストぐらいしかしたことが無かったので,他のライブラリとかC++でのテスト手法とか色々聞けて良かったです.スライドも興味のある人はより深く調べられるように紹介しない部分についてもキーワードやライブラリ名が載せられていて良いなぁと思いました.
テスト駆動な開発は面白そうですが,最初に「このテストを通せば大丈夫!」というテストを書くのが難しい気がしていて,自分が書いたテストの正しさを知る手段がまだよく分からない状態です.質問すれば良かったんですが…
とりあえず,秋猫さんのところで採用したという Google Testing Framework は一度触ってみたいと思います.

カスタムメモリマネージャと高速なメモリアロケータについて ( @aizen76 さん )

僕はメモリ管理はなるべく避けてきたので,基本的には標準のnewしか触ったことがありません.
これからもできればあまり触らずに行きたいなぁと思っているんですが,ゲーム開発などではやはりメモリ周りを管理しなければいけないことがあるようです.メモリ管理を100%自分で書くというのはさすがに辛いですが,Boost.Poolとかは少し触ってみようかなと思いました.
発表については,実際の実装をエディタで見ていくタイプの発表方法が良かったです.去年参加したyokohama.vim #2では実際にVim捌きを見せる発表があって舌を巻いた記憶がありますが,それに近いものがありました.
余談ですがFireFoxのjemallocなんかはかなり賢いメモリ割り当てを行なっているらしいので,暇があればjemalloc.cあたりを読んでみたいところですね.

Boost.Testの紹介 ( @hotwatermorning さん )

100ページを超える資料で,Boost.Testを知る上でとても参考になリます.発表内容が分かりやすくて,ページ数が多くて飛ぶように進むにも関わらず分かりやすかったです.
感想としては,Boostの一部なので,他のライブラリを入れる必要がない分手を伸ばしやすいのですが,やはりGoogle Testing Framework のほうが使い勝手が良さそうに感じました.
あと,質問で出ていたモックテストについては少し調べてみました.こちらに書こうかとも思いましたが,少し長くなったので分離して別の記事にしました.
Boost.Test でモックテストしてみた - sorry, unimplemented:

5 Libraries I haven't yet talked about ( @lapis_tw さん )

Boost.Flyweightを見ていて,どうしてBoostにはシングルトンパターンを実装するものが無いんだろうと思ったのですが,どうやらシングルトンには色々欠点があるようです.
特にマルチスレッド安全性とかは面倒そうですね…

プリプロセッサこわい ( @decimalbloat さん )

Preprocessorについて基本的なところから丁寧に解説されていて良かったです.
プリプロセッサは型が無くて辛いのであまり書きたいとは思わないのですが,もう少し読めるようになっておきたかったので参考にしたいと思います.
プリプロセッサこわい.

中3女子が狂える本当に気持ちのいいconstexpr ( @bolero_MURAKAMI さん )

constexprとTemplate Meta Programmingをどううまく連携するかの部分が一番興味深かったです.
要はクラステンプレートにどうやってconstexprな値を渡すかということですが,クラスを間に噛ますのが妥当かなぁと思っていたのですが,どうやらindex_tupleというイディオムがなかなか良い感じに使えるようです.
ここはもう少し掘り下げて調べてみたいと思います.
あと,メタプログラミング全般についても,関数テンプレートの引数にして推論させるなどのテクニックをあまり知らないのでその辺りも見てみたいと思いました.

SEH on Mingw32 ( @kikairoya さん )

SEH(構造化例外)というのがそもそも初耳だったのですが,どうやらWindowsで採用されている例外機構のようなもののようです.
内容はほとんどついていけなかったのですが,会場にネット環境があったので手元にソースを用意してもらうこと前提の発表というのも良いなぁと感じました.

まとめ

僕は,勉強会は知識以外にモチベーションも手に入れられる場だと思っていて,今回もとても良いモチベーション源になりました.
特に”ああ,あの人が中3女子の人か”とか,”あの人が色々なプロジェクトで精力的に活動しているあの人か”とか”あの人が闇の軍団の中でも特に怖いあの人か”とか分かったのが面白かったです.

僕は前の方に座っていたので気づかなかったのですが,結構部屋の前の方と後ろの方で盛り上がりの温度差があったようです.
まあ,元々人数が多いので,どうしてもそうなりがちなのは仕方ない面もありますし,多少の身内ネタもあったほうが楽しいと思います.(ネタを知っているかどうかで内容の理解に影響が出てくるようになると問題ですが)

今回は勉強会のあとに用事があったので懇親会には出られませんでしたが,次の機会には是非参加して色々な人ともっと話してみたいと思いました.
あと,お昼をご一緒してくれた某ゲーム会社の方々もありがとうございました.

主催者の @akineko さんや運営をサポートしていただいた方々,お疲れ様でした.ありがとうございました.