Slide 1

Slide 1 text

YARV INTRODUCTION WAKASUGI HIROFUMI DECEMBER 20, 2015

Slide 2

Slide 2 text

3VCZϓϩάϥϜ͕ಈ͘࢓૊ΈͷதͰɺ த৺తͳ໾ׂͷͭΛ઎ΊΔ:"37Λ ؆୯ʹ঺հ͠·͢ɻ YARVINTRODUCTION

Slide 3

Slide 3 text

:"37 :FU"OPUIFS3VCZ7. w ݱࡏͷ.3* $3VCZ ͷॲཧܥ w 3VCZίʔυΛ࣮ߦ͢ΔͨΊͷԾ૝Ϛγϯ 7.  w 3VCZͰ.3*ʹऔΓࠐ·Εͨ w ։ൃऀ͸࡫ాߞҰࢯ YARVINTRODUCTION

Slide 4

Slide 4 text

Ծ૝Ϛγϯͱ͸ʁ YARVINTRODUCTION

Slide 5

Slide 5 text

ιϑτ΢ΣΞ͕ಈ࡞͢Δߏ଄ ϋʔυ΢ΣΞ 04 ιϑτ΢ΣΞ ίϯϐϡʔλʔͰ͸ɺ ιϑτ΢ΣΞ͸ࠨهͷ Α͏ͳϨΠϠʔߏ଄Ͱ ಈ͘࢓૊Έͱͳ͍ͬͯ Δ YARVINTRODUCTION

Slide 6

Slide 6 text

ιϑτ΢ΣΞ͕ಈ࡞͢Δߏ଄ ϋʔυ΢ΣΞ 04 ιϑτ΢ΣΞ ιϑτ΢ΣΞ͸04ͷ"1*Λར༻ 04ͷΧʔωϧ͕ϋʔυ΢ΣΞΛ੍ޚ ιϑτ΢ΣΞ͸04ʹΑͬͯʮԾ૝Խʯ͞Εͨϋʔυ΢ΣΞࢿݯΛ׆༻͢Δɻ ͜ͷΑ͏ʹɺؒʹԾ૝ԽػߏΛڬΉ͜ͱͰΪϟοϓΛຒΊѻ͍΍͘͢ͳΔɻ YARVINTRODUCTION

Slide 7

Slide 7 text

ҰൠతʹʮԾ૝Ϛγϯʯͱฉ͍ͯࢥ͍ු͔Ϳ΋ͷ ϋʔυ΢ΣΞ 04 ˞ 04 ͋Δ04ͷ্ʹԾ૝Խ͞ΕͨϚγϯΛߏங ͠ɺผͷ04ͳͲΛಈ͔ͤΔ΋ͷ ͨͩɺ:"37ͷΑ͏ͳɺϓϩάϥϛϯάݴ ޠʹ͓͚ΔԾ૝ϚγϯΛߟ͑Δͱ͖ʹ͸ɺ ͜ͷԾ૝ϚγϯͷΠϝʔδʹଊΘΕ͗͢ ͳ͍ํ͕͍͍͔΋ ˞࣮ࡍʹ͸΄ͱΜͲΦϦδφϧͷ04͸εϧʔͯ͠௚઀ϋʔυ ΢ΣΞΛૢ࡞Ͱ͖Δ͜ͱ͕ଟ͍ Ծ૝Ϛγϯ 7JSUVBM#PYͳͲ ιϑτ΢ΣΞ YARVINTRODUCTION

Slide 8

Slide 8 text

ϓϩάϥϛϯάݴޠॲཧܥͱͯ͠ͷ ʮԾ૝Ϛγϯʯ ϋʔυ΢ΣΞ 04 ϓϩάϥϛϯάݴޠ ϓϩάϥϛϯάݴޠ͸Ծ૝Ϛγϯ ͕ղऍͰ͖Δ໋ྩʹม׵͞ΕɺԾ ૝Ϛγϯ͕ͦͷ໋ྩΛ04ͳͲΑΓ ௿͍૚ʹ఻͑Δ ͖ͬ͞ͷιϑτ΢ΣΞ͕ಈ࡞͢Δ ͨΊͷԾ૝Խػߏͱߟ͑ํ͸ಉ͡ Ծ૝Ϛγϯ YARVINTRODUCTION

Slide 9

Slide 9 text

7. 7. 7. ϓϩάϥϛϯάݴޠॲཧܥͱͯ͠ͷ ʮԾ૝Ϛγϯʯ 04 ϓϩάϥϛϯάݴޠ 7. YARVINTRODUCTION 04 04 04 )8 )8 )8 )8 ͜ͷΑ͏ʹɺϓϩάϥϛϯάݴޠࣗମΛ Ϛϧν؀ڥʹରԠͰ͖ΔΑ͏ઃܭ͢Δͷ ͸ඇৗʹ೉͍͕͠ɺԾ૝ϚγϯΛؒʹڬ Ή͜ͱͰରԠ΍࠷దԽ͕༰қʹͳΔ ݴޠ͸Ծ૝Ϛγϯ͕ղऍͰ͖Δ໋ྩΛు͚Ε͹0, Ծ૝ϚγϯͷϚϧν؀ڥରԠ͸ൺֱత༰қ

Slide 10

Slide 10 text

Ծ૝Ϛγϯ͕ղऍ͢Δ΋ͷ όΠτίʔυ YARVINTRODUCTION ϓϩάϥϛϯάݴޠ όΠτίʔυ Ծ૝Ϛγϯ͕ղऍ Ͱ͖Δ໋ྩྻ ίϯύΠϧ Ծ૝Ϛγϯ ໋ྩ ϓϩάϥϜ࣮ߦʜ

Slide 11

Slide 11 text

୅දతͳԾ૝Ϛγϯ YARVINTRODUCTION +BWB+7. w ͓ͳ͡Έʮ8SJUF0ODF 3VO"OZXIFSFʯ w +BWB͸΋ͪΖΜɺ4DBMBɺ$MPKVSFͳͲଟ਺͕͜ͷॲཧܥͰಈ࡞͢Δ /&5'SBNFXPSL w .4੡͕ͩ044ͱͯ͠ެ։͞Ε͓ͯΓɺຊདྷϓϥοτϑΥʔϜ͸໰Θͳ͍ w 7#/&5ɺ$ɺ'ͳͲͷݴޠ͕͜ͷॲཧܥͰಈ࡞͢Δ

Slide 12

Slide 12 text

୅දతͳԾ૝Ϛγϯ YARVINTRODUCTION +BWB+7. w ͓ͳ͡Έʮ8SJUF0ODF 3VO"OZXIFSFʯ w +BWB͸΋ͪΖΜɺ4DBMBɺ$MPKVSFͳͲଟ਺͕͜ͷॲཧܥͰಈ࡞͢Δ /&5'SBNFXPSL w .4੡͕ͩ044ͱͯ͠ެ։͞Ε͓ͯΓɺຊདྷϓϥοτϑΥʔϜ͸໰Θͳ͍ w 7#/&5ɺ$ɺ'ͳͲͷݴޠ͕͜ͷॲཧܥͰಈ࡞͢Δ --7.΋--7.*3ͱ͍͏தؒදݱΛར༻͢ ΔͳͲԾ૝Ϛγϯʹ͍ۙͱ͜Ζ͸͋Δ͕ɺ ݫີʹ͸ίϯύΠϥج൫ͳͷͰ ͪΐͬͱδϟϯϧ͕ҧ͏

Slide 13

Slide 13 text

Ծ૝ϚγϯͷϝϦοτ·ͱΊ YARVINTRODUCTION w Ϛϧν؀ڥ΁ͷରԠ͕༰қʹͳΔ w ֤؀ڥ΁ͷ࠷దԽ͕͠΍͘͢ߴ଎Խ͕ظ଴Ͱ͖Δ w ผͷϓϩάϥϛϯάݴޠͷ։ൃ΋͠΍͍͢ Ծ૝Ϛγϯͱ͍͏஥հ໾Λ༻ҙ͠ɺϓϩάϥϛϯάݴޠΛ Ծ૝Ϛγϯ΁ͷ໋ྩྻʹίϯύΠϧ͢Δ࢓૊ΈʹΑͬͯɺ

Slide 14

Slide 14 text

YARVINTRODUCTION YARV

Slide 15

Slide 15 text

0WFSWJFX YARVINTRODUCTION 04 3VCZίʔυ :"37 04 04 04 )8 )8 )8 )8 :"37 :"37 :"37 $ $ $ $ ᶃ3VCZίʔυ͸:"37໋ྩྻͷόΠτίʔυʹί ϯύΠϧ͞ΕΔ ᶄ֤؀ڥʹରԠͨ͠:"37͕ɺڞ௨ͷ:"37໋ྩ ྻΛղऍ͠$ϓϩάϥϜΛੜ੒࣮ͯ͠ߦ w.3*͸$ݴޠ࣮૷ͳͷͰɺ:"37Λհͯ͠$ͷ ϓϩάϥϜͱ࣮ͯ͠ߦ͞ΕΔ wωΠςΟϒίʔυʹม׵͞ΕΔ+7.ͳͲͱ͸ ͜ͷ఺ͰҟͳΔ͕ɺԾ૝Խͷߏ଄తʹ͸ಉ͡

Slide 16

Slide 16 text

:"37໋ྩྻͱ͸ʁ YARVINTRODUCTION

Slide 17

Slide 17 text

def hello(name) "Hello " + name end puts hello("Tom") YARVINTRODUCTION ͜ͷ3VCZίʔυΛίϯύΠϧ͢Δͱʜʁ

Slide 18

Slide 18 text

YARVINTRODUCTION == disasm: @>=============== 0000 trace 1 ( 1) 0002 putspecialobject 1 0004 putspecialobject 2 0006 putobject :hello 0008 putiseq hello 0010 opt_send_without_block 0012 pop 0013 trace 1 ( 5) 0015 putself 0016 putself 0017 putstring "Tom" 0019 opt_send_without_block 0021 opt_send_without_block 0023 leave == disasm: >=============== local table (size: 2, argc: 1 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1]) [ 2] name 0000 trace 8 ( 1) 0002 trace 1 ( 2) 0004 putstring "Hello " 0006 getlocal_OP__WC__0 2 0008 opt_plus 0010 trace 16 ( 3) 0012 leave ( 2) ͜Μͳ:"37໋ྩྻʹͳΔ

Slide 19

Slide 19 text

== disasm: @>=============== 0000 trace 1 ( 1) 0002 putspecialobject 1 0004 putspecialobject 2 0006 putobject :hello 0008 putiseq hello 0010 opt_send_without_block 0012 pop 0013 trace 1 ( 5) 0015 putself 0016 putself 0017 putstring "Tom" 0019 opt_send_without_block 0021 opt_send_without_block 0023 leave == disasm: >=============== local table (size: 2, argc: 1 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1]) [ 2] name 0000 trace 8 ( 1) 0002 trace 1 ( 2) 0004 putstring "Hello " 0006 getlocal_OP__WC__0 2 0008 opt_plus 0010 trace 16 ( 3) 0012 leave ( 2) ʁ YARVINTRODUCTION

Slide 20

Slide 20 text

YARVINTRODUCTION puts 2 + 3 ࣈ۟ղੳ ߏจղੳ 5IF-POHBOE8JOEJOH3PBEUP:"37*OTUSVDUJPOT 3VCZίʔυ ίϯύΠϧ :"37໋ྩྻ

Slide 21

Slide 21 text

YARVINTRODUCTION ࣈ۟ղੳ 3VCZίʔυΛจࣈͣͭಡΈࠐΈղੳ͢Δ 10.times do |n| puts n end

Slide 22

Slide 22 text

YARVINTRODUCTION ࣈ۟ղੳ 3VCZίʔυΛจࣈͣͭಡΈࠐΈղੳ͢Δ    U J N F T E P c O c 10.times do |n| puts n end

Slide 23

Slide 23 text

YARVINTRODUCTION ࣈ۟ղੳ 3VCZίʔυΛจࣈͣͭಡΈࠐΈղੳ͢Δ    U J N F T E P c O c 10.times do |n| puts n end U*/5&(&3   U*%&/5*'*&3 UJNFT LFZXPSE@EP c U*%&/5*'*&3 O c

Slide 24

Slide 24 text

YARVINTRODUCTION ࣈ۟ղੳ 3VCZίʔυΛจࣈͣͭಡΈࠐΈղੳ͢Δ    U J N F T E P c O c 10.times do |n| puts n end U*/5&(&3   U*%&/5*'*&3 UJNFT LFZXPSE@EP c U*%&/5*'*&3 O c τʔΫϯྻ

Slide 25

Slide 25 text

YARVINTRODUCTION puts 2 + 3 ࣈ۟ղੳ ߏจղੳ 5IF-POHBOE8JOEJOH3PBEUP:"37*OTUSVDUJPOT 3VCZίʔυ ίϯύΠϧ :"37໋ྩྻ ίʔυΛτʔΫϯྻʹ෼ղ

Slide 26

Slide 26 text

YARVINTRODUCTION ߏจղੳ U*/5&(&3   U*%&/5*'*&3 UJNFT LFZXPSE@EP c U*%&/5*'*&3 O c method_call: ... | primary_value '.' operation2 | ... จ๏نଇʹϚον ύʔα͕จ๏نଇʹج͍ͮͯτʔΫϯྻͷղੳΛߦ͏

Slide 27

Slide 27 text

লུʜ YARVINTRODUCTION ߏจղੳ QSPHSBN NFUIPE
 BEECMPDL DBMM JOUFHFS 10 QFSJPE JEFOUJpFS times EPCMPDL ߏจղੳʹΑͬͯ"45 ந৅ߏจ໦ ͕ੜ੒͞ΕΔ

Slide 28

Slide 28 text

YARVINTRODUCTION ߏจղੳ 3JQQFSΛ࢖͏ͱ࣮ࡍʹ"45Λ֬ೝͰ͖Δ require 'ripper' require 'pp' code = <

Slide 29

Slide 29 text

YARVINTRODUCTION puts 2 + 3 ࣈ۟ղੳ ߏจղੳ 5IF-POHBOE8JOEJOH3PBEUP:"37*OTUSVDUJPOT 3VCZίʔυ ίϯύΠϧ :"37໋ྩྻ ίʔυΛτʔΫϯྻʹ෼ղ τʔΫϯྻ͔Β"45Λੜ੒

Slide 30

Slide 30 text

YARVINTRODUCTION :"37໋ྩྻ΁ͷίϯύΠϧ ΑΓ୯७ͳ3VCZίʔυΛݩʹઆ໌ puts 2 + 3 3VCZίʔυ /0%&@4$01& /0%&@'$"-- ̼FUIPE@JEputs /0%&@$"-- NFUIPE@JE+ /0%&@-*5 2 /0%&@-*5 3 Ϩγʔό Ҿ਺ "45ϊʔυ

Slide 31

Slide 31 text

putself putobject 2 putobject 3 send

Slide 32

Slide 32 text

putself putobject 2 putobject 3 opt_plus opt_send_simple

Slide 33

Slide 33 text

YARVINTRODUCTION puts 2 + 3 ࣈ۟ղੳ ߏจղੳ 5IF-POHBOE8JOEJOH3PBEUP:"37*OTUSVDUJPOT 3VCZίʔυ ίϯύΠϧ :"37໋ྩྻ ίʔυΛτʔΫϯྻʹ෼ղ τʔΫϯྻ͔Β"45Λੜ੒ "45͔Β࠷దԽ͞Εͨ :"37໋ྩྻ όΠτίʔυ Λੜ੒

Slide 34

Slide 34 text

YARVINTRODUCTION :"37໋͕ྩʹै͍$ϓϩάϥϜΛ࣮ߦ ͜ͷΑ͏ʹͯ͠3VCZϓϩάϥϜ͸࣮ߦ͞ΕΔ $ cat example.rb puts 2 + 3 $ ruby example.rb 5 ࣈ۟ղੳɺ ߏจղੳɺ :"37໋ྩྻ΁ͷίϯύΠϧɺ $ϓϩάϥϜͷ࣮ߦ

Slide 35

Slide 35 text

YARVINTRODUCTION ·ͱΊ 3VCZͷ͘͠ΈΛ஌Δͱ 3VCZ,BJHJΛ΋ͬͱָ͠ΊΔʂ

Slide 36

Slide 36 text

YARVINTRODUCTION ࢀߟ ˒ :"37.BOJBDT w IUUQNBHB[JOFSVCZJTUOFU :BSW.BOJBDT ˒ 3VCZͷ͘͠Έ3VCZ6OEFSB.JDSPTDPQF w IUUQTFTUPSFPINTIBDPKQUJUMFT1 ҎԼͷهࣄ΍ॻ੶Λࢥ͍͖ͬΓࢀߟʹ͠·ͨ͠

Slide 37

Slide 37 text

よちよち.rb 回オメデトウ