記事検索
月別アーカイブ
アクセスカウンター

    タグ絞り込み検索
    2013年11月15日12:41いってきた: 歌舞伎座.tech#2 11/14なのでC++11/14のお話

    _1120958

    東銀座に着いて地上に出て歌舞伎座をパチり。正面からだとどうみても歌舞伎座に入ってしまうようなので、また地下に降りてエレベーターを探すが、どのにエレベーターホールがあるのか、わかりにくいなぁ。

    _1120959

    7Fで乗り換えてオフィス用のエレベータにのりかえるところも、これまたわかりにくいなぁ。

    _1120964

    なんだかんだで10分前に入場。まだ席は半分くらいしか埋まってなかったが、最終的には席はほぼ埋まって、主催者の発表では出席率95%らしい。これってかなりの高出席率だよね。

    電源タップをもっていったが床のコンセントに直刺ししたので使わず。でも前の席の人が困ってたので貸して、もってきたのが無駄にならなかった。

    [2013-11-14 19:00]

    あいさつ

    _1120965

    [2013-11-14 19:02]

    C++11: variadic tempalteのご紹介 / επιστημη(エピスさん)_1120968

    • http://www.slideshare.net/ssuser1f23d9/episteme-variadic-template
    • 規格書(IS?)をみると割合は少なくてページ数は薄い。どうやってつかうんだろうかと悩むくらい。
    • 「...」は「だだだ」と読む。
    • variadic function, variadic macro, variadic template.
    • きもはparameter pack:
      • template parameter pack: 0個以上の型の並び。template struct Tuple {};
      • function paramter pack: 0個以上の値の並び。 template void f(Ts ...vs);
      • parameter packは型でも値もない。
      • sizeof... (Ts) とか sizeof... (vs) とかで個数がわかる。
      • ダダダを後ろにつけると展開される。
        • Ts... → T1,T2,…Tn
        • X::z → X::z, …
        • X → X
        • F(5,vs)... → F(5,v1),…
    • パターンマッチングで関数/クラスを書く。ベストマッチングで関数がえらばれる。
      • 再帰呼出ではなく、オーバーロードされた名前がいっしょの別の関数が呼ばれている。
    • 実演: http://youtu.be/B4RFqwg5oyA

    [2013-11-14 19:22]

    • Q: 展開回数の上限
    • A: 最低も定義されてないが、推奨はある。

    [2013-11-14 19:24]

    休憩

    [2013-11-14 19:31]

    C++14の新機能 / 江添亮_1120971

    • 資料: http://ezoeryou.github.io/kabukiza-tech2-slide/index.html#/
    • まだドラフト
    • 二進数リテラル:
      • 0b10, 0B10。
      • 浮動小数点にはつかえない。
    • 数値区切り:
      • 1'0000 とか。0b10101010'10101010とか。2.14159'2 とか。
      • 一番先頭と最後以外ならどこにでも書ける。
      • 既存の文法に影響がなさそうなシングルクォートが選ばれた。強い圧力でnational body commentで入った。
      • アンダスコアだとユーザ定義リテラルと被る(ユーザ定義リテラルをなくせばいいんだけど)。空白文字も提案された。
    • 実行時サイズ配列:
      • 動的ストレージに配置されるのは許容される。
      • クラス内では使えない(GCCはできてしまうが)。clangは実装を拒否しているがlinuxではこれを多用している。
      • C99は可変長配列。C++14ではsizeofをサポートしない。dynarrayもC++14に入る。
    • [[deprecated]]:
      • getsとか。
      • 警告を出せる。プログラムの意味は変えない。
      • [[deprecated("messag")]]のようにコメントも使えるが、コンパイラがどうあつかうかは未定義。
    • 戻り値の型推定:
      • Cの暗黙のintとは違う! return文のオペランドから推測。
      • return文は複数あってもよい。(型はあっていないとだめ)。再帰もok。
      • テンプレートがからむと型を書くのが面倒なのが楽になる。
      • decltypeでもできるが式が重複する。decltype(auto)というのもあるが省略(説明がめんどくさい)。N3638。
    • 変数テンプレート:
      • template value; value=0; value=0.0;
      • 型ごとに精度を変えた数値を用意したいことがある。円周率とか。
      • 関数テンプレートでも同じことがきるが関数呼出のカッコがつくだけ。値を返すメタ関数にも使える。
    • ジェネリックlambda式:
      • auto print = [](auto x){...} 関数オブジェクトのtemplate operator()をlambdaにも持たせる。
      • auto f = [](auto... args){}とパラメータパックもつかる。
    • 汎用lambdaキャプチャ:
      • [初期化子](){...}。
      • non-static data memberがコピーキャプチャできなかった。[=]と書いてもthisがコピーされただけでメンバはコピーされていない。
      • ムーブキャプチャができなかった。unique_ptrをムーブできなかった。
      • [data=data](){}と書く。[p=std::move(p)](){}と書く。[s=data](){}のように名前も変えられる。
    • constexpr(コンストエクスプロォァ〜)関数の制限緩和:
      • constexprの発音は「コンストエクスプロォァ〜」が国際標準らしい。
      • ループは再帰で書かないといけなかった。
      • ローカル変数宣言・変更、条件(if)ができるようになった。普通の人は再帰じゃなくループをつかいたい。

    [2013-11-14 20:02]

    • Q: 汎用lambdaキャプチャーでムーブで[&&]でムーブにするのはなめだめだったか?
    • A: より一般的にコピーを用意すれば十分という結論。特殊な文法は入れたくなかった。std::move()をつかえ。
    • Q: exprの読み方
    • A: エクスプレッション・エクスプレ・エクスプルなど
    • Q: constexprでforつかったらコンパイルはどうやって終るような制約はあるのか?
    • A: ない。最悪終わらない可能性がある。
    • Q: 二進数リテラルに3とか書いたら?
    • A: エラーになる(十進数にAと書いたらエラーになるのとおなじ)
    • Q: constexprが標準ライブラリに入らないのは?
    • A: 規格に準拠していないことになるため付けられない。
    • Q: 汎用ラムダキャプチャのリスト初期化の型推論はclangではやってくれないみたいだが。int x=0; [x{x}](){}。
    • A: 型指定の規格が入る予定はない。
    • Q: 実際的にはdynarray<>はスタックからとられることが多いか?
    • A: dynarrayでも静的ストレージからとられることが期待できる。だめかもしれないが。

    [2013-11-14 20:13]

    休憩

    _1120974

    [2013-11-14 20:24]

    web開発現場のC++11の活用 / ドワンゴ 朝倉輝(あきら)_1120975

    • niconicoでC++がどうつかわれているか。
    • 開発(コード書き)・企画(ディレクタ)・インフラ・デザイナ・テスタ・サポートなどに分かれている。
    • バックエンド開発担当、C/C++,JavaScript,Java,php,AS3,C#...
    • コメントサーバ: コメントの投稿と配信。httpとflash(html socket)に対応。websocketも。C++で実装。
    • 動画配信サーバ: シークバー上にでるサムネイルとか
    • 生放送配信サーバ 根幹はC/C++
    • 超会議2の電子黒板: ストロークと画面を転送
    • バックエンドは速度と安定性を重視。けっこうC++をつかう。
    • win/mac/centos,VS6,a2010-2013,eclips/intelij/flash develop: 社内ではIDEは少数派
    • 本番環境や共通開発環境は開発者は手がだせずインフラ管理になっていて更新はあまりされない。boostのバージョンがばらばらだったり。
      • セキュリティパッチは当ててるよ!
      • 更新しないのは台数多いのと、担当わからないのと、ミスりたくないのと。
      • gccのアップデートはRHELに新しいのが入ってかつハードウェアリプレイスのタイミングで。
      • 新規開発では新しいのがつかえる。scientific linuxとか。でもC++0xどまり。C++11はいつつかるのだろうか...
    • あまり最新機能をつかうとメンテできないのでつかいにくい。
    • 上司: autoをつかうと型がわからない! → IDEつかえばいいじゃん..
    • iteratorだけでもautoつかいたい。
    • rvalueはけっこうたいへんだった。

    [2013-11-14 20:39]

    • Q: VS6をつかってたのは?
    • A: それでないとビルドできなかったため。
    • Q: CとC++のつかいわけ基準?
    • A: 一からかくときにはC++でかく。

    [2013-11-14 20:43]

    休憩

    • ピザ&ビールタイム
    • 順番に後ろのテーブルにピザ・ビールなどをとりにゆくが、最終組は紙皿枯渇のため各自創意工夫しろとの指示が...

    _1120976_1120977_1120979

    [2013-11-14 20:56]

    rvalue reference / 西江みのる_1120978

    • http://prezi.com/bkhxdnuq6qzv/rvalue-reference/
    • C++11つかってない(自由などどこにもない!)
    • 言語くらいは安定させておきたい
    • C++11は意外と壊さないようになっている感じだが
    • もしC++11に移行するとすれば?
    • rvalueはrvalueで初期化できない → 一時オブジェクトに名前つけたら一時オブジェクトじゃないよね〜って説明。
    • ravlue objectは破壊してもよい。
    • 10年前のC++なら swap() をつかうところ。
    • move(): 呼出先でぶっこわしていい宣言.
    • move ctor: 元objにはデストラクタで困らないようにテキトーな値をつめておく。
    • 値のセマンティックスを持つ → コピーのセマンティックスを持つ と言いかえられる。
    • set(string v) にすべき。st(const string& v) よりも。
    • C++03では値渡しは値返しはcopyになるので、pessimization(不適化)だった。
    • C++11ではmoveできるならmoveされる。
    • ctor(const string& v) : v(v) {} → ctor(string v) : v(move(v)) {}
    • moveしないのであればconst refで受けたほうがよい。
    • getterはconst referenceで返した方がよい。

    [2013-11-14 21:11]

    • Q: このスライドは?
    • A: flashです!不自由です!
    • Q: rvalue refの感想は?
    • A: rval refとconst refの両方の関数をつくらないといけないのかと悩んだことくらいか(つくらなくてよい)
    • Q: moveに対応してるかどうかテンプレートだとわからないのでは?
    • A: 意味的にcopyすべきときにmoveはしないので悩まないはず。
    • Q: returnでmoveを期待するとRVOとぶつかってしまう?
    • A: RVOはコピーでもムーブでも対応きるはず(単にコンパイラの実装の問題)。
    • Q: moveしたあとにコンパイラが最適化できるか? constでの最適化が制限されてたりするが。
    • A: 一部の文脈では勝手にmoveすることが許されている。rvalueをつかってなくてもコンパイラが勝手に最適化してしまうことはある。
    • Q: 言語設計の問題(早すぎる最適化問題)?
    • A: コピーできないもの(ファイルハンドル)とかで所有権の移動に対応するためにrvalueは必要。コンパイラへのヒントという目論見もあったはず。
    • Q: auto_ptrとの違いは?
    • A: エピスさんがLTでやります!

    [2013-11-14 21:23]

    休憩

    LTタイム

    • 「発表は5分で、5分たつとアラームが鳴るので、みなさん拍手を」とのことで5分で強制終了

    [2013-11-14 21:30]

    clang-format / @Linda_pp_1120980

    • https://gist.github.com/rhysd/7466359
    • (プレゼンはvim)
    • 開発ではコーディングスタイルがきまっていることが多い。80桁制限とか。
    • 自分のスタイルで書いてから整形するとか、他人のコードを整形してから読むとか。
    • clang-formatはLibFormatを利用してフォーマット変換。

    [2013-11-14 21:35]

    [2013-11-14 21:40]

    Wandbox / @melponn_1120981

    [2013-11-14 21:45]

    • Q: みんながレイトレーシングしたらどうなる?
    • A: 30秒で切れます。
    • Q: いたずらされない工夫は?
    • A: chrootとかリソースの制限をかけている。
    • Q: どこでホスティング?
    • A: さくらVPSでHaskell。

    [2013-11-14 21:46]

    [2013-11-14 21:47]

    L丁 / M.Fkukasawa(新人)_1120982

    • http://www.slideshare.net/roentgen_jp/c11-lt
    • atomic(ロックラインベースの同期メカニズム), TLS(thread keyさよなら), fence(メモリバリア)まである
    • closure(lambda): courceすればいいよ
    • closureには暗黙のthisがわたってくる。

    [2013-11-14 21:52]

    [2013-11-14 21:54]

    C++11: unique_ptrを5分ご紹介 / επιστημη_1120983

    • http://www.slideshare.net/ssuser1f23d9/episteme-unique-ptr
    • http://codezine.jp/article/detail/7479
    • CodeZineにのりました
    • auto_ptrはdeprecatedに。
    • make_uniqueがはいる。make_sharedはあったけど。
    • auto_ptrとはちがって配列対応。 unique_ptrと書ける。make_unique(4)とか。
    • '=' では代入できず move() をつかう。auto_ptrは=でmoveになってた。
      • unique_ptr& operator=(const unique_ptr&) = delete;になっている。
    • default_deleteを置き換えられる。deleteの代りにfcloseよ呼ぶとか。lambda式指定できる。

    [2013-11-14 21:59]

    _1120984

    あまっていたビールを1缶もらって帰途に。新橋に出て東海道線 茅ヶ崎経由で相模線。

    _1120985_1120986_1120987_1120988_1120989_1120992



    このエントリーをはてなブックマークに追加

    トラックバックURL

    コメントする

    名前
     
      絵文字