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
Ruby2.7の新機能で簡易版Rubyインタプリタを実装してみる
Search
fuqda
May 09, 2019
Programming
0
570
Ruby2.7の新機能で簡易版Rubyインタプリタを実装してみる
Hello hey for Engineers vol.3(day2)の発表資料です。
Ruby2.7の新機能パターンマッチを使って簡易版Rubyインタプリタを実装してみるという話です。
fuqda
May 09, 2019
Tweet
Share
More Decks by fuqda
See All by fuqda
Composition API時代の Pub/Subパターンでの状態管理
fuqda
4
3.5k
RubyでPrettierを使ってみた
fuqda
0
330
RSpecによるOpen API自動テスト
fuqda
3
1.1k
OSSへの プルリクエスト作成の手引き
fuqda
2
320
Rails Girls Tokyo 13th Sponsor LT by STORES
fuqda
0
190
黒歴史リポジトリを使ったリファクタリング勉強法のススメ
fuqda
1
1.1k
OSS初心者がつまづきながらOSSマナーを学んでいく話
fuqda
4
3.2k
カンファレンスで技術的お土産を 増やすために出来ることを考えた
fuqda
2
510
Other Decks in Programming
See All in Programming
Code as Context 〜 1にコードで 2にリンタ 34がなくて 5にルール? 〜
yodakeisuke
0
110
NPOでのDevinの活用
codeforeveryone
0
360
Bytecode Manipulation 으로 생산성 높이기
bigstark
2
380
設計やレビューに悩んでいるPHPerに贈る、クリーンなオブジェクト設計の指針たち
panda_program
6
1.5k
XSLTで作るBrainfuck処理系
makki_d
0
210
データの民主化を支える、透明性のあるデータ利活用への挑戦 2025-06-25 Database Engineering Meetup#7
y_ken
0
320
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
230
20250628_非エンジニアがバイブコーディングしてみた
ponponmikankan
0
440
PicoRuby on Rails
makicamel
2
100
技術同人誌をMCP Serverにしてみた
74th
1
370
童醫院敏捷轉型的實踐經驗
cclai999
0
190
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
160
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.8k
The Pragmatic Product Professional
lauravandoore
35
6.7k
How to train your dragon (web standard)
notwaldorf
93
6.1k
A designer walks into a library…
pauljervisheath
207
24k
Bash Introduction
62gerente
614
210k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
930
Optimizing for Happiness
mojombo
379
70k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Transcript
Ruby2.7ͷ৽ػೳͰ ؆қ൛RubyΠϯλϓϦλΛ ࣮ͯ͠ΈΔ 2019/05/09 Hello hey for Engineers vol.3ɹɹ
fuqda(fuqda90)
fuqdaͱਃ͠·͢ ʲܦྺʳ 4*FS ϲ݄ ͔Β ແڅΠϯλʔϯϲ݄Λܦͯ 4503&4KQྲྀΕண͖ ʲͦͷଞʳ ීஈ5BNBSCͱ͍͏
ଟຎҬ ٢ࣉʙീԦࢠ·Ͱ ͷ Ҭ3VCZίϛϡχςΟΛɹ ओ࠵ͯ͠·͢
ࠂ ݸਓత
݄ʹ5BNBSCͰ ΧϯϑΝϨϯε Γ·͢✨
ςʔϚʮRubyistͱͯ͠ͷʯ
Tama Rubyձٞ01 d ҙࢀՃͷ࠙ձd·Ͱ !ौ୩ηϧϦΞϯλϫʔ' (.0:PVST
جௐߨԋɿҏ౻३Ұ͞Μ !KODIJUP جௐߨԋɿޒेཛྷ໌͞Μ !JHBJHB ͦͷଞ$'1ʴ5BNBSCϝϯόʔ-5
CFPઈࢍडதͰ͢ (ҰൠࢀՃืू6݄։࢝༧ఆ) https://tama-rb.github.io/tamarubykaigi01/
ࠓͷ͓
Ruby2.7ͷύλʔϯϚονΛ ࢼͯ͠ΈΔͱ͍͏ 3VCZͷτϥϯΫ NBTUFS ʹ 1BUUFSO.BUDIJOHͱ͍͏৽ػೳ͕ Ճ͞Ε͍ͯΔͱͷ͜ͱ ͱ͍͏Θ͚Ͱʂຊ ͦΕΛࢼͯ͠Έ·͢
ิɿRubyKaigi2019Ͱͷ ൃදͪ͜Β https://speakerdeck.com/k_tsj/pattern-matching-new-feature-in-ruby-2-dot-7
ࠓճ ύλʔϯϚονϯάΛ ࢼ͢ࡐ
3VCZͰ࡞Δ ؆қ൛ 3VCZΠϯλϓϦλ ✨
ʲલఏʳ ͜͜Ͱ࡞ΔΠϯλϓϦλʹ͍ͭͯɺ िץΞεΩʔͰ࿈ࡌ͞Ε͍ͯͨ (2016.09~2017.01) RubyͰֶͿRubyͷίʔυΛҰ෦ྲྀ༻͠ɺ ͦ͜ʹखΛೖΕ͍ͯ͘ܗͰ ਐΊ͍͖ͯ·͢ refs :ʮୈ5ճ RubyͰม͖ిΛ࡞ͬͯΈΔʯ
https://ascii.jp/elem/000/001/230/1230449/
ͦͦΠϯλϓϦλͬͯ… JUFSQSFUFSˠҙຯɿʮ௨༁ʯ ਓ͕ؒॻ͍ͨιʔείʔυΛ ಡΈࠐΜͰϓϩάϥϜͱͯ͠ ࣮ߦ͢ΔϓϩάϥϜͷ͜ͱ
ྫ͑͜ΜͳࣜΛಡΈࠐΜͰ ΠϯλʔϓϦλ͕ղऍ͢Δ߹
ΠϯλϓϦλ͕ Δ͜ͱͬͯʁ
ࣈ۟ղੳ ߏจղੳ ࣮ߦ
1. ࣈ۟ղੳ จࣈྻΛͭͭ෦ͷྻʹม͢Δ
2. ߏจղੳ ϓϩάϥϜͱ࣮ͯ͠ߦՄೳͳߏจʹม͢Δ
3. ࣮ߦ ߏจΛೖྗͱͯ͠ϓϩάϥϜΛ࣮ߦ͢Δ
ࣈ۟ղੳ ߏจղੳ ࣮ߦ ࣌ؒͷ߹ʹΑΓ ͷ ෦ग़དྷ߹͍ͷϥΠϒϥϦΛ ྲྀ༻͠·͢
͍ͬͯ͘
ࠓճͷࡐྉᶃ ߏจղੳ༻ͷgem NJOSVCZ https://github.com/mame/minruby
ࠓճͷࡐྉᶄ ߏจΛRubyͱ࣮ͯ͠ߦ͢ΔΫϥε ࣮ߦ͢ΔϑΝΠϧ JOUFSQSFUFSSC
ࠓճͷࡐྉᶅ ߏจΛ࡞ΔͨΊͷܭࢉࣜΛهࡌͨ͠Ϋϥε ίϚϯυ࣮ߦ͢ΔϑΝΠϧͷҾͱͳΔϑΝΠϧ ʮ ʯ͕هࡌ͞Ε͍ͯΔ͚ͩ GPSNVMBSC
͡Ό࣮͋ࡍɺ 3VCZͷύλʔϯϚονϯάΛ ΠϯλϓϦλͷॲཧͰ͏ͱͯ͠ɺ ͲΜͳ෦Ͱ͑ΔͩΖ͏ʁ
ߟ͑ͯΈΔ
case~whenΛεοΩϦॻ͘ ͨΊʹ͏ͷͲ͏ͩΖ͏ʁ ɹɹɹɹ ߏจղੳޙͷྻ Λ ࠶ؼతʹݕࡧͯ͠Լهͷϝιουͷ 3VCZͱͯ͠ ࣮ߦ͢Δ෦ʹ खΛೖΕͯΈΔ
ࢼͯ͠ΈΑ͏
ࠓճ͏ ύλʔϯϚονϯάͷ छྨ ɹɹɹɹ˞ύλʔϯϚονϯάͷه๏ʹ ɹɹɹɹ͍͔ͭ͘ͷόϦΤʔγϣϯ͕͋Γ·͢
As Pattern DBTFʹ͕ͬͨ ύλʔϯʹҰக͢Δͱ Ұகͨ͠ͱ Ҏ߱ͷมΛ ඥ͚ͮΔ͜ͱ͕ग़དྷΔ
ͦͷଞͷύλʔϯϚονϯάʹ͍ͭͯ 7BMVF1BUUFSO 7BSJBCMF1FUUFSO "MUFSOBUJWF1BUUFSO "SSBZ1BUUFSO )BTI1BUUFSO ͪ͜Βͷهࣄ͕͔Γ͔ͬͨ͢ͷͰؾʹͳΔํͦͪΒ !NBLJDBNFMʮ3VCZͷ৽ػೳ1BUUFSO.BUDIJOH͕࠷ߴͰͨ͠ʯ IUUQTRJJUBDPNNBLJDBNFMJUFNTDEFGEFEC
ͬͯΈͨ
As PatternΛ͏લޙͷมߋࠩ ࠓճͷέʔεͰ࠶ؼॲཧΛॻ͔ͳͯ͘Α͘ͳΓ·ͨ͠ ଟগγϡοͱॻ͚͔ͨ͠Ε·ͤΜɻ ͬͱ៉ྷʹॻ͚ΔͩΖ͏͚Ͳࠓճΰϝϯͳ͍͞ʜ
खݩͰಈ͔͢߹ ͠खݩͰࢼͯ͠Έ͍ͨ ͱ͍͏ํHJTUʹιʔεΛ ஔ͍͓͖ͯ·ͨ͠ͷͰɺ ͦͪΒͰ͓ܰ͘ࢼ͚͠·͢ ) Rubyͷόʔδϣϯ2.7.0devͰ͢ https://gist.github.com/Shigeyuki-fukuda/37c2e9da1ac3744ea24920dacd25580f
࣮ࡍʹಈ͔ͨ݁͠Ռ SBJMTSVOOFSίϚϯυʹҾΛͯ͠ ࣮ߦͯ͠Έͨͱ͜ΖΩϟϓνϟͷ௨Γ ఆ௨Γͷܭࢉ͕͞Ε·ͨ͠ ܭࢉ݁Ռ͕Ͱ͋Δ͜ͱΛ֬ೝ
ײ
ࠓճͬͯΈͯ… ࠓճɺ ͷΑ͏ͳԋࢉࢠͱͭͷ୯७ͳܭࢉࣜͰ͕ͨ͠ɺ ԼهͷΑ͏ͳෳߦͷܭࢉʹରԠ͠Α͏ͱ͢Δͱ ͏গ͍͠ํΛ͢Δඞཁ͕͋Γͦ͏Ͱ͢ ͏গͯ͠͠࡞Γ͔ͨͬͨͰ͕͢ɺ·ͨ࣍ͷػձʹ ɹɹɹɹɹɹɹɹɹɹ
ɹɹɹɹɹɹɹɹɹɹ FYෳߦͷܭࢉࣜΛಡΈࠐΉࡍͷྫ
·ͱΊ
RubyͬͯΠΠͰ͢ΑͶ✨ ࠓճ3VCZͷτϥϯΫʹՃ͞Εͨ ϕʔλ൛ͷύλʔϯϚονϯάΛ3VCZͷΠϯλϓϦλͷ࣮ ͱ͍͏έʔεΛྫʹ͍ͬͯ͡Έ·ͨ͠ ͬͺΓ3VCZͰίʔυΛॻ͘ͷָ͍ͬͯ͠Ͱ͢ΑͶ✨☺ 3VCZͷདྷϦϦʔε͕ࠓ͔Βָ͠ΈͰ͢ SCFOW͔ΒखܰʹམͱͤΔͷͰ ·ͩͷํ2.7Λࢼͯ͠Έ͍͔͕ͯͰ͠ΐ͏͔
ͱ͍͏Θ͚Ͱ
8FBSF)JSJOH 4503&4KQ Ұॹʹಇ͍ͯ͘ΕΔؒΛืू͍ͯ͠·͢