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.1k
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
630
1週間で作るActivityPubリレーサーバ
gamelinks007
0
99
Rails 8で作るActivityPub リレーサーバ
gamelinks007
0
430
Developing an ActivityPub Relay with Rails 8
gamelinks007
0
57
Mastodon on Ruby master
gamelinks007
0
110
Trying to Make Ruby's Parser Available as a Gem
gamelinks007
1
330
ユーザーから見たLrama
gamelinks007
0
220
Other Decks in Technology
See All in Technology
Lufthansa ®️ USA Contact Numbers: Complete 2025 Support Guide
lufthanahelpsupport
0
240
関数型プログラミングで 「脳がバグる」を乗り越える
manabeai
2
220
モニタリング統一への道のり - 分散モニタリングツール統合のためのオブザーバビリティプロジェクト
niftycorp
PRO
1
360
American airlines ®️ USA Contact Numbers: Complete 2025 Support Guide
airhelpsupport
0
390
セキュアな社内Dify運用と外部連携の両立 ~AIによるAPIリスク評価~
zozotech
PRO
0
100
CDKTFについてざっくり理解する!!~CloudFormationからCDKTFへ変換するツールも作ってみた~
masakiokuda
1
200
microCMSではじめるAIライティング
himaratsu
0
120
クラウド開発の舞台裏とSRE文化の醸成 / SRE NEXT 2025 Lunch Session
kazeburo
1
450
Delta airlines Customer®️ USA Contact Numbers: Complete 2025 Support Guide
deltahelp
0
1.1k
第64回コンピュータビジョン勉強会「The PanAf-FGBG Dataset: Understanding the Impact of Backgrounds in Wildlife Behaviour Recognition」
x_ttyszk
0
170
american aa airlines®️ USA Contact Numbers: Complete 2025 Support Guide
aaguide
0
500
Claude Code に プロジェクト管理やらせたみた
unson
8
4.9k
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
695
190k
We Have a Design System, Now What?
morganepeng
53
7.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Become a Pro
speakerdeck
PRO
29
5.4k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
Thoughts on Productivity
jonyablonski
69
4.7k
Designing for Performance
lara
610
69k
Designing for humans not robots
tammielis
253
25k
The World Runs on Bad Software
bkeepers
PRO
69
11k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Code Review Best Practice
trishagee
69
19k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
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!