Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Ruby2.7の新機能で簡易版Rubyインタプリタを実装してみる
Search
fuqda
May 09, 2019
Programming
670
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ruby2.7の新機能で簡易版Rubyインタプリタを実装してみる
Hello hey for Engineers vol.3(day2)の発表資料です。
Ruby2.7の新機能パターンマッチを使って簡易版Rubyインタプリタを実装してみるという話です。
fuqda
May 09, 2019
More Decks by fuqda
See All by fuqda
Composition API時代の Pub/Subパターンでの状態管理
fuqda
4
4.1k
RubyでPrettierを使ってみた
fuqda
0
420
RSpecによるOpen API自動テスト
fuqda
3
1.2k
OSSへの プルリクエスト作成の手引き
fuqda
1
380
Rails Girls Tokyo 13th Sponsor LT by STORES
fuqda
0
260
黒歴史リポジトリを使ったリファクタリング勉強法のススメ
fuqda
1
1.2k
OSS初心者がつまづきながらOSSマナーを学んでいく話
fuqda
4
3.5k
カンファレンスで技術的お土産を 増やすために出来ることを考えた
fuqda
2
620
Other Decks in Programming
See All in Programming
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
350
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
280
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
250
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
360
Building an Out-of-Order CPU
latte72
1
790
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
240
速習iPhone Duo対応
yuukiw00w
1
660
GKE で Pod の見方を変えたら、スケールアウト時の挙動を真に捉えられた話
stkk
0
130
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
150
Security issues being discussed on Web Platforms
petamoriken
0
990
Featured
See All Featured
So, you think you're a good person
axbom
PRO
2
2.2k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Context Engineering - Making Every Token Count
addyosmani
9
1.1k
Writing Fast Ruby
sferik
630
63k
Paper Plane (Part 1)
katiecoart
PRO
2
11k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
360
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
850
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
460
The browser strikes back
jonoalderson
0
1.7k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
360
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
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 Ұॹʹಇ͍ͯ͘ΕΔؒΛืू͍ͯ͠·͢