boost and c++11

983 views
853 views

Published on

0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
983
On SlideShare
0
From Embeds
0
Number of Embeds
15
Actions
Shares
0
Downloads
17
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

boost and c++11

  1. 1. Modern C++ Programming and New C++ International Standard (C++11) ES松浦 twitter:@matu_ani 1 2011年11月30日水曜日
  2. 2. 自己紹介? 『ストラウストラップのプログラミング入門』 •やっとでました!! •2011年 8月 発売 •怒涛の1200ページ! •通称:鈍器w •8,190円 たけーっ! いや、いち監修メンバーでしかないんですが... つれー、3回通しで読んだからつれー。最後の2ヶ月で2回読んだもんな、つれー。原著もなー 2 2011年11月30日水曜日
  3. 3. Agenda •今こそC++の魅力をお伝えしたい。 • 改めてC++の紹介をして、 • C++がサポートするプログラミングパラダイ ムについて、少しkwsk • boostや新しい国際標準(通称C++11)につ いて軽く紹介 3 2011年11月30日水曜日
  4. 4. Content • 歴史 • C++の使われどころ • プログラミング・パラダイム • boost おさわりだけ • C++11ソフトタッチだけ 4 2011年11月30日水曜日
  5. 5. 歴史 history 5 2011年11月30日水曜日
  6. 6. 6 2011年11月30日水曜日
  7. 7. Common History • • 1979:C with Classes • • • 1998:初の国際標準規格(C++98) 1990:『The Annotated C++ Reference Manual (ARM)』 2003:マイナーバージョンアップ(C++03) 2011:初のメジャーバージョンアップ(C++11) 7 2011年11月30日水曜日
  8. 8. Common History • • 1979:C with Classes • • • 1998:初の国際標準規格(C++98) 1990:『The Annotated C++ Reference Manual (ARM)』 2003:マイナーバージョンアップ(C++03) 2011:初のメジャーバージョンアップ(C++11) C++98以降、boostという拡張ライブラリ 開発を通してC++は成長していた。 そして、C++11にて別言語?というくらい の大胆な進化を遂げた。 7 2011年11月30日水曜日
  9. 9. C++の使われど ころ What is Product that is using C++ 8 2011年11月30日水曜日
  10. 10. The Programming Languages Beacon • http://www.lextrait.com/vincent/ implementations.html 9 2011年11月30日水曜日
  11. 11. The Programming Languages Beacon • http://www.lextrait.com/vincent/ implementations.html OS/ブラウザ/GUI/オフィス/DBMS/コンパイ ラ/Game/JavaVM/Webプラットフォーム/ などなど、主要なソフトウェアプロダクトはC+ +で書かれている。 9 2011年11月30日水曜日
  12. 12. Why C++ is not popular? • • 『C++はなぜ人気がないのか』 • http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/ 20050215/156201/ 「日本でC++の評価が低いのは,こうしたソフトの大部分 が海外製であることの裏返しではないか,とまで思える」 10 2011年11月30日水曜日
  13. 13. Why C++ is not popular? • • 『C++はなぜ人気がないのか』 • http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/ 20050215/156201/ 「日本でC++の評価が低いのは,こうしたソフトの大部分 が海外製であることの裏返しではないか,とまで思える」 • 個人的には逆に、 • 「C++大好きなヤツが少ないから、こうした (大切な)ソフトの大部分が海外製」なんじゃ ね?とか思いますです、ハイ。 10 2011年11月30日水曜日
  14. 14. C++ is むずい?? その全てをマスターしようとすると 一人の人間の限界を軽く超えるw(私感) しかしながら、 C++が備える言語機能、プログラミングパラダ イム、イディオムにより、安全で効率のよいプロ グラムを簡単に記述することが可能。 → VBやSQLのような書き方が可能(EDSLとか言います) → ただし、ライブラリアンには高度なスキルが要求される → だからこそ?Geek達を惹きつけてやまない 11 2011年11月30日水曜日
  15. 15. プログラミング・ パラダイム Programming Paradigm 12 2011年11月30日水曜日
  16. 16. C++ has Multi Programming Paradigm 13 2011年11月30日水曜日
  17. 17. C++ has Multi Programming Paradigm 手続き型 13 2011年11月30日水曜日
  18. 18. C++ has Multi Programming Paradigm 手続き型 オブジェクト指向 13 2011年11月30日水曜日
  19. 19. C++ has Multi Programming Paradigm 手続き型 オブジェクト指向 ジェネリック 13 2011年11月30日水曜日
  20. 20. C++ has Multi Programming Paradigm 手続き型 オブジェクト指向 ジェネリック メタプログラミング 13 2011年11月30日水曜日
  21. 21. C++ has Multi Programming Paradigm 手続き型 オブジェクト指向 ジェネリック メタプログラミング 関数型 13 2011年11月30日水曜日
  22. 22. 復習:ジェネリック C#やJavaも備えている機能ですが、、、?? List<T> lst ; ジェネリックは、単なる Parameterized Type による汎用データ構造だけを指すわけ ではない。 14 2011年11月30日水曜日
  23. 23. 復習:ジェネリック C#やJavaも備えている機能ですが、、、?? List<T> lst ; ジェネリックは、単なる Parameterized Type による汎用データ構造だけを指すわけ ではない。 真の意味はデータと処理の分離 である 14 2011年11月30日水曜日
  24. 24. 復習:オブジェクト指向 オブジェクト命! で、オブジェクトって なんだっけ? • データと処理(操作)が一緒になったもの • データが主役で処理はそれに付随するもの • モノとその振る舞い:オブジェクト 15 2011年11月30日水曜日
  25. 25. 復習:オブジェクト指向 オブジェクト命! で、オブジェクトって なんだっけ? • データと処理(操作)が一緒になったもの • データが主役で処理はそれに付随するもの • モノとその振る舞い:オブジェクト ソフトウェアではそれが常に真だろうか? つーか、現実世界でどーなの? 15 2011年11月30日水曜日
  26. 26. 例:探す template<typename Iterator, typename Tp> Iterator find(Iterator first, Iterator last, const Tp& val) { while (first != last && !(*first == val)) ++first; return first; } • • • • 探す条件例 : a == b 要素をたどる: ++a 要素を参照する: *a; 上記さえ満たせばあらゆる型に適用可能 16 2011年11月30日水曜日
  27. 27. 例:探す template<typename Iterator, typename Tp> Iterator find(Iterator first, Iterator last, const Tp& val) { while (first != last && !(*first == val)) ++first; return first; } • • • • 探す条件例 : a == b 要素をたどる: ++a 要素を参照する: *a; 上記さえ満たせばあらゆる型に適用可能 「探す」とは、ある条件に合致する要素を 見つけること。それはデータ型には依存し ない。# 「探す」の場合、データ構造には依存する事に注意 16 2011年11月30日水曜日
  28. 28. いろいろ探す // svから"X"を探す vector<string> sv; ・・・ vector<string>::iterator i = find(sv.begin(), sv.end(), "X"); // arから5を探す int ar[10]; ・・・ int* pi = find( ar, ar+10, 5); 17 2011年11月30日水曜日
  29. 29. いろいろ探す // svから"X"を探す vector<string> sv; ・・・ vector<string>::iterator i = find(sv.begin(), sv.end(), "X"); // arから5を探す int ar[10]; ・・・ int* pi = find( ar, ar+10, 5); 17 2011年11月30日水曜日
  30. 30. いろいろ探す // svから"X"を探す vector<string> sv; ・・・ vector<string>::iterator i = find(sv.begin(), sv.end(), "X"); // arから5を探す int ar[10]; ・・・ int* pi = find( ar, ar+10, 5); 17 2011年11月30日水曜日
  31. 31. いろいろ探す // svから"X"を探す vector<string> sv; ・・・ vector<string>::iterator i = find(sv.begin(), sv.end(), "X"); // arから5を探す int ar[10]; ・・・ int* pi = find( ar, ar+10, 5); findは一回だけ書けば使い回し可能 「探す」は、データ型が変わっても不変である。 17 2011年11月30日水曜日
  32. 32. Generic Programing • それはC++98のSTLで示された。 • オブジェクト指向に対するアンチテーゼ • • オブジェクト指向は少なくとも銀の弾ではない 事実、現代のプログラミングモデルは継承を積極的に は採用しない。むしろダック・タイピングを重視する 方向にある。 • 使いたいアルゴリズムを決めよ。様々な 型、データ構造を操作対象にできるよう、 それらをパラメータ化せよ。 • Bjame Stroustrup 18 2011年11月30日水曜日
  33. 33. その他のパラダイム • メタプログラミング • プログラム内にプログラムを生成する(言語内言 語)。これは闇の世界に突入するので次の機会に でも • 関数型 • 並列プログラミングの発展と共に非常に重要なパ ラダイムとなった。 関数型自体は池田くんのプ レゼン参照。C++はラムダやfunction型でそれ をサポートする。今日はあとで、チョットだけ。 19 2011年11月30日水曜日
  34. 34. boost C++98以降の、C++の進化 20 2011年11月30日水曜日
  35. 35. boost • C++の先駆的な開発者のコミュニティ、及びそのコ ミュニティによって公開されているオープンソース ライブラリのことを指す。コミュニティとしての BoostはC++標準化委員会の委員により設立されて おり、現在でもその多くが構成員として留まってい る。このような経緯もあってBoostコミュニティは C++の標準化に対してかなりの影響力を有してい る。実際に標準化委員会の発表した「TR1」の 2/3以上がBoostライブラリを基にしている。 • Boostはテンプレートなどを活用して積極的にメタ プログラミングやジェネリックプログラミングを取 り入れていこうという傾向がある。 21 2011年11月30日水曜日
  36. 36. matzのC++紹介 • 「Boost C++ ライブラリは古典的な C+ + 観からは想像もできないような総称型 プログラミングの世界を見せてくれてい ます。」 • 「オブジェクト指向機能もある総称型プ ログラミング言語。これがこれからの C ++ の立ち位置になるのかもしれません」 • http://jp.rubyist.net/magazine/?0018-Legwork 22 2011年11月30日水曜日
  37. 37. 一枚でboost (笑) • • • • • • • メモリ管理 • scoped_ptr, scoped_array, shared_ptr, shared_array, weak_ptr 入出力 • asio, filesystem, iostreams, serialization 小道具 • foreach, scoped_exit, 関数型: • function, lambda, signals2 文字列系: • format, regex, tokenizer 並列・並行 • interprocess, thread 他に、数学、メタプログラミング、などなど、膨大なライブラリです • https://sites.google.com/site/boostjp/ 23 2011年11月30日水曜日
  38. 38. C++11 2011年、新国際標準 24 2011年11月30日水曜日
  39. 39. C++11 • ISO/IEC 14882:2011 は、2011年時 点で最新のプログラミング言語C++の ISO標準である。省略して C++11 と呼 ばれる。規格の策定中は2009年中の標 準化を目指していたため、C++0xとい う仮称で呼ばれていた。 • ISO/IEC 14882:2003 (C++03) に代 わるものとして、2011年8月12日に ISOによって承認された。 25 2011年11月30日水曜日
  40. 40. 抜粋 • • • • • • • • • • • • • 右辺値参照、Moveセマンティクス Range-base for lambda 型推論 nullptr decltype char16_t, char_32_t, raw string literal constexpr 可変引数テンプレート メンバー初期化子 initializer_list ガベージコレクションと到達可能性ベースリーク検知の最小支援 スマートポインタ、thread、時間、などboostからたくさん 26 2011年11月30日水曜日
  41. 41. nullptr これまで、NULLマクロ、0リテラル等でヌルポインタを 表現していた。しかし、NULLマクロと0リテラルは、テ ンプレートで使用するとint型に推論されてしまうという 問題ががが。→ nullリテラル導入されますた。 int* p = nullptr; 27 2011年11月30日水曜日
  42. 42. 右辺値参照、Moveセマ ンティクス • 個人的にはC++11最大のトピック • ポインタ、参照に次ぐ、第三の文法、 && アンパサを二個 struct X{ X(std::vector<int>&& v){...} }; 28 2011年11月30日水曜日
  43. 43. 右辺値参照、Moveセマ ンティクス • 個人的にはC++11最大のトピック • ポインタ、参照に次ぐ、第三の文法、 && アンパサを二個 struct X{ X(std::vector<int>&& v){...} }; 説明すると何時間もかかるから このへんでやめとく(笑) 28 2011年11月30日水曜日
  44. 44. Range-base for // コンテナ vector<int> v={1,2,3}; for(int value : v) {cout << value << endl;} // 1 // 2 // 3 // 配列にも int ar[]={1,2,3}; for(int value : ar) {cout << value << endl;} // 1 // 2 // 3 29 2011年11月30日水曜日
  45. 45. 型推論 かなりうざかっった vector<int> v; vector<int>::iterator it = v.begin(); これからは vector<int> v; auto it = begin(v); // v.begin(); と同じ •従来のauto は廃止された。 •動的言語の要求の多くは型推論で解決す る。# と言われている 30 2011年11月30日水曜日
  46. 46. lambda vector<int> v; find_if(v.begin(), v.end(), [](int x) -> bool { return x % 2 == 0; }); •ラムダの外の変数を参照可能 •コピーでもリファレンスでも •クロージャも書ける 31 2011年11月30日水曜日
  47. 47. ラムダと関数型 // 関数型を明示 function<int(int,int)> mul = [](int x,int y)->int{return x*y;}; mul(3,3) // 9 // 戻り値省略:これと同じ解釈 // auto add = [](int x, int y) ->decltype(x+y){return x+y;}; auto add = [](int x, int y){return x+y;}; add(3,3) // 6 // キャプチャとクロージャ int v = 100 auto add2 = [=](int x){return v+y;}; add2(3) // 103 最小のラムダ式 auto f = [](){}; 32 2011年11月30日水曜日
  48. 48. 関数型ふう遅延評価 double div( int x, function<int()>& f){ if(x== 0) return NaN; return f()/x; // この時点ではじめてfが評価される } int x = ... auto result = div( x, [](){ int ret; /*重い処理*/ return ret; } ); 33 2011年11月30日水曜日
  49. 49. Smart Pointer { shared_ptr<A> x(new A); x->func(); // ポインタと同じように使える shared_ptr<A> y = x; // 代入(所有権) } // スコープから抜けると自動でdelete // make_sharedというヘルパ shared_ptr<A> x = make_shared<A>(); // make_sharedなら型推論も auto x = make_shared<A>(); scoped_ptr、week_ptrとかもあり。 auto_ptrはdeprecatedです。unique_ptr使ってね。 34 2011年11月30日水曜日
  50. 50. まとめ • C++は世の中を支えている。(個人的 に一番面白いドメイン) • boostは基本使う。つか、使え • C++11は主要ベンダーがサポートし始 めたけど、実用レベルは? • 組み込みもC++普通(話してない) • 並列プログラミングも大事(話してな い) 35 2011年11月30日水曜日
  51. 51. おつかれさま!! 36 2011年11月30日水曜日

×