Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Contributing to the Ruby Parser
Search
S.H.
May 16, 2024
Technology
2
1.2k
Contributing to the Ruby Parser
In RubyKaigi 2024 Lightning Talks Slide
S.H.
May 16, 2024
Tweet
Share
More Decks by S.H.
See All by S.H.
ゆるゆるMastodon 鯖缶生活
gamelinks007
0
660
1週間で作るActivityPubリレーサーバ
gamelinks007
0
110
Rails 8で作るActivityPub リレーサーバ
gamelinks007
0
460
Developing an ActivityPub Relay with Rails 8
gamelinks007
0
63
Mastodon on Ruby master
gamelinks007
0
120
Trying to Make Ruby's Parser Available as a Gem
gamelinks007
1
340
ユーザーから見たLrama
gamelinks007
0
230
Other Decks in Technology
See All in Technology
【実演版】カンファレンス登壇者・スタッフにこそ知ってほしいマイクの使い方 / 大吉祥寺.pm 2025
arthur1
1
800
20250913_JAWS_sysad_kobe
takuyay0ne
2
130
「全員プロダクトマネージャー」を実現する、Cursorによる仕様検討の自動運転
applism118
21
10k
大「個人開発サービス」時代に僕たちはどう生きるか
sotarok
20
9.8k
5分でカオスエンジニアリングを分かった気になろう
pandayumi
0
230
サンドボックス技術でAI利活用を促進する
koh_naga
0
200
ハードウェアとソフトウェアをつなぐ全てを内製している企業の E2E テストの作り方 / How to create E2E tests for a company that builds everything connecting hardware and software in-house
bitkey
PRO
1
120
2025年になってもまだMySQLが好き
yoku0825
8
4.7k
下手な強制、ダメ!絶対! 「ガードレール」を「檻」にさせない"ガバナンス"の取り方とは?
tsukaman
2
430
初めてAWSを使うときのセキュリティ覚書〜初心者支部編〜
cmusudakeisuke
1
240
OCI Oracle Database Services新機能アップデート(2025/06-2025/08)
oracle4engineer
PRO
0
110
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
150
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.2k
Designing Experiences People Love
moore
142
24k
Visualization
eitanlees
148
16k
Building an army of robots
kneath
306
46k
The Invisible Side of Design
smashingmag
301
51k
Being A Developer After 40
akosma
90
590k
The World Runs on Bad Software
bkeepers
PRO
70
11k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
188
55k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Navigating Team Friction
lara
189
15k
Transcript
Contributing to the Ruby Parser S.H.
About Me • S.H. • Software engineer at ESM, Inc.
• Hamada.rb Organizer • I’m hosting Ruby Hacking Challenge in Hamada.rb
None
ruby/ruby contributors
ruby/ruby contributors I’m here!
parse.y contributors
parse.y contributors I’m here!
Today Topic is… • Why I got interested in the
Ruby Parser • How I started contributing to the Ruby Parser • How I started contributing to the Universal Parser
In RubyKaigi 2021 Takeout
In RubyKaigi 2021 Takeout • parse.y is difficult to maintain
◦ No one but nobu can maintain parse.y • parse.y seems hard to understand
Is parse.y really that hard to maintain?
I’m worried
I started to reading parse.y
My first impression of parse.y • The codebase is large
• It’s hard to figure out what to begin reading • I have a no clue about BNF
What I read to study to parse.y • Ruby Under
the Microscope • Ruby Hacking Guide • ruby trunk changes
I’ve started to understand parse.y a bit
Difficulties I noticed while reading • Ruby Parser and Ripper
are interwind • The overall codebase is large
Difficulties I noticed while reading • Ruby Parser and Ripper
are interwind • The overall codebase is large It’s too hard
Difficulties I noticed while reading • Ruby Parser and Ripper
are interwind • The overall codebase is large May be able to do something here?
Let’s do it!
Action • Reusing BNF • Introducing some macros • Introducing
Ruby C API
Reusing BNF (1)
Reusing BNF (1)
Reusing BNF (2)
Reusing BNF (2)
Reusing BNF (3)
Reusing BNF (3)
Introducing macro (1)
Introducing macro (2)
Introducing Ruby C API
Results • Cut down codebase • Added dependencies by introducing
macros and Ruby C API
In RubyKaigi 2023
In RubyKaigi 2023 • I feel the future of the
Ruby Parser in “The Future of the Ruby Parser” at spikeolaf • I realized that added macros and Ruby C API are make dependencies for Universal Parser
After RubyKaigi 2023
After RubyKaigi 2023 • I read “Started parse.y Refactoring Challenge”
◦ https://yui-knk.hatenablog.com/entry/202 3/06/18/162100 • It was written want to remove the generation of literal objects in parse.y
Why? • parse.y needs Ruby C API for generation of
literal objects • Will obtain a simpler AST ◦ e.g. Fixnum, Bignum, and Float…
Let’s do it!
Introducing new NODE (1)
Introducing new NODE (2)
Reducing C API dependencies (1)
Results • Obtained a simpler AST for some literal ◦
e.g. Numeric and __ENCODING__ • Reducing Ruby C API dependencies for Universal Parser
KPT Keep motivation Should more disscuss Share my experience Increase
Parser Contributor Keep Problem Try
parse.y is NOT Hell! We can hack parse.y!