RubyKaigi 2024 に参加してきた。RegexやParserの話とか。
5/15 - 5/17 で沖縄(那覇)で行われた RubyKaigi 2024 に参加してきました。所属している会社(Leaner Technologies)も ドリンクアップスポンサー として協賛しました。
今年は RubyのParser、Profiler、Namespace あたりのトピックが盛り上がってるように思えましたが、個人的には DFA型の正規表現のエンジンを書いてみたいなーと思ったKaigiでした。
Make Your Own Regex Engine!
https://rubykaigi.org/2024/presentations/makenowjust.html#day3
makenowjust氏によるバックトラック型VMの正規表現エンジンを自作するというセッションです。作って学ぶ正規表現エンジン にも公開されています。
正規表現周りはあまり詳しくなく、あんまり予習もせず🙈 聞いていたのですが、最初の疑問は「バックトラック型とは? 正規表現であるなら、決定性有限オートマトンで表現するのが基本ではないのだろうか?」でした。
RubyKaigi 2023 - Make Regexp#match much faster
帰ってからこのへんを調べていたら同氏の去年の発表が見つかりました。セキュリティ関連っぽいと思ってスルーしてしまっていたやつ。(こんなにおもしろい話だったとは)
https://rubykaigi.org/2023/presentations/makenowjust.html
引用元: https://www.youtube.com/watch?v=IbMFHxeqpN4
こちらで、Future Workとして 決定性有限オートマトン(DFA)ベースの正規表現エンジンについて語られていました。
RubyKaigi 2021 takeout - Just-in-Time Compiling Ruby Regexps on TruffleRuby
DFAベースであれば単純なオートマトンに対する事前最適化が効くので、コンパイルとめっちゃ相性がいいはず?今はYJITがあるぞ!ワンチャン!と思っていたら、2021年にTruffleRuby + JIT の発表がされていました。みんな考えることは同じだ。
https://rubykaigi.org/2021-takeout/presentations/eregontp.html
このあたりまで調べて、DFA-based Regex engine + JIT (YJIT) でなんかすげぇいいかんじになるんじゃねえの〜? ヒュ〜!な妄想をして勝手にわくわくしています(現在)
ちなみにこの、VM型 => DFA型 みたいな流れ機械学習の世界に似ているなぁと思っていて、いま巷で流行ってる LLM、ニューラルネットワークも 基礎となる技術はシンプルなオートマトンなんですよね。
一周回って古典的な技術に戻ってくるのにエモさを感じます。
Rubyのパーサーの話とも繋がってくるよ
DFA型だと一定の制約が入るので、プッシュダウンオートマトン(PDA)にクラスをあげることで、やれることも増えそうだなあという感想もあります(あんまり理解していないので、適当に言っています)。ただしPDAはアルゴリズムが複雑になるので、シンプルなDFAに保っておいたほうが扱いやすいかも。
そして、PDA というと LR Parser なんですよね。繋がってきましたね。
そういえば昔、PDA ベースのパーサーを手書きして脳が爆発した経験がありました。そのときは、(自然言語処理をトライしていたので)自然言語解析の基礎 という本とにらめっこしていました。もっと良い本があったら教えてください。
まとめ
感想
- RubyKaigi、めちゃくちゃ楽しかった
- 正規表現エンジンの自作楽しそう
- コンピューターサイエンスの基礎を学んでおくとより楽しめる
- オートマトンは楽しいぞ
- もっと予習しておけばよかった
来年に向けて
- バックトラックVM型を詳しく理解したい
- DFA型で実現できないことを正しく理解したい
- DFA型の正規表現エンジンを書いてみたい
それではまた来年、松山でお会いしましょう 👋