Enviar búsqueda
Cargar
Destructive Call
•
1 recomendación
•
952 vistas
C
Cryolite
Seguir
2011/05/14 Boost
Leer menos
Leer más
Tecnología
Empresariales
Denunciar
Compartir
Denunciar
Compartir
1 de 18
Descargar ahora
Descargar para leer sin conexión
Recomendados
Boost tour 1.60.0 merge
Boost tour 1.60.0 merge
Akira Takahashi
Boost Tour 1.48.0 diff
Boost Tour 1.48.0 diff
Akira Takahashi
フィボナッチ数列の作り方
フィボナッチ数列の作り方
Tomoya Kawanishi
Boost tour 1_40_0
Boost tour 1_40_0
Akira Takahashi
C++でHello worldを書いてみた
C++でHello worldを書いてみた
firewood
Continuation with Boost.Context
Continuation with Boost.Context
Akira Takahashi
How to use animation packages in R(Japanese)
How to use animation packages in R(Japanese)
sleipnir002
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
Yahoo!デベロッパーネットワーク
Recomendados
Boost tour 1.60.0 merge
Boost tour 1.60.0 merge
Akira Takahashi
Boost Tour 1.48.0 diff
Boost Tour 1.48.0 diff
Akira Takahashi
フィボナッチ数列の作り方
フィボナッチ数列の作り方
Tomoya Kawanishi
Boost tour 1_40_0
Boost tour 1_40_0
Akira Takahashi
C++でHello worldを書いてみた
C++でHello worldを書いてみた
firewood
Continuation with Boost.Context
Continuation with Boost.Context
Akira Takahashi
How to use animation packages in R(Japanese)
How to use animation packages in R(Japanese)
sleipnir002
PHPコアから読み解くPHP5.5
PHPコアから読み解くPHP5.5
Yahoo!デベロッパーネットワーク
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
fukuoka.ex
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
Yahoo!デベロッパーネットワーク
Map
Map
kikairoya
animation1.0
animation1.0
sleipnir002
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
Akira Takahashi
Emcpp item31
Emcpp item31
mitsutaka_takeda
Boost Fusion Library
Boost Fusion Library
Akira Takahashi
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
Shin-ya Koga
Aio
Aio
Masaaki HIROSE
クロージャデザインパターン
クロージャデザインパターン
Moriharu Ohzu
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
Boost Tour 1.53.0
Boost Tour 1.53.0
Akira Takahashi
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
Boost Tour 1.53.0 merge
Boost Tour 1.53.0 merge
Akira Takahashi
node-perl
node-perl
Hideaki Ohno
C++11概要 ライブラリ編
C++11概要 ライブラリ編
egtra
2021 10-12.linx device-tree
2021 10-12.linx device-tree
Shin-ya Koga
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
Slide
Slide
Takefumi MIYOSHI
Virtual learning spaces: example of international collaboration
Virtual learning spaces: example of international collaboration
guestcd29992
Focus
Focus
opiv
Más contenido relacionado
La actualidad más candente
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
fukuoka.ex
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
Yahoo!デベロッパーネットワーク
Map
Map
kikairoya
animation1.0
animation1.0
sleipnir002
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
Akira Takahashi
Emcpp item31
Emcpp item31
mitsutaka_takeda
Boost Fusion Library
Boost Fusion Library
Akira Takahashi
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
Shin-ya Koga
Aio
Aio
Masaaki HIROSE
クロージャデザインパターン
クロージャデザインパターン
Moriharu Ohzu
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Kohsuke Yuasa
Boost Tour 1.53.0
Boost Tour 1.53.0
Akira Takahashi
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
Boost Tour 1.53.0 merge
Boost Tour 1.53.0 merge
Akira Takahashi
node-perl
node-perl
Hideaki Ohno
C++11概要 ライブラリ編
C++11概要 ライブラリ編
egtra
2021 10-12.linx device-tree
2021 10-12.linx device-tree
Shin-ya Koga
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
Slide
Slide
Takefumi MIYOSHI
La actualidad más candente
(20)
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
PHPにおけるI/O多重化とyield
PHPにおけるI/O多重化とyield
Map
Map
animation1.0
animation1.0
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
Emcpp item31
Emcpp item31
Boost Fusion Library
Boost Fusion Library
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
2014年の社内新人教育テキスト #2(関数型言語からオブジェクト指向言語へ)
Aio
Aio
クロージャデザインパターン
クロージャデザインパターン
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
Boost Tour 1.53.0
Boost Tour 1.53.0
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Boost Tour 1.53.0 merge
Boost Tour 1.53.0 merge
node-perl
node-perl
C++11概要 ライブラリ編
C++11概要 ライブラリ編
2021 10-12.linx device-tree
2021 10-12.linx device-tree
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
Slide
Slide
Destacado
Virtual learning spaces: example of international collaboration
Virtual learning spaces: example of international collaboration
guestcd29992
Focus
Focus
opiv
Biography
Biography
guest8aef10
Flipvideo101
Flipvideo101
Lisa Burkhalter
Pop it, drop it, make it fly
Pop it, drop it, make it fly
Springside School
Put The Glass Down
Put The Glass Down
chamarah
Chris Di Alfredi Resume And Portfolio Sample November 2010
Chris Di Alfredi Resume And Portfolio Sample November 2010
chrisdialfredi
Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pdf)
Cryolite
Focus
Focus
opiv
Ciri Ciri Masa Puber
Ciri Ciri Masa Puber
Priliana Ramadhani
Chiense Tea
Chiense Tea
guest8f2e8c8
左と右の話
左と右の話
Cryolite
Boost.PropertyMap (.pptx)
Boost.PropertyMap (.pptx)
Cryolite
Thoughts Of Consciousness
Thoughts Of Consciousness
leonyRU
shared_ptr & weak_ptr (ppt 初版, DL 専用)
shared_ptr & weak_ptr (ppt 初版, DL 専用)
Cryolite
Job Tumber, Llc – Partner Opportunity
Job Tumber, Llc – Partner Opportunity
jobtumbler
Destacado
(16)
Virtual learning spaces: example of international collaboration
Virtual learning spaces: example of international collaboration
Focus
Focus
Biography
Biography
Flipvideo101
Flipvideo101
Pop it, drop it, make it fly
Pop it, drop it, make it fly
Put The Glass Down
Put The Glass Down
Chris Di Alfredi Resume And Portfolio Sample November 2010
Chris Di Alfredi Resume And Portfolio Sample November 2010
Boost.PropertyMap (.pdf)
Boost.PropertyMap (.pdf)
Focus
Focus
Ciri Ciri Masa Puber
Ciri Ciri Masa Puber
Chiense Tea
Chiense Tea
左と右の話
左と右の話
Boost.PropertyMap (.pptx)
Boost.PropertyMap (.pptx)
Thoughts Of Consciousness
Thoughts Of Consciousness
shared_ptr & weak_ptr (ppt 初版, DL 専用)
shared_ptr & weak_ptr (ppt 初版, DL 専用)
Job Tumber, Llc – Partner Opportunity
Job Tumber, Llc – Partner Opportunity
Destructive Call
1.
Boost.破壊的関数呼び出し
くらいおらいと
2.
注意 「それ○○でできるよ」「それ○○がす でに言ってたよ」と言われた時点で本 発表は強制終了します
3.
前提知識 • C++0x
–ムーブセマンティクス (右辺値参照) –右辺値参照 on *this • Boost –Boost.Bind –Boost.Thread –Boost.Asio –Boost.ScopeExit
4.
Motivation 下記のコードが通らなくて大変悲しい void thread_main(std::unique_ptr<int> p) {
… } std::unique_ptr<int> p(new int(42)); auto f = boost::bind(&thread_main, std::move(p)); boost::thread th(f); // コンパイルエラー
5.
Motivation 下記のコードが通らなくて大変悲しい void thread_main(std::unique_ptr<int> p) {
… } このパタン (非同期呼び出しにおける 所有権の移動) は超重要 std::unique_ptr<int> p(new int(42)); auto f = boost::bind(&thread_main, std::move(p)); boost::thread th(f); // コンパイルエラー
6.
何が問題か? boost::bind が呼び出し時に束縛され た引数をコピーしようとする (+ boost::bind が内部で束縛されたオ ブジェクトをコピーする)
↓ std::unique_ptr はコピーできないので アボン
7.
5分で考えたオレオレアイデア boost::thread の実装では,スレッド関 数呼び出し時に boost::bind が束縛し ている引数オブジェクトを破壊しても 大丈夫なはずだ
8.
Boost.Thread 内部実装(テキトー) // Boost.Thread の内部実装 // thread_callback
はコールバック // a1, a2 は引数 thread_callback(a1, a2, …); // thread_callback は // これ以降一切呼び出されない
9.
俺が考えた最強の
Boost.Thread 内部実装 // Boost.Thread の内部実装 // thread_callback はコールバック // a1, a2 は引数 std::move(thread_callback)(a1, a2, …); // thread_callback は // これ以降一切呼び出されない
10.
Move とは Move できる Movable
+ Move を利用する Move‐aware
11.
破壊的関数呼び出し とは 破壊的に呼び出せる DestructivelyCallable
+ 破壊的呼び出しを利用する Destructive‐Call‐aware
12.
boost::bind 側
破壊的に呼び出せる template<…> class bind_wrapper { … template<…> void opeartor()(…) && … };
13.
Boost.Thread 側
破壊的呼び出しを利用する // Boost.Thread の内部実装 // thread_callback はコールバック // a1, a2 は残りの引数 std::move(thread_callback)(a1, a2, …);
14.
あるコンポーネントが 破壊的呼び出しを利用できる条件 指定された callback を破壊的に呼び 出してよいのは,
callback を高々1回 しか呼ばないとき
15.
破壊的関数呼び出しができる例
= callback を高々1回しか呼ばない例 • Boost.Thread • Boost.Asio のイベントハンドラ • スコープガードに指定するコール バック (Boost.ScopeGuard) • (std::async)
16.
破壊的関数呼び出しのまとめ • Boost.Bind に対して
move on *this による operator() のオーバーロード を追加 • Boost.Thread, Boost.Asio, Boost.ScopeExit の実装の該当箇所 に std::move なパッチを当てる
17.
破壊的関数呼び出しの利点 • 後方互換性を完全に維持したまま,
既存のコンポーネントの適用範囲を 広げる • 特に非同期関数呼び出しにおける 所有権の移動が非常に扱いやすく なる
18.
今後の予定 • 誰も言ってないっぽいなら Boost に
Asio と Thread と ScopeGuard のパッ チ付きで提案して殴り込みをかける • 返り討ちにあう • それでもがんばる • move on *this が clang++ にしか実 装されていないのでさようなら(^o^)ノ
Descargar ahora