C++と色々

主にC++やプログラムに関する記事を投稿します。

「Boost.勉強会 #19 東京」に参加しました

2015/12/05に行われたBoost.勉強会 #19 東京に参加してきました。

connpass.com

朝10時からと、起きられるか大変不安でしたが、無事起きられて安堵しました。

会場としてなったIIJさんからお水を頂きました。ありがとうございます。

最初に@cpp_akiraさんからオープニングと会場の諸注意があり、そのまま発表が始まりました。

Boostライブラリ一周の旅 1.59.0-1.60.0

1.59.0から1.60.0まで追加/メジャーアップデートされたorされる予定のライブラリの紹介です。 ConvertとVMDは初めて知りました。Convertはconverter次第で、かなり柔軟にカスタマイズできそうですね。 デフォルトでは文字列数値の相互変換ぐらいしかできなさそうですが、オレオレconverterを作って遊んでみたいないと思いました。 VMDは可変長マクロを利用しているということですが、Boost.PPが確かに職人が手作業でXXX_0からXXX_Nまで繰り返し処理を書いていたと記憶しているので、 それが汎化できたのなら素晴らしいと思います。作者が違うからPPとパッケージがわかれているというのは闇だと思いました。 Test v3ですが、ドキュメントが整備されたことが嬉しいです。テスト失敗時に、失敗した式と変数の値を取り出した表示の2つ表示されるのがすごいと思いました。今後に期待のライブラリです。

EMC++とCppCoreGuidelinesについて

EMC++の邦訳が出ることと、その査読を行うことになった経緯が面白かったです。私はEMC++買ったものの積んでいているので早くタスク消化して読みたいです。Core Guidelinesは基本的なことから Coding StandardやEffective C++, Exceptional C++に載っているような内容まで纏まった良い書き方集なのですが、長すぎて少ししか読んでないです。やはりGuidelineに目を通したり、覚えることは大変なので、発表にもありましたように、自動で検出できるlint的なものがでるのを楽しみにしています。VS2015 Update 1 ではCore Guilelineを支援するGSL(Guideline Support Library)がNuGetから落とせるようになっているようです。ポインタを非nullに矯正するot_nullクラスや、精度が落ちるキャストを行うときに使えるnarrowなどが含まれています。

512bit SIMD (AVX-512)

SIMD計算のお話でした。正直予備知識が不足しておりあまり理解できなかったのですがhttps://twitter.com/simizut22/status/672968799507755008 とのことで、大変そうだなと思いました(小並感)*1

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

C++界隈、厳密に発言しないと許されない風潮だったり、濃い男性が多い[要出典]ので、初心者や女性には入りづらい印象は受けていました。のでこういったコミュニティは貴重だと思いますので、発展していってほしいと願います …今日の発表資料を拝見したのですがCPPを自作されたりと、かなりハイレベルで自分も頑張らないとと思いました。

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

公式で6環境サポート(特にブラウザ)が熱いです。ほかの強豪と比べて歴史が長くユーザが多いので、ググったときの情報が多いのが強みのようです。ぐぐって情報が出てくるというのは、大変ありがたいことです。情報ないときの詰み感すごいですから…。また、これ自体はシンプルな実装になっているため、これをラッパーしたライブラリが存在したり、自分でラップもしやすいようです。DXライブラリとかをラップするのが楽しい自分好みのライブラリっぽいです。 余談ですが、スライドのコードサンプルの

Uint8 const* keys const = ...

がCV修飾順序が独特だなぁと思いました。触ってみたいと思います!

クソザコ鳥頭が非順序連想コンテナに入門してみた

全然クソザコじゃなかったです。某勉強会のクソザコ枠(クソザコとは言っていない)を思い出しました。STLの内部実装には大変興味あるのでとても興味深かったです。自力で初見でunordered_mapを読んでいたらきっと挫折していたと思うので予備知識をつけられてよかったです。メンバ関数が定数オーダーを要求するため、それを満たすための工夫が、自分では思いつかないような内容でした。改めてunordered_mapのコードリーディングに挑戦したいです。

expectedによるエラーハンドリング

std::error_codeでは成功かエラー値しか持てず、optionalでは正常値か無効値しか持てず、より汎用的にした、正常値もエラー値も持てるクラス、それがexpectedと紹介されました。expectedにはmapメンバ関数あるんですねー。optionalにも欲しいです… 標準C++で使用されている例外をexpectedに置き換えるって派手な目標だなと思いました。面白そうなのでオレオレexpected実装してみたいと思いました。 boost::optionalは値をスタックに構築していますが、expectedもそういった実装になるのでしょうか…?

Boost.Configについて

時間の都合で色々省略されましたが、もっと聞きたかった内容でした。環境の差を吸収するための泥臭い話は、実際ライブラリを作成するときにとても参考になります。BOOST_PREVENT_MACRO_SUBSTITUTIONは神ってわかりました!!

メモリモデル再入門

初歩的なところから入り、マルチスレッドにおけるData Raceとはというところまでのお話。とても勉強になりました。Release Consistencyを知りました。またreadとwriteに関する、直感的には理解している振る舞いを、きちんと定義したものを確認したのは初めてかもしれません。(読み書き可能な変数に対する普遍的なルール) 中級編を楽しみにしています。

まとめ

自分自身についてですが、もっと質問していけら良かったなと思いました。 ともかく、大変有意義な時間を過ごせました。モチベーション上がりました、ありがとうございました!!

おまけ 忘年会

ベテランの方々が集まる席に座らせていただきました。普段知ることができないお仕事の話や、昔の業界の話が聞けて面白かったです

*1:本当、こんな感想ばかりですみません…