読者です 読者をやめる 読者になる 読者になる

戦場のプログラマー

名前は誰も知らない。

「ドワンゴC++勉強会 #1」に行ってきました

勉強会 C++ ドワンゴ ニコニコ動画

行ってまいりました!ドワンゴC++勉強会#1。

ドワンゴC++勉強会 #1 - connpass

ハッシュタグ: #dwangocpp

ニコニコ生放送でも放送されていましたので、今なら今日中までタイムシフト再生で見ることができます。
私もこの記事を書きながらタイムシフト再生してライブとの違いを実感しています。

ドワンゴC++勉強会 #1 - 2014/06/28 14:00開始 - ニコニコ生放送

現地

歌舞伎座タワーに行くには地下鉄を乗り継いで行かなければなりません。
丸ノ内線と日比谷線を乗り継いだ記憶があります。
地下鉄は不慣れなのでやっぱり早めに出発しました。

1時間も前に着いて、とりあえず場所だけ確認しようと思って地下直結の歌舞伎座タワー14Fを目指しました。
お姉さんにどちらまで行かれるか聞かれて14Fまでと伝えると行っていいよと案内されます。
とても立派なエレベーターでした。

まずは7Fのスカイロビーに行かなければならないようです。
直行はできないんですね。
さて、14Fに行きましょうとエレベーターに乗ったら「押された階には止まりません」とエレベーターに怒られてしまいました。

Twitterのタイムラインを確認しているとやっぱり上に行けない人もいたようで、どうもエレベーターの認証を通す必要があったようです。
ドワンゴ社員の方がピストン輸送してくださいました。

開場

2列目に着席。

  • 肝心のでちまるさんがこない。
  • エクストリーム資料作成。
  • マサカリを常備しておこう。

などなどの会話が聞こえてきました。 ニコニコらしい。

あとで調べてわかりましたがマサカリとは斧のことですね。
マタタビぐらいにゆるいものを想像していました。

なんだかんだで最近ドワンゴに移籍された江添さんが普通にいらっしゃいました。

本の虫: ドワンゴに入社した

ここまで有名な人にお目にかかれるとは思っていなかったのでびっくりです。

ここで接続テスト。

まさかのWindowsXPが登場。

あれっ、サポート切れたんじゃなかったでしたっけ・・・そうかEmbeddedか!

本当はでちまるさんが発表される番だったようですが柔軟に順番変更。

ここで @bolero_MURAKAMI さんのご紹介。

  • 本職が陶芸家。
  • フルスタック陶芸家。
  • 薪割りから自分でやる。
  • ドワンゴにろくろはあるのか →ございません。

wnoguchiのC++レベルについて

  • VC6のC++コードをガチャガチャ削りまくることはできる。
  • インクルードガードぐらいまでは知ってる。

幼稚園児並ですね。
C言語とかC++はめちゃくちゃ奥が深いですね・・・。
たぶん私が書いていたC++は規格としてC++11にもかすってないんじゃないかと思います。

それでは本編です。

constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。CPUの嬌声が聞こえてきそうだ

スライドはこちらにあがっています。

constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ

  • 趣味はconstexpr
  • constexprを知らないで許されるのは小学生まで
  • C++14はconstexprの時代
  • コンパイル時処理だけじゃないconstexpr

今この記事を書いている最中にニコニコ生放送の機器トラブルで映像が途絶したようです。

目標

  • モダンなC++ライブラリ設計とは何なのか
  • constexpr(コンストエクスプレッション)
  • 定数式を記述するためのもの
  • constexpr指定の関数=コンパイル時に呼び出し可能
  • このようなコンパイル時に評価可能な式を定数式という リテラル型がconstexprで扱える
  • 定数を返す関数をコンパイル時評価にするため

日経ソフトウェア2014年5月号の記事によく書かれているのでよく読んでね

とのことでしたのでご案内しておきます。
kindleならすぐに手に入れられますね。

C++11時点のつらい点

最初は関数の再帰さえ許可されない予定だった

再帰が許可された結果、濫用されコンパイルレイトレーシングということをやる方が出てきたようです。

C++14での制限緩和

いろいろできるようになった

コンパイラ比較

Clang
  • ClangはC++11,C++14 constexpr対応が進んでいる
  • constexpr関係の大きなバグが残っている
ICC(Intel C++ Compiler)

ま、バグがある

VC++
  • November 2013 CTP C++ constexprを使える
  • 複雑な処理はまったく書けない

