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
560
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
320
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
コードに語らせよう――自己ドキュメント化が内包する楽しさについて / Let the Code Speak
nrslib
6
1.4k
Javaに鉄道指向プログラミング (Railway Oriented Pro gramming) のエッセンスを取り入れる/Bringing the Essence of Railway-Oriented Programming to Java
cocet33000
2
540
Create a website using Spatial Web
akkeylab
0
270
ASP.NETアプリケーションのモダナイズ インフラ編
tomokusaba
1
220
Cloudflare Realtime と Workers でつくるサーバーレス WebRTC
nekoya3
0
400
「ElixirでIoT!!」のこれまでとこれから
takasehideki
0
350
Select API from Kotlin Coroutine
jmatsu
1
110
Passkeys for Java Developers
ynojima
3
850
型付きアクターモデルがもたらす分散シミュレーションの未来
piyo7
0
760
Spring gRPC で始める gRPC 入門 / Introduction to gRPC with Spring gRPC
mackey0225
2
490
A comprehensive view of refactoring
marabesi
0
120
複数アプリケーションを育てていくための共通化戦略
irof
10
3.8k
Featured
See All Featured
KATA
mclloyd
29
14k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
32
5.9k
Site-Speed That Sticks
csswizardry
10
630
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Reflections from 52 weeks, 52 projects
jeffersonlam
350
20k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Music & Morning Musume
bryan
46
6.6k
Visualization
eitanlees
146
16k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Statistics for Hackers
jakevdp
799
220k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
480
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 Ұॹʹಇ͍ͯ͘ΕΔؒΛืू͍ͯ͠·͢