Boost.勉強会 #19 東京 に参加してきました
C++で開発する割に、C++系の人と滅多に会わないので初めて参加してきました。
厳つい老齢の開発者にコテンパンにのされるのかとビクビクしていましたが、July Tech Festaより若い人が多い印象です。 内容は低レイヤーや規格、Boostの実装についての物が多いです。
Boostライブラリ一周の旅 1.59.0-1.60.0 / Boost.Configについて
- BoostライブラリのコミッタやC++の規格策定に関与している方が何人か参加している(っぽい)。
- C++でも一時期のWebブラウザ程ではないが、コンパイラ間の差異に悩まされる。Boostのような幅広いライブラリの開発においてはクリティカルな問題。
EMC++とCppCoreGuidelinesについて
- Effective Modern C++とC++ Core Guidelinesについては、とにかく一度読んだ方が良い。ただし、ガイドラインに沿うことが目的ではない。ガイドラインに沿わない場合に、「なぜこう書く必要があるのか」を考えることが重要。
- 静的解析でガイドラインに沿っているかある程度の検知が可能。(https://github.com/Microsoft/GSL)
512bit SIMD (AVX-512)
- SIMDはコンパイラにお任せ。人力実装でコンパイラより早くするのは至難の業。
- 環境依存になりやすく、他の手もやりつくし、残るはSIMDの人力実装のみ且つ失敗(性能向上しない)としても試すほかない環境以外では手を出すべきではない。
「女性のためのC++コミュニティ Ladies++ meetup #1」の紹介
クロスプラットフォームマルチメディアライブラリSDL2の紹介
- SDL2。Emscripten, iOS, Android上でも動く。SteamのマルチプラットフォームタイトルはSDLを使っているものがある。
- どうもEmscripten上でSDLやOpenGLを使う人がそこそこ居る(ゲーム関係?)。
- SDL2からはIMEが使えるようになったと聞いたものの、調べてみたら完全対応という訳ではないっぽい。Electronなどと合わせて、GUI部品はwebで作り、エンジン部分がSDLのような住み分けはどうだろう?とおもったが、V8のasm.js対応ってどうなっていたっけ(パフォーマンス的意味で)?
クソザコ鳥頭が非順序連想コンテナに入門してみた
- 非順序連想コンテナの実装について、概念図はあくまで概念図で実装はパフォーマンスやメモリ重視でかな〜〜り工夫されている。
- libstdc++の実装には計算オーダー的にグレーな実装がされている場合がある。
- どうも、この界隈のクソザコとは、ライブラリの実装を追い、幾つかの実装の比較ができるようになってから名乗ることが許される称号のようだ。
expectedによるエラーハンドリング
- 毎回頭を悩ませるエラーハンドリングの新しい仕組みについて。
- まだ制式採用されたわけではないので利用できないが、やりたいことは理解できた。
メモリモデル再入門
- 変数とは何?マルチスレッドでのロックの話。
- バグを出したくなければData Race Freeなコードを書け。
- 2スレッドでtryLockに失敗したからといって、スレッド1でロックが成功しているわけではない。
- 静的解析で指摘してくれる(google/sanitizers · GitHub)。
ほか、懇親会や休憩時間で聞けたこと
- Emscriptenの例外対応はONにするとパフォーマンスが落ちるのでデフォルトOFFになっている(ヤベ)。
- libuvのようなcallback登録を行うライブラリとC++の例外の扱いについて実装のヒントをもらえた。
- armプロセッサはx86系に比べメモリバリアを厳としないとData Race時に異常値を持ってクラッシュしやすい。
- x86上で動くarmエミュレータはホストのメモリに守られるため実機のみで再現する厄介なバグに遭遇する可能性がある。
- Boostのテスト環境はボランティアによるもの。CPUアーキテクチャ×コンパイラバージョン×OS他の環境による組み合わせ数の爆発でかなり大変。
- マルチスレッド、ロックフリーで使える汎用アルゴリズム集libcds
- アムダールの法則