江添さんは仰天。開場は大笑いに包まれました。

「これ・・・何??」

C+++らしいライブラリ設計とは

C++のライブラリといえばBoost。

Boostとは

  • とにかくテンプレート
  • 静的ダック・タイピング
  • 機能の非メッンバ関数化
  • 疎結合な機能群

機能分割がしっかりしている

メンバ関数のススメ

機能はメンバ関数よりも非メンバ関数として追い出したほうがよい。

Rng.size() よりも size(Rng)

constexpr課すると抽象クラスの継承関係を排除しなければならなくなる。

Sproutライブラリ

ボレロ村上さん自信が書かれたconstexprベースのライブラリらしいです。

  • とにかく大規模なライブラリ
  • 実行時レイトレーシング
  • データ型はすべてTupleとして定義されている
  • 大概のデータはタプルの組合せで表現できる
  • ベクトル、色、光線、材質、衝突情報、・・・

これまでのコンパイルレイトレーシングの最長記録は

  • 8196x8196
  • 約160時間(7日)
  • 4pxずつ分割してビルド

だそうです・・・。

C++14に向けてconstexpr対応を進めるべく多くの提案が消化されている

最後に、実行時じゃないから恥ずかしくない
のスライドが表示されて幕引きとなりました。
ごめんなさい、ついていけませんでした・・・。

でちまるさんのエクストリーム資料作成が完了したようです。

休憩

Macのアダプタに延長のケーブルを持っていくのを忘れたので不要なサービスを立ち上げてると モリモリバッテリーを食いつぶしていくのでメモるのに最低限必要なアプリだけにしました。

Twitterのタイムラインを確認するとsekicocoというの単語がちらほら見られました。
自分がどこの席にいるかをTwitterアカウントと紐付けて表示するサービスのようです。
こんなサービスもあるんですねー。

#dwangocpp #1 第1回ドワンゴC++勉強会の座席表 - セキココ

The Define and Expansion of CPP Macro

@decimalbloat

「何事も暴力で解決するのが一番だ」

笑いが起こる。

名前が衝突する

  • BOOST_PP_ とかそういうprefixつければ普通衝突しない。

コンパイルエラーがひどい

  • ただし関数マクロでやった場合の話
  • include主体でやればそうでもない

制限が多い

  • 再帰展開できないとか
  • アプリケーション開発でコード生成が必要になったならCプリプロセッサではなくPHPとかPerlで書けば良い

ここまでのまとめ

PHP使えよ

とのことです。

関数マクロ乱用スタイルにおける基本的な技法

  • Cプリプロセッサには数値という概念はない
  • 必要な数だけ並べる
  • 繰り返しについて
  • これも同様必要なだけ並べる

Sequence

(a)(b)(c)
  • 今のはgcc, Clangの実装の話
  • VC++は異なる

「実際のコード例をオンラインで見てみましょう」

「あれ、どうなるの、これ?」

笑いが起こる。

「どこ見たらいいのこれ?」

再び笑いが起こる。

Tuple

(a, b, c) のような形式のもの 長さを変更できないが要素へのアクセスは O(1) なデータ構造

「これもオンラインで見てみましょう。」

64個の引数を扱える

ものすごいコードが表示される。

まとめ

  • PHPを使え
  • 置換とトークン連結だけでも足し算は作れる
  • たとえ貧弱な機能でも人間は乱用する

PHPを使えで爆笑されてました。

でちまるさんのGitHubはこちら。

dechimal/desalt

質疑応答

  1. 展開を見やすくするためには?
  2. 改行を入れるとか?

笑いが起こる。

C++の歴史

@EzoeRyou さんの発表です。

スライドはこちら。

C++の歴史

1979年

  • Simulaを作った、その利点
  • リンクが遅い
  • ガベージコレクションが遅い
  • 実行時間の80%がGCに費やされる

  • BCPLで書いた

  • BCPLに比べればCがとても高級な言語に見えた

  • Bell Labの特徴

  • 十分なコンピューター資源が与えられる
  • K&Rが同僚だった
  • 面白いことをやるのが仕事

Cpre

C with Classes

1982年

  • C with Classesは複数のプロジェクトで使われるようになった
  • C++という名前
  • Ken TompthonのB言語
  • CFront

「ぼくのかんがえたさいきょうのげんごきかく」では普及しないので、 リファレンス実装が必要だった。

