SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Boostライブラリ一周の旅
高橋晶(Akira Takahashi)
id:faith_and_brave
@cpp_akira
Boost.勉強会#11 2013/06/01(土)
ver.1.53.0
はじめに
この発表は、Boostのなるべく全てのライブラリを紹介して
いこうという企画です。
毎回、これまでの差分を紹介し、全体にマージした資料を
同時に公開しています。
前回は、Boost 1.50.0までのライブラリを紹介しました。
今回は1.51.0と1.53.0で追加されたライブラリを紹介して
いきます。
Boostとは
• C++標準化委員会の人たちが作ったC++のライブラリ群
• 普段のプログラミング全般で使える基本的なものから、専門
特化したものまでいろいろなライブラリがある
• Google、Intel、Adobeも開発に関わっている
• ライセンスはBoost Software License 1.0
– 無償で商用利用可能
– 著作権表記の必要なし
– ソースコードの改変自由
本日紹介するライブラリ
1. Atomic
2. Lockfree
3. Coroutine
4. Multiprecision
5. Odeint
Atomic
共有データ
int data;
atomic<bool> ready(false); // アトミックなbool型変数
C++11アトミックライブラリのC++03実装。
スレッド1
while (!ready.load(memory_order_acquire)) {} // 書き込まれるまで待機
std::cout << data << std::endl; // 3が出力されることが保証される
スレッド2
data = 3;
ready.store(true, memory_order_release); // 書き込み
Lockfree
lockfree::queue<int> que(128);
void producer() {
for (int i = 0;; ++i) {
while (!que.push(i)) {}
}
}
void consumer() {
for (;;) {
int x = 0;
if (que.pop(x))
std::cout << x << std::endl;
}
}
Boost.Atomicベースのロックフリーコンテナライブラリ。
キュー、スタック、優先順位付きキューの実装がある。
Coroutine
typedef coroutine<void()> coroutine;
void f(coroutine::caller_type& coro) {
for (int i = 0; i < 10; ++i) {
std::cout << "a ";
coro(); // 中断
}
}
coroutine c(f); // 関数f()をコルーチン実行可能にする
for (int i = 0; i < 10; ++i) {
std::cout << "b ";
c(); // 再開
}
処理の中断と再開を制御する、コルーチンのライブラリ。
a b a b a b a b …
Multiprecision
// 100の階乗を計算する
cpp_int x = 1;
for(std::size_t i = 1; i <= 100; ++i)
x *= i;
std::cout << x << std::endl;
多倍長演算ライブラリ。無限長の整数などを扱える。
9332621544394415268169923885626670049071596826438162146859296389521759
9993229915608941463976156518286253697920827223758251185210916864000000
000000000000000000
Odeint
const double sigma = 10.0;
const double R = 28.0;
const double b = 8.0 / 3.0;
typedef boost::array< double , 3 > state_type;
void lorenz( const state_type &x , state_type &dxdt , double t ) {
dxdt[0] = sigma * ( x[1] - x[0] );
dxdt[1] = R * x[0] - x[1] - x[0] * x[2];
dxdt[2] = -b * x[2] + x[0] * x[1];
}
void write_lorenz( const state_type &x , const double t )
{ cout << t << '¥t' << x[0] << '¥t' << x[1] << '¥t' << x[2] << endl; }
state_type x = { 10.0 , 1.0 , 1.0 }; // initial conditions
integrate( lorenz , x , 0.0 , 25.0 , 0.1 , write_lorenz );
常微分方程式を解くためのライブラリ。カオス理論、振り
子の計算など。以下はローレンツ方程式の例。
Odeint
const double sigma = 10.0;
const double R = 28.0;
const double b = 8.0 / 3.0;
typedef boost::array< double , 3 > state_type;
void lorenz( const state_type &x , state_type &dxdt , double t ) {
dxdt[0] = sigma * ( x[1] - x[0] );
dxdt[1] = R * x[0] - x[1] - x[0] * x[2];
dxdt[2] = -b * x[2] + x[0] * x[1];
}
void write_lorenz( const state_type &x , const double t )
{ cout << t << '¥t' << x[0] << '¥t' << x[1] << '¥t' << x[2] << endl; }
state_type x = { 10.0 , 1.0 , 1.0 }; // initial conditions
integrate( lorenz , x , 0.0 , 25.0 , 0.1 , write_lorenz );
常微分方程式を解くためのライブラリ。カオス理論、振り
子の計算など。以下はローレンツ方程式の例。
まとめ(?)
• ここでは差分のみを紹介しましたが、1.53.0までのライブラリ
をまとめたスライドも別途用意しています。
全体を知りたい方はそちらを参照してください。
Boostライブラリ一周の旅 1.53.0(merge)
http://www.slideshare.net/faithandbrave/boost-tour-1530-
merge

Weitere ähnliche Inhalte

Was ist angesagt?

HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
akirahiguchi
 
月間10億pvを支えるmongo db
月間10億pvを支えるmongo db月間10億pvを支えるmongo db
月間10億pvを支えるmongo db
Yuji Isobe
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
Eiji Kuroda
 
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
Shinichi Hirauchi
 

Was ist angesagt? (20)

データベースのお話
データベースのお話データベースのお話
データベースのお話
 
Unix
UnixUnix
Unix
 
mishimasyk#4
mishimasyk#4mishimasyk#4
mishimasyk#4
 
boost tour 1.48.0 all
boost tour 1.48.0 allboost tour 1.48.0 all
boost tour 1.48.0 all
 
Das 2015
Das 2015Das 2015
Das 2015
 
Synthesijer fpgax 20150201
Synthesijer fpgax 20150201Synthesijer fpgax 20150201
Synthesijer fpgax 20150201
 
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
“bcache”を使ってSSDの速さと HDDの大容量のいいとこどり 2015-12-12
 
Custom Package Building with Poudriere
Custom Package Building with PoudriereCustom Package Building with Poudriere
Custom Package Building with Poudriere
 
Memory sanitizer
Memory sanitizerMemory sanitizer
Memory sanitizer
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Kernel fcache-bug
Kernel fcache-bugKernel fcache-bug
Kernel fcache-bug
 
月間10億pvを支えるmongo db
月間10億pvを支えるmongo db月間10億pvを支えるmongo db
月間10億pvを支えるmongo db
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
 
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
軽量EvernoteクライアントSmartEverにおけるアプリ高速化の工夫と課題
 
B lack jumbodog 運転と改造のすすめ
B lack jumbodog 運転と改造のすすめB lack jumbodog 運転と改造のすすめ
B lack jumbodog 運転と改造のすすめ
 
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜHUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
HUで6000万pvのトラフィックを捌くまでに起ったことをありのままに話すぜ
 
シェル入門
シェル入門シェル入門
シェル入門
 
はじめてのCouch db
はじめてのCouch dbはじめてのCouch db
はじめてのCouch db
 
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
2012 osc北海道 セッション資料「blackjumbodog利用のすすめ」
 

Andere mochten auch

Grafico diario del dax perfomance index para el 07 11-2012
Grafico diario del dax perfomance index para el 07 11-2012Grafico diario del dax perfomance index para el 07 11-2012
Grafico diario del dax perfomance index para el 07 11-2012
Experiencia Trading
 
日本語テスト 空白あり
日本語テスト 空白あり日本語テスト 空白あり
日本語テスト 空白あり
jt_test
 

Andere mochten auch (17)

Boost.Logとfluentdで始めるログ活用術
Boost.Logとfluentdで始めるログ活用術Boost.Logとfluentdで始めるログ活用術
Boost.Logとfluentdで始めるログ活用術
 
Boost study#4
Boost study#4Boost study#4
Boost study#4
 
On the frontier of genotype-2-phenotype data integration
On the frontier of genotype-2-phenotype data integrationOn the frontier of genotype-2-phenotype data integration
On the frontier of genotype-2-phenotype data integration
 
Talk nerdy to me!
Talk nerdy to me!Talk nerdy to me!
Talk nerdy to me!
 
Estudiante virtual exioso
Estudiante virtual exiosoEstudiante virtual exioso
Estudiante virtual exioso
 
Espirometría
EspirometríaEspirometría
Espirometría
 
Grafico diario del dax perfomance index para el 07 11-2012
Grafico diario del dax perfomance index para el 07 11-2012Grafico diario del dax perfomance index para el 07 11-2012
Grafico diario del dax perfomance index para el 07 11-2012
 
日本語テスト 空白あり
日本語テスト 空白あり日本語テスト 空白あり
日本語テスト 空白あり
 
There's No Crying In Local Search
There's No Crying In Local SearchThere's No Crying In Local Search
There's No Crying In Local Search
 
LESTER_ANTONY_FRANCIS ( Aug 2016)
LESTER_ANTONY_FRANCIS ( Aug 2016)LESTER_ANTONY_FRANCIS ( Aug 2016)
LESTER_ANTONY_FRANCIS ( Aug 2016)
 
World Economic Forum on Africa 2006
World Economic Forum on Africa 2006World Economic Forum on Africa 2006
World Economic Forum on Africa 2006
 
Leveraging Social Media Tools
Leveraging Social Media ToolsLeveraging Social Media Tools
Leveraging Social Media Tools
 
Adobe Flash, entre el amor y el odio
Adobe Flash, entre el amor y el odioAdobe Flash, entre el amor y el odio
Adobe Flash, entre el amor y el odio
 
Καινοτομια
ΚαινοτομιαΚαινοτομια
Καινοτομια
 
書籍市場の現状
書籍市場の現状書籍市場の現状
書籍市場の現状
 
Methods intro-1.0
Methods intro-1.0Methods intro-1.0
Methods intro-1.0
 
Code iscool
Code iscoolCode iscool
Code iscool
 

Ähnlich wie Boost Tour 1.53.0 (8)

Boost Tour 1_58_0 merge
Boost Tour 1_58_0 mergeBoost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
 
Study3 boost
Study3 boostStudy3 boost
Study3 boost
 
Boost Fusion Library
Boost Fusion LibraryBoost Fusion Library
Boost Fusion Library
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
 
C++ Transactional Memory言語拡張の紹介
C++ Transactional Memory言語拡張の紹介C++ Transactional Memory言語拡張の紹介
C++ Transactional Memory言語拡張の紹介
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
Handlersocket etc. 20110906
Handlersocket etc. 20110906Handlersocket etc. 20110906
Handlersocket etc. 20110906
 
Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半Elixirだ 第1回強化版 後半
Elixirだ 第1回強化版 後半
 

Mehr von Akira Takahashi

C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
Akira Takahashi
 
Executors and schedulers
Executors and schedulersExecutors and schedulers
Executors and schedulers
Akira Takahashi
 

Mehr von Akira Takahashi (20)

Cpp20 overview language features
Cpp20 overview language featuresCpp20 overview language features
Cpp20 overview language features
 
Cppmix 02
Cppmix 02Cppmix 02
Cppmix 02
 
Cppmix 01
Cppmix 01Cppmix 01
Cppmix 01
 
Modern C++ Learning
Modern C++ LearningModern C++ Learning
Modern C++ Learning
 
cpprefjp documentation
cpprefjp documentationcpprefjp documentation
cpprefjp documentation
 
C++1z draft
C++1z draftC++1z draft
C++1z draft
 
Boost tour 1_61_0 merge
Boost tour 1_61_0 mergeBoost tour 1_61_0 merge
Boost tour 1_61_0 merge
 
Boost tour 1_61_0
Boost tour 1_61_0Boost tour 1_61_0
Boost tour 1_61_0
 
error handling using expected
error handling using expectederror handling using expected
error handling using expected
 
Boost tour 1.60.0
Boost tour 1.60.0Boost tour 1.60.0
Boost tour 1.60.0
 
Boost container feature
Boost container featureBoost container feature
Boost container feature
 
Boost Tour 1_58_0
Boost Tour 1_58_0Boost Tour 1_58_0
Boost Tour 1_58_0
 
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructorC++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
 
C++14 enum hash
C++14 enum hashC++14 enum hash
C++14 enum hash
 
Multi paradigm design
Multi paradigm designMulti paradigm design
Multi paradigm design
 
Start Concurrent
Start ConcurrentStart Concurrent
Start Concurrent
 
Programmer mind
Programmer mindProgrammer mind
Programmer mind
 
Boost.Study 14 Opening
Boost.Study 14 OpeningBoost.Study 14 Opening
Boost.Study 14 Opening
 
Executors and schedulers
Executors and schedulersExecutors and schedulers
Executors and schedulers
 
Improvement future api
Improvement future apiImprovement future api
Improvement future api
 

Boost Tour 1.53.0