社内LT#1 至高のイケメン言語C++について
Upcoming SlideShare
Loading in...5
×
 

社内LT#1 至高のイケメン言語C++について

on

  • 3,867 views

12新卒同期向けの社内LTで発表した内容。

12新卒同期向けの社内LTで発表した内容。
5分の制限時間にも関わらずスライド作りすぎてgdgdでした。

Statistics

Views

Total Views
3,867
Views on SlideShare
3,863
Embed Views
4

Actions

Likes
11
Downloads
7
Comments
2

3 Embeds 4

https://twitter.com 2
https://twimg0-a.akamaihd.net 1
https://si0.twimg.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • 私もC++大好きです。でも今日、作成中のアプリーションを違う言語で書いたほうがいいのかなぁと思うことがあって、「C++、ダメ」みたいなキーワードで検索してる内に、このページにたどりつきました。お互いC++erとしてこれからもがんばりましょう。
    Are you sure you want to
    Your message goes here
    Processing…
  • てすと
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

社内LT#1 至高のイケメン言語C++について 社内LT#1 至高のイケメン言語C++について Presentation Transcript

  • 菅原 源一郎
  •  菅原 源一郎といいます
  •  詳しくはwikipediaで! http://ja.wikipedia.org/wiki/C++
  •  組み込み系 ゲーム開発 画像処理 株や為替など、シビアなレイテンシが求められるシ ステム Web系でも局所的にパフォーマンスが欲しい場面で C++を使うのは良くある話
  •  とにかく速いよ!効率的だよ! パフォーマンスの問題で「C++じゃなきゃダメ」はあっても「C++以外じゃなきゃダメ」はほぼない 有名なソフトウェア, システムに多数実績あり
  •  使わない言語機能がパフォーマンスに悪い影響を及 ぼすことはない C言語と同等以下のオーバーヘッドで動作可能 というかC言語とアセンブリレベルで一致する (一部のコストの高い言語機能を除く) テンプレートを使っても最適化でゼロコストになることも多い
  •  例えばイテレータ for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) { ... } 最適化されるとポインタ演算に成り下がる (=アドレス比較ループになる) つまり配列の添字アクセスより速くなる なお、debug_iteratorでは遅い代わりに エラーチェックが入ります
  •  強力な静的型付け OOP (仮想関数, 多重継承も可) テンプレート 演算子オーバーロード 例外処理 名前空間 アロケータ 強力なライブラリ群 (STL, Boost)
  • #include <iostream>int main(){ 「const char*」 「名前空間」 std::cout << "Hello, World!" << std::endl; 「関数ポインタ」 return 0; 「演算子オーバーロード」「参照」} ostreamという「クラス」
  •  この2つで大体事足ります STLはC++の標準ライブラリ BoostはC++標準化委員会のメンバーが立ち上げた、 オープンソースライブラリ
  •  文字列型 動的配列 キュー(両端, 優先順位付) リスト(単方向, 双方向) 集合 連想配列(二分木, ハッシュ) スタック イテレータ(前方, 双方向, ランダムアクセス) ファンクタ
  •  スレッド  シリアライズ マルチインデックスコンテ  共有メモリ ナ  乱数 文字列と数字の相互変換  ベクトル・行列・線形代数 正規表現, 構文解析  無名関数・クロージャ メモリプール  タプル スマートポインタ  双方向マップ Flyweight  循環バッファ ネットワーク・非同期IO  侵入式コンテナ ファイル・ディレクトリ操  単体テスト 作 XML, INI, JSONの読み書き
  • /home/kik/include/boost/fusion/functional/invocation/invoke.hpp: In static member function ‘static typename boost::function_types::result_type<Function>::type boost::fusion::detail::invoke_mem_fn<Function, Sequence, 8, false>::call(F&, Sequence&) [with F = void (expr::*)(int_lit, peg::sor, open_paren, op, expr&, const expr&, close_paren), Function = void (expr::*)(int_lit, peg::sor, open_paren, op, expr&, const expr&, close_paren), Sequence = const boost::fusion::joint_view<const boost::fusion::single_view<expr*>, const boost::fusion::vector<token<int_lit_s>, peg::sor, token<peg::chr<peg::chr_range_constraint<(, (> > >, token<op_s>, expr, expr, token<peg::chr<peg::chr_range_constraint<), )> > >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >]’:/home/kik/include/boost/fusion/functional/invocation/invoke.hpp:178: instantiated from ‘typename boost::fusion::result_of::invoke<Function, const Sequence>::type boost::fusion::invoke(Function, const Sequence&) [with Function = void (expr::*)(int_lit, peg::sor, open_paren, op, expr&, const expr&, close_paren), Sequence = boost::fusion::joint_view<const boost::fusion::single_view<expr*>, const boost::fusion::vector<token<int_lit_s>, peg::sor, token<peg::chr<peg::chr_range_constraint<(, (> > >, token<op_s>, expr, expr, token<peg::chr<peg::chr_range_constraint<), )> > >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >]’peg.hpp:228: instantiated from ‘bool peg::pi::parse_fun(Fun, T&, Input&, Input) [with Fun = void (expr::*)(int_lit, peg::sor, open_paren, op, expr&, const expr&, close_paren), T = expr, Input = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]’
  • C++とは忌み子であり仇花でありレガシーでありそしてやはり、そこから生み出される物もまた、クソの山になりがちであるというのはどうやら確からしい。学習という側面においても、数百ページにも及ぶ経典を何巻も読破し、膨大な量の術式を自ら書き、疲れ、疲れ果て、目は乾き、指は震え、他の言語に浮気をし、その素晴らしさに震え、打ちのめされ、しかしまた不屈の怨念によりC++の場に舞い戻りというような試練を乗り越えることでようやく、最低限は使えるという段階になるのである。 アンサイクロペディア「C++」より http://ja.uncyclopedia.info/wiki/C++
  •  この言葉自体最近のライトな言語にはない……? GCがないので、うっかり解放忘れするとどんどんメ モリにゴミが溜まっていく もちろん多重解放でも死ぬ 即死はせずに、しばらく稼働した後にゆるやかに死ぬケースが多いので原因を探るのに苦労する
  •  違うコンパイラでビルドしたライブラリをリンクしようとするとエラーが出る よって、新しいライブラリを使おうと思ったら自分でソースからビルドする必要がある コンパイラがアップデートするたびにアプリケーションとライブラリ全体を再コンパイルする羽目に
  •  std::unique_ptr, boost::shared_ptrなど std::unique_ptr<int> ptr( new int() ); のように使う newしたものを必ず手動でdeleteする、なんて前時代 的 むしろ手動のdeleteが含まれているコードは、その 時点で既に間違ってると思って良いくらい
  •  2011年時点でのISO標準 C++0xなんて呼ばれてました さっきのstd::unique_ptrもC++11から導入 型推論, foreach, move, ラムダ式, 標準ライブラリの 拡張など ただ、その仕様全てにキチンと対応したコンパイラ が2012年4月現在でまだ存在しなかったりする
  •  VM言語, スクリプト言語派との戦争は続く……
  • ロベールのC++入門講座 Effective C++ 原著第3版
  • C++ Coding Standards―101のルール、ガイドラC++の設計と進化 イン、ベストプラクティス