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
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
570
1週間で作るActivityPubリレーサーバ
gamelinks007
0
76
Rails 8で作るActivityPub リレーサーバ
gamelinks007
0
390
Developing an ActivityPub Relay with Rails 8
gamelinks007
0
36
Mastodon on Ruby master
gamelinks007
0
98
Trying to Make Ruby's Parser Available as a Gem
gamelinks007
1
300
ユーザーから見たLrama
gamelinks007
0
210
Other Decks in Technology
See All in Technology
Goの組織でバックエンドTypeScriptを採用してどうだったか / How was adopting backend TypeScript in a Golang company
kaminashi
5
2.7k
こんなデータマートは嫌だ。どんな? / waiwai-data-meetup-202504
shuntak
6
1.9k
NLP2025 参加報告会 / NLP2025
sansan_randd
4
570
ElixirがHW化され、最新CPU/GPU/NWを過去のものとする数万倍、高速+超省電力化されたWeb/動画配信/AIが動く日
piacerex
0
130
All You Need Is Kusa 〜Slackデータで始めるデータドリブン〜
jonnojun
0
150
LangChainとLangGiraphによるRAG・AIエージェント実践入門「10章 要件定義書生成Alエージェントの開発」輪読会スライド
takaakiinada
0
140
プロダクト開発におけるAI時代の開発生産性
shnjtk
2
220
Spring Bootで実装とインフラをこれでもかと分離するための試み
shintanimoto
7
760
Road to Go Gem #rubykaigi
sue445
0
220
AWS全冠芸人が見た世界 ~資格取得より大切なこと~
masakiokuda
5
5.5k
開発視点でAWS Signerを考えてみよう!! ~コード署名のその先へ~
masakiokuda
3
160
“パスワードレス認証への道" ユーザー認証の変遷とパスキーの関係
ritou
1
550
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
36
3.2k
The Cost Of JavaScript in 2023
addyosmani
49
7.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
349
20k
How STYLIGHT went responsive
nonsquared
99
5.5k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.5k
How to Think Like a Performance Engineer
csswizardry
23
1.5k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
520
Making Projects Easy
brettharned
116
6.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
670
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!