C++と色々

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

ドワンゴC++勉強会 #1に参加してきました

書くのがかなり遅くなってしまいました…

6/28にドワンゴC++の勉強会があり、参加してきました。 メタプログラミングに関する発表が多く、だいぶニッチな内容だったと思います。

constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。CPUの嬌声が聞こえてきそうだ ――『C++らしいライブラリ設計』の指針としてのconstexpr――

発表者 @bolero_MURAKAMIさん
資料 http://www.slideshare.net/GenyaMurakami/onstexprcpu

安定して資料のページ数がすごい中3女子さんです。基本的な知識から始まり、今回は設計に関しての話が中心でした。関数をconstexpr化すると、型制約を使ったり、副作用を禁じたりと、自然と良い設計になるというお話がありました。あと標準ライブラリのconstexpr対応が遅れているという話もありました。個人的には副作用がない関数は全部C++14のconstexpr化してしまっていいんじゃないかと思ってます。

The Define and Expansion of CPP Macro

発表者 @decimalbloatさん
資料 http://www.slideshare.net/digitalghost/define-andexpansionofcppmacro

あの有名なD&Eです(嘘)。Cプリプロセッサは意味論などを無視した野蛮な暴力以外の何物でもないですが、これでしか出来ない事があるならしかたがないよね、という話から始まり、関数マクロの基本的な操作である連結・再展開、評価の制御の説明がありました。個人的には#include濫用スタイルの話がとても聞きたかった(関数マクロスタイルは過去の発表などでちょこちょこ説明あった)ので、次発表する機会がありましたら、#include乱用スタイルの話を聞きたいです。ところでC++ Advent Calender 2013の記事まだですか

C++の歴史

発表者 @EzoeRyouさん
資料 http://ezoeryou.github.io/cpp-history/

Stroustrup氏がC++を作ることになった経緯や普及させるための戦略、Stepanov氏がSTLを作った話やTMPの誕生、規格の必要性、進化などの話を前半聞けました。後半は日本におけるC++についての話でした。EC++の黒歴史や、C++WG JPの話でした。江添さんによる川上会長の物真似は必見

templateを依存型っぽく使ってみる

発表者 @minamiyama1994さん
資料 http://www.slideshare.net/masakazuminamiyama/dwangocpp-1-template

boostやLokiにも演算もできるboost::mpl::int_<N>Loki::Int2Type<N>みたいな値と型のマッピング機構はありますが、それとは違うんでしょうか…?C++だとtagを使ったstrong typedefのライブラリ実装や言語機能にstrong typedef(opaque typedefs)としてが提案も出ています。これらは数値の範囲を制限した整数型や浮動小数点型などのラッパーです。型を使って安全なプログラミング、というのは激しく同意です。二郎は三田本店オススメです

constexprで使えるイディオム

発表者 @fimbul11さん
資料 http://www.slideshare.net/fimbul/constexpr-idioms

息切れが気になって中身に集中できな計算量、再帰深度を抑えることは大切です。発表ではインデックスアクセス可能なデータ構造はindex tuple idiomを使うことで計算量・再帰深度を対数に抑えることができるようです。他に紹介されたイディオムはパラメータパック展開、分割統治、型MAPなどがありました。個人的にindex tupleと継承を用いたある型への定数時間アクセスはとても面白かったです。

Cocos2dxの闇

発表者 @ponkotuyさん
資料 https://dl.dropboxusercontent.com/u/629338/pdf/Cocos2dx.pdf

この発表でCocos2dxと言うものの存在を初めて知りました。 CCObject型という俺々全ての型の基底クラスという、C++が何とか避けようとしてきた苦労を全てぶち壊す設計をしてます。毎回castしなければいけないですし、型情報消えますし、FOREACHはマクロです。酷いです。STLも使えません(iterator無いですし)。ある意味この日の発表で一番闇だったかもしれません。

C++初心者書がC++11でparserを書いてみた話

発表者 @karupaneruraさん
資料 http://www.slideshare.net/karupanerura/dwangocpp1lt

lispのparserをC++で書くときに便利だと思った機能の話です。auto、スマートポインタ、範囲for文がサイコーとのこと。constexprサイコーといえるようになりたいです(切実)

valgrindは実行時メモリチェッカー。これはいい。コンパイル時チェックは結局頼りにならない。メモリの悲鳴が聞こえてきそうだ

発表者 @tikal
資料 http://www.slideshare.net/ledyba/cpp-36404945

実行時からは逃げられない、実行時(メモリなどの)エラーからは逃げられない、というところから始まり、そのデバッグをどうsるかというお話です。発表順が絶妙で、メタプログラミングやCocos2dxの話をした後にトリでこの話題でした。実行時のメモリエラーをチェックするのに便利なツールとしてvalgrindがあるという紹介でした。定期的に回してメモリリークを相違発見して潰していきましょう(そのかわり遅いです)。また、誤検出もあるため、無視ファイルの量がすごいという話も聞きました。