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
590
1週間で作るActivityPubリレーサーバ
gamelinks007
0
82
Rails 8で作るActivityPub リレーサーバ
gamelinks007
0
400
Developing an ActivityPub Relay with Rails 8
gamelinks007
0
40
Mastodon on Ruby master
gamelinks007
0
100
Trying to Make Ruby's Parser Available as a Gem
gamelinks007
1
310
ユーザーから見たLrama
gamelinks007
0
210
Other Decks in Technology
See All in Technology
PythonツールであるpygnmiをSONiCのgNMIに対して使ってみた
sonic
0
340
(なるべく)無料で始めるTerraformのインフラ構築体験
sakamossaaaan
1
110
チェックツールを導入したけど使ってもらえなかった話 #GAADjp
lycorptech_jp
PRO
1
150
LLMベースAIの基本 / basics of LLM based AI
kishida
9
2.2k
幸せに働ける組織を目指すリーダーの葛藤と挑戦 / 20250517 Tadahiro Yasuda & Rinto Ikenoue
shift_evolve
1
150
Creative UIs with Compose: Kotlinconf 2025
chrishorner
0
140
株式会社Awarefy(アウェアファイ)会社説明資料 / Awarefy-Company-Deck
awarefy
3
17k
OCI Database Management サービス詳細
oracle4engineer
PRO
1
4.4k
ホワイトボックス& SONiC アーキテクチャ(全体像) - SONiC Workshop Japan 2025
ebiken
PRO
1
450
SONiCにて使用されているSAIの実際
sonic
0
350
SONiCで構築・運用する生成AI向けパブリッククラウドネットワーク
sonic
1
550
ゆるくはじめるSLI・SLO
yatoum
1
150
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
180
53k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.3k
How GitHub (no longer) Works
holman
314
140k
Rails Girls Zürich Keynote
gr2m
94
13k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
5
620
Automating Front-end Workflow
addyosmani
1370
200k
Statistics for Hackers
jakevdp
799
220k
Making the Leap to Tech Lead
cromwellryan
133
9.3k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Gamification - CAS2011
davidbonilla
81
5.3k
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!