SlideShare a Scribd company logo
1 of 66
Download to read offline
C++コミュニティの中心で
     C++をDISる
    田中英行
自己紹介
•   田中 英行 (@tanakh, id:tanakh)
•   (株)Preferred Infrastructure 勤務
•   Haskell好き/C++嫌い
•   C++歴13年
    – 主にWindowsでゲームを作ったりしていました
    – 最近は仕事でコンソールアプリ書いてます
あらかじめおことわり
• Boost.勉強会ということですが
 – Boost出てきません
 – むしろBoost良くわからないので教えてください!
突然ですが
• 今日はC++をDISる機会をいただきました!
• (通称)C++闇の軍団なる皆様方に於かれまし
  ては釈迦に説法以外の何物でもありません
  が…
• 僭越ながら、C++をDISらせて頂きます
ご存知でしたか?

           C++が今年の
“Discriminating Hackersが選ぶ言語”
  に選ばれていたという事実を・・・
Discriminating Hackersの選ぶ言語
               とは?
• ICFP という関数プログラミングの学会が
• 毎年プログラミングコンテストを開催しています



• 優勝チームの使っていた言語が、
  “Discriminating Hackersの選ぶ言語”
  として讃えられ、無制限に自慢できる権利を与
  えられます
前回の優勝者&言語
よりにもよって、
          手続き型の、
         それもC++が、
関数プログラミングの学会主催の
          コンテストで、
 Discriminating 言語だなんて!
しかし、ルールはルール
• C++に逆らえない日々…
• 何故か仕事でもC++ばかり…
• 何とかせねば!
そして今年(去年)のICFP Contest




                    私の参加した
                    チーム
やりました!
• 優勝者になって、好きな言語を選べる!
 – しかし、ものすごくモメる
• とりあえず使った言語列挙する
 – C++、Haskell、Python
 – すごくオーソドックスな組み合わせですね!


• ということで、今年(9月頃まで?)はくれぐれ
  もこれらの言語の悪口は謹んで頂くように!
しかし。
• 私はC++が好きではない
 – (C++を使ったのは主に私なんですが…)
• 私が選んだのだから(Discriminating Hackerな
  のだから)その効力は私には及ぶまい(と勝
  手にルールを解釈)
• そこで・・・
今年唯一(?)大手を振って
 C++の悪口を言える私が
   思う存分C++をDISる
という
• ごく個人的な発表です。
概要
• 大きく3つのカテゴリに分けて、C++をDISる
 –型
 – テンプレート
 – 関数プログラミング


• お手柔らかにお願いします
Part 1: Type System

その1:型
C++の型システム
• Very Irritating!
• C++のストレスの約8割はこいつの所為
同じ型を何度も書かされる
• (int, int) -> int なる map を扱うとき

 map<int, map<int, int> > mm;
 for (map<int, map<int, int> >::iterator p = mm.begin();
      p != mm.end(); p++){
   map<int, int> &r = p->second;
   for (map<int, int>::iterator q = r.begin();
        q != r.end(); q++){
     ....
   }
 }
これが良くないところ
• 単純に面倒
 – Do not repeat yourself!
• 変更に弱い
 – 何箇所も変更しないといけない
例
• int -> double に変更

map<int, map<int, double> > mm;
for (map<int, map<int, double> >::iterator p = mm.begin();
     p != mm.end(); p++){
  map<int, double> &r = p->second;
  for (map<int, double>::iterator q = r.begin();
       q != r.end(); q++){
    ....
  }
}
typedef 使え

typedef map<int, double> ogram;
typedef map<int, ogram> tgram;

tgram mm;
for (tgram::iterator p = mm.begin();
     p != mm.end(); p++){
  ogram &r = p->second;
  for (ogram::iterator q = r.begin();
       q != r.end(); q++){
    ....
  }
}
だが断る
• 付けるべきではない名前を付けないといけない
 – しかも今回の場合2つ
• なぜ名前をつけるべきではないのか?
 – 1.名前に意味が無い
 – 2.意味のない名前を考えるのは大変
 – 3.(今回の場合)本質的には繰り返しではない
0x使え


