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

rakulangで実装する! RubyVM

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for AnaTofuZ AnaTofuZ
February 10, 2024

rakulangで実装する! RubyVM

Avatar for AnaTofuZ

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