当時は移植性が重要視された ↓ Cコードを出力する

当時は

  • ANSI: 下院
  • ISO: 上院

のような位置づけだったようです。 ISO規格制定は全会一致。

現在は弱肉強食の世界になっています。

C++財団が設立された。
ドラフトは現在GitHubに上がっているそうです。
モダンですね。

cplusplus/draft

1998年

  • C++98
  • 最新技術に追い付くため標準委員会は縮小

C++03

  • マイナーバージョンアップ

C++0x

  • ふたたび活発化

200x年にできると思うじゃないですか。 遅れに遅れてC++11が規格制定されました。

C++0xのxは16進数というジョークまで出たようです。

  • コンセプト機能でもめた
  • これを取り除くだけで一年半以上送れた
  • 取り除く価値があった

  • C++1y/C++14?

  • Clangはすでに実装済
  • GCCも積極的に

C++17

次のメジャーアップデート

C++ Working Group Japan

EC++(Embedded C++)という黒歴史

あまり語りたくない話題だったようです。

  • 複雑になりすぎたC++のサブセットにしようと思う
  • 作者が諭す

EC++失敗は失敗したそうです。

  • 1社でコンパイラを開発できることがアドバンテージだった
  • 某M社は開発している

  • 2007年人材不足

  • C++規格は230xページある

ここで新たな動き見られたようです。

2014年に江沢亮がドワンゴに移籍!!

  • 2009年に1人だけ行った人がいる
  • 議長のお友達として行った
  • ITSCJは金がほしい
  • 金が無い
  • ISOの価値が下がっている
  • ソフトウェアの規格と相性が悪い
  • ISOは政治的な組織

これは政治だ。

で締めでした。

これ以降はLTです。
私が理解できる内容が少なかったため、ここでは簡単なご紹介にとどめます。

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

@minamiyama1994 さんの発表です。

スライドはこちら。

#dwangocpp #1 templateを依存型っぽく使ってみる - Google スライド

slideshare等にあげられる方が多い中、Google Docsのプレゼンテーションを使ってのプレゼンをされるという新しいスタイルの発表でした。
興味深いのでプレゼンテーションにアクセスします。
この見ている人がニョキニョキっと出てくる仕様、面白いです。
今までに見たことない数の閲覧数を誇っていました。

f:id:wnoguchi0727:20140705005843p:plain

f:id:wnoguchi0727:20140705010059p:plain

constexprで使えるイディオム

@fimbul11 さんの発表です。

スライドはこちら。

constexpr idioms

Cocos2dxの闇

@ponkotuy さんの発表です。

  • 猫耳で登場されました。

スライドはこちら。

Cocos2dx(Ver2)が闇な話

Cocos2dxについて

Cocos2d-x: World’s #1 Open Source Game Development Platform

私は触ったことがないのでわからないのですが、けっこうCocos2dxでの開発はつらいらしいです。

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

@karupanerura さんの発表です。

勉強会にいけば体系的に知ることができるんじゃないか

でも補欠いっぱいだし

そうだLTをしよう!!

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

@tikal さんの発表です。
この方が一番インパクトが強かったですねw

コスプレは「いなり、こんこん、恋いろは。」の「コン」ちゃんの格好だそうです。

スライドはこちら。

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

ニコ動再現・保存ソフト「 さきゅばす 」の作者の方とのことです。

  • 実行時処理
  • SIGSEGVで落ちる分にはまだわかる
  • gdb -S odjdump -D
  • グローバル領域はどうにもならない Cocos2dx

ひたすらCocos2d-xのディスりが続きます。

そこで新星のごとくValgrindが登場します。

私もGitでクローンするパスが異常に長いときにmsysgitが必ずクラッシュするバグを修正しようとした時に薦められたような気が・・・。 ある最適化オプションを外すと直るんですが、どうも根の深い問題でパッチに問題があって受け入れられることはありませんでした。

そしてLinusのfuck画像で締め。

2012年6月18日 Linusが吠えた! ─中指立てて「NVIDIAは世界最悪の企業」:Linux Daily Topics|gihyo.jp … 技術評論社

最後に

江添さん最後のコメント

「発表してなんぼですよ!」

その他

@karupanerura さんのそうだ京都に行こう的なノリでLTをする姿勢は見習いたいと思いました。
私自身プレゼンテーション力が圧倒的に不足しているので、なんかのタイミングでLT、してみたいものです。