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

C++で開発する割に、C++系の人と滅多に会わないので初めて参加してきました。

connpass.com

厳つい老齢の開発者にコテンパンにのされるのかとビクビクしていましたが、July Tech Festaより若い人が多い印象です。 内容は低レイヤーや規格、Boostの実装についての物が多いです。

Boostライブラリ一周の旅 1.59.0-1.60.0 / Boost.Configについて

  • BoostライブラリのコミッタやC++の規格策定に関与している方が何人か参加している(っぽい)。
  • C++でも一時期のWebブラウザ程ではないが、コンパイラ間の差異に悩まされる。Boostのような幅広いライブラリの開発においてはクリティカルな問題。

EMC++とCppCoreGuidelinesについて

512bit SIMD (AVX-512)

  • SIMDコンパイラにお任せ。人力実装でコンパイラより早くするのは至難の業。
  • 環境依存になりやすく、他の手もやりつくし、残るはSIMDの人力実装のみ且つ失敗(性能向上しない)としても試すほかない環境以外では手を出すべきではない。

「女性のためのC++コミュニティ Ladies++ meetup #1」の紹介

  • 女性のためのC++コミュニティ Ladies++ ってのがあるそうだ。
  • Boost.勉強会の会場を見た感じ、女性5%いるかいないか……そりゃLadies作りますよね。

クロスプラットフォームマルチメディアライブラリSDL2の紹介

  • SDL2。Emscripten, iOS, Android上でも動く。SteamのマルチプラットフォームタイトルはSDLを使っているものがある。
  • どうもEmscripten上でSDLOpenGLを使う人がそこそこ居る(ゲーム関係?)。
  • 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
  • アムダールの法則