Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RustでつくるRubyのFiber
Search
monochrome
October 22, 2020
Programming
0
360
RustでつくるRubyのFiber
Fukuoka.rs vol.7 ONLINE
https://fukuokars.connpass.com/event/191881/
monochrome
October 22, 2020
Tweet
Share
More Decks by monochrome
See All by monochrome
仮想マシンにおけるスタックの管理
sisshiki1969
0
150
Rustでゴミ集め
sisshiki1969
1
230
RustでつくるRubyのFiber
sisshiki1969
0
210
Shinjuku.rs#15 Rustでつくるx86アセンブラ
sisshiki1969
0
1.4k
fukuoka.rb#202 RustでつくるRuby
sisshiki1969
1
670
Rustでつくるガーベジコレクタ
sisshiki1969
0
530
Other Decks in Programming
See All in Programming
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
120
CA.swift19 恋するAIアプリ開発の裏側
oskmr
0
360
Goのエラースタックトレースの歴史と今後
sonatard
7
1.1k
GitHub Actionsで泣かないためにやっておきたい設定 / Recommended GHA settings to avoid crying
pinkumohikan
3
530
Snowflakeで眠ったデータを起こそう!
estie
0
110
OpenAPIを中心に考えるAPI開発入門 / Introduction to API Development with a Focus on OpenAPI
seike460
PRO
2
170
Rethinking UI building strategies @ SFI 2024
letelete
0
270
HUIT新歓2024「競技プログラミング、やってみませんか?」
slephy2784
1
270
From Spring Boot 2 to Spring Boot 3 with Java 22 and Jakarta EE
ivargrimstad
0
1.1k
見た目から始める生産性向上
ikumatadokoro
7
810
Tailwind CSSを本気でカスタマイズする方法
fsubal
13
5.2k
What We Can Learn From OSS
inouehi
0
420
Featured
See All Featured
Design by the Numbers
sachag
274
18k
The Language of Interfaces
destraynor
151
23k
Producing Creativity
orderedlist
PRO
337
39k
Agile that works and the tools we love
rasmusluckow
325
20k
Designing Experiences People Love
moore
136
23k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
8.9k
10 Git Anti Patterns You Should be Aware of
lemiorhan
648
58k
Happy Clients
brianwarren
92
6.4k
Optimizing for Happiness
mojombo
370
69k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
What’s in a name? Adding method to the madness
productmarketing
PRO
16
2.6k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
19
1.7k
Transcript
RustでつくるRubyのFiber monochrome twitter: @s_isshiki1969 Slack: プログラミング言語処理系が好きな人の集まり https://prog-lang-sys-ja-slack.github.io/wiki/
Agenda • RustでRubyの処理系を作っています。 • 小さなプログラムは程度動くようになってきたので、大きなアプリケーションを動か せるよう頑張りました。 • その過程でsync_channelを使って協調スレッド(コルーチン)を実装したので発表し ます。
• 動的型付けのオブジェクト指向言語 • クラス定義、メソッド定義など、全てが動的 • 豊富なメタ言語機能 • Cで書かれている(50万行ぐらい)。 Ruby
既存のRuby実装(開発継続中のもの) 名称 記述言語 実行基盤 CRuby(MRI) C 独自VM mruby C 独自VM
JRuby Java JVM TruffleRuby Java GraalVM (JVM) Opal Ruby JSへコンパイル Rubinius C++, Ruby 独自VM Topaz RPython PyPy Artichoke Rust mruby ruruby Rust 独自VM
ruruby (https://github.com/sisshiki1969/ruruby) • 純Rust製のRuby実装 • 仮想マシンインタプリタ • 他の既存実装・仮想マシンへの依存なし • Rubyの標準ライブラリはRustで実装
• ガーベジコレクタを独自実装 • 2万行ぐらい
構成 virtual machine (VM) Rubyコード 抽象構文木 (AST) バイトコード parser codegen
1 1 2 3
benchmark ※CRuby(3.0.0-dev)と実行時間を比較。大きいほど遅い。
Optcarrot • Rubyで書かれたNESエミュレータ • 「Ruby3をRuby2の3倍速くする」目標のための準公式ベンチマーク • 実際にゲームができるモードと、ベンチマーク専用のモードがある • ベンチマークモードでは外部ライブラリを使用しない •
「普通のRuby」で書かれた標準モードと、コードを自己書き換えして高速化する最 適化モードがある • ≒6500 LOC repo: https://github.com/mame/optcarrot • 紹介スライド: https://www.slideshare.net/mametter/optcarrot-a-pureruby-nes-emulator
Fiber (coroutine in Ruby) f = Fiber.new { .. }
f.resume 処理A 処理B Fiber.yield f.resume 処理C Child Fiber 処理 処理 処理
sync_channelによるFiberの実装 https://github.com/sisshiki1969/ruruby/bl ob/aa72942d46337574448dafb493ee27 bb4defb69d/src/value/fiber.rs#L124
None
Optcarrot公式サイト
Slack: プログラミング言語処理系が好きな人の集まり https://prog-lang-sys-ja-slack.github.io/wiki/