Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RustでつくるRubyのFiber

Aea43fe34799c7ae03e9793919e39c65?s=47 monochrome
October 22, 2020

 RustでつくるRubyのFiber

Aea43fe34799c7ae03e9793919e39c65?s=128

monochrome

October 22, 2020
Tweet

Transcript

  1. RustでつくるRubyのFiber monochrome twitter: @s_isshiki1969 Slack: プログラミング言語処理系が好きな人の集まり https://prog-lang-sys-ja-slack.github.io/wiki/

  2. Agenda • RustでRubyの処理系を作っています。 • 小さなプログラムは程度動くようになってきたので、大きなアプリケーションを動か せるよう頑張りました。 • その過程でsync_channelを使って協調スレッド(コルーチン)を実装したので発表し ます。

  3. • 動的型付けのオブジェクト指向言語 • クラス定義、メソッド定義など、全てが動的 • 豊富なメタ言語機能 • Cで書かれている(50万行ぐらい)。 Ruby

  4. 既存の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
  5. ruruby (https://github.com/sisshiki1969/ruruby) • 純Rust製のRuby実装 • 仮想マシンインタプリタ • 他の既存実装・仮想マシンへの依存なし • Rubyの標準ライブラリはRustで実装

    • ガーベジコレクタを独自実装 • 2万行ぐらい
  6. 構成 virtual machine (VM) Rubyコード 抽象構文木 (AST) バイトコード parser codegen

    1 1 2 3
  7. benchmark ※CRuby(3.0.0-dev)と実行時間を比較。大きいほど遅い。

  8. 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
  9. Fiber (coroutine in Ruby) f = Fiber.new { .. }

    f.resume 処理A 処理B Fiber.yield f.resume 処理C Child Fiber 処理 処理 処理
  10. sync_channelによるFiberの実装 https://github.com/sisshiki1969/ruruby/bl ob/aa72942d46337574448dafb493ee27 bb4defb69d/src/value/fiber.rs#L124

  11. None
  12. Optcarrot公式サイト

  13. Slack: プログラミング言語処理系が好きな人の集まり https://prog-lang-sys-ja-slack.github.io/wiki/