Slide 1

Slide 1 text

3VCZιʔείʔυͷา͖ํ /BP.JOBNJ !TPVUI

Slide 2

Slide 2 text

ࣗݾ঺հ

Slide 3

Slide 3 text

/BP.JOBNJ!TPVUI !NJOBNJP 4PGUXBSFFOHJOFFS !8BOUFEMZ *OD

Slide 4

Slide 4 text

3VCZΛιʔείʔυ͔Βཧղ͍ͨ͠ʂ

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

τοϓϨϕϧͰϑΝΠϧɺσΟϨΫτϦ

Slide 7

Slide 7 text

ʜͲ͔͜ΒಡΜͩΒྑ͍͔͕෼͔Βͳ͍

Slide 8

Slide 8 text

Ͱ΋ɺߏ੒΍֓ཁΛ஌͍ͬͯΕ͹ ͣͬͱಡΈ΍͘͢ͳΔ͸ͣ

Slide 9

Slide 9 text

3VCZιʔείʔυͷ֓ཁΛ஌Δ Ͱ΋ɺߏ੒΍֓ཁΛ஌͍ͬͯΕ͹ ͣͬͱಡΈ΍͘͢ͳΔ͸ͣ

Slide 10

Slide 10 text

w 3VCZιʔείʔυͷ֓ཁΛ஌Δ w 3VCZ࣮ߦ࣌ͷڍಈ w ·ͱΊ ࠓ೔࿩͢಺༰

Slide 11

Slide 11 text

w 3VCZιʔείʔυͷ֓ཁΛ஌Δ w 3VCZ࣮ߦ࣌ͷڍಈ w ·ͱΊ ࠓ೔࿩͢಺༰

Slide 12

Slide 12 text

3VCZιʔείʔυͷ֓ཁΛ஌Δ w 3VCZϨϙδτϦ w τοϓϨϕϧͰϑΝΠϧɺσΟϨΫτϦ w NBLFͰϏϧυɺNBLFJOTUBMMͰΠϯετʔϧ w ओཁͳϑΝΠϧ͸࣮͸ଟ͘ͳ͍ w ಛʹɺQBSTFZ DPNQJMFD JOTOTEFG͕ॏཁ

Slide 13

Slide 13 text

3VCZॲཧܥͷ֓ཁ w QBSTFʜSVCZίʔυ͔Β"45Λੜ੒ w DPNQJMFʜ"45͔Β:"37໋ྩྻΛੜ੒ w SVOUJNFʜ:"37໋ྩΛ࣮ߦ 3VCZ΋ଟ͘ͷݴޠॲཧܥͱಉ༷ɺεςοϓ͕ଘࡏ ͦΕͧΕͷεςοϓ͸Ͳ͜ͰͲ͏࣮૷͞Ε͍ͯΔͷ͔ʁ

Slide 14

Slide 14 text

QBSTF w QBSTFʜSVCZίʔυ͔Β"45Λੜ੒ w DPNQJMFʜ"45͔Β:"37໋ྩྻΛੜ੒ w SVOUJNFʜ:"37໋ྩΛ࣮ߦ

Slide 15

Slide 15 text

QBSTF puts 2 + 2 3VCZίʔυ UPLFOྻ NODE_CALL + NODE_LIT 2 identifier puts integer 2 integer 2 op + NODE_LIT 2 NODE_FCALL puts "45 ந৅ߏจ໦

Slide 16

Slide 16 text

QBSTF w QBSTFZͰఆٛ w ߦ͋Δ௒ڊେϑΝΠϧ w CJTPOͷ༷ͳQBSTFSHFOFSBUPSʹ৯Θ͢QBSTFD w #/'Ͱهड़ɺBDUJPO΍ͦͷଞͷ෦෼͸$Ͱهड़ w UPLFO͸EFGTLFZXPSETͰఆٛ 3VCZͷจ๏Λ࿔Γ͔ͨͬͨΒQBSTFZΛݟΕ͹ྑ͍

