@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

Ractor

一度moveしたオブジェクトは移動先のRactorが死んでも帰ってこない

moveしたオブジェクトを参照するとRactor::MovedError 次のRubyスクリプトがあります。 dead = Ractor.new {} dead.send STDIN, move: true STDIN.gets RactorにSTDINをmoveしてから、STDINを使います。 するとRactor::MovedErrorが起きます。 ~ ruby dead_a…

切符を通したときだけ通れる改札口Ractor

前回、Ractor.selectでtakeとrecvを両方待てることがわかりました。 これを使って切符を通したときだけ通れる改札口を作ります。 完成形 キーボード入力を待つRactor = Ractor.new { loop { Ractor.yield gets.chomp } } 改札口Ractor = Ractor.new(キーボー…

Ractor.recvの代わりにRactor.selectする

RactorはsendされたメッセージをRactor.recvで受け取ります。 Ractor.selectでも受け取れます。 例えば、次の例です。 r = Ractor.new do # message = Ractor.recv と同じ _, message = Ractor.select self p "Hello #{message}!" end r.send 'World' r.take…

歌うRactor

Ractorで歌ってみましょう。 歌う部分はRactorは関係ありません。出落ちです。 Ractor内で、spawnしたプロセスをメインスレッドでkillできるか確認します。 非同期なspawn関数をRactor内で実行する必要があるのかは知りません。 完成形 LYRICS =<

Ractor間のメッセージ送受信 Pull型とPush型

やることは前回と同じです。Ractorの構成を組み替えてみました。 Pull型とPush型 Ractorのメッセージ送受信にはPull型とPush型があります。 前回、メインスレッド(?)でRactorインスタンスをselectしてイベントを待ちました。Pull型です。 Pull型 今回、描…

Ractorを使ったTUIプログラムの一歩

前回のユーザー入力とクロックを両方待つプログラムを少し改造します。 Enter以外の入力を受け取る カーソルを移動せずに書き換える 後者はRactorは関係ないです。 Enter以外の入力を受け取る 任意の1文字を受け取るためにSTDIN.getchを使いたいです。 STDIN…

Ractorを試す 改訂版

macOS で https://github.com/ko1/ruby/tree/ractor のソースコードをビルドする方法を改善しました。 インストール先 コンパイルしたRubyをmake installしたら「PCの環境が壊れるかも」とビビっていたところ、 id:hanachin さんに ./configure --prefix="$H…

Ractorをつかうプログラムの練習 2つのイベントを待つ

Ractorをつかって、ユーザー入力とクロックを両方待つプログラムを書いてみます。 練習中であり、Ractorを使ったイケているソースコードではありません。 次のプログラムを実装します。 1秒毎にカウントアップします。 ユーザーがEnterキーを押したらカウン…

Ractorを使ってプログラムを書く練習    

注意:Ractorならではとか、計算効率の良さとか考えていません。 1から10までを足す # 最終結果送り先のRactor CR = Ractor.current r = Ractor.new { CR << Ractor.recv } 1.upto(10) do |i| # 数を足すRactorを作ってポインタを置き換える r = Ractor.new(…

Ractorを試す

Ruby3 さみっと online - connpass を見ていました。 Ractorの発表を見て使ってみたくなったので環境を整えてみます。 ビルドする https://github.com/ko1/ruby/tree/ractor のソースコードをビルドします。 git clone git@github.com:ko1/ruby.git ractor c…