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

Hideyuki Tanaka
Hideyuki TanakaPreferred Infrastracture
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を・・・!
1 de 66

Recomendados

中3女子でもわかる constexpr por
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexprGenya Murakami
48.9K vistas100 diapositivas
ゲーム開発者のための C++11/C++14 por
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14Ryo Suzuki
103.5K vistas157 diapositivas
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ por
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだconstexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだ
constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。cpuの嬌声が聞こえてきそうだGenya Murakami
52.4K vistas106 diapositivas
Quine・難解プログラミングについて por
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについてmametter
15.3K vistas63 diapositivas
C++の話(本当にあった怖い話) por
C++の話(本当にあった怖い話)C++の話(本当にあった怖い話)
C++の話(本当にあった怖い話)Yuki Tamura
27.5K vistas70 diapositivas
組み込みでこそC++を使う10の理由 por
組み込みでこそC++を使う10の理由組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由kikairoya
27K vistas32 diapositivas

Más contenido relacionado

La actualidad más candente

明日使えないすごいビット演算 por
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算京大 マイコンクラブ
63.4K vistas60 diapositivas
ドット絵でプログラミング!難解言語『Piet』勉強会 por
ドット絵でプログラミング!難解言語『Piet』勉強会ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会京大 マイコンクラブ
7.9K vistas45 diapositivas
C++ マルチスレッド 入門 por
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門京大 マイコンクラブ
57.8K vistas53 diapositivas
llvm入門 por
llvm入門llvm入門
llvm入門MITSUNARI Shigeo
16.6K vistas19 diapositivas
関数プログラミング入門 por
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
21.8K vistas101 diapositivas
すごい constexpr たのしくレイトレ! por
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
25.6K vistas206 diapositivas

La actualidad más candente(20)

関数プログラミング入門 por Hideyuki Tanaka
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka21.8K vistas
すごい constexpr たのしくレイトレ! por Genya Murakami
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
Genya Murakami25.6K vistas
Intro to SVE 富岳のA64FXを触ってみた por MITSUNARI Shigeo
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo11.6K vistas
何となく勉強した気分になれるパーサ入門 por masayoshi takahashi
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
masayoshi takahashi35.8K vistas
関数型プログラミング入門 with OCaml por Haruka Oikawa
関数型プログラミング入門 with OCaml関数型プログラミング入門 with OCaml
関数型プログラミング入門 with OCaml
Haruka Oikawa12.4K vistas
最新C++事情 C++14-C++20 (2018年10月) por Akihiko Matuura
最新C++事情 C++14-C++20 (2018年10月)最新C++事情 C++14-C++20 (2018年10月)
最新C++事情 C++14-C++20 (2018年10月)
Akihiko Matuura1.7K vistas
自動定理証明の紹介 por Masahiro Sakai
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介
Masahiro Sakai8.3K vistas
組み込み関数(intrinsic)によるSIMD入門 por Norishige Fukushima
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima47.5K vistas
Visual C++で使えるC++11 por nekko1119
Visual C++で使えるC++11Visual C++で使えるC++11
Visual C++で使えるC++11
nekko111936.8K vistas
20分くらいでわかった気分になれるC++20コルーチン por yohhoy
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy12.9K vistas
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜 por Preferred Networks
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks14.6K vistas
LR parsing por ichikaz3
LR parsingLR parsing
LR parsing
ichikaz310.2K vistas
C++ ポインタ ブートキャンプ por Kohsuke Yuasa
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa11K vistas

Destacado

C++14 solve explicit_default_constructor por
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorAkira Takahashi
7.3K vistas7 diapositivas
Glfw3,OpenGL,GUI por
Glfw3,OpenGL,GUI Glfw3,OpenGL,GUI
Glfw3,OpenGL,GUI hira_kuni_45
3.1K vistas44 diapositivas
Introduction to boost test por
Introduction to boost testIntroduction to boost test
Introduction to boost testKohsuke Yuasa
4.1K vistas122 diapositivas
Pub/Sub model, msm, and asio por
Pub/Sub model, msm, and asioPub/Sub model, msm, and asio
Pub/Sub model, msm, and asioTakatoshi Kondo
1.6K vistas42 diapositivas
C++14 enum hash por
C++14 enum hashC++14 enum hash
C++14 enum hashAkira Takahashi
8.1K vistas9 diapositivas
Boost.Timer por
Boost.TimerBoost.Timer
Boost.Timermelpon
1.3K vistas42 diapositivas

