hiroshimarb 027-fiber
TRANSCRIPT
Fiber のサンプルをかいてみた
2013/02/02 広島Ruby勉強会 #027
13年2月2日土曜日
Fiber13年2月2日土曜日
別名
マイクロスレッド
コルーチン
13年2月2日土曜日
状態管理を意識せずに行えるため、協調的処理、イテレータ、無限リスト、パイプなど、継続状況を持つプログラムが容易に記述できる。
13年2月2日土曜日
ゲームプログラミングでみたことある
13年2月2日土曜日
ということでそれ系のサンプルをかいてみた
13年2月2日土曜日
http://www.youtube.com/watch?v=UOIOVLrBDEA
13年2月2日土曜日
もっと派手にすればよかった
13年2月2日土曜日
どんなコードを書きたいか
13年2月2日土曜日
10回 下に移動する
10回 右に移動する
10回 上に移動する
10回 左に移動する
13年2月2日土曜日
10.times do downend
10.times do rightend
10.times do upend
10.times do leftend
13年2月2日土曜日
そうはうまくいかぬ
13年2月2日土曜日
Fiber を使わずかいてみよう
13年2月2日土曜日
def step if @time < 10 @x += 1 elsif @time >=10 and @time < 20 @y += 1 elsif @time >= 20 and @time < 30 @x -= 1 elsif @time >= 30 and @time < 40 @y -= 1 else @x = 0 @y = 0 @time = 0 end @time += 1 end
13年2月2日土曜日
def step if @time < 10 @x += 1 elsif @time >=10 and @time < 20 @y += 1 elsif @time >= 20 and @time < 30 @x -= 1 elsif @time >= 30 and @time < 40 @y -= 1 else @x = 0 @y = 0 @time = 0 end @time += 1 end
状態を管理する必要がある
状態の更新が必要
13年2月2日土曜日
def step if @time < 10 @x += 1 elsif @time >=10 and @time < 20 @y += 1 elsif @time >= 20 and @time < 30 @x -= 1 elsif @time >= 30 and @time < 40 @y -= 1 else @x = 0 @y = 0 @time = 0 end @time += 1 end
どの状態か判断が必要
下に移動する時
右に移動する時
上に移動する時
左に移動する時
13年2月2日土曜日
Fiber を使うと?
13年2月2日土曜日
def step fiber.resume end
13年2月2日土曜日
@fiber ||= Fiber.new do loop do @x = 5 @y = 5
10.times do @x += 1 Fiber.yield end
10.times do @y += 1 Fiber.yield end
10.times do @x -= 1 Fiber.yield end
10.times do @y -= 1 Fiber.yield end end end
13年2月2日土曜日
10.times do downend
10.times do rightend
10.times do upend
10.times do leftend
13年2月2日土曜日
@fiber ||= Fiber.new do loop do @x = 5 @y = 5
10.times do @x += 1 Fiber.yield end
10.times do @y += 1 Fiber.yield end
10.times do @x -= 1 Fiber.yield end
10.times do @y -= 1 Fiber.yield end end end
13年2月2日土曜日
概ね希望どおりかける
13年2月2日土曜日
Fiber.yield を呼んだところで止めたままにできる
13年2月2日土曜日
再開するには Fiber#resume を使用する
13年2月2日土曜日
メイン サブ
止めておいたところからそのまま再開できる
13年2月2日土曜日
step メソッドで Fiber を再開させるだけFiber の中では必要なとこで止まる状態をそのまま維持
13年2月2日土曜日
実際にはあちこちまわるけどプログラムは
真っ直ぐ書ける
13年2月2日土曜日
おまけ
13年2月2日土曜日
描画にはOpenGL とかつかってがんばる方法もあるけどCurses を使いました
13年2月2日土曜日
Curses
13年2月2日土曜日
curses(カーシス、カーズィス)はUNIX系システムでの端末制御ライブラリである。テキストユーザインタフェース(TUI)アプリケーションを作成するのに使われる。名称は“cursor optimization”に由来する。
http://ja.wikipedia.org/wiki/Curses
13年2月2日土曜日
端末の画面の特定の位置に文字を置く
13年2月2日土曜日
Curses.setpos(x,y) Curses.addstr('*')
13年2月2日土曜日
https://github.com/eiel/Fiber-Sample
ソースコード
13年2月2日土曜日
ご清聴ありがとうございます
13年2月2日土曜日