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
650
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.
ユーザーから見たLrama
gamelinks007
0
25
Other Decks in Technology
See All in Technology
Janus
bkuhlmann
1
540
自動化と効率化のためにGitHub Actionsを使いこなそう
devops_vtj
4
450
カード発行会社(イシュア)を 支えるシステム解説
yutadayo
0
160
Columinity (旧Scrum Team Survey) を使ってチームの継続的な改善活動を始めよう / Scrum Fest Osaka 2024
ama_ch
1
120
dbt Semantic Layer ( MetricFlow ) の理解を深める
tanuuuuuuu
2
830
Adaptor, Helmet, SSG
watany
0
120
Claude3 on Bedrock with Converse API + Tool use でチャットアプリを作成してみた/Building-a-Chat-App-Using-Claude3-on-Bedrock-with-the-Converse-API+Tool-Use
ren8k
0
480
WebサーバーとPHP実行方式を きちんと理解してPHPランタイムを 適切に使い分ける - PHPカンファレンス福岡2024
ysknsid25
2
120
スクラムゾンビになっちゃたので、古のフレームワークを導入した話 / Embracing Ancient Frameworks
kaonavi
0
170
情報の世界 2024年度 第11回「都市のデータ」 #情報の世界 / Data of City 2024
yumulab
0
100
Comment nous avons transformé les Restos du Coeur en Cloud Provider
ju_hnny5
1
240
顧客価値に向き合うためのCREのススメ
zakiyama
4
480
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
266
19k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
88
46k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
104
6.7k
From Idea to $5000 a Month in 5 Months
shpigford
377
46k
Scaling GitHub
holman
457
140k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
228
16k
A Philosophy of Restraint
colly
198
16k
In The Pink: A Labor of Love
frogandcode
138
21k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
Debugging Ruby Performance
tmm1
70
11k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
34
9k
Building Flexible Design Systems
yeseniaperezcruz
321
37k
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!