先日、福岡Rubyist会議04に行って @yui-knkさんや@kddnewtonさんのParserの話を聞きました。
僕はRubyKaigi2023は松本まで行ったものの中耳炎で発熱してずっとホテルでダウンし、RubyKaigi2024はギックリ腰で中途半端にしか参加できませんでした。つまり一連のParserの話に完全に乗り遅れてしまっていました。
これまでのRubyKaigiの動画やブログエントリーなどを見て追っかけて見ました。ruby内部や言語実装について詳しくないので理解が間違ってるかもなのと、いくつか疑問点が出てきたのでXなどでご指摘いただければありがたいです。
現状の理解
rubyのparserには下記の問題がある。
- メンテナンス性
- エラー許容性
- 処理系ごとにparserが別
これらを解決する手始めとして@yui-knkさんが既存のbisonを置き換えるlramaを作った。 @kddnewtonさんとshopfyはprism(旧yarp)を作った。
ruby3.3でbisonがlramaに置き換わった。prismはdefault gemになった。
疑問点
prismは"A new compiler for CRuby 3.3+"と書いてあるけど、YJITと競合するってこと?
https://speakerdeck.com/kddnewton/why-prism?slide=32
prismは「3.3ではオプション、3.4プレビューではデフォルト」って書いてあるけど、これはparserの話?compilerとしての話?
https://speakerdeck.com/kddnewton/why-prism?slide=100
parse.yは大幅に変えずにbisonをlramaに切り替えられたってこと?
追記:いろいろ解決しました Parser周りの疑問が少し解決 - komagataのブログ