More Related Content
Similar to boost and c++11
Similar to boost and c++11 (20)
boost and c++11
- 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. 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日水曜日
- 11. The Programming
Languages Beacon
• http://www.lextrait.com/vincent/
implementations.html
OS/ブラウザ/GUI/オフィス/DBMS/コンパイ
ラ/Game/JavaVM/Webプラットフォーム/
などなど、主要なソフトウェアプロダクトはC+
+で書かれている。
9
2011年11月30日水曜日
- 12. Why C++ is not
popular?
•
•
『C++はなぜ人気がないのか』
•
http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/
20050215/156201/
「日本でC++の評価が低いのは,こうしたソフトの大部分
が海外製であることの裏返しではないか,とまで思える」
10
2011年11月30日水曜日
- 13. Why C++ is not
popular?
•
•
『C++はなぜ人気がないのか』
•
http://itpro.nikkeibp.co.jp/free/ITPro/OPINION/
20050215/156201/
「日本でC++の評価が低いのは,こうしたソフトの大部分
が海外製であることの裏返しではないか,とまで思える」
• 個人的には逆に、
• 「C++大好きなヤツが少ないから、こうした
(大切な)ソフトの大部分が海外製」なんじゃ
ね?とか思いますです、ハイ。
10
2011年11月30日水曜日
- 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. 例:探す
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日水曜日
- 32. Generic Programing
• それはC++98のSTLで示された。
• オブジェクト指向に対するアンチテーゼ
•
•
オブジェクト指向は少なくとも銀の弾ではない
事実、現代のプログラミングモデルは継承を積極的に
は採用しない。むしろダック・タイピングを重視する
方向にある。
• 使いたいアルゴリズムを決めよ。様々な
型、データ構造を操作対象にできるよう、
それらをパラメータ化せよ。
•
Bjame Stroustrup
18
2011年11月30日水曜日
- 36. matzのC++紹介
• 「Boost C++ ライブラリは古典的な C+
+ 観からは想像もできないような総称型
プログラミングの世界を見せてくれてい
ます。」
• 「オブジェクト指向機能もある総称型プ
ログラミング言語。これがこれからの C
++ の立ち位置になるのかもしれません」
•
http://jp.rubyist.net/magazine/?0018-Legwork
22
2011年11月30日水曜日
- 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日水曜日
- 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日水曜日
- 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日水曜日
- 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. 関数型ふう遅延評価
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. 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日水曜日