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.6k
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
910
実行計画から学ぶ 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
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
660
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
ソフトウェアラスタライザ
fadis
1
790
信頼性の目標を誰も求めてない
shubox
0
490
GraphRAGのKnowledge Graphを 直接!見る/View-GraphRAG's-KnowledgeGraph-directly!
tyumugi1113
0
240
自分的「カンファレンスの楽しみ方」
syumai
0
190
高専キャリア LT 発表内容
crysta1221
6
5.6k
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
110
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
640
PyO3 で既存 Python 評価器を Rust core 化する ー wasm-bindgen でブラウザにも配るための設計
kdash
1
520
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
450
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
510
For a Future-Friendly Web
brad_frost
183
10k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
650
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
670
Utilizing Notion as your number one productivity tool
mfonobong
4
570
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
Navigating Team Friction
lara
192
16k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Tell your own story through comics
letsgokoyo
1
1.1k
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ͬͯԿΛͯ͠ΔΜͩΖ͏ʁʯ ͕͔ΔΑ͏ʹͳΔͷͰΦεεϝʂ