Slide 17

Slide 17 text

DPNQJMF w QBSTFʜSVCZίʔυ͔Β"45Λੜ੒ w DPNQJMFʜ"45͔Β:"37໋ྩྻΛੜ੒ w SVOUJNFʜ:"37໋ྩΛ࣮ߦ

Slide 18

Slide 18 text

DPNQJMF "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 :"37໋ྩྻ

Slide 19

Slide 19 text

DPNQJMF w DPNQJMFDͰఆٛ w ߦ͋Δ௒ڊେϑΝΠϧ w "45Λ૸ࠪͯ͠:"37໋ྩ JTFR Λੜ੒ w ASC@JTFR@DPNQJMF@OPEF SC@JTFR@UJTFR /0%& OPEF A͕ݺ͹ΕΔ "45͕มΘͬͨΒɺDPNQJMFD΋मਖ਼

Slide 20

Slide 20 text

SVOUJNF w QBSTFʜSVCZίʔυ͔Β"45Λੜ੒ w DPNQJMFʜ"45͔Β:"37໋ྩྻΛੜ੒ w SVOUJNFʜ:"37໋ྩΛ࣮ߦ

Slide 21

Slide 21 text

putself putobject 2 putobject 2 opt_plus opt_send_simple :"37໋ྩྻΛॱ൪ʹ࣮ߦ SVOUJNF 4UBDL1PJOUFS 41 :"37ͷ಺෦ελοΫ 1SPHSBN$PVOUFS 1$

Slide 22

Slide 22 text

SVOUJNF:"37໋ྩͷఆٛ :"37໋ྩͷఆٛ͸Ͳ͜ʁ

Slide 23

Slide 23 text

SVOUJNF:"37໋ྩͷఆٛ w JOTOTEFGͰ:"37໋ྩΛఆٛ w QVUTFMG QVUPCKFDU TFOE FUDͷఆٛΛهࡌ w !@LPʹΑΔ%4- w ΄΅$͕ͩɺڞ௨෦෼͸ল͍ͯΔ w UPPMJOTOTWNSCͱ͍͏SVCZεΫϦϓτͰ JOTOTEFG͔Βίʔυੜ੒Λߦ͏WNJOD :"37໋ྩΛग़ൃ఺ʹಡΉ৔߹͸JOTOTEFGΛݟΔͱྑ͍

Slide 24

Slide 24 text

ͦͷଞͷϑΝΠϧ QBSTFZ DPNQJMFD JOTOTEFGҎ֎ͷ ϑΝΠϧ͸Կʹ࢖ΘΕΔʁ

Slide 25

Slide 25 text

ͦͷଞͷϑΝΠϧ w QBSTFZ DPNQJMFD JOTOTEFG͔Βݺͼग़͞ΕΔॲཧ w QBSTF DPNQJMFͷݺͼग़͠ɺWNͷॲཧ w ϏϧτΠϯͷΫϥε 0CKFDU "SSBZ 4USJOH FUDʜ w υΩϡϝϯτ େମҎԼͷͭͷͲΕ͔

Slide 26

Slide 26 text

ಡΈํ͕෼͔Ε͹ ɹ3VCZͷιʔείʔυ͸ා͘ͳ͍ʂ

Slide 27

Slide 27 text

w 3VCZιʔείʔυͷߏ੒Λ஌Δ w 3VCZ࣮ߦ࣌ͷڍಈ w ·ͱΊ ࠓ೔࿩͢಺༰

Slide 28

Slide 28 text

$ ruby -e ‘print “Hello World!”’ Hellow World! 3VCZΛUFSNJOBM͔Β࣮ߦ 3VCZΛUFSNJOBM͔Β࣮ߦ

Slide 29

Slide 29 text

int main(int argc, char **argv) { . . . { . . . return ruby_run_node(ruby_options(argc, argv)); } } w 3VCZ࣮ߦ࣌͸ANBJOAؔ਺͕ΤϯτϦʔϙΠϯτ w ASVCZ@PQUJPOTAͰQBSTF DPNQJMF w ASVCZ@SVO@OPEFA͕:"37໋ྩྻΛ࣮ߦ 3VCZͷNBJOؔ਺

Slide 30

Slide 30 text

SVCZ@PQUJPOT void * ruby_options(int argc, char **argv) { . . . if ((state = EXEC_TAG()) == 0) { SAVE_ROOT_JMPBUF(GET_THREAD(), iseq = ruby_process_options(argc, argv)); } else { . . iseq = (void *)INT2FIX(state); } . . . return iseq; } w JTFR :"37໋ྩྻ Λฦ͢ w ॲཧΛ௥͏ͱɺQBSTFZͰఆٛ͞ΕͨAZZQBSTFA΍ DPNQJMFDͰఆٛ͞ΕͨASC@JTFR@DPNQJMF@OPEFAΛར༻

Slide 31

Slide 31 text

SVCZ@PQUJPOT void * ruby_options(int argc, char **argv) { . . . if ((state = EXEC_TAG()) == 0) { SAVE_ROOT_JMPBUF(GET_THREAD(), iseq = ruby_process_options(argc, argv)); } else { . . iseq = (void *)INT2FIX(state); } . . . return iseq; } w JTFR :"37໋ྩྻ Λฦ͢ w ॲཧΛ௥͏ͱɺQBSTFZͰఆٛ͞ΕͨAZZQBSTFA΍ DPNQJMFDͰఆٛ͞ΕͨASC@JTFR@OFX@NBJOAΛར༻ QBSTFZ DPNQJMFD ʹḷΓண͍ͨʂ

Slide 32

Slide 32 text

SVCZ@SVO@OPEF w JTFR :"37໋ྩྻ Λ࣮ߦ͢Δ w ॲཧΛ௥͏ͱɺAWN@FYFD@DPSFA͕࣮ߦ͞ΕΔ w JOTOTEFG͔Βੜ੒ͨ͠Dίʔυ͕ຒΊࠐ·ΕͯΔ static VALUE vm_exec_core(rb_thread_t *th, VALUE initial) { . . . first: INSN_DISPATCH(); /*****************/ #include "vm.inc" /*****************/ END_INSNS_DISPATCH(); . . . }

Slide 33

Slide 33 text

SVCZ@SVO@OPEF w JTFR :"37໋ྩྻ Λ࣮ߦ͢Δ w ॲཧΛ௥͏ͱɺJOTOTEFG͔Βੜ੒ͨ͠Dίʔυ͕ ຒΊࠐ·ΕͨAWN@FYFD@DPSFA͕࣮ߦ͞ΕΔ static VALUE vm_exec_core(rb_thread_t *th, VALUE initial) { . . . first: INSN_DISPATCH(); /*****************/ #include "vm.inc" /*****************/ END_INSNS_DISPATCH(); . . . } JOTOTEFGʹḷΓண͍ͨʂ

Slide 34

Slide 34 text

͔֬ʹɺQBSTFZ DPNQJMFD JOTOTEFG Λԡ͑͞Ε͹3VCZΛཧղͰ͖ͦ͏

Slide 35

Slide 35 text

w 3VCZιʔείʔυͷߏ੒Λ஌Δ w 3VCZ࣮ߦ࣌ͷڍಈ w ·ͱΊ ࠓ೔࿩͢಺༰

Slide 36

Slide 36 text

·ͱΊ w 3VCZͷιʔείʔυ͸ා͘ͳ͍ w QBSTF DPNQJMF SVOUJNFͷͦΕͧΕͷεςοϓͷ ओཁͳϑΝΠϧΛೖΓޱʹ͢ΔͱಡΈ΍͍͢ w NBJOؔ਺͔ΒಡΈ࢝ΊΔͷ΋ָ͍͠ 3VCZΛιʔείʔυ͔Βཧղͯ͠ɺ ָ͍͠3VCZϥΠϑΛૹΖ͏ʂ