Destacado(7)

C++14 solve explicit_default_constructor por Akira Takahashi
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
Akira Takahashi7.3K vistas
Glfw3,OpenGL,GUI por hira_kuni_45
Glfw3,OpenGL,GUI Glfw3,OpenGL,GUI
Glfw3,OpenGL,GUI
hira_kuni_453.1K vistas
Introduction to boost test por Kohsuke Yuasa
Introduction to boost testIntroduction to boost test
Introduction to boost test
Kohsuke Yuasa4.1K vistas
Pub/Sub model, msm, and asio por Takatoshi Kondo
Pub/Sub model, msm, and asioPub/Sub model, msm, and asio
Pub/Sub model, msm, and asio
Takatoshi Kondo1.6K vistas
Boost.Timer por melpon
Boost.TimerBoost.Timer
Boost.Timer
melpon1.3K vistas

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

競技プログラミングのためのC++入門 por
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
32.9K vistas63 diapositivas
Unity2015_No10_~UGUI&Audio~ por
Unity2015_No10_~UGUI&Audio~Unity2015_No10_~UGUI&Audio~
Unity2015_No10_~UGUI&Audio~CHY72
1.1K vistas49 diapositivas
とあるFlashの自動生成 por
とあるFlashの自動生成とあるFlashの自動生成
とあるFlashの自動生成Akineko Shimizu
1.7K vistas69 diapositivas
(ゲームじゃない方の)switchで遊びたい話 por
(ゲームじゃない方の)switchで遊びたい話(ゲームじゃない方の)switchで遊びたい話
(ゲームじゃない方の)switchで遊びたい話Masanori Masui
256 vistas25 diapositivas
わんくま同盟大阪勉強会#61 por
わんくま同盟大阪勉強会#61わんくま同盟大阪勉強会#61
わんくま同盟大阪勉強会#61TATSUYA HAYAMIZU
957 vistas66 diapositivas
C++ tips 3 カンマ演算子編 por
C++ tips 3 カンマ演算子編C++ tips 3 カンマ演算子編
C++ tips 3 カンマ演算子編道化師 堂華
6.2K vistas24 diapositivas

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

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

Más de Hideyuki Tanaka

ESPM2 2018 - Automatic Generation of High-Order Finite-Difference Code with T... por
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
1.9K vistas29 diapositivas
Xpath in-lens por
Xpath in-lensXpath in-lens
Xpath in-lensHideyuki Tanaka
5.7K vistas22 diapositivas
IdrisでWebアプリを書く por
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書くHideyuki Tanaka
19.4K vistas27 diapositivas
手書きスライド por
手書きスライド手書きスライド
手書きスライドHideyuki Tanaka
4.2K vistas15 diapositivas
Monad tutorial por
Monad tutorialMonad tutorial
Monad tutorialHideyuki Tanaka
13.3K vistas79 diapositivas
Yesod勉強会 por
Yesod勉強会Yesod勉強会
Yesod勉強会Hideyuki Tanaka
9.5K vistas66 diapositivas

Más de Hideyuki Tanaka(7)

Último

概念モデリングワークショップ 設計編 por
概念モデリングワークショップ 設計編概念モデリングワークショップ 設計編
概念モデリングワークショップ 設計編Knowledge & Experience
10 vistas37 diapositivas
概念モデリングワークショップ 基礎編 por
概念モデリングワークショップ 基礎編概念モデリングワークショップ 基礎編
概念モデリングワークショップ 基礎編Knowledge & Experience
19 vistas71 diapositivas
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化 por
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化Knowledge & Experience
8 vistas34 diapositivas
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料) por
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
217 vistas33 diapositivas
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料) por
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
185 vistas63 diapositivas
さくらのひやおろし2023 por
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023法林浩之
83 vistas58 diapositivas

Último(8)

「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化 por Knowledge & Experience
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
「概念モデリング自動化に向けた第一歩」 ~ ChatGPT・Open AI 活用による開発対象のモデル化
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料) por NTT DATA Technology & Innovation
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料) por NTT DATA Technology & Innovation
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
さくらのひやおろし2023 por 法林浩之
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023
法林浩之83 vistas
01Booster Studio ご紹介資料 por ssusere7a2172
01Booster Studio ご紹介資料01Booster Studio ご紹介資料
01Booster Studio ご紹介資料
ssusere7a2172220 vistas

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