Edited at

Boost.勉強会 #17 東京に参加してきた

More than 3 years have passed since last update.

トイレ行こうとしたら会場の出口付近にいた江添さんにニコニコのステッカー貰いました。会社のノートには既にドワンゴステッカー貼っているのですがどこに貼ろう。

こういう勉強会に参加するのは初めてだったので、隅っこのほうで聞くだけでした。感想とか書こうと思います。

普段使ってないLaptopを持ちだしてみたら、いつの間にか液晶が割れててショックでした。

一応全滅はしてなかったので、講演中のメモは取れましたが……。


Boostライブラリ一周の旅 1.54.0-1.58.0

遅刻しました\(^o^)/

なので、ほとんど聞いてません。

スミマセン。


LINQ for C++のご紹介

Boostではない。

発表者は普段C#とかやっている人らしいです。

LINQは初耳。

見た感じ、色々なコンテナに対してSQLみたいなクエリ文っぽい物を実行する機能といった感じのもの。

LINQ for C++は、C#にコア言語機能として組み込まれているこれをC++でもそれっぽく実装したもののようでした。

仕方ないことだとは思うけど、operator >> を悪用したあの記法がちょっと気持ち悪い。

中身は無難に、条件式とかはラムダ式で(多分関数オブジェクトならラムダじゃなくてもいいと思うけど)与える。コンテナは多分inputiteratorが実装されていればいいのではないでしょうか。

配列型を受け取るfrom_arrayが別に実装されているみたいだけど、std::beginとstd::endを使えば良いんじゃないかな?

後でソースコード眺めておこうかな、と思います。


Siv3D で楽しむゲームとメディアアート開発

Boostではない。

Siv3Dというマルチメディアライブラリを開発している方による発表。

簡単なコードでゲームや音楽プレイヤーなどのアプリケーションが作れるすぐれものっぽいです。

豊富なデモを使って素晴らしい発表をしておられました。

画像であればピクセル単位のから画像認識のような処理、音声であれば波形編集レベルからピッチ変更まで、できることは幅広いようです。

あと、キーボード・マウス・ゲームパッドにとどまらず、Kinectや音声入力など12種類もの入力方法を実装しているようです。

Windowsでゲーム開発したい人はDXライブラリなんか使ってる場合じゃねえって感じでした。

ただし、今のところ対応プラットフォームはWin32、Win64の32ビットモードだけ、ということで、Macやスマートフォンでは使えないようです。惜しい。

ちなみに、Boostは内部で使っているそうです。


Boost.Logとfluentdで始めるログ活用術

Boost.Logをどのように使うかという話。普通にファイルに出力して、fluentdに解析を任せる感じのことを仰っていました。

ログの出力フォーマットでプレースホルダーを使うとか、LTSVフォーマットにするのが良いとか。

LTSVにする時は、出力する値にTabが入ってきたのをちゃんとエスケープしないと解析に失敗しそうですね。


Boost.odeintで遊ぼう

発表者の方はCADとかやっているらしい。趣味は幾何学って言ってました。数学とかすごく得意そうです。私はもう微分なんか忘れました。

さて、Boost.ODEIntがどういうものかと言うと、常微分方程式の初期値問題の解法を近似するライブラリだそうです。むずかしいことはわかんないです><

とりあえず自然対数の低eのt乗する方程式x(0)=1, x'(t)=x(t)に関して、Euler法で近似を求めてグラフ表示するサンプルを見ました。tを0.1刻みで計算すると、誤差がかなり大きい。刻みを細かくすると誤差は減るが、その分計算量が増大する。

そういうわけで、Boost.ODEIntではRunge-Kutta法というEuler法と比べるとかなり誤差が小さいアルゴリズムがデフォルトになっているらしいです。こちらで計算すると、確かにかなり誤差が小さい。

その後、いくつか他の例を表示しておられました。

発表者の方は機械設計に関わっているようなので、確かにこういった計算は便利だろうなと思います。

ただ、通常のゲームでの物理演算などであれば、計算済みの方程式を与えたほうが良さそうので、使いどころは少ないかも……


MessagePackとAPIバージョニング

Boostではない。

MessagePackのC/C++実装、msgpack-cの中の人の発表。

msgpack-cと言っても、C++の実装はCのラッパではなくちゃんとC++で書かれているそうです。

msgpack-cそのものは、ヘッダオンリーのライブラリなのですが、既存のmsgpack-cを利用したビルド済みライブラリと同時使用するとABI互換性が崩れた場合に衝突する。そこをAPIのバージョニングにinline namespaceを使うことで解決しようというお話と、そうした場合にADLに問題が起こったという話でした。

ただ、ADLの問題に関しては、usingを使えば解決できるのでは? と思っていましたが、同じことを質問した方がいらっしゃいました。

msgpack-cに関して、破壊的変更をしたバージョンアップをしたばかりのようですが、また元に戻るかもしれません。

MessagePackは個人的にいずれ使いたいと思っているので、これからの動向に注目しておきたいと思います。


Boost.Container特有の機能

これは主催者さんのもの。

Boost.ContainerはいわゆるSTLコンテナのBoost実装で、次期標準に入る機能を先取り実装していたり、現在の標準ライブラリで設計ミスといえる部分(std::vectorなど)を排除していたり、独自のコンテナを含んでいたりするそうです。

あと、デフォルトコンストラクタで例外を投げないことが保証されているそうで、こちらに統一できるなら使う意義は色々とありそうです。

また、vectorのresize時にdlmallocのreallocを使って、メモリ領域が伸張出来る場合にメモリ移動を抑制してくれるとか。


C++11やEmscriptenと付き合って1年間の振り返り

Emscriptenを使ってオンラインゲームを作っている方二人の発表。

C++11になって書きやすくなったよ! という話と、Emscriptenの効果や問題点などを語ってくれました。

Emscriptenには興味はあるのですが、なんかこう、多分Webブラウザ関係の技術はそっちには行かない気がします。どちらかと言うと、TypescriptとかDartのアプローチが近いかなーと。

静的なコンパイルでC++並の最適化ができるモダンなWebスクリプト言語とか出てこないもんですかね(無茶ぶり)。


感想

技術というものは本当に日進月歩ですね。

個人的に一番面白かったのはSiv3Dの発表でした。

ただ、対応プラットフォームがWin32だけというのが本当に惜しい。これでAndroidとかiPhoneに対応できたらスゲーと思うんですが。

今後に期待したいと思います(上から目線)