Web System Architecture に最適化された並列処理系

Web System Architecture に最適化された並列処理系

* 情報量爆発
* 半導体トレンド
* レスポンス性の維持・向上
* 耐障害性の追求
* 高負荷計算処理アプリケーションの増加
* 習得容易にする必要性

徹底的に並列性・分散性・レスポンス性・耐障害性を追求する処理系 Elixir (エリクサー) の採用

* 3種類の並列性とそれぞれに関わる最適化を提案する
* 命令並列性 → 静的命令スケジューリング
* SIMD型並列性 → Hastega (ヘイスガ)
* MIMD型並列性 → Sabotender (サボテンダー)
* これらにより並列性だけでなくレスポンス性と耐障害性も維持・向上できる

83722380372c00bd75ac920f2089f6aa?s=128

Susumu Yamazaki (ZACKY)

April 13, 2019
Tweet

Transcript

  1. 84"ʹ࠷దԽ͞Εͨฒྻॲཧܥ ࢁ࡚ਐɹ৿ਖ਼࿨ɹٱߐ༤تɹߴ੉ӳر ʲ֓ཁʳ w छྨͷฒྻੑͱͦΕͧΕʹؔΘΔ࠷దԽΛఏҊ͢Δ w ໋ྩฒྻੑɹɹˠ੩త໋ྩεέδϡʔϦϯά w 4*.%ܕฒྻੑˠ)BTUFHB ϔΠεΨ

     w .*.%ܕฒྻੑˠ4BCPUFOEFS αϘςϯμʔ  w ͜ΕΒʹΑΓฒྻੑ͚ͩͰͳ͘Ϩεϙϯεੑͱ଱ো֐ੑ΋ҡ࣋ɾ޲্Ͱ͖Δ ˢ w పఈతʹฒྻੑɾ෼ࢄੑɾϨεϙϯεੑɾ଱ো֐ੑΛ௥ٻ͢Δॲཧܥ&MJYJSͷ࠾༻ ˢ w ৘ใྔരൃ w ൒ಋମτϨϯυΫϩοΫप೾਺৳ͼ಄ଧͪίΞ਺૿Ճ෼ࢄܕΞʔΩςΫνϟ༏Ґ w Ϩεϙϯεੑͷҡ࣋ɾ޲্ w ଱ো֐ੑͷ௥ٻ w ߴෛՙܭࢉॲཧΞϓϦέʔγϣϯͷ૿Ճ w शಘ༰қʹ͢Δඞཁੑ 1 ˜4VTVNV:BNB[BLJ
  2. ࣗݾ঺հ w ๺۝भࢢཱେֶࠃࡍ؀ڥ޻ֶ෦
 ।ڭत w New!φοδࣾձ࣮૷ݚڀηϯλʔ
 ηϯλʔ௕ w New!ֶੜɾब৬ࢧԉ୲౰ w

    1FSTPOBM7JTJPO$P$SFBUPS w ,,4)J'5 w &MJYJSਪ͠GVLVPLBFY)BTUFHB ;&". w ٕज़૬ஊɼڞಉݚڀґཔɼਐ࿏૬ஊɼ
 ద৬਍அͳͲɼਵ࣌ड෇·͢   ˜4VTVNV:BNB[BLJ
  3. എܠ৘ใྔരൃ 3 ˜4VTVNV:BNB[BLJ

  4. ৘ใྔരൃ ೥ʹσʔλͷ૯ྔ͕θλόΠτ ೥ʹθλόΠτʹୡ͢ΔݟࠐΈ 4 ˜4VTVNV:BNB[BLJ

  5. ৘ใྔരൃ ೥ʹຖ݄ΤΫαόΠτ૿Ճ ೥ʹຖ݄ΤΫαόΠτ૿ՃݟࠐΈ ৘ใͷ૿Ճྔ͕Ճ଎ 5 ˜4VTVNV:BNB[BLJ

  6. എܠ൒ಋମτϨϯυ 6 ˜4VTVNV:BNB[BLJ

  7. ܭࢉೳྗ͕௥͍͔ͭͳ͍ )FOOFTZ1BUUFSTPO
 ೥ʹ$16ΫϩοΫप೾਺͸಄ଧͪʹ 7 ˜4VTVNV:BNB[BLJ

  8. ͳͥΫϩοΫप೾਺Λ৳͹ͤͳ͍͔ʁ w ΫϩοΫप೾਺ͷ૿େ͸ফඅిྗͱൃ೤ྔͷ૿େΛট͘ w ిݯڙڅྔͱ೤఻ಋ཰͓Αͼྫྷ٫ೳྗ͕௥͍͔ͭͳ͍ w ʙ()[ఔ౓ͰৗԹͰ҆ఆಈ࡞͢ΔݶքΛܴ͍͑ͯΔ w ڝٕ༻ΦʔόʔΫϩοΫͰ͸ӷମ஠ૉ౳ʹਁ͚Δ౳ʹ ΑΓ()[Ҏ্Ͱಈ࡞͍ͤͯ͞Δ

    w ௨ৗͷ1$΍αʔόʔͰ͸ৗԹՔಇͰ͖Δ͜ͱ͕ཁ݅ 8 ˜4VTVNV:BNB[BLJ
  9. ͔ΘΓʹίΞ਺͕૿Ճ w ೥Ҏ߱ͷϓϩηοαͷਐԽ w ºΫϩοΫप೾਺ w ˓ίΞ਺   ˜4VTVNV:BNB[BLJ

    *OUFM$PSF
 &YUSFNF9  ΫϩοΫ ()[ ίΞ਺  *OUFM$PSFJ
 9&  ΫϩοΫ ()[ ίΞ਺ 
  10. ࠓޙͷ൒ಋମτϨϯυ w ϝϞϦͷߴ଎Խ͕ϓϩηοαͷߴ଎Խʹ௥͍͍͍ͭͯͳ͍ w ίΞ਺͸ࠓޙ΋૿େ͠ଓ͚ͯɼ.*.%Ͱ਺ઍίΞ΋ݱ࣮ʹ w ൒ಋମϓϩηεඍࡉԽ͸ݶքΛܴ͑ͭͭ͋Δ w ଞͷ֤छूੵٕज़ʹΑΓճ࿏ن໛͸౰෼૿େͷ༨஍͕͋Δ w

    ճ࿏௕͕ࠓ·ͰҎ্ʹ௕͘ͳΔ w ࠓ·ͰҎ্ʹϝϞϦΞΫηεͱޫ଎͕཯଎ʹͳΔ w ڞ༗ϝϞϦিಥɼϑΥϯɾϊΠϚϯɾϘτϧωοΫ w ճ࿏શମͰΫϩοΫΛಉظͤ͞Δ͜ͱ͕ෆՄೳʹ w ڞ༗ܕΞʔΩςΫνϟΑΓ΋෼ࢄܕΞʔΩςΫνϟ༏Ґ 10 ˜4VTVNV:BNB[BLJ
  11. എܠϨεϙϯεੑͱ ଱ো֐ੑ͕ߴ͍84" 11 ˜4VTVNV:BNB[BLJ

  12. Ϩεϙϯεੑͷߴ͍84" w ϞόΠϧͷීٴ w ϖʔδදࣔʹ͕͔͔࣌ؒΔͱ཭୤ ‎Ϩεϙϯεੑ͕ߴ͍84"͕ٻΊΒΕΔ w ࣌ؒ͋ͨΓϦΫΤετ਺͕૿͑ͯ΋Ϩεϙϯεੑ͕҆ఆ ͍ͯ͠Δ͜ͱ΋ٻΊΒΕΔ 12

    ˜4VTVNV:BNB[BLJ
  13. ଱ো֐ੑͷߴ͍84" w ༏लͳΤϯδχΞͷ࠾༻ڝ૪ͷܹԽ w ಇ͖ํվֵͷਐల w ো֐ʹΑΔ໷ؒૣேɾٳ೔ͷग़ۈΛݮΒ͢ඞཁੑ ‎ো֐͕Ίͬͨʹى͜Βͳ͍84"͕ٻΊΒΕΔ 13 ˜4VTVNV:BNB[BLJ

  14. എܠߴෛՙܭࢉॲཧ ΞϓϦέʔγϣϯͷ૿Ճ 14 ˜4VTVNV:BNB[BLJ

  15. ߴෛՙܭࢉॲཧΞϓϦέʔγϣϯͷ૿Ճ w ػցֶशٕज़ͷਐలʹΑΓɼ΢ΣϒΞϓϦέʔγϣϯʹ΋ ߴෛՙܭࢉॲཧ͕ٻΊΒΕΔ࣌୅͕౸དྷ͢Δ w ͔ͭલड़ͷ௨Γɼ΢ΣϒΞϓϦέʔγϣϯʹ͸Ϩεϙϯε ੑ͕ٻΊΒΕΔ w ߴϨεϙϯεੑೳࢦ޲ͷ࠷దԽٕज़͕ٻΊΒΕΔ w

    ैདྷͷ)1$Ͱ୳ٻ͞Εͨߴεϧʔϓοτࢦ޲ͷ࠷దԽ Ͱ͸ෆे෼ 15 ˜4VTVNV:BNB[BLJ
  16. ޿ٕ͘ज़ల։͢Δʹ͸
 शಘ༰қ͕NVTU 16 ˜4VTVNV:BNB[BLJ

  17. ༗๬ͳιϦϡʔγϣϯ
 &MJYJS 17 ˜4VTVNV:BNB[BLJ

  18. 4IBSFE%BUB $PSF #1 $PSF2 3.14 ैདྷͷݴޠͷ໰୊఺ w ෳ਺ͷίΞͰσʔλΛڞ༗͠ ͍ͯΔͱԾఆ͢Δ 

     ˜4VTVNV:BNB[BLJ
  19. 4IBSFE%BUB $PSF #1 $PSF2 3.14 →1.5 ഁյతߋ৽͕ϘτϧωοΫ w ͋ΔίΞ͕ڞ༗σʔλΛ
 ഁյతߋ৽ͨ͠৔߹

    w ଞͷίΞʹ௨஌ͯ͠
 ॲཧΛࢭΊΔඞཁ͕͋Δ w ଎౓௿Լʹͭͳ͕Δ w ίΞ਺͕૿͑Ε͹૿͑Δ΄Ͳ
 ਂࠁͳӨڹΛ΋ͨΒ͢   ˜4VTVNV:BNB[BLJ 6QEBUF /PUJGZ 4UPQ1SPDFTTJOH
  20. 4IBSFE%BUB $PSF #1 $PSF2 3.14 &MJYJS͸શ͕ͯΠϛϡʔλϒϧͰ͋Δ w &MJYJSͰ͸σʔλͷഁյతߋ৽ ͕ൃੜ͢Δ͜ͱ͸ͳ͍ w

    ଞͷίΞͷॲཧΛࢭΊͳͯ͘ ྑ͍ w ίΞ਺͕૿͑ͯ΋ॲཧೳྗΛ ҡ࣋Ͱ͖Δ ‎ฒྻੑʹ༏ΕΔ   ˜4VTVNV:BNB[BLJ %PO`U
 6QEBUF %PO`UOFFEUP
 TUPQQSPDFTTJOH
  21. 4IBSFE%BUB $PSF #1 $PSF2 3.14 4DBMBʹର͢Δ༏Ґੑ w 4DBMB΋جຊ͸ΠϛϡʔλϒϧͰ͋Δ w ͔͠͠ϚϧνύϥμΠϜΏ͑ʹϛϡʔλϒϧͳίʔυ΋ࠞࡏ͍ͯ͠Δ

    w ϛϡʔλϒϧͳίʔυͷଘࡏʹΑΓ࠷దԽͷલఏΛపఈͰ͖ͣશମͷੑೳ͕ѱԽ͢Δ   ˜4VTVNV:BNB[BLJ %PO`U
 6QEBUF %PO`UOFFEUP
 TUPQQSPDFTTJOH 4IBSFE%BUB $PSF #1 $PSF2 3.14 →1.5 6QEBUF /PUJGZ 4UPQ1SPDFTTJOH
  22. &MJYJSͷ($ w &MJYJS͸ϓϩηε͝ͱʹಠཱͨ͠ϝϞϦۭؒΛ࣋ͪɼ($΋ϓϩηε͝ͱʹ ಠཱ͍ͯ͠Δ w ϓϩηεؒ௨৴Ҏ֎Ͱ͸ϓϩηεؒͰσʔλΛڞ༗͠ͳ͍͍ͯ͘લఏ w ͔ͭฒߦ($Ͱ͋Δ w +BWBͰ໰୊ʹͳΔ'VMM($ʹΑΔ4UPQUIFXPSME͕ൃੜ͠ͳ͍

    w ͜ͷ఺΋4DBMBʹର͢Δ༏Ґੑ w ෼ࢄܕΞʔΩςΫνϟʹద߹͢Δ w ࠓޙͷ൒ಋମτϨϯυΛ౿·͑Δͱ༗ར 22 ˜4VTVNV:BNB[BLJ
  23. ΢ΣϒγεςϜʹ͓͚Δ&MJYJSͷ༏Ґੑ ୯Ґ࣌ؒ͋ͨΓϦΫΤετ਺͕૿Ճͯ͠΋
 ϨεϙϯελΠϜΛҡ࣋Ͱ͖Δ 23 ˜4VTVNV:BNB[BLJ ↑Slower ↓Faster 'FESFDIFTLJ ( $PTUB

    -$1BOE;V⒎P .,&MJYJSQSPHSBNNJOHMBOHVBHFFWBMVBUJPOGPS*P5  *&&&*OUFSOBUJPOBM4ZNQPTJVNPO$POTVNFS&MFDUSPOJDT *4$& QQr POMJOF %0* *4$&  
  24. ྫ֎ɾҟৗॲཧ w USZDBUDI SFTDVF ʹΑΔྫ֎ɾҟৗॲཧ͸ɼਖ਼͘͠هड़͞Εͳ͍͜ͱ͕͋·Γʹ΋ଟ͍ w &MJYJSͰ͸࣍ͷྫ֎ɾҟৗॲཧͷ࢓૊ΈΛ୅ΘΓʹఏڙ͍ͯ͠Δ w ྫ֎ॲཧ͋Β͔͡Ί૝ఆ͞ΕΔॲཧ͸λϓϧͰฦ͢
 \PL

    SFTVMU^\FSSPS SFBTPO^ w ҟৗॲཧ૝ఆ͍ͯ͠ͳ͍ΠϨΪϡϥʔͳೖྗΛ༩͑ΒΕͨ࣌  ϓϩηε͝ͱҟৗऴྃ͢Δ  ؂ࢹϓϩηε͕ҟৗऴྃΛݕ஌͢Δ  ؂ࢹϓϩηε͕֘౰ϓϩηεΛ࠶ىಈ͢Δ  ͳʹ͝ͱ΋ͳ͘ɼ࣍ͷೖྗΛड͚෇͚ΒΕΔ 㾎ϓϩηε୯ҐͰϝϞϦۭ͕ؒ෼཭͍ͯ͠Δ͜ͱͰɼϓϩηε୯Ґͷ࠶ىಈ͕ՄೳʹͳΔ 24 ˜4VTVNV:BNB[BLJ
  25. 1IPFOJYͷ༏Ґੑ w Ϩεϙϯεੑʹ༏ΕΔ w جຊੑೳྑ޷ w )551αϙʔτ w -JWF7JFX ‎ϖʔδදࣔʹ͕͔͔࣌ؒΒͳ͍ͷͰ཭୤๷ࢭʹد༩

    w ଱ো֐ੑʹ༏ΕΔ w ؂ࢹϓϩηεʹΑΔҟৗ෮ؼ w ఆظతϓϩηε࠶ىಈˠϝϞϦϦʔΫ͕ݪҼͷύϑΥʔϚϯεѱԽɾো֐ͷ๷ࢭ w GVMM($ʹΑΔTUPQUIFXPSME͕ൃੜ͠ͳ͍ ‎ো֐ൃੜ਺͕ܹݮ͢ΔͷͰɼ໷ؒૣேٳ೔ग़ۈܹݮɼΤϯδχΞͷಇ͖ํվળʂ 25 ˜4VTVNV:BNB[BLJ
  26. शಘ༰қ   ˜4VTVNV:BNB[BLJ @@ c&OVNNBQ .GPP  
 c&OVNNBQ

    .CBS  
 
 EFGNPEVMF.EP EFGGPP O EPO  EFGCBS O EPO  FOE w ӈͷίʔυྫ w ͔Β  ·ͰͷϦετʹର͠ w ֤ཁૉʹGPPΛద༻ Y  w ֤ཁૉʹCBSΛద༻   w ͨ݁͠ՌΛಘΔ w σʔλΛ্͔Βॱʹม׵͍ͯ͘͠ύϥμΠϜͰ هड़Ͱ͖Δ w ؔ਺ͷݺग़ઌ͸جຊతʹҰҙʹಛఆͰ͖Δ ‎ॳֶऀʹ͸ΦϒδΣΫτࢦ޲ύϥμΠϜΑΓ
 शಘ༰қ 㾎ࠓ·ͰͷύϥμΠϜʹͳ͡Μͩਓʹ͸ VOMFBSOJOH͢Δඞཁ͕͋Δ
  27. &MJYJS;FO4UZMF   ˜4VTVNV:BNB[BLJ @@ c&OVNNBQ .GPP  
 c&OVNNBQ

    .CBS  
 
 EFGNPEVMF.EP EFGGPP O EPO  EFGCBS O EPO  FOE &MJYJS;FO4UZMF
 &OVNNBQελΠϧ w ષͰ͋Δཧ༝ w ષͱ͸ຊ࣭ඒͰ͋Δ w ӈͷελΠϧ͸σʔλม׵ͷϑ ϩʔΛද͍ͯ͠Δ w σʔλม׵ͷϑϩʔͱͯ͠
 ϓϩάϥϛϯάΛଊ͑Δ
 ύϥμΠϜ͸ຊ࣭Λଊ͍͑ͯͯ
 ୯७͕ͩදݱੑ๛͔Ͱ͋Δ ‎ӈͷελΠϧ͸ຊ࣭ඒͰ͋Δ
 ͢ͳΘͪષͰ͋Δ
  28. &MJYJS;FO4UZMFͱ΢Σϒϓϩάϥϛϯά w &MJYJS;FO4UZMFͱ8FCϓϩάϥϛϯά͸૬ੑ͕͍͍ w (&5
 cՃ޻ ϦΫΤετˠΫΤϦ 
 c%#ಡࠐΈ
 cՃ޻

    ݁ՌˠϨεϙϯε  w 1045
 cՃ޻ ϦΫΤετˠΫΤϦ 
 c%#ॻࠐΈ
 cՃ޻ ݁ՌˠϨεϙϯε 28 ˜4VTVNV:BNB[BLJ
  29. ٕज़త՝୊ w ػցֶशͷϥΠϒϥϦͷॆ࣮͕ඞཁ
 ˠ։ൃதɼϓϩτλΠϓ࣮૷͋Γ w ύϑΥʔϚϯεݱঢ় w $ $ 3VTU+BWB

    4DBMB&MJYJS3VCZ 1)1 w ͞ΒͳΔύϑΥʔϚϯε͕ඞཁ w ଞͷ޷·͍͠ੑ࣭͸ݎ͍࣋ͯͯ͠΄͍͠ w ຊൃදͰ͸ύϑΥʔϚϯεͷ໰୊ʹϑΥʔΧε 29 ˜4VTVNV:BNB[BLJ
  30. छྨͷฒྻੑ 30 ˜4VTVNV:BNB[BLJ

  31. छྨͷฒྻੑ w ໋ྩฒྻੑ w 4*.%ฒྻੑ w .*.%ฒྻੑ 31 ˜4VTVNV:BNB[BLJ

  32. ໋ྩฒྻੑ w ӈͰ͸ԼهΛฒྻܭࢉͰ͖Δ w DGPP B  w ECBS C

     w ྆ऀʹσʔλґଘؔ܎͕ͳ͍ ͜ͱ͕ಡΈऔΕΔ w ೥୅ͷ()$΍,-Ͱ
 ࣮ݱ͠Α͏͍ͯͨ͜͠ͱ   ˜4VTVNV:BNB[BLJ def module M do def func(a, b) do c = foo(a) d = bar(b) {c, d} end def foo(n), do: n * 2 def bar(n), do: n + 1 end
  33. 4*.%ฒྻੑ w ӈͰ͸GPP CBSͷద༻Λ
   ฒྻͰ࣮ߦͰ͖Δ w ୯Ұίʔυྻෳ਺σʔλ
 ˠ4*.%

      ˜4VTVNV:BNB[BLJ def module M do def func do 1..1_000_000 |> Enum.map(& foo(&1)) |> Enum.map(& bar(&1)) end def foo(n), do: n * 2 def bar(n), do: n + 1 end
  34. .*.%ฒྻੑ w ϓϩηεͰද͞ΕΔฒྻੑ w ֤ϓϩηε͸ಠ໋ཱͨ͠ྩྻͱͦΕͧΕͷσʔλΛ࣋ͭ
 ˠ.*.% w &MJYJSͷϓϩηε͸ΞΫλʔϞσϧʹجͮ͘ w ϓϩηε΁ͷϝοηʔδ͸౸ணॱͰγϦΞϥΠζ

    w ֤ϓϩηεͷ࣮ߦ͸୯ҰεϨου w جຊతʹܭࢉࢿݯ͸ͭͷϓϩηεͰ؅ཧ͞ΕΔ ‎ϓϩηε಺ͷܭࢉࢿݯͷഉଞ੍ޚ͕ෆཁ 34 ˜4VTVNV:BNB[BLJ
  35. ໋ྩฒྻੑͷ࠷దԽ 35 ˜4VTVNV:BNB[BLJ

  36. ໋ྩฒྻੑͷ࠷దԽ w ࣍ͷͭͷ৔߹ʹ෼͚Δ w ૈཻ౓ ϓϩηεىಈͯ͠΋ݩ͕औΕΔ৔߹  w ࡉཻ౓ ͦ͏Ͱͳ͍৔߹

    36 ˜4VTVNV:BNB[BLJ
  37. ૈཻ౓ͷ໋ྩฒྻੑ w ؔ਺ؙ͝ͱผϓϩηεىಈͯ͠ܭࢉ͢ΔΑ͏ʹίʔυม׵ w .*.%ฒྻੑͷ࠷దԽΛ͔͚Δ w Ͱ͖Δ͚ͩಉ͡ίΞͷ4.5 ϋΠύʔεϨοσΟϯά ʹ
 ͳΔΑ͏ʹׂΓ౰ͯΔ

    37 ˜4VTVNV:BNB[BLJ
  38. ࡉཻ౓ͷ໋ྩฒྻੑ w ґଘؔ܎ͷͳ໋͍ྩྻ͕ҟͳΔϨδελΛ࢖͏Α͏ʹ
 ׂΓ౰ͯΔ w $16ͷಉ࣮࣌ߦՄೳͳ໋ྩ਺ʹ߹Θͤͯɼ
 ґଘؔ܎ͷͳ໋͍ྩྻΛಉ࣌ൃߦͰ͖ΔΑ͏
 ͔ͭύΠϓϥΠϯʹཚΕ͕ੜ͡ͳ͍Α͏ʹ
 ੩త໋ྩεέδϡʔϦϯά͢Δ 38

    ˜4VTVNV:BNB[BLJ
  39. ߟ࡯ w ࡉཻ౓໋ྩฒྻ࠷దԽͰߦͳ͍ͬͯΔ͜ͱ͸ɼ
 7-*8޲͚ίϯύΠϥʹΑΔ࠷దԽͱ࣮࣭తʹಉ౳ w &MJYJS;FO4UZMFͰ͸ґଘղੳΛߦ͏ͷ͕༰қ w εʔύʔεΧϥʔ Ξ΢τɾΦϒɾΦʔμʔ࣮ߦ ͸


    ෆཁͰ͸ʁ w ࣮ࡍɼεʔύʔεΧϥʔํࣜͷํ͕7-*8ํࣜΑΓ
 ίΞαΠζ͕ۃ୺ʹେ͖͘ͳΔ܏޲ʹ͋Δ w ίΞαΠζ͕খ͍͞ํ͕ίΞ਺ΛՔ͛Δ ‎7-*8ͷ෮ݖʹͭͳ͕ΔͷͰ͸ʁ 39 ˜4VTVNV:BNB[BLJ
  40. 4*.%ฒྻੑͷ࠷దԽ 40 ˜4VTVNV:BNB[BLJ

  41. )BTUFHB w 4*.%ฒྻੑΛೝࣝͯ͠4*.%໋ྩΛ࢖ͬͨίʔυ΍(16ۦಈ͢Δίʔυʹ
 ίϯύΠϧ͢Δ w কདྷతʹ͸8FC"TTFNCMZ4*.%΍8FC(- 8FC(16ͷ׆༻ʹΑΓɼ΢Σϒ ΫϥΠΞϯτ্ͷ$16(16ࢿݯ΋׆༻͢Δ w ֤छϓϩτλΠϓ࣮૷ɾੑೳධՁࡁ

    w &MJYJSͷݩͷίʔυͷʙഒͷ଎౓޲্ 130೥݄೥݄  w 1ZUIPO $V1ZͷഒҎ্ͷ଎౓޲্ 130೥݄  w -POFTUBS&MJYJS$POGͰੈքσϏϡʔ͠ɼେ൓ڹΛݺͿ w ೥ՆʹϑΝʔετϦϦʔε༧ఆ 41 ˜4VTVNV:BNB[BLJ
  42. )BTUFHBͷݪཧ   ˜4VTVNV:BNB[BLJ @@ c&OVNNBQ .GPP  
 c&OVNNBQ

    .CBS  
 
 EFGNPEVMF.EP EFGGPP O EPO  EFGCBS O EPO  FOE &MJYJS;FO4UZMF
 &OVNNBQελΠϧ @@LFSOFMWPJEDBMD  @@HMPCBMMPOH JOQVU  @@HMPCBMMPOH PVUQVU \ TJ[F@UJHFU@HMPCBM@JE   MPOHUFNQJOQVU<J> UFNQGPP UFNQ  UFNQCBS UFNQ  PVUQVU<J>UFNQ ^ 0QFO$-
 Χʔωϧ෦ w ࠨͷίʔυ͸  ฒྻͷՄೳੑ͕͋Δ w ࠨͷίʔυ͔Βӈͷίʔυ΁ػցతʹม׵Ͱ͖Δ w ࠷৽(16ͷ Ҏ্ͷ4*.%ίΞͰฒྻ࣮ߦՄೳ
  43. )BTUFHBͷίʔυྫ   ˜4VTVNV:BNB[BLJ EFGNPEVMF)EP SFRVJSF)BTUFHB JNQPSU)BTUFHB EFGIBTUFHBEP EFGGVOD MJTU

    EP MJTU c&OVNNBQ   
 c&OVNNBQ    FOE IBTUFHBTUVC FOE FOE w SFRVJSF)BTUFHBͰ)BTUFHBΛಡࠐΈ w JNQPSU)BTUFHBͰϞδϡʔϧ໊Λ෇ه
 ͤͣʹEFGIBTUFHB΍IBTUFHBTUVC͕
 ར༻Ͱ͖Δ w EFGIBTUFHBEPʜFOEͰʜͷίʔυΛ
 ॲཧܥʹಡࠐΉ w IBTUFHBTUVCͰίʔυੜ੒Λߦ͏
  44. NBQNBQϑϡʔδϣϯ   ˜4VTVNV:BNB[BLJ @@ c&OVNNBQ .GPP  
 c&OVNNBQ

    .CBS  
 
 EFGNPEVMF.EP EFGGPP O EPO  EFGCBS O EPO  FOE @@ c&OVNNBQ 
 c.GPP 
 c.CBS 
 
 EFGNPEVMF.EP EFGGPP O EPO  EFGCBS O EPO  FOE w NBQNBQϑϡʔδϣϯʹΑΓɼࠨͷίʔυΛӈͷίʔυʹม׵ w &OVNNBQʹ൐͏෼഑ɾूܭΛ࡟ݮ͢ΔޮՌ͕ظ଴Ͱ͖Δ
  45. &MJYJSͷϝλϓϩάϥϛϯά   ˜4VTVNV:BNB[BLJ JFY  RVPUFEP@@c&OVNNBQ   

    \c <DPOUFYU&MJYJS JNQPSU,FSOFM>  < \ <DPOUFYU&MJYJS JNQPSU,FSOFM> < >^  \\ <> <\@@BMJBTFT@@ <BMJBTGBMTF> <&OVN>^ NBQ>^ <>  <\ <> <\ <DPOUFYU&MJYJS JNQPSU,FSOFM> <\ <> <>^ >^>^>^ >^ &MJYJSͰ"45Λग़ྗͨ͠ྫ w +PTÉ7BMJN͕։ൃͨ͠&MJYJSϚΫϩʹΑͬͯఏڙ w "45͸ϦετͱλϓϧͰߏ੒ɼ-*41ͱࣅ͍ͯΔ w RVPUFʹΑͬͯίʔυ͔Β"45Λग़ྗɼVORVPUFͰ஋Λૠೖ w 7BMVFPGBJT\B^zͱࣅ͍ͯΔ :> .. 1 1000000 . Enum map & * & 1 2 "45ͷਤࣔ
  46. |> |> NBQNBQϑϡʔδϣϯ  w "45Λ࠶ؼతʹ૸ࠪͯ͠ɼ
 ύΠϓϥΠϯԋࢉࢠͷωετΛ ݕग़͢Δ w ύλʔϯϚονΛ༻͍Δ

    w ύΠϓϥΠϯԋࢉࢠcʹ
 Ϛον͠ɼࢠϊʔυ΋
 ύΠϓϥΠϯԋࢉࢠͰ͋Δ
 ৔߹Λݕग़ w ͜ͷ৔߹͸ɼඞͣ൪໨ͷࢠ Ͱ͋Δ   ˜4VTVNV:BNB[BLJ
  47. |> |> . Enum map . Enum map NBQNBQϑϡʔδϣϯ 

    w ωετ͕ଘࡏͨ͠৔߹ɼ
 ࢠϊʔυ͕࣍ͷ૊߹͔ͤ֬ೝ w ύΠϓϥΠϯԋࢉࢠ w &OVNNBQ w ࢠϊʔυͷύΠϓϥΠϯԋࢉ ࢠͷࢠϊʔυʹ΋ &OVNNBQ͕ଘࡏ͢Δ͔Λ֬ ೝ   ˜4VTVNV:BNB[BLJ
  48. |> . Enum map & |> NBQNBQϑϡʔδϣϯ  w "45Λૢ࡞ͯͭ͠ͷ&OVNNBQΛͭʹ·ͱΊ͋͛Δ

    w &OVNNBQͦΕͧΕͰݺग़͞ΕΔؔ਺ΛύΠϓϥΠϯͰ߹੒͢Δ   ˜4VTVNV:BNB[BLJ |> |> . Enum map . Enum map
  49. |> |> NBQNBQϑϡʔδϣϯ  w ͜ͷΑ͏ͳૢ࡞Λ࠶ؼతʹ
 ߦ͍ɼ࿈ଓ͢Δ&OVNNBQΛ ͢΂ͯͭͷ&OVNNBQʹ
 ·ͱΊ্͛Δ·ͰਐΊΔ 

     ˜4VTVNV:BNB[BLJ |> |> . Enum map . Enum map |> . Enum map & |>
  50. ੾ग़͠ͱ෼཭ w NBQNBQϑϡʔδϣϯͷޙɼ
 ύΠϓϥΠϯԋࢉࢠͱ&OVNNBQͷ૊߹ΘͤΛϚον w ֘౰෦෼Λ੾ग़ͯ͠ɼಠཱͨؔ͠਺Λఆٛͯ֨͠ೲ͢Δ w ݩ͋ͬͨ෦෼ʹ͸ੜ੒ͨؔ͠਺΁ͷݺग़͠Ͱஔ׵͑Δ w Ϛον͠ͳ͔ͬͨΒɼͦͷ··ग़ྗ

    50 ˜4VTVNV:BNB[BLJ
  51. কདྷ՝୊ w &MJYJS;FO4UZMFʹ͸ɼසൟʹొ৔͢Δԋࢉύλʔϯ͕
 ෳ਺ଘࡏ͢Δ w ҰྫͭͷϦετͷ֤ཁૉͷੵΛܭࢉ͢Δ w "45ͷҰ෦͕ɼ͜ͷΑ͏ͳԋࢉύλʔϯʹϚονͨ͠
 ˠେҬతʹݟͯ࠷దͳػցޠ໋ྩΛੜ੒͢Δ w

    ࣮ݱʹ޲͚ͯݚڀணखͨ͠ஈ֊ 51 ˜4VTVNV:BNB[BLJ
  52. .*.%ฒྻੑͷ࠷దԽ 52 ˜4VTVNV:BNB[BLJ

  53. 84"͔Βݟͨϓϩηεͷ՝୊ w ैདྷͷ84"Ͱ͸ϦΫΤετ͝ͱʹ ϓϩηεΛىಈ͢ΔํࣜΛ࠾༻ w ֤ϓϩηε͕ελοΫϝϞϦΛ֬อ w ϦΫΤετ͋ͨΓ਺ඦ,#ʙ਺.# ͷϝϞϦΛফඅ w

    ϦΫΤετ͕ूத͢ΔͱϝϞϦΛ
 ࢖͍Ռͨͯ͠εϫοϓ͕ൃੜ w ϨεϙϯελΠϜ͕ۃ୺ʹѱԽ w "QBDIF౳Ͱ໰୊   ˜4VTVNV:BNB[BLJ
  54. /PEFϓϩάϥϛϯάϞσϧʹΑΔղܾ w /PEFKTͷ࣮ݱํࣜ w *0଴ͪΛڥքʹϦΫΤετॲཧΛ ෳ਺ͷؔ਺ʹ෼ׂ w ্هؔ਺Λ୯Ґͱͯ͠
 εέδϡʔϦϯά͠ɼ࣮ߦՄೳʹ ͳͬͨؔ਺͔Βॱ൪ʹίʔϧόοΫ

    w ؔ਺෼ׂͷهड़͸ɼແ໊ؔ਺Λར༻ ͯ͠ɼϓϩάϥϜͷྲྀΕΛଛͶͳ͍ Α͏ʹࣗવʹهड़Մೳ w ελοΫϝϞϦΛׂΓ౰ͯΔ͜ͱͳ͘ ϚϧνλεΫΛ࣮ݱͰ͖Δ   ˜4VTVNV:BNB[BLJ
  55. ࠓ·Ͱͷݚڀ੒Ռ w ୈճ84"ݚڀձʹͯຊํࣜΛॳ൸࿐ w 130೥݄ʹͯ&MJYJSͷϦετʹΑΔίʔϧόοΫ࣮૷ͱ$ ͱ૒ํ޲ϦετʹΑΔίʔϧ όοΫ࣮૷ʹ͍ͭͯɼλεΫ͋ͨΓͷϝϞϦྔΛධՁ w $ εϨου,#

    w &MJYJSϓϩηε,# w &MJYJSͷϦετʹΑΔίʔϧόοΫ࣮૷,# w $ ʹΑΔίʔϧόοΫ࣮૷όΠτ w ͞Βʹ௥ࢼͰɼ$ݴޠͱ୯ํ޲ϦετʹΑΔίʔϧόοΫ࣮૷Ͱ͸ࢀߟه࿥ͳ͕ΒɼόΠτʹ· ͰলϝϞϦԽͰ͖ͨ w ͜ͷ͜ͱ͔ΒɼωΠςΟϒίʔυͰຊํࣜͷϚϧνλεΫػߏΛ࣮૷͠ɼ&MJYJS͔Βར༻Ͱ͖ΔΑ ͏ʹ͢Δ͜ͱ͕๬·͍͠ 55 ˜4VTVNV:BNB[BLJ
  56. ଞʹղܾ͍ͨ͠໰୊ w &MJYJSͰϓϩηεؒ௨৴Λଟ༻͢ΔͱɼϝοηʔδΩϡʔ ͕٧·Δ໰୊͕ൃੜ͢Δ w ͜Ε͸ɼੜ࢈ऀଆͷϓϩηεͷϝοηʔδੜ੒଎౓ʹର ͠ɼফඅऀଆͷϓϩηεͷϝοηʔδফඅ଎౓͕஗͍ͱ ੜ͡Δ w ͜ͷ໰୊ʹΑΓɼϨεϙϯεੑೳ͕ѱԽ͠ɼϝϞϦফඅྔ

    ΋֨ஈʹѱԽ͢ΔͷͰɼղফ͍ͨ͠ 56 ˜4VTVNV:BNB[BLJ
  57. ݱঢ়ͷ&MJYJSͰͷ.*.%ฒྻϓϩηεͷ࣮ݱ w ਤ͸ϗϫΠτϘʔυʹॻ͘  w ֤ίΞʹεέδϡʔϥʔͱ࣮ߦΩϡʔΛ࣋ͨͤΔ w ͜ΕʹΑΓίΞؒͰεέδϡʔϥʔͱ࣮ߦΩϡʔʹؔ͢Δ
 ഉଞ੍ޚΛ͠ͳ͍ͰࡁΉͷͰɼੑೳ޲্͢Δ w

    ͦͷ୅ΘΓ࣍ͷܽ఺͕͋Δ w ϓϩηεͷ࣮ߦॱ͕ೖΕସΘΔՄೳੑ͕͋Δ w ͜ͷ໰୊͸ݱঢ়Ͱ͸໧ೝ͍ͯ͠Δ w ίΞؒͰϓϩηεෛՙ͕ෆۉ౳ʹͳΔՄೳੑ͕͋Δ w ͜ͷ໰୊ʹ͍ͭͯ͸ɼ.JHSBUJPO-PHJDʹΑΓղফ͢Δ 57 ˜4VTVNV:BNB[BLJ
  58. 4BCPUFOEFS.*.%ฒྻϓϩηεͷ࠷దԽ w ਤ͸ϗϫΠτϘʔυʹॻ͘  w ࣮ߦ࣌ؒᮢ஋ΛɼϦΞϧλΠϜੑΛߟྀͨ͠஋ʹઃఆ͓ͯ͘͠ ͨͱ ͑͹NT  w

    ίʔυ͸ίϯύΠϧ࣌ʹ࣍ͷΑ͏ͳڥքͰ෼ׂ͓ͯ͘͠ w *0଴ͪ w ࣮ߦ࣌ؒᮢ஋ͷൣғͰΠςϨʔγϣϯΛଋͶͨ΋ͷ w ࣮ߦ࣌ؒᮢ஋ͷൣғͷίʔυϒϩοΫ w ͭͷϓϩηεʹ͸ͭͷ࣮ߦ࣌؀ڥ͕͋Δ w ෳ਺ίΞڞ༗͞Ε͍ͯΔͳΒ͹ɼࢿݯΞΫηε࣌ʹഉଞ੍ޚΛ ͢Δ w ֤ίΞʹεέδϡʔϥʔͱ࣮ߦΩϡʔΛ࣋ͨͤɼͦͷ΄͔ʹڞ༗࣮ߦ ΩϡʔΛઃ͚Δ w ࣮ߦΩϡʔ͸ɼίʔϧόοΫ͢Δؔ਺ͱ࣮ߦ࣌؀ڥͷλϓϧΛ Ϧετʹͨ͠΋ͷͰ͋Δ w ֤ίΞͷϝοηʔδΩϡʔͱ࣮ߦΩϡʔΛ؂ࢹ͢ΔϓϩηεΛͦΕͧ Ε֤ίΞʹ༻ҙ w Ͱ͖Δ͔͗Γಉ࣮͡ߦ࣌؀ڥΛ࢖༻͢Δؔ਺Λಉ͡ίΞͷ࣮ߦΩϡʔ ʹׂΓ౰ͯΔ w ֤ίΞͷ࣮ߦΩϡʔ؂ࢹϓϩηεͷϝοηʔδ௨஌͸࠷༏ઌͰॲཧ w ϝοηʔδΩϡʔ͕͋;Εͦ͏ͳΒ͹ɼ࣮ߦΩϡʔதʹଘࡏ͢Δɼͦ ͷϓϩηεͷλϓϧΛ͍͔ͭ͘ଞͷίΞʹϚΠάϨʔτ͢Δ w ࣮ߦ࣌؀ڥʹෳ਺ίΞڞ༗ͷϑϥάΛ͚ͭΔ w ࣮ߦΩϡʔʹͭͳ͕ΕͨλεΫͷ૯࣮ߦ্͕࣌ؒݶΑΓେ͖͘ͳͬͨ ͳΒ͹ɼ࣮ߦΩϡʔͷ͋;Εͨ෦෼Λڞ༗࣮ߦΩϡʔʹ௥͍ग़͢ w ڞ༗Ωϡʔ্͕ݶΛ௒͑ΔͳΒ͹ɼ֤ίΞͷ࣮ߦΩϡʔͷ্ݶ Λ্͛ΔϝοηʔδΛɼ֤ίΞͷ࣮ߦΩϡʔ؂ࢹϓϩηεʹ௨ ஌ w ࣮ߦΩϡʔʹͭͳ͕ΕͨλεΫͷ૯࣮ߦ͕࣌ؒԼݶΑΓখ͘͞ͳͬͨ ͳΒ͹ɼڞ༗࣮ߦΩϡʔ͔ΒλεΫΛಘΔ w ڞ༗Ωϡʔ͕ۭʹͳΔΑ͏ͳΒɼ࣮ߦΩϡʔͷ૯࣮ߦ࣌ؒͷ্ ݶΛԼ͛ΔϝοηʔδΛɼ֤ίΞͷ࣮ߦΩϡʔ؂ࢹϓϩηεʹ ௨஌ 58 ˜4VTVNV:BNB[BLJ
  59. ݚڀ։ൃ͢΂͖ٕज़ w /PEFϓϩάϥϛϯάϞσϧ͕ػೳ͢ΔͨΊʹ͸ɼίʔυͷ࣮ߦ࣌ ؒΛਖ਼֬ʹਪఆ͢Δٕज़ w ೚ҙͷϓϩάϥϜʹରͯ͠͸ɼఀࢭੑ໰୊ɼ͢ͳΘͪ༗ݶ࣌ؒ ಺ʹ׬ྃ͢Δ͔Ͳ͏͔Λ൑ఆ͢ΔΞϧΰϦζϜ͸ଘࡏ͠ͳ͍ͨ Ίɼίʔυͷ࣮ߦ࣌ؒΛٻΊΔ͜ͱ͕Ͱ͖ͳ͍ w Ծઆ&MJYJS;FO4UZMFͰॻ͘͜ͱΛపఈ͢Δͱɼ༗ݶ࣌ؒ಺ʹ

    ׬ྃ͢Δ͜ͱΛอূͰ͖Δɼ͢ͳΘͪఀࢭੑ໰୊ΛճආͰ͖Δ w ͜ͷԾઆΛ਺ཧతʹূ໌͠ɼίʔυͷ࣮ߦ࣌ؒΛਪఆ͢Δٕज़ Λݚڀ։ൃ͢Δ 59 ˜4VTVNV:BNB[BLJ
  60. 84"ʹ࠷దԽ͞Εͨฒྻॲཧܥ ࢁ࡚ਐɹ৿ਖ਼࿨ɹٱߐ༤تɹߴ੉ӳر ʲ֓ཁʳ w छྨͷฒྻੑͱͦΕͧΕʹؔΘΔ࠷దԽΛఏҊ͢Δ w ໋ྩฒྻੑɹɹˠ੩త໋ྩεέδϡʔϦϯά w 4*.%ܕฒྻੑˠ)BTUFHB ϔΠεΨ

     w .*.%ܕฒྻੑˠ4BCPUFOEFS αϘςϯμʔ  w ͜ΕΒʹΑΓฒྻੑ͚ͩͰͳ͘Ϩεϙϯεੑͱ଱ো֐ੑ΋ҡ࣋ɾ޲্Ͱ͖Δ ˢ w పఈతʹฒྻੑɾ෼ࢄੑɾϨεϙϯεੑɾ଱ো֐ੑΛ௥ٻ͢Δॲཧܥ&MJYJSͷ࠾༻ ˢ w ৘ใྔരൃ w ൒ಋମτϨϯυΫϩοΫप೾਺৳ͼ಄ଧͪίΞ਺૿Ճ෼ࢄܕΞʔΩςΫνϟ༏Ґ w Ϩεϙϯεੑͷҡ࣋ɾ޲্ w ଱ো֐ੑͷ௥ٻ w ߴෛՙܭࢉॲཧΞϓϦέʔγϣϯͷ૿Ճ w शಘ༰қʹ͢Δඞཁੑ 60 ˜4VTVNV:BNB[BLJ