map<int, map<int, double> > mm;
for (auto p = mm.begin();p != mm.end(); p++){
  auto r = p->second;
  for (auto q = r.begin();q != r.end(); q++){
    ....
  }
}
0x使わせて
 (´;ω;`)
読ませる気のないコンパイルエラー
• 行番号しか参考になりません!
• gcc 4.5でデフォルト型引数の省略などが入っ
  たが…
 – そもそもの型が大きければ意味がない
 – これはC++ライブラリの構造上の問題か
型推論が非力
• そもそも型推論とは何ぞや?
 – 型なしプログラムから型ありプログラムの再構築
   (Type Reconstruction)
• C++0xでは、すべての型を推論できるわけではな
  い
 –   ○ローカル変数(auto)
 –   ○ラムダ式の返り値
 –   ×関数の引数
 –   ×クラスメンバ
• Hindly-Milner型の型推論ができないものか
Part 2: template in C++

その2:テンプレート
テンプレート
•   みんな大好きテンプレート
•   だがしかし!
•   テンプレートおかしいよテンプレート
•   C++のストレスの約8割はこいつの所為
テンプレートの型
• templateの型パラメータは、forallではない
• たとえばこれは?
   template <class T>
   T id(T v){ return v; }


 – ∀a => a -> a だろうか?
 – 実は違う
テンプレートの型
• なぜなら、引数に対して任意の操作が可能だ
  から
  template <class T>
  void id(T v){ v.foo(); }


 – どういう型が付くのが妥当なのだろうか?

 – 実際にはC++では、テンプレート関数(クラス)
   自体には型はつかない(つけない)
そもそもC++テンプレートとは…?
• C++のテンプレートは何なの?
 – 見た目StructualなSub-Typingを実現している
 – Sub-Type relationの解決をインスタンス時に各々
   行う
 – コンパイル時に型レベルでコードを実行するよう
   なもの
その代償
• C++では、テンプレート関数を宣言時ではなく、
  使用時にインスタンス化し、それに対して型
  付けを行う
• これはどういう事を招くか?
 – テンプレート関数(クラス)を分割コンパイルでき
   ない
 – テンプレート関数自体に対しては型が付かない
 – (得られるコンパイルエラーが往々にして不可解)
分割コンパイルできない
• テンプレート関数を使用している箇所すべて
  に対して、その完全な定義が必要
 – 基本、ヘッダファイルに全部書くことになる
• これは何を招くのか?
 – コンパイル速度の低下
 – ファイル間の依存の増加
コンパイル速度
• 最悪の場合、コンパイル時間がファイル数の
  2乗のオーダに

                  ヘッダファイル




                  ソースファイル
ファイル間の依存性
• インターフェースが変わらなくても、実装が変
  わればコンパイルし直さなければならない
• pimpl のようなバッドノウハウ
 – 実行速度低下
 – コードがまどろっこしく
ヘッダに書くことによる問題
• namespace地獄
std::map<int, std::map<int, int> > mm;
for (std::map<int,std::map<int, int> >::iterator
     p = mm.begin();
     p != mm.end(); p++){
  std::map<int, int> &r = p->second;
  for (std::map<int, int>::iterator q = r.begin();
       q != r.end(); q++){
    ....
  }
}

 – using namespace させて…
テンプレートに型がつかない
• テンプレート関数は定義のみではコンパイル
  されない
 – つまり型がつかない
• 一方、型は非常に良いドキュメントになる
 – 型の重要なメリットの一つ
• C++のテンプレートからは、これがすべて失わ
  れている
例
• std::transform()
      template <class A, class B, class C>
      B transform(A, A, B, C);


  – これでは何のことやら
例(2)
• もちろん、人がある程度注釈することはできる
  template <class InputIterator,
            class OutputIterator,
            class UnaryOperator>
  OutputIterator transform(InputIterator first1,
                           InputIterator last1,
                           OutputIterator result,
                           UnaryOperator op);

• しかし、これでは不十分
 – Input/OutputIteratorが満たす要件は?
 – UnaryOperatorとはなんなのか?
 – これらはドキュメントに書くしかない
   • それは何の保証もない
パラメトリック多相の場合
• 何を渡さなければならないか一目瞭然
• どういう処理がされるかすら分かる場合も多い

     map :: (a -> b) -> [a] -> [b]
     map f xs = ...
今は亡きコンセプトさん
                  /二二ヽ
                  | 今 |
                  | 瀬 |
                  | 腑 |
                  | 戸 |
                  | 之 |
               __| 墓 |__
          / └──┘ \
         |´ ̄ ̄ ̄ ̄ ̄ ̄| ソ
         ソ::::::::::::::::::::::::::::::::ソソ
  / ソ ̄|;;;;;;;lll;;;;;;;| ̄ソ \
  |´ ̄ ̄ |. [廿] .|´ ̄ ̄.|
  |:::::::::::::::|              |::::::::::::::|
  |:::::::::::::::| ̄ ̄ ̄|::::::::::::::|
  . ̄ ̄ ̄|_______|´ ̄ ̄゛
コンセプトがあれば…
• テンプレート引数への要件の明示による
  ドキュメント性の改善
• インスタンス化→型チェックによらずに型
  チェックができるようになり、コンパイルエラー
  の改善

• コンセプトさえあれば…
Part 3: Functional Programming

その3:関数プログラミング
Haskell愛好家としては…
• C++/C++0xでの関数プログラミングには
  我慢ならない…!
オブジェクト指向+関数型
• すべてのものはオブジェクトであるべき
• (すべてのものは関数であるべき)

• 関数がオブジェクトであるということ
 – 関数に付く方がすごく歪になる
  • 関数型ならシンプルなのに…
ラムダ式
• Haskell
  – ¥x -> x+1
• OCaml
  – fun x -> x
• Scheme
  – (lambda (x) x)
• C++
  – [](int x){ return x+1; }
ラムダ式
• とにかくキモい。

     int main()
     {
       [](){}();
     }
ラムダ式
• とにかくキモすぎる。
 int main()
 {
   [](){[](){[](){[](){[](){[](){}();[](){}();}();
 [](){[](){}();[](){}();}();}();}();[](){[](){[]()
 {[](){}();[](){}();}();[](){[](){}();[](){[](){[]
 (){[](){}();[](){}();}();[](){[](){}();[](){}();}
 ();}();}();}();}();}();}();[](){[](){[](){[](){[]
 (){}();[](){[](){[](){[](){[](){[](){[](){}();[](
 ){}();}();[](){[](){cout<<"やぁ(´・ω・`)"<<endl;}();
 [](){}();}();}();}();[](){}();}();[](){[](){}();[
 ](){}();}();}();}();}();[](){[](){}();[](){}();}(
 );}();}();[](){[](){[](){[](){}();[](){}();}();[]
 (){[](){}();[](){}();}();}();}();}();}();
 }
ラムダ式
• どうしてこうなった
 – 予約語、後方互換…
• まあ、それはおいといて。
ラムダ式の型
• ラムダ式の型がイケてない
cout<<demangle(typeid([](int x){return x+1;}).name())<<endl;




             $ g++ -std=c++0x test.cpp
             $ ./a.out
             main::{lambda(int)#1}


                              ???
ラムダ式の型
• 引数と返り値の型がラムダ式の型に現れない
• そのままでは、引数や返り値の型を利用する
  のが困難
関数の型
• 関数の型を扱いたい時、functionクラスを用
  いると簡単
   – しかし、パフォーマンスの低下
      • インライン展開されないなど
   – 単なるテンプレートパラメータが好まれる
      • 結局ドキュメントとしての型が得られない

template <class A>               template <class F, class A>
A twice(function<A(A)> f, A v)   A twice(F f, A v)
{                                {
  return f(f(v));                  return f(f(v));
}                                }
多相関数
• C++0xのラムダ式は多相にならない
 – 例えば id x = x, id :: forall a . a -> a
 – のようなものが書けない

 – template <class A>[](A x){ return x; }
 – ↑ こういうモノが書けない
テンプレート関数の値
• C++ではテンプレート関数、それ自体は値とし
  て扱えない
 – 具体的な型でインスタンス化しないと値にならない
 – つまり、そのような式に付く型がない

   template <class T>
   T id(T x){ return x; }

   int main()
   {
     // auto f = id; // <- これにつく型は?
     auto g = id<int>; // <- これは int->int
   }
総称型がない
• C++の型には総称型がない
 – すべての型は具体的な型の組み合わせ
 – つまり型パラメータがない
 – 多相関数に付けられる型がないのもまあ頷ける
• ところが、Boost.Lambdaでは多相関数が扱え
  るらしい?
 – 一体どういう事なのか?
Boost.Lambdaでのラムダ式
• 何故かできてしまう
      int main()
      {
        using namespace boost::lambda;
        auto f = _1;         // ¥x -> x
        cout<<f(1)<<endl;    // -> 1
        cout<<f(3.14)<<endl; // -> 3.14
      }


• fの型は何なのか?
 – forall a . a -> a をどうやって表現している?
Boost.Lambdaの型
• 出力してみる
       cout<<demangle(typeid(f).name())<<endl;




       boost::lambda::lambda_functor<boost::la
       mbda::placeholder<1> >

• ??
Boost.Lambdaの型(2)
• もう少し複雑な例
           int main()
           {
             using namespace boost::lambda;
             auto f = cout << _1 << '¥n';
             cout<<demangle(typeid(f).name())<<endl;
           }



 boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::bitwise_action<boost::
 lambda::leftshift_action>,
 boost::tuples::tuple<boost::lambda::lambda_functor<boost::lambda::lambda_functor_base<boost::lambda::b
 itwise_action<boost::lambda::leftshift_action>, boost::tuples::tuple<std::ostream&,
 boost::lambda::lambda_functor<boost::lambda::placeholder<1> >, boost::tuples::null_type,
 boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type,
 boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> > >, char const,
 boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type,
 boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type,
 boost::tuples::null_type> > >
Boost.Lambdaの型(3)
• 型が式を丸ごと持ってた!
 – Expression Template
• 確かにこれで型は付くのだけどインターフェー
  スとしては…
• 型の型を要求する!
パターンマッチ
• オブジェクト指向言語に関数型が取り込まれ
  るときに無視されるものの筆頭その1
• なんでない?
 – なんでない言語が多い?
• なんでない?
 – 絶対必要だと思うんですけども
パターンマッチのような物…?
• なんか提案されているらしい
 – さすがにこれは…
variant<
    int
  , pair<int,double>
  , pair<int,int>
  , pair<double,int>
> var;

switch_(var)
  |= case_< pair<_1,_1> >(...) // matches pair<int,int>
  |= case_< pair<int,_> >(...) // matches pair<int,*>
  |= case_< pair<_,_> >(...) // matches pair<*,*>
  |= case_< int >(...)
;
カリー化
• オブジェクト指向言語に関数型が取り込まれ
  るときに無視されるものの筆頭その2
• もしかしてカリー化軽視されている?
カリー化の旨み
• 純粋関数的に状態を持ちまわるというのが
  とてもやりやすくなる
      cnt acc i = (acc, cnt (acc+i))

      let   a =   cnt 0 in
      let   (v,   b) = a 1 in –- v = 0
      let   (w,   c) = b 2 in –- w = 1
      let   (x,   d) = c 3 in –- x = 3
      ...

• オブジェクト vs 関数
• 関数プログラミングでは、次の状態として
  関数を返すことがよくある(e.g. Iteratee)
まとめ
まとめ
• まだまだ言いたいことはありますが…
 –   iteratorはクソ
 –   例外周りがいろいろクソ
 –   ADLはクソ
 –   moveはクソ
 –   右辺値参照はクソ
 –   GCないとかクソ
 –   スマポはクソ
 –   …
• C++もいいところはあると思います
 – 適当に書いてもそこそこ速いコードが書ける
 – 0xでそれなりに改善されてる
おわりに
• 私がC++から足を洗えるようになるのは
  いつになりますことやら
• せめて0xを・・・!

More Related Content

What's hot

SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介MITSUNARI Shigeo
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案yohhoy
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.kiki utagawa
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)Yuki Tamura
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCamlHaruka Oikawa
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニックGenya Murakami
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門Eita Sugimoto
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013Ryo Sakamoto
 

What's hot (20)

SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
 
Constexpr 中3女子テクニック
Constexpr 中3女子テクニックConstexpr 中3女子テクニック
Constexpr 中3女子テクニック
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 

Viewers also liked

C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorAkira Takahashi
 
Introduction to boost test
Introduction to boost testIntroduction to boost test
Introduction to boost testKohsuke Yuasa
 
Pub/Sub model, msm, and asio
Pub/Sub model, msm, and asioPub/Sub model, msm, and asio
Pub/Sub model, msm, and asioTakatoshi Kondo
 
Boost.Timer
Boost.TimerBoost.Timer
Boost.Timermelpon
 

Viewers also liked (7)

C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
 
Glfw3,OpenGL,GUI
Glfw3,OpenGL,GUI Glfw3,OpenGL,GUI
Glfw3,OpenGL,GUI
 
Introduction to boost test
Introduction to boost testIntroduction to boost test
Introduction to boost test
 
Pub/Sub model, msm, and asio
Pub/Sub model, msm, and asioPub/Sub model, msm, and asio
Pub/Sub model, msm, and asio
 
C++14 enum hash
C++14 enum hashC++14 enum hash
C++14 enum hash
 
Boost.Timer
Boost.TimerBoost.Timer
Boost.Timer
 
Boost sg msgpack
Boost sg msgpackBoost sg msgpack
Boost sg msgpack
 

Similar to C++コミュニティーの中心でC++をDISる

Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話Masanori Masui
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61TATSUYA HAYAMIZU
 
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編道化師 堂華
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform信之 岩永
 
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践LINE Corporation
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道Satoshi Sato
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章Tomonobu_Hirano
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案yushin_hirano
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexprGenya Murakami
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語るAkira Takahashi
 
インデントを減らそう
インデントを減らそうインデントを減らそう
インデントを減らそう知之 朝枝
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編egtra
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#信之 岩永
 
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部Kiyoshi Ogawa
 
C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)Akira Takahashi
 

Similar to C++コミュニティーの中心でC++をDISる (20)

Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~
 
とあるFlashの自動生成
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成
 
(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話
 
わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61
 
C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編
 
.NET Compiler Platform
.NET Compiler Platform.NET Compiler Platform
.NET Compiler Platform
 
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
コンパイルターゲット言語としてのWebAssembly、そしてLINEでの実践
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道
 
第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章第一回Data mining勉強会 -第二章
第一回Data mining勉強会 -第二章
 
第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案第一回Data mining勉強会 -第二章 - 原案
第一回Data mining勉強会 -第二章 - 原案
 
C++の復習
C++の復習C++の復習
C++の復習
 
中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr中3女子が狂える本当に気持ちのいい constexpr
中3女子が狂える本当に気持ちのいい constexpr
 
C++0x 言語の未来を語る
C++0x 言語の未来を語るC++0x 言語の未来を語る
C++0x 言語の未来を語る
 
インデントを減らそう
インデントを減らそうインデントを減らそう
インデントを減らそう
 
C++14言語編
C++14言語編C++14言語編
C++14言語編
 
C++11概要 ライブラリ編
C++11概要 ライブラリ編C++11概要 ライブラリ編
C++11概要 ライブラリ編
 
.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#.NET Core 2.x 時代の C#
.NET Core 2.x 時代の C#
 
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
「C言語規格&MISRA-C:みんなで楽しいCプログラミング」NGK2013B名古屋合同懇親会2013忘年会昼の部
 
Deep Dive C# 6.0
Deep Dive C# 6.0Deep Dive C# 6.0
Deep Dive C# 6.0
 
C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)
 

More from Hideyuki Tanaka

ESPM2 2018 - Automatic Generation of High-Order Finite-Difference Code with T...
ESPM2 2018 - Automatic Generation of High-Order Finite-Difference Code with T...ESPM2 2018 - Automatic Generation of High-Order Finite-Difference Code with T...
ESPM2 2018 - Automatic Generation of High-Order Finite-Difference Code with T...Hideyuki Tanaka
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書くHideyuki Tanaka
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 

More from Hideyuki Tanaka (8)

ESPM2 2018 - Automatic Generation of High-Order Finite-Difference Code with T...
ESPM2 2018 - Automatic Generation of High-Order Finite-Difference Code with T...ESPM2 2018 - Automatic Generation of High-Order Finite-Difference Code with T...
ESPM2 2018 - Automatic Generation of High-Order Finite-Difference Code with T...
 
Xpath in-lens
Xpath in-lensXpath in-lens
Xpath in-lens
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
手書きスライド
手書きスライド手書きスライド
手書きスライド
 
Monad tutorial
Monad tutorialMonad tutorial
Monad tutorial
 
Yesod勉強会
Yesod勉強会Yesod勉強会
Yesod勉強会
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
Icfp2009
Icfp2009Icfp2009
Icfp2009
 

Recently uploaded

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 

Recently uploaded (8)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 

C++コミュニティーの中心でC++をDISる