RubyパーサーをOpalからPrism(@ruby/prism)に移行しました 🚀
#60
takaokouji
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
スモウルビーのRuby解析エンジンが新しくなりました!
これまで使っていたOpal(
whitequark/parser)から、Rubyの公式パーサーであるPrism(@ruby/prism)に移行しました。なぜ変えたの?
Rubyの開発チームは、Ruby 3.4からPrismを公式のパーサーとして採用しました。スモウルビーでも最新のRubyに対応し続けるために、今回の移行を行いました。
🔧 先生・生徒の皆さんへの影響
使い方は変わりません! RubyタブでRubyコードを書いて命令ブロックに変換する操作は、これまでと同じです。
今回の変更は「エンジンの交換」のようなものです。外から見える動きは同じですが、内側の仕組みがより新しくて信頼性の高いものになりました。
💡 技術的な仕組み(興味がある人向け)
対応できるRubyの文法が一気に最新へ
これまでスモウルビーで使えるRubyの文法は、Ruby 2.3相当に留まっていました。その理由は、Opalが利用していた
whitequark/parserがRuby 3.3以降をサポートせず、メンテナンスが終了していたためです。Prismに移行したことで、最新のRubyの文法が使えるようになりました。例えば、endlessメソッド定義(
def メソッド名 = 式)もサポートしています:今後のRubyの進化にもスムーズに追従できる基盤が整いました。
Prismへの移行で何が変わった?
_process()ディスパッチからVisitorパターンに刷新しましたchildren[0],children[1]からreceiver,nameなどの意味のある名前でアクセスできるようになりました苦労した点
production ビルド(minification)でクラス名が
mtのように短縮されてしまい、"not supported node type: mt"というエラーが発生しました。これを解消するため、webpack.config.jsにkeepNames: trueを追加し、さらにノードの dispatch をconstructor.nameからaccept()メソッドを利用した方法に変更しました。📚 詳細情報
実装の詳細や技術的な議論については、以下をご覧ください:
より新しく、より長く使えるRubyパーサーを搭載したスモウルビーを、ぜひ引き続きご利用ください!
Beta Was this translation helpful? Give feedback.
All reactions