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
790
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.
Trying to Make Ruby's Parser Available as a Gem
gamelinks007
1
150
ユーザーから見たLrama
gamelinks007
0
150
Other Decks in Technology
See All in Technology
Strict Concurrencyにしたらdeinitでクラッシュする話
0si43
0
120
成果のためのコミュニケーション - 語彙を育てよう -/communication-for-good-outcome-developing-vocabulary
hassaku63
4
150
つよつよリーダーが 抜けたらどうする? 〜ナビタイムのAgile⽀援組織の変遷〜
navitimejapan
PRO
22
13k
Authenticator のエミュレーションによる パスキーのログインテスト/nikkei-tech-talk-25
nikkei_engineer_recruiting
0
140
【shownet.conf_】ShowNet伝送改めShowNet APN 2024
shownet
PRO
0
330
Oracle Database 23ai 新機能#4 Real Application Clusters
oracle4engineer
PRO
0
110
DenoでもViteしたい!インポートパスのエイリアスを指定してラクラクアプリ開発
bengo4com
1
1.7k
エムスリー全チーム紹介資料 / Introduction of M3 All Teams
m3_engineering
1
220
スクラム導入の舞台裏:QAエンジニアがスクラムマスターになるまで
bubo1201
0
120
軽いノリで"自動化"に取り組んではいけないという話
tetsuyaooooo
1
150
トークナイザー入門
payanotty
2
440
XP matsuri 2024 - 銀河英雄伝説に学ぶ
kawaguti
PRO
3
510
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3.4k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
663
120k
Embracing the Ebb and Flow
colly
83
4.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
31
2.3k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
32k
Fontdeck: Realign not Redesign
paulrobertlloyd
81
5.2k
[RailsConf 2023] Rails as a piece of cake
palkan
49
4.7k
Ruby is Unlike a Banana
tanoku
96
11k
GitHub's CSS Performance
jonrohan
1030
450k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Pencils Down: Stop Designing & Start Developing
hursman
119
11k
Designing with Data
zakiwarfel
98
5.1k
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!