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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
S.H.
May 16, 2024
Technology
2
1.3k
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.
Ecosystem on parse.y
gamelinks007
0
11
ゆるゆるMastodon 鯖缶生活
gamelinks007
0
740
1週間で作るActivityPubリレーサーバ
gamelinks007
0
160
Rails 8で作るActivityPub リレーサーバ
gamelinks007
0
560
Developing an ActivityPub Relay with Rails 8
gamelinks007
0
87
Mastodon on Ruby master
gamelinks007
0
160
Trying to Make Ruby's Parser Available as a Gem
gamelinks007
1
540
ユーザーから見たLrama
gamelinks007
0
250
Other Decks in Technology
See All in Technology
なぜAIは組織を速くしないのか 令和の腑分け
sugino
76
48k
技術キャッチアップ効率化を実現する記事推薦システムの構築
yudai00
2
150
社内ワークショップで終わらせない 業務改善AIエージェント開発
lycorptech_jp
PRO
1
380
NW構成図の自動描画は何が難しいのか?/netdevnight3
corestate55
2
490
ソフトウェアアーキテクトのための意思決定術: Create Decision Readiness—The Real Skill Behind Architectural Decision
snoozer05
PRO
24
6.9k
AI活用を"目的"にしたら、データの本質が見えてきた - Snowflake Intelligence実験記 / chasing-ai-finding-data
pei0804
0
760
【PyCon mini Shizuoka 2026】生成AI時代に画像処理やオーディオ処理のノードエディターを作る理由
kazuhitotakahashi
0
170
AI Coding Agentの地殻変動 ~ ai-coding.info の定点観測 ~
kotauchisunsun
1
460
What's new in Go 1.26?
ciarana
2
250
Agentic Codingの実践とチームで導入するための工夫
lycorptech_jp
PRO
0
180
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
360
Secure Boot 2026 - Aggiornamento dei certificati UEFI e piano di adozione in azienda
memiug
0
120
Featured
See All Featured
Believing is Seeing
oripsolob
1
68
Tell your own story through comics
letsgokoyo
1
830
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
970
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.1k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
0
2.4k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
210
Statistics for Hackers
jakevdp
799
230k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.8k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
130
Embracing the Ebb and Flow
colly
88
5k
Ethics towards AI in product and experience design
skipperchong
2
210
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.7k
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!