$30 off During Our Annual Pro Sale. View Details »

【2019/07/06 TamaRuby会議01】brainf*ck処理系で理解するパターンマッチングをつかった疎結合な実装

【2019/07/06 TamaRuby会議01】brainf*ck処理系で理解するパターンマッチングをつかった疎結合な実装

2019/07/06のTamaRuby会議01の発表スライドです。

スライド中に登場する拙作brainfxck処理系
https://github.com/expajp/brainfxck

スライド中に登場する「ボイスレコーダー」のコード
https://github.com/expajp/voice_recorder

Shu OGAWARA

July 06, 2019
Tweet

More Decks by Shu OGAWARA

Other Decks in Programming

Transcript

  1. 2019.07.06 TamaRuby 会議01 CSBJOG DLॲཧܥͰཧղ͢Δ ύλʔϯϚονϯάΛ͔ͭͬͨ ૄ݁߹ͳ࣮૷ Shu OGAWARA (@expajp)

  2. ࣗݾ঺հ ◈4IV0("8"3" !FYQBKQ ⬩ ϦϯΧʔζͱ͍͏ձࣾͰಇ͍͍ͯ·͢ ⬩ (SPXSC 0UFNBDIJSC (JO[BSC 

    4UFQ5P3BJMT&YQFSUͳͲ ⬩ ϓϥΠϕʔτͰ͸7VFKTॻ͍ͯ·͢ ⬩ झຯ͸߹এ 2
  3. 3 5BNB3VCZձٞͷςʔϚ 3VCZJTUͱͯ͠ͷ੒௕

  4. 4 ࠷ۙɺٸܹʹ 3VCZ͕੒௕͍ͯ͠Δ

  5. 5

  6. 6 出典: https://speakerdeck.com/k_tsj/pattern-matching-new-feature-in-ruby-2-dot-7

  7. ύλʔϯϚονϯά ◈DBTFXIFOͷ͍͢͝൛ ʴ ෳ਺ม਺΁ͷ୅ೖʢଟॏ୅ೖʣ 7

  8. 5XJUUFSͷ൓Ԡ ◈ؾʹͳΔʂ ◈ؾ࣋ͪΑ͘͸·ΔγνϡΤʔγϣ ϯ͕݁ߏ͋Γͦ͏Ͱ͍͍ ◈ه๏΋࢓༷΋Α͘ߟ͑ΒΕͯͯɺ ͱͯ΋ศརͦ͏ 8

  9. 9 Ұํɺࣗ෼͕ࢥ͍ͬͯͨ͜ͱ

  10. 10 ີ݁߹ίʔυͷԹচͳͷͰ͸ʁ

  11. 11 ͓໿ଋʹࢥ͍͖ͬΓ൓͍ͯ͠Δ

  12. 12 ಈతܕ෇͚ΦϒδΣΫτࢦ޲ݴޠɿ3VCZͷ͓໿ଋ ஌Βͳ͍஋͕དྷͨΒ ਖ਼ମ͸͍ͦͭࣗ਎ʹ஻ΒͤΖ ʢμοΫλΠϐϯά ʣ

  13. 13 ड͚औΓଆΦϒδΣΫτ ೖྗ஋ ඞཁͳػೳΛఆٛ ͦΕʹ߹Θ࣮ͤͯ૷

  14. ྫʣϘΠεϨίʔμʔ ◈͜ͷεϥΠυͰͣͬͱ࢖͏ɺ ֓೦Λઆ໌͢ΔͨΊͷྫ ⬩ ௗͷ໐͖੠Λ࿥Ի͢ΔϨίʔμʔ ⬩ WPJDF@SFDPSEFSSFDPSE CJSE Ͱ࿥Ի͢Δ ⬩

    WPJDF@SFDPSEFSQMBZͰ࠶ੜ͢Δ 14
  15. ྫʣϘΠεϨίʔμʔ 15 ඞཁͳػೳΛఆٛ

  16. ྫʣϘΠεϨίʔμʔ 16 ఆٛ͞Εͨػೳʹ ͋Θ࣮ͤͯ૷

  17. ྫʣϘΠεϨίʔμʔ 17

  18. ҰํɺύλʔϯϚονϯά͸ ◈ड͚औΓ͏Δ஋ʹԠͯ͡ɺ ύλʔϯΛ૿΍͢ ◈ࡍݶͳ͘ɺଞͷΦϒδΣΫτʹ ґଘͨ͠ίʔυ͕૿͑Δ ◈ີ݁߹ʹͳΔͷͰ͸ʁ 18

  19. 19 ड͚औΓଆΦϒδΣΫτ ೖྗ஋ B " # $ͦΕͧΕड͚औͬͨࡍͷಈ࡞Λఆٛ ೖྗ஋ A ೖྗ஋

    C
  20. ྫʣϘΠεϨίʔμʔ 20 ػೳ͕ఆٛ͞Εͯͳ͍ͷͰ উखʹ࣮૷

  21. ྫʣϘΠεϨίʔμʔ 21 ͦΕͧΕʹ͋Θͤͯ ड͚औͬͨࡍͷಈ࡞Λఆٛ

  22. 22 3VCZʹೖΕΔͷ͸ ຊ౰ʹਖ਼͍͠ʁ

  23. 23

  24. 24 ݕূͷํ๏ ΦϒδΣΫτࢦ޲ઃܭͰॻ͍ͨίʔυʹ ύλʔϯϚονϯάΛಋೖͯ͠ΈΔ

  25. ୊ࡐʹ࢖͏ίʔυ ◈Ҏલॻ͍ͨCSBJOG DLॲཧܥ ⬩ ΦϒδΣΫτࢦ޲ͷษڧͷͨΊʹ ઃܭɾ࣮૷ͨ͠΋ͷ 25

  26. 26 CSBJOG DL

  27. 27

  28. CSBJOG DL ◈ͭͷ໋ྩͱόΠτྻ͕͋Δ͚ͩ ⬩ ίϯύΠϥ͸όΠτ ⬩ ͕ͩνϡʔϦϯά׬શ ◈όΠτྻɾ໋ྩಡΈग़͠Ґஔ ʹ͔͠ׯবͰ͖ͳ͍ ⬩

    ໋ྩ͸ɺόΠτྻͱ໋ྩಡΈग़͠Ґஔͷ ϑΟϧλͱଊ͑ΒΕΔ 28
  29. )FMMP 8PSME 29 +++++++++[>++++++++>+++++++++++> +++++<<<-]>.>++.+++++++..+++.>-.------------. <++++++++.--------.+++.------.--------.>+.

  30. CSBJOG DLॲཧܥ͸Ͳ͏࣮૷͔ͨ͠ 30 CSBJO'YDL ΤϯτϦʔϙΠϯτ͔Β ιʔείʔυಡΈࠐΜͰ࡞੒ ໋ྩྻ όΠτྻ ໋ྩ'BDUPSZ ॳظԽ࣌ʹ࡞੒

    ͯ͠อ࣋
  31. CSBJOG DLॲཧܥ͸Ͳ͏࣮૷͔ͨ͠ 31 CSBJO'YDL ໋ྩྻ όΠτྻ ໋ྩ'BDUPSZ ໋ྩΛ ಡΈग़͠

  32. CSBJOG DLॲཧܥ͸Ͳ͏࣮૷͔ͨ͠ 32 CSBJO'YDL ໋ྩྻ όΠτྻ ໋ྩ'BDUPSZ ໋ྩΛ ಡΈग़͠ ໋ྩΛ౉͢

    ໋ྩ ໋ྩ0CK ࡞੒ ໋ྩ0CK Λฦ͢
  33. CSBJOG DLॲཧܥ͸Ͳ͏࣮૷͔ͨ͠ 33 CSBJO'YDL ໋ྩྻ όΠτྻ ໋ྩ'BDUPSZ ໋ྩ ໋ྩΛ࣮ߦ ߋ৽͞ΕΔ

    ߋ৽͞ΕΔ
  34. CSBJOG DLॲཧܥ͸Ͳ͏࣮૷͔ͨ͠ 34 CSBJO'YDL ໋ྩྻ όΠτྻ ໋ྩ'BDUPSZ ࣍ͷ໋ྩΛ ಡΈग़͠

  35. 35 ͯ͞ɺΑ͏΍͘४උ͕ ੔͍·ͨ͠

  36. 36 ͜ΕΛύλʔϯϚονϯάͰ ॻ͖௚ͧ͢ʙ

  37. 37 ʮʜʜʜʜʯ

  38. 38

  39. 39 ॻ͖௚͢ͱ͜Ζ͕ ΄ͱΜͲͳ͍

  40. 40 ͳͥͩΖ͏͔ʁ

  41. ΄ͱΜͲͳ͔ͬͨཧ༝ ◈ιʔείʔυ͸จࣈྻͳͷͰɺ จࣈͣͭDBTFdXIFOͰ൑ผ͢Ε͹ྑ͍ ⬩ ໋ྩҎ֎ͷจࣈ͸ਖ਼نදݱͰফͤΔ ◈ଞͷՕॴͷೖྗ஋͸͢΂ͯࣗ෼Ͱ࣮૷͠ ͨΦϒδΣΫτͳͷͰɺ Θ͟Θ͟Ϛονͤ͞ͳͯ͘΋ Կ͕དྷΔ͔Θ͔Δ 41

  42. 42 ͦ΋ͦ΋ ΠϯλϑΣʔε͕ἧ͑ΒΕΔͱ͜ΖΛ ύλʔϯϚονϯάͰஔ͖׵͑Δͷ͕ ؒҧ͍ͬͯΔ

  43. ύλʔϯϚονϯάͷڧΈ ◈ͲΜͳ஋͕དྷͯ΋Α͍ ◈ύλʔϯ͝ͱʹશ͘ผʑͷಈ࡞Λ ͤ͞ΒΕΔ ⬩ ଟॏ୅ೖ͕ಈ࡞ͷ෯Λ޿͛ɺ هड़Λγϯϓϧʹ͢Δ 43

  44. ΠϯλϑΣʔεΛἧ͑ΒΕΔঢ়گ ◈ೖྗ஋͕͋Δఔ౓͸༧ଌՄೳ ⬩ ໋ྩͷจࣈ PS໋ྩҎ֎ͷจࣈ ⬩ ʮͲΜͳ஋͕དྷͯ΋Α͍ʯػೳʹ͸߹Θͳ͍ ◈΍Γ͍ͨ͜ͱ͕௨Γ ⬩ όΠτྻͱ໋ྩྻ΁ͷϑΟϧλద༻

    ⬩ ʮύλʔϯ͝ͱʹผʑͷಈ࡞͕ͤ͞ΒΕΔʯ ػೳʹ͸߹Θͳ͍ 44
  45. 45 צҧ͍Ե

  46. 46 ·ͯΑɺ͡Ό͋ ύλʔϯϚονϯά͕༗ޮͳঢ়گ ͬͯͳΜͩΖ͏ʁ

  47. 47 ౰વ ΠϯλϑΣʔε͕ ἧ͑ΒΕͳ͍ঢ়گ

  48. ྫʣϘΠεϨίʔμʔ 48

  49. ྫʣϘΠεϨίʔμʔ 49 ड͚औΔՄೳੑͷ͋Δ ύλʔϯʹ͍ͭͯهड़

  50. ྫʣϘΠεϨίʔμʔ 50

  51. ྫʣϘΠεϨίʔμʔ 51 ૝ఆͯ͠ͳ͍஋ʹ͸ ྫ֎Λ্͛Δ

  52. ྫʣϘΠεϨίʔμʔ ◈ಈ෺Ͱ΋ָثͰ΋จࣈྻͰ΋ ରԠՄೳ͔ͭผʑͷಈ࡞ ◈Ϛον͠ͳ͚Ε͹ྫ֎Λ্͛Δ ⬩ ༧૝֎ͷ஋͸͔ͬ͠Γ஄͘ ⬩ OVMM҆શ 52

  53. 53 ύλʔϯϚονϯάͷڧΈ ೖྗ஋͕શ͘༧૝Ͱ͖ͳ͍ͱ͖ ͲΜͳ஋Ͱ΋ରԠՄʹ͢Δ͜ͱͰ ड͚खͷೖྗ஋΁ͷґଘΛബΊΔ

  54. 54 ଞํ μοΫλΠϐϯάͷڧΈ͸ ͜ͷཪฦ͠

  55. 55 μοΫλΠϐϯάͷڧΈ ೖྗ஋͕͋Δఔ౓༧૝Ͱ͖Δͱ͖ ஋ʹಈ࡞Λ͠Ό΂ΒͤΔ͜ͱͰ ड͚खͷೖྗ஋΁ͷґଘΛബΊΔ

  56. 56 ·ͱΊ μοΫλΠϐϯάͱ ύλʔϯϚονϯά͸ ࢖͍ॴ͕ҧ͏

  57. 57 ͓Θͼ

  58. 58 λΠτϧ࠮ٗ

  59. 2019.07.06 TamaRuby 会議01 CSBJOG DLॲཧܥͰཧղ͢Δ ύλʔϯϚονϯάΛ͔ͭͬͨ ૄ݁߹ͳ࣮૷ Shu OGAWARA (@expajp)

  60. 2019.07.06 TamaRuby 会議01 CSBJOG DLॲཧܥͰཧղ͢Δ ύλʔϯϚονϯάΛ͔ͭͬͨ ૄ݁߹ͳ࣮૷ Shu OGAWARA (@expajp)

  61. 61 5BNB3VCZձٞͷςʔϚ 3VCZJTUͱͯ͠ͷ੒௕

  62. 62 צҧ͍ͨ͠··$'1Λग़͕ͨ͠ ͓͔͛Ͱ ύλʔϯϚονϯάͷڧΈΛ஌Εͨ

  63. 63 ٙ໰ʹਅ伨ʹ޲͖߹͑͹ צҧ͍ͯͯ͠΋ྑ͍͜ͱ͕͋Δ Fin.

  64. ࢀߟ ◈CSBJOGYDLॲཧܥ ⬩ IUUQTHJUIVCDPNFYQBKQCSBJOGYDL ◈ϘΠεϨίʔμʔͷαϯϓϧ ⬩ IUUQTHJUIVCDPNFYQBKQWPJDF@SFDPSEFS 64