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
1.4k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Contributing to the Ruby Parser
In RubyKaigi 2024 Lightning Talks Slide
S.H.
May 16, 2024
More Decks by S.H.
See All by S.H.
Termfront: Ruby標準ライブラリだけで作るFPS
gamelinks007
1
88
Ruby on Bare Metal
gamelinks007
0
100
Ecosystem on parse.y
gamelinks007
0
420
ゆるゆるMastodon 鯖缶生活
gamelinks007
0
790
1週間で作るActivityPubリレーサーバ
gamelinks007
0
180
Rails 8で作るActivityPub リレーサーバ
gamelinks007
0
630
Developing an ActivityPub Relay with Rails 8
gamelinks007
0
110
Mastodon on Ruby master
gamelinks007
0
200
Trying to Make Ruby's Parser Available as a Gem
gamelinks007
1
690
Other Decks in Technology
See All in Technology
WebGIS AI Agentの紹介
_shimizu
0
520
AWS Security Agent といっしょに脅威モデリングをやってみよう
amarelo_n24
1
200
ぼっちではじめた登壇が「51名」「241件」の発信に化けた
subroh0508
1
300
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
460
GitHub Copilot app最速の発信の裏側
tomokusaba
1
240
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
1
380
FPGAの開発コンペでZephyrを使ってみた
iotengineer22
0
180
IaC コードを資産へ:AWS CDK 社内ライブラリと横断展開 / aws-summit-japan-2026
gotok365
10
1.5k
SONiCのLinuxベースを活かしたZabbix監視
sonic
0
280
Kiro Ambassador を目指す話
k_adachi_01
0
120
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
260
フィジカル版Github Onshapeの紹介
shiba_8ro
0
320
Featured
See All Featured
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
180
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
Everyday Curiosity
cassininazir
0
230
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
400
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
440
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
340
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
290
Deep Space Network (abreviated)
tonyrice
0
210
What does AI have to do with Human Rights?
axbom
PRO
1
2.2k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
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!