Ruby のことを深く理解できる本「Ruby Under a Microscope」のご紹介

Ruby のことを深く理解できる本「Ruby Under a Microscope」のご紹介

第一回Megro.rb で、Ruby のことを深く理解できる本「Ruby Under a Microscope」のご紹介というタイトルで発表しました。

2b4f9f20b554d4c77c46fe6a9930d6fe?s=128

Nao Minami

March 23, 2017
Tweet

Transcript

  1. 3VCZͷ͜ͱΛਂ͘ཧղͰ͖Δຊ 3VCZ6OEFSB.JDSPTDPQF ͷ͝঺հ  /BP.JOBNJ !TPVUI

  2. ࣗݾ঺հ

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

  4. w 3VCZ6OEFSB.JDSPTDPQFͱ͸ʁ w Կ͕ັྗʁ w Կֶ͕΂Δͷʁ w ·ͱΊ ࠓ೔࿩͢಺༰

  5. w 3VCZ6OEFSB.JDSPTDPQFͱ͸ʁ w Կ͕ັྗʁ w Կֶ͕΂Δͷʁ w ·ͱΊ ࠓ೔࿩͢಺༰

  6. 3VCZ6OEFSB.JDSPTDPQFͱ͸ʁ w :"37 $3VCZͷԾ૝Ϛγϯ  w ΦϒδΣΫτɺΫϥεͷ಺෦දݱ w ϒϩοΫͷ࣮૷ w

    FUD 3VCZͷ಺෦ಈ࡞Λઆ໌ͨ͠ຊ
  7. 3VCZ6OEFSB.JDSPTDPQFͱ͸ʁ ʮ3VCZͬͯԿΛͯ͠ΔΜͩΖ͏ʁʯ ͕෼͔ΔΑ͏ʹͳΔʂ

  8. w 3VCZ6OEFSB.JDSPTDPQFͱ͸ʁ w Կ͕ັྗʁ w Կֶ͕΂Δͷʁ w ·ͱΊ ࠓ೔࿩͢಺༰

  9. 3VCZ6OEFSB.JDSPTDPQF͸Կ͕ັྗʁ w 3VCZͷ಺෦Λ஌͍ͬͯΔͱɺʮԿނ͜ͷಈ࡞ʁʯ ʹ౴͑ΒΕΔʂ w 3VCZΛ௨ͯ͠ɺݴޠॲཧܥͷ࡞Γํ͕෼͔Δʂ

  10. 3VCZ6OEFSB.JDSPTDPQF͸Կ͕ັྗʁ 3VCZίϛολʔ͔Β΋޷ධʂ

  11. w 3VCZ6OEFSB.JDSPTDPQFͱ͸ʁ w Կ͕ັྗʁ w Կֶ͕΂Δͷʁ w ·ͱΊ ࠓ೔࿩͢಺༰

  12. 3VCZ6OEFSB.JDSPTDPQF͸Կֶ͕΂Δʁ w 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w $3VCZͷԾ૝Ϛγϯʮ:"37ʯ w +3VCZ 3VCJOJVTͱͷൺֱ 3VCZʹؔ͢ΔͭͷτϐοΫ

  13. 3VCZ6OEFSB.JDSPTDPQF͸Կֶ͕΂Δʁ w 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w $3VCZͷԾ૝Ϛγϯʮ:"37ʯ w +3VCZ 3VCJOJVTͱͷൺֱ 3VCZʹؔ͢ΔͭͷτϐοΫ

  14. 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w 3VCZίʔυ͔Β:"37໋ྩྻ΁ͷม׵ w :"37͕:"37໋ྩྻΛ࣮ߦ

  15. 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w 3VCZίʔυ͔Β:"37໋ྩྻ΁ͷม׵ w :"37͕:"37໋ྩྻΛ࣮ߦ

  16. 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ 3VCZίʔυ͔Β:"37໋ྩྻ΁ͷม׵ puts 2 + 2 3VCZίʔυ :"37ίʔυ putself putobject

    2 putobject 2 opt_plus opt_send_simple <callinfo!mid:puts, argc:2…>
  17. 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ 3VCZίʔυ͔Β:"37໋ྩྻ΁ͷม׵ puts 2 + 2 3VCZίʔυ :"37ίʔυ ͜͜ͰԿ͕ى͖Δͷ͔ʁ putself

    putobject 2 putobject 2 opt_plus opt_send_simple <callinfo!mid:puts, argc:2…>
  18. 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w UPLFOJ[Fͯ͠UPLFOྻ΁ม׵ w QBSTFͯ͠"45࡞੒ w "45͔ΒDPNQJMFͯ͠:"37໋ྩੜ੒

  19. 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ UPLFOJ[Fͯ͠UPLFO΁ม׵ puts 2 + 2 identifier puts integer 2

    integer 2 3VCZίʔυ UPLFOྻ operator +
  20. 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ QBSTFͯ͠"45 ந৅ߏจ໦ ࡞੒ UPLFOྻ NODE_CALL + NODE_LIT 2 identifier

    puts integer 2 integer 2 op + NODE_LIT 2 NODE_FCALL puts "45
  21. 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໋ྩྻ
  22. 3VCZͷUPLFOJ[F QBSTF DPNQJMFʹڵຯ͕ग़ͨΒ ଓ͖͸ʮ3VCZ6OEFSB.JDSPTDPQFʯͰʂ

  23. 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ :"37໋ྩྻ ͦΕͧΕͷ໋ྩͰ͸Կ͕ߦΘΕΔͷ͔ʁ putself putobject 2 putobject 2 opt_plus opt_send_simple

    <callinfo!mid:puts, argc:2…>
  24. 3VCZ6OEFSB.JDSPTDPQF͸Կֶ͕΂Δʁ w 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w $3VCZͷԾ૝Ϛγϯʮ:"37ʯ w +3VCZ 3VCJOJVTͱͷൺֱ 3VCZʹؔ͢ΔͭͷτϐοΫ

  25. w ελοΫϚγϯͱͯ͠ಈ࡞͢ΔԾ૝Ϛγϯ w +BWBʹ͓͚Δ+7.Έ͍ͨͳϠπ w :"37໋ྩྻʢ3VCZͷதؒදݱʣΛղऍͯ͠ಈ࡞ $3VCZͷԾ૝Ϛγϯʮ:"37ʯ

  26. $3VCZͷԾ૝Ϛγϯʮ:"37ʯ ελοΫϚγϯ w ελοΫʹҾ਺Λ1VTIͯؔ͠਺ݺͼग़͠ putobject 2 putobject 2 opt_plus :"37໋ྩྻ

    ελοΫ΁ͷ1VTI ؔ਺ݺͼग़͠ 4UBDL1PJOUFS 41 :"37ͷ಺෦ελοΫ
  27. $3VCZͷԾ૝Ϛγϯʮ:"37ʯ putobject 2 putobject 2 opt_plus :"37໋ྩྻ ελοΫ΁ͷ1VTI ؔ਺ݺͼग़͠ ࠷ॳ͸ۭ

    AQVUPCKFDUAΛ࣮ߦ  41 AQVUPCKFDUAΛ࣮ߦ   APQU@QMVTAΛ࣮ߦ  41 41 41
  28. $3VCZͷԾ૝Ϛγϯʮ:"37ʯ :"37ͷಈ࡞ͱͯ͠৭ʑͳڍಈΛ࣮ݱ w #MPDLɺ1SPDΦϒδΣΫτ w SBJTFɺCSFBLʹΑΔେҬδϟϯϓ w ϨΩγΧϧείʔϓͱఆ਺୳ࡧɺϝιου୳ࡧ :"37͕ར༻͢Δ༷ʑͳσʔλߏ଄ w

    ΦϒδΣΫτɺΫϥεͷ಺෦දݱ w 3VCZͷίʔϧελοΫͷ࣮૷
  29. :"37ʹڵຯ͕ग़ͨΒɺ ଓ͖͸ʮ3VCZ6OEFSB.JDSPTDPQFʯͰʂ

  30. 3VCZ6OEFSB.JDSPTDPQF͸Կֶ͕΂Δʁ w 3VCZίʔυ࣮ߦ·ͰͷྲྀΕ w $3VCZͷԾ૝Ϛγϯʮ:"37ʯ w +3VCZ 3VCJOJVTͱͷൺֱ 3VCZʹؔ͢ΔͭͷτϐοΫ

  31. +3VCZ 3VCJOJVTͱͷൺֱ +3VCZ 3VCJOJVT͸$3VCZͱ͸࣮ߦ࣌ͷڍಈ͕ҧ͏ʂ w +3VCZʜ+7.্Ͱ3VCZΛ࣮ߦ w .VMUJDPSFͷ4VQQPSU ڧྗͳ($ w

    3VCJOJVTʜ$ Ͱॻ͔Εͨ7.ɺ3VCZͰதؒίʔυੜ੒ w --7.Ͱ+*5ίϯύΠϧ
  32. +3VCZ 3VOJOJVTʹڵຯ͕ग़ͨΒɺ ଓ͖͸ʮ3VCZ6OEFSB.JDSPTDPQFʯͰʂ

  33. w 3VCZ6OEFSB.JDSPTDPQFͱ͸ʁ w Կ͕ັྗʁ w Կֶ͕΂Δͷʁ w ·ͱΊ ࠓ೔࿩͢಺༰

  34. ·ͱΊ 3VCZ6OEFB.JDSPTDPQF͸ɺ ʮ3VCZͬͯԿΛͯ͠ΔΜͩΖ͏ʁʯ ͕෼͔ΔΑ͏ʹͳΔͷͰΦεεϝʂ