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

rakulangで実装する! RubyVM

AnaTofuZ
February 10, 2024

rakulangで実装する! RubyVM

AnaTofuZ

February 10, 2024
Tweet

More Decks by AnaTofuZ

Other Decks in Technology

Transcript

  1. Raku • かつてのPerl6 ◦ Python2とPython3の違いではない ▪ むしろJavaとJavaScriptの関係だった ◦ 2019年にRakuに改名 •

    仕様と実装が分離している ◦ テストスイート(仕様)に合格したら”Raku” ◦ 歴史的にはPugs, Pallot, Yapsi, Nieczaなど ◦ 今はRakudo一択 7
  2. Raku 8 • マスコットはCamelia ◦ Perl6からのマスコット • 海外ではWebでも使われてる ◦ Cro

    ▪ Rakuでよく使われてるヤツ ▪ Edument社からRakuコミュニティ移管 ◦ Humming-Bird ▪ Sinatraっぽいやつ
  3. 世界観 • シジルがある ◦ 1要素も@%を使う • 型も書ける • .でメソッドが呼び出 せる

    • オブジェクト指向 • Perlとは似てるが 微妙に異なる 10
  4. Rakudo • ナウでヤングなRaku処理系 ◦ MoarVM (実行環境) ◦ NQP (NotQuitPerl, Rakuのサブセット)

    ◦ Raku自身 ▪ RakuはNQPとRakuで書かれてる • だいたい月イチでリリース ◦ https://github.com/rakudo/rakudo/releases • JVMで動くバージョンもある ◦ …が、MoarVMに比べてバグりがち 12
  5. 簡単にわかる! Rakulang 15 アレ Perl5 Rakulang 実行コマンド perl raku ファイル拡張子

    *.pl *.raku モジュール拡張子 *.pm *.rakumod テスト *.t *.rakutest
  6. モジュール • zef コマンドでいれられる ◦ cpanm的なヤツ ◦ かつてはpandaというのもあったが... • https://raku.land/

    でモジュールを探せる ◦ landだけに土アイコン!!!! • 歴史的にエコシステムが2つある ◦ fez (zefで使われてるヤツ・主流) ◦ p6c (歴史的にいるヤツ・fezに移行中) 16
  7. コンパイル vs スクリプト • 最近の言語は両方ともコンパイルする • 実行するヤツが違う ◦ コンパイル ▪

    直接CPU ◦ スクリプト ▪ プロセスVM経由でCPUが実行 ▪ JITがあると直接CPUが実行する(ので早いぜ) 22
  8. インクリメンタルに開発する 28 • ちょっとずつ実装する ◦ まずはHello Worldから • 命令セット全部移植しようとしない •

    完全にうまくやろうとしない ◦ 面倒なところは諦める ◦ 仕事のコードではない
  9. スタックマシン vs レジスタマシン • スタックマシン ◦ クソデカスタックを使って計算をする ▪ push, popみたいな動作が主

    ◦ こっちの方が実装が簡単(とされている) • レジスタマシン ◦ 現実のCPUと同じようにレジスタ(変数)を持つ ▪ レジスタ同士で計算する • なんと今日2つ出てきます 31
  10. 37

  11. 38

  12. 60

  13. 61

  14. RubyVMの雰囲気 • 上から順に命令を実行していけばだいたいOK • HelloWorldではアドレスは無視する • IF文では分岐が必要 ◦ True/Falseで実行する命令を変える必要がある •

    このためにはアドレスを見て処理していく必 要がある ◦ プログラムカウンタを導入 70 今実行しているア ドレスを保持する 変数
  15. 75

  16. 76

  17. 89

  18. 92

  19. 93

  20. 97