SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Downloaden Sie, um offline zu lesen
Rustのタスクモデル
@dim7th
9/7 Rust Samurai その弐
13年9月7日土曜日
•学芸大学教育学部2年
•Twitter @dim7th
•3Dプリンタとか
•scheme, python, C++, Dartとか
自己紹介
13年9月7日土曜日
1.タスクについて
2.タスクの通信
3.immutableなデータの共有
Rustのタスクモデルについて
13年9月7日土曜日
Rust 0.8-preで話します
• RustTasks and CommunicationTutorial
• http://static.rust-lang.org/doc/tutorial-tasks.html
13年9月7日土曜日
1.タスクについて
13年9月7日土曜日
Rustにおけるタスクとは
• VMにおけるグリーンスレッドのようなもの
• 軽量でタスク間においてはメモリが独立
• タスク間のメッセージ通信が可能
• OSのスレッドにRustのスケジューラが割り当てる
• マルチコアであれば並列に割り振られる
13年9月7日土曜日
というわけで実際に
13年9月7日土曜日
タスクを生成してみる
fn main(){
spawn( || println("hello"));
}
13年9月7日土曜日
fn main(){
spawn( || println("hello"));
}
Lambda Expression
タスクを生成してみる
13年9月7日土曜日
Lambda Expression
let func = | arg | {
println(fmt!(“arg=%?”,arg));
}
func(10)
=>10
13年9月7日土曜日
よく使われる形で
do spawn() {
println(“hello, world!”);
}
13年9月7日土曜日
よく使われる形で
do spawn() {
println(“hello, world!”);
}
Do Expression
13年9月7日土曜日
spawn( |arg| {
hoge(arg) ;
});
Do Expression
13年9月7日土曜日
Do Expression
spawn( |arg| {
hoge(arg) ;
});
do spawn |arg| {
hoge(arg);
}
13年9月7日土曜日
2.タスクの通信
13年9月7日土曜日
Pipe
13年9月7日土曜日
“A pipe is simply
a pair of endpoints”
13年9月7日土曜日
Pipe
13年9月7日土曜日
portchan
Pipe
13年9月7日土曜日
Pipe
Task
Channel
Port
AnotherTask
13年9月7日土曜日
実際にやってみる
use std : : task;
let (port , chan) : (Port<int>, Chan<int>) = stream( );
do spawn | arg | {
chan . send (arg);
}
13年9月7日土曜日
実際にやってみる
use std : : task;
let (port , chan) : (Port<int>, Chan<int>) = stream( );
do spawn | arg | {
chan . send (arg);
}
型宣言
13年9月7日土曜日
実際にやってみる
use std : : task;
let (port , chan) : (Port<int>, Chan<int>) = stream( );
do spawn | arg | {
chan . send (arg);
}
型宣言
argはport . recv()で取得できる
13年9月7日土曜日
一つのChanは複数の
タスクから使えない
13年9月7日土曜日
例えば
let (port , chan) = stream( );
do spawn | arg1 | {
chan . send (arg1);
}
do spawn | arg2 | {
chan . send (arg2);
}
13年9月7日土曜日
`chan` moved into closure
environment here
because it has type `~fn:Send( )`,
which is non-copyable
(perhaps you meant to use clone( )? )
error: aborting due to previous error
13年9月7日土曜日
怒られます
13年9月7日土曜日
そこで出てくるのが
13年9月7日土曜日
SharedChan
13年9月7日土曜日
use std : : comm;
let (port , chan) = comm : : stream( );
13年9月7日土曜日
use std : : comm;
let (port , chan) = comm : : stream( );
let chan = comm : : SharedChan : : new(chan);
13年9月7日土曜日
use std : : comm;
let (port , chan) = comm : : stream( );
let chan = comm : : SharedChan : : new(chan);
chanを上書きする
13年9月7日土曜日
use std : : comm;
let (port , chan) = comm : : stream( );
let chan = comm : : SharedChan : : new(chan);
do spawn | hoge | {
let child_chan = chan . clone( );
child_chan.send(arg);
}
13年9月7日土曜日
use std : : comm;
let (port , chan) = comm : : stream( );
let chan = comm : : SharedChan : : new(chan);
do spawn | hoge | {
let child_chan = chan . clone( );
child_chan.send(arg);
}
タスク内でclone( )する
13年9月7日土曜日
Servoではどうなの?
servo/src/components/main/servo.rc
151行目らへん
13年9月7日土曜日
3. immutableなデータの共有
13年9月7日土曜日
Pipeを使ってもできる
13年9月7日土曜日
Pipeを使ってもできる
immutableなので
無駄なデータのコピー
13年9月7日土曜日
Auto Reference Counted wrapper
13年9月7日土曜日
extern mod extra;
use extra : : arc : :Arc;
let (port , chan) = stream( );
let pi = 3.14159;
let shared_num = Arc : : new(num);
13年9月7日土曜日
extern mod extra;
use extra : : arc : :Arc;
let (port , chan) = stream( );
let pi = 3.14159;
let shared_num = Arc : : new(num);
	

 do spawn {
	

 	

 let local_num :Arc<float> = port.recv();
	

 	

 println( fmt!( " % ? ", local_num . get( )));
	

 }
13年9月7日土曜日
http://saneyukis.hatenablog.com/entry/2013/07/28/233325
http://static.rust-lang.org/doc/tutorial-tasks.html
http://static.rust-lang.org/doc/rust.html
URL
13年9月7日土曜日
4.タスクの失敗
13年9月7日土曜日
“exceptions in Rust are
unrecoverable within a single task:
once a task fails, there is no way to
"catch" the exception.”
http://static.rust-lang.org/doc/tutorial-tasks.html
13年9月7日土曜日
タスクの例外は回復できない
13年9月7日土曜日
例外はfail!( )を呼ぶことで発生できる
13年9月7日土曜日
let result : Result<( ) , ( )> = do task : : try {
fail( );
};
assert!(result . is_err( ));
13年9月7日土曜日
基本的にタスクが死ぬと
関連するタスク全て死ぬ
13年9月7日土曜日
do spawn{
do spawn {
fail( );
}
hoge1( );
}
hoge2( );
13年9月7日土曜日

Weitere ähnliche Inhalte

Was ist angesagt?

Gunosy.go#2 package/compress
Gunosy.go#2 package/compressGunosy.go#2 package/compress
Gunosy.go#2 package/compress
Shunsuke Aihara
 
Seccan2012 secure os
Seccan2012 secure osSeccan2012 secure os
Seccan2012 secure os
Chiharu Usui
 
Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)
Soudai Sone
 
Word pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのかWord pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのか
Hisateru Tanaka
 
私がPerlを使う理由
私がPerlを使う理由私がPerlを使う理由
私がPerlを使う理由
Yohei Azekatsu
 
プログラミング作法
プログラミング作法プログラミング作法
プログラミング作法
Kota Uchida
 
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
hiroshi oshiba
 

Was ist angesagt? (17)

マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
マウスを使わないでキーボードで快適に生活する方法(GNU Screen/tmux/byobu/awesome)
 
Gunosy.go#2 package/compress
Gunosy.go#2 package/compressGunosy.go#2 package/compress
Gunosy.go#2 package/compress
 
ゆるかわPhp
ゆるかわPhpゆるかわPhp
ゆるかわPhp
 
Seccan2012 secure os
Seccan2012 secure osSeccan2012 secure os
Seccan2012 secure os
 
Perl and Email #2/Kansai.pm第14回ミーティング@京都
Perl and Email #2/Kansai.pm第14回ミーティング@京都Perl and Email #2/Kansai.pm第14回ミーティング@京都
Perl and Email #2/Kansai.pm第14回ミーティング@京都
 
俺とDockerとtDiaryとkubernetes
俺とDockerとtDiaryとkubernetes俺とDockerとtDiaryとkubernetes
俺とDockerとtDiaryとkubernetes
 
第二回 クラウドサーバー管理者若葉の会
第二回 クラウドサーバー管理者若葉の会第二回 クラウドサーバー管理者若葉の会
第二回 クラウドサーバー管理者若葉の会
 
Tremaとtrema edgeの違い
Tremaとtrema edgeの違いTremaとtrema edgeの違い
Tremaとtrema edgeの違い
 
Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)Postgre sql9.3新機能 (OSC hiroshima 2013)
Postgre sql9.3新機能 (OSC hiroshima 2013)
 
Word pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのかWord pressのテーマは firephpでハックすれば 良かったのか
Word pressのテーマは firephpでハックすれば 良かったのか
 
私がPerlを使う理由
私がPerlを使う理由私がPerlを使う理由
私がPerlを使う理由
 
プログラミング作法
プログラミング作法プログラミング作法
プログラミング作法
 
Bash 脆弱性祭から抜け出そう
Bash 脆弱性祭から抜け出そうBash 脆弱性祭から抜け出そう
Bash 脆弱性祭から抜け出そう
 
Llでゆるふわプログラミングのすすめ
LlでゆるふわプログラミングのすすめLlでゆるふわプログラミングのすすめ
Llでゆるふわプログラミングのすすめ
 
シェルスクリプトを極める
シェルスクリプトを極めるシェルスクリプトを極める
シェルスクリプトを極める
 
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
Ryuの遊び方(pica8も併せてもっと楽しく)(2014/1/23修正版)
 
できる!trema-switch
できる!trema-switchできる!trema-switch
できる!trema-switch
 

Andere mochten auch

ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
nagise
 

Andere mochten auch (13)

ジェネリクスの基礎と クラス設計への応用
ジェネリクスの基礎とクラス設計への応用ジェネリクスの基礎とクラス設計への応用
ジェネリクスの基礎と クラス設計への応用
 
Rust 超入門
Rust 超入門Rust 超入門
Rust 超入門
 
入門core.async
入門core.async入門core.async
入門core.async
 
Teratail Study  ~機械学習編#1~
Teratail Study  ~機械学習編#1~Teratail Study  ~機械学習編#1~
Teratail Study  ~機械学習編#1~
 
Azure Machine Learning getting started
Azure Machine Learning getting startedAzure Machine Learning getting started
Azure Machine Learning getting started
 
Go初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろうGo初心者向けハンズオン コマンドラインツールを作ろう
Go初心者向けハンズオン コマンドラインツールを作ろう
 
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
 
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
 
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
 
アルゴリズム取引のシステムを開発・運用してみて分かったこと
アルゴリズム取引のシステムを開発・運用してみて分かったことアルゴリズム取引のシステムを開発・運用してみて分かったこと
アルゴリズム取引のシステムを開発・運用してみて分かったこと
 
イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)イミュータブルデータモデル(入門編)
イミュータブルデータモデル(入門編)
 
最近のストリーム処理事情振り返り
最近のストリーム処理事情振り返り最近のストリーム処理事情振り返り
最近のストリーム処理事情振り返り
 

Ähnlich wie Rustのタスクモデルについて

capistrano-colorized-stream
capistrano-colorized-streamcapistrano-colorized-stream
capistrano-colorized-stream
Naotoshi Seo
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶ
Hiroshi Oyamada
 
Should we write such like plugin or not?
Should we write such like plugin or not?Should we write such like plugin or not?
Should we write such like plugin or not?
SATOSHI TAGOMORI
 
Webサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについてWebサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについて
Tomo Fujita
 
Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)
hiboma
 
Mtddc kyusyu-lightningtalks
Mtddc kyusyu-lightningtalksMtddc kyusyu-lightningtalks
Mtddc kyusyu-lightningtalks
Yuji Takayama
 
Stream processing and Norikra
Stream processing and NorikraStream processing and Norikra
Stream processing and Norikra
SATOSHI TAGOMORI
 

Ähnlich wie Rustのタスクモデルについて (20)

Sencha Touch working with AWS
Sencha Touch working with AWSSencha Touch working with AWS
Sencha Touch working with AWS
 
capistrano-colorized-stream
capistrano-colorized-streamcapistrano-colorized-stream
capistrano-colorized-stream
 
Moff 20130309 jawsug_santo_v01
Moff 20130309 jawsug_santo_v01Moff 20130309 jawsug_santo_v01
Moff 20130309 jawsug_santo_v01
 
Sinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶSinatraでwebアプリケーション開発を学ぶ
Sinatraでwebアプリケーション開発を学ぶ
 
Scala conf2013
Scala conf2013Scala conf2013
Scala conf2013
 
Should we write such like plugin or not?
Should we write such like plugin or not?Should we write such like plugin or not?
Should we write such like plugin or not?
 
Webサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについてWebサイト・フロントエンドの高速化とgrunt.jsについて
Webサイト・フロントエンドの高速化とgrunt.jsについて
 
Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)Sqale の Puppet と Chef (と テスト)
Sqale の Puppet と Chef (と テスト)
 
#31 愛しのst2
#31 愛しのst2#31 愛しのst2
#31 愛しのst2
 
きつねさんでもわかるLLVM読書会amagasaki.rb第5章
きつねさんでもわかるLLVM読書会amagasaki.rb第5章きつねさんでもわかるLLVM読書会amagasaki.rb第5章
きつねさんでもわかるLLVM読書会amagasaki.rb第5章
 
Mtddc kyusyu-lightningtalks
Mtddc kyusyu-lightningtalksMtddc kyusyu-lightningtalks
Mtddc kyusyu-lightningtalks
 
名前付け入門
名前付け入門名前付け入門
名前付け入門
 
Power Assert and perl.js
Power Assert and perl.jsPower Assert and perl.js
Power Assert and perl.js
 
第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村第1回鹿児島node.jsの会資料_内村
第1回鹿児島node.jsの会資料_内村
 
Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5Perl and Email #3 ``Haineko''/Kyoto.pm #5
Perl and Email #3 ``Haineko''/Kyoto.pm #5
 
Openstack chef-repo
Openstack chef-repoOpenstack chef-repo
Openstack chef-repo
 
PHP matsuri 2013 Windows Azure Storage SDK for PHP
PHP matsuri 2013 Windows Azure Storage SDK for PHPPHP matsuri 2013 Windows Azure Storage SDK for PHP
PHP matsuri 2013 Windows Azure Storage SDK for PHP
 
Stream processing and Norikra
Stream processing and NorikraStream processing and Norikra
Stream processing and Norikra
 
PhpStormとGrunt.jsで作るCakePHP快適開発環境
PhpStormとGrunt.jsで作るCakePHP快適開発環境 PhpStormとGrunt.jsで作るCakePHP快適開発環境
PhpStormとGrunt.jsで作るCakePHP快適開発環境
 
Scala conf2013
Scala conf2013 Scala conf2013
Scala conf2013
 

Kürzlich hochgeladen

Service-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipService-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadership
Yasuyoshi Minehisa
 
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
Michael Rada
 

Kürzlich hochgeladen (8)

共有用_aio基本保守プラン_WordPressサイト_20240509.pdf
共有用_aio基本保守プラン_WordPressサイト_20240509.pdf共有用_aio基本保守プラン_WordPressサイト_20240509.pdf
共有用_aio基本保守プラン_WordPressサイト_20240509.pdf
 
セルフケア研修で使えるカードゲーム『攻略!きみのストレスを発見せよ!: ゲームで身につくストレスマネジメント』
セルフケア研修で使えるカードゲーム『攻略!きみのストレスを発見せよ!: ゲームで身につくストレスマネジメント』セルフケア研修で使えるカードゲーム『攻略!きみのストレスを発見せよ!: ゲームで身につくストレスマネジメント』
セルフケア研修で使えるカードゲーム『攻略!きみのストレスを発見せよ!: ゲームで身につくストレスマネジメント』
 
Service-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadershipService-introduction-materials-misorae-leadership
Service-introduction-materials-misorae-leadership
 
company profile.pdf
company profile.pdfcompany profile.pdf
company profile.pdf
 
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdfストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
ストックマーク株式会社がご提供しているAnews(エーニュース)概要紹介.pdf
 
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
202405_VISIONARYJAPAN_engineerteam_entrancebook(ver2.1)
 
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
物流は成長の準備ができていますか? 警告 1 日あたり 1 章を超えて消費しないでください コンテンツが覚醒と変化への意志を引き起こす
 
事例DBサービス紹介資料(Case Study DB service introduction)
事例DBサービス紹介資料(Case Study DB service introduction)事例DBサービス紹介資料(Case Study DB service introduction)
事例DBサービス紹介資料(Case Study DB service introduction)
 

Rustのタスクモデルについて