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
Ruby のことを深く理解できる本「Ruby Under a Microscope」のご紹介
Search
Nao Minami
March 23, 2017
Programming
480
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Ruby のことを深く理解できる本「Ruby Under a Microscope」のご紹介
第一回Megro.rb で、Ruby のことを深く理解できる本「Ruby Under a Microscope」のご紹介というタイトルで発表しました。
Nao Minami
March 23, 2017
More Decks by Nao Minami
See All by Nao Minami
Real World Migration from HTTP to gRPC #CNDT2020
south37
3
6.3k
Real World Migration from HTTP to gRPC in Ruby #grpcconf
south37
2
4.8k
Getting Things Done をベースにした仕事の進め方 / How to Work with Getting Things Done
south37
8
8.5k
Web API に秩序を与える Protocol Buffers / Protocol Buffers for Web API #builderscon
south37
18
17k
puma v4 では SIGTERM での worker process ゾンビ化に気をつけよう / Be aware of zombie processes in puma v4
south37
1
4.2k
理想的なマイクロサービスアーキテクチャを目指す継続的改善 / Re-architecturing of Microservices #CNDT2019
south37
10
15k
gcpc: Google Cloud Pub/Sub Client for Ruby #tqrk13
south37
1
900
実行計画から学ぶ PostgreSQL の内部動作とクエリ最適化 / Learn PostgreSQL from Explain
south37
8
42k
学びを得るための新卒 ISUCON / New Grad ISUCON for Learning
south37
4
45k
Other Decks in Programming
See All in Programming
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
730
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
数百円から始めるRuby電子工作
tarosay
0
140
Built Our Own Background Agent at LayerX
layerx
PRO
9
5k
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
370
霧の中の代数的エフェクト
funnyycat
1
480
Foundation Models frameworkで画像分析
ryodeveloper
1
600
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
590
freee が目指す データ マネジメント戦略 AI-Ready 時代を支える 攻めのガバナンスとは
freee
PRO
0
300
今さら聞けない .NET CLI
htkym
0
180
Featured
See All Featured
Navigating Team Friction
lara
192
16k
First, design no harm
axbom
PRO
2
1.2k
Accessibility Awareness
sabderemane
1
170
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.7k
Unsuck your backbone
ammeep
672
58k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
210
The Cost Of JavaScript in 2023
addyosmani
55
10k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
330
Docker and Python
trallard
47
4.1k
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
310
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
690
Transcript
3VCZͷ͜ͱΛਂ͘ཧղͰ͖Δຊ 3VCZ6OEFSB.JDSPTDPQF ͷ͝հ /BP.JOBNJ !TPVUI
ࣗݾհ
/BP.JOBNJ!TPVUI !NJOBNJP 4PGUXBSFFOHJOFFS !8BOUFEMZ *OD
w 3VCZ6OEFSB.JDSPTDPQFͱʁ w Կ͕ັྗʁ w Կֶ͕Δͷʁ w ·ͱΊ ࠓ͢༰
w 3VCZ6OEFSB.JDSPTDPQFͱʁ w Կ͕ັྗʁ w Կֶ͕Δͷʁ w ·ͱΊ ࠓ͢༰
3VCZ6OEFSB.JDSPTDPQFͱʁ w :"37 $3VCZͷԾϚγϯ w ΦϒδΣΫτɺΫϥεͷ෦දݱ w ϒϩοΫͷ࣮ w
FUD 3VCZͷ෦ಈ࡞Λઆ໌ͨ͠ຊ
3VCZ6OEFSB.JDSPTDPQFͱʁ ʮ3VCZͬͯԿΛͯ͠ΔΜͩΖ͏ʁʯ ͕͔ΔΑ͏ʹͳΔʂ
w 3VCZ6OEFSB.JDSPTDPQFͱʁ w Կ͕ັྗʁ w Կֶ͕Δͷʁ w ·ͱΊ ࠓ͢༰
3VCZ6OEFSB.JDSPTDPQFԿ͕ັྗʁ w 3VCZͷ෦Λ͍ͬͯΔͱɺʮԿނ͜ͷಈ࡞ʁʯ ʹ͑ΒΕΔʂ w 3VCZΛ௨ͯ͠ɺݴޠॲཧܥͷ࡞Γํ͕͔Δʂ
3VCZ6OEFSB.JDSPTDPQFԿ͕ັྗʁ 3VCZίϛολʔ͔Βධʂ
w 3VCZ6OEFSB.JDSPTDPQFͱʁ w Կ͕ັྗʁ w Կֶ͕Δͷʁ w ·ͱΊ ࠓ͢༰
3VCZ6OEFSB.JDSPTDPQFԿֶ͕Δʁ w 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w $3VCZͷԾϚγϯʮ:"37ʯ w +3VCZ 3VCJOJVTͱͷൺֱ 3VCZʹؔ͢ΔͭͷτϐοΫ
3VCZ6OEFSB.JDSPTDPQFԿֶ͕Δʁ w 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w $3VCZͷԾϚγϯʮ:"37ʯ w +3VCZ 3VCJOJVTͱͷൺֱ 3VCZʹؔ͢ΔͭͷτϐοΫ
3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w 3VCZίʔυ͔Β:"37໋ྩྻͷม w :"37͕:"37໋ྩྻΛ࣮ߦ
3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w 3VCZίʔυ͔Β:"37໋ྩྻͷม w :"37͕:"37໋ྩྻΛ࣮ߦ
3VCZίʔυ࣮ߦ·ͰͷྲྀΕ 3VCZίʔυ͔Β:"37໋ྩྻͷม puts 2 + 2 3VCZίʔυ :"37ίʔυ putself putobject
2 putobject 2 opt_plus opt_send_simple <callinfo!mid:puts, argc:2…>
3VCZίʔυ࣮ߦ·ͰͷྲྀΕ 3VCZίʔυ͔Β:"37໋ྩྻͷม puts 2 + 2 3VCZίʔυ :"37ίʔυ ͜͜ͰԿ͕ى͖Δͷ͔ʁ putself
putobject 2 putobject 2 opt_plus opt_send_simple <callinfo!mid:puts, argc:2…>
3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w UPLFOJ[Fͯ͠UPLFOྻม w QBSTFͯ͠"45࡞ w "45͔ΒDPNQJMFͯ͠:"37໋ྩੜ
3VCZίʔυ࣮ߦ·ͰͷྲྀΕ UPLFOJ[Fͯ͠UPLFOม puts 2 + 2 identifier puts integer 2
integer 2 3VCZίʔυ UPLFOྻ operator +
3VCZίʔυ࣮ߦ·ͰͷྲྀΕ QBSTFͯ͠"45 நߏจ ࡞ UPLFOྻ NODE_CALL + NODE_LIT 2 identifier
puts integer 2 integer 2 op + NODE_LIT 2 NODE_FCALL puts "45
3VCZίʔυ࣮ߦ·ͰͷྲྀΕ "45͔ΒDPNQJMFͯ͠:"37໋ྩྻੜ NODE_CALL + NODE_LIT 2 NODE_LIT 2 NODE_FCALL puts
"45 putself putobject 2 putobject 2 opt_plus opt_send_simple <callinfo!mid:puts, argc:2…> :"37໋ྩྻ
3VCZͷUPLFOJ[F QBSTF DPNQJMFʹڵຯ͕ग़ͨΒ ଓ͖ʮ3VCZ6OEFSB.JDSPTDPQFʯͰʂ
3VCZίʔυ࣮ߦ·ͰͷྲྀΕ :"37໋ྩྻ ͦΕͧΕͷ໋ྩͰԿ͕ߦΘΕΔͷ͔ʁ putself putobject 2 putobject 2 opt_plus opt_send_simple
<callinfo!mid:puts, argc:2…>
3VCZ6OEFSB.JDSPTDPQFԿֶ͕Δʁ w 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w $3VCZͷԾϚγϯʮ:"37ʯ w +3VCZ 3VCJOJVTͱͷൺֱ 3VCZʹؔ͢ΔͭͷτϐοΫ
w ελοΫϚγϯͱͯ͠ಈ࡞͢ΔԾϚγϯ w +BWBʹ͓͚Δ+7.Έ͍ͨͳϠπ w :"37໋ྩྻʢ3VCZͷதؒදݱʣΛղऍͯ͠ಈ࡞ $3VCZͷԾϚγϯʮ:"37ʯ
$3VCZͷԾϚγϯʮ:"37ʯ ελοΫϚγϯ w ελοΫʹҾΛ1VTIͯؔ͠ݺͼग़͠ putobject 2 putobject 2 opt_plus :"37໋ྩྻ
ελοΫͷ1VTI ؔݺͼग़͠ 4UBDL1PJOUFS 41 :"37ͷ෦ελοΫ
$3VCZͷԾϚγϯʮ:"37ʯ putobject 2 putobject 2 opt_plus :"37໋ྩྻ ελοΫͷ1VTI ؔݺͼग़͠ ࠷ॳۭ
AQVUPCKFDUAΛ࣮ߦ 41 AQVUPCKFDUAΛ࣮ߦ APQU@QMVTAΛ࣮ߦ 41 41 41
$3VCZͷԾϚγϯʮ:"37ʯ :"37ͷಈ࡞ͱͯ͠৭ʑͳڍಈΛ࣮ݱ w #MPDLɺ1SPDΦϒδΣΫτ w SBJTFɺCSFBLʹΑΔେҬδϟϯϓ w ϨΩγΧϧείʔϓͱఆ୳ࡧɺϝιου୳ࡧ :"37͕ར༻͢Δ༷ʑͳσʔλߏ w
ΦϒδΣΫτɺΫϥεͷ෦දݱ w 3VCZͷίʔϧελοΫͷ࣮
:"37ʹڵຯ͕ग़ͨΒɺ ଓ͖ʮ3VCZ6OEFSB.JDSPTDPQFʯͰʂ
3VCZ6OEFSB.JDSPTDPQFԿֶ͕Δʁ w 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w $3VCZͷԾϚγϯʮ:"37ʯ w +3VCZ 3VCJOJVTͱͷൺֱ 3VCZʹؔ͢ΔͭͷτϐοΫ
+3VCZ 3VCJOJVTͱͷൺֱ +3VCZ 3VCJOJVT$3VCZͱ࣮ߦ࣌ͷڍಈ͕ҧ͏ʂ w +3VCZʜ+7.্Ͱ3VCZΛ࣮ߦ w .VMUJDPSFͷ4VQQPSU ڧྗͳ($ w
3VCJOJVTʜ$ Ͱॻ͔Εͨ7.ɺ3VCZͰதؒίʔυੜ w --7.Ͱ+*5ίϯύΠϧ
+3VCZ 3VOJOJVTʹڵຯ͕ग़ͨΒɺ ଓ͖ʮ3VCZ6OEFSB.JDSPTDPQFʯͰʂ
w 3VCZ6OEFSB.JDSPTDPQFͱʁ w Կ͕ັྗʁ w Կֶ͕Δͷʁ w ·ͱΊ ࠓ͢༰
·ͱΊ 3VCZ6OEFB.JDSPTDPQFɺ ʮ3VCZͬͯԿΛͯ͠ΔΜͩΖ͏ʁʯ ͕͔ΔΑ͏ʹͳΔͷͰΦεεϝʂ