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

スケジューラから学ぶGoランタイム 〜code reading of runtime pkg〜

H.Saki
November 13, 2021

スケジューラから学ぶGoランタイム 〜code reading of runtime pkg〜

21/11/13 Go Conference 2021 Autumnにて発表

https://gocon.jp/2021autumn/
https://gocon.connpass.com/event/213865/

H.Saki

November 13, 2021
Tweet

More Decks by H.Saki

Other Decks in Technology

Transcript

  1. 自己紹介 About Me l ͖͞ )4BLJ ◦ ౦େ޻ֶ෦ ˠ ࠓ೥͔Β৽ࣾձਓ

    ◦ 5XJUUFS!TBLJFOHJOFFS l աڈͷ੒Ռ෺ FUDʜ
  2. 自己紹介 About Me l ͖͞ )4BLJ ◦ ౦େ޻ֶ෦ ˠ ࠓ೥͔Β৽ࣾձਓ

    ◦ 5XJUUFS!TBLJFOHJOFFS l աڈͷ੒Ռ෺ FUDʜ ͜ΕΛॻ͘ͷʹΊͬͪΌۤ࿑ͨ͠ ಛʹ৘ใιʔεΛ͋ͨΔͨΊʹ SVOUJNFύοέʔδΛίʔυϦʔςΟϯά͢Δͱ͜Ζ ࣥචʹ͔͔ͬͨ࣌ؒϲ݄
  3. アジェンダ  ϥϯλΠϜͱ͸ ᶃ ϥϯλΠϜͱ͸Կ͔ʁ ᶄ (Pͷεέδϡʔϥʔͷ໾ׂ  (PϥϯλΠϜͷίϯϙʔωϯτ 

    εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸
  4. 「ランタイム」の具体例 1. ランタイムとは (PͰ͸։ൃऀ͕ϏδωεϩδοΫͷهड़ʹ஫ྗͰ͖ΔΑ͏ʹɺ͋Δఔ౓ͷ͜ͱ ͸ʮϥϯλΠϜʯଆͰ࣮ߦͯ͘͠Ε·͢ɻ ϝϞϦͷׂΓ౰ͯ intܕͭΛ֨ೲ͢ΔϝϞϦ͸ ࣗಈͰ֬อ͞ΕΔ ஫$ݴޠͩͱmallocͳͲͰ ໌ࣔతʹ֬อ͢Δඞཁ͋Γ

    (PϥϯλΠϜͷ໾ׂ ΨϕʔδίϨΫτ εέδϡʔϦϯά ࢖͍ऴΘͬͨม਺arrayͷ ϝϞϦղ์͸ࣗಈͰߦΘΕΔ ஫$ݴޠͩͱfreeͰ ໌ࣔతʹղ์͢Δඞཁ͋Γ ฒߦͳؔ਺Λ࣮ࡍʹͲͷλΠ ϛϯάͰಈ͔͢ͷ͔͸ࣗಈͰ ௐ੔͞ΕΔ
  5. 「ランタイム」の具体例 1. ランタイムとは (PͰ͸։ൃऀ͕ϏδωεϩδοΫͷهड़ʹ஫ྗͰ͖ΔΑ͏ʹɺ͋Δఔ౓ͷ͜ͱ ͸ʮϥϯλΠϜʯଆͰ࣮ߦͯ͘͠Ε·͢ɻ ϝϞϦͷׂΓ౰ͯ intܕͭΛ֨ೲ͢ΔϝϞϦ͸ ࣗಈͰ֬อ͞ΕΔ ஫$ݴޠͩͱmallocͳͲͰ ໌ࣔతʹ֬อ͢Δඞཁ͋Γ

    (PϥϯλΠϜͷ໾ׂ ΨϕʔδίϨΫτ εέδϡʔϦϯά ࢖͍ऴΘͬͨม਺arrayͷ ϝϞϦղ์͸ࣗಈͰߦΘΕΔ ஫$ݴޠͩͱfreeͰ ໌ࣔతʹղ์͢Δඞཁ͋Γ ฒߦͳؔ਺Λ࣮ࡍʹͲͷλΠ ϛϯάͰಈ͔͢ͷ͔͸ࣗಈͰ ௐ੔͞ΕΔ
  6. アジェンダ  ϥϯλΠϜͱ͸ ᶃ ϥϯλΠϜͱ͸Կ͔ʁ ᶄ (Pͷεέδϡʔϥʔͷ໾ׂ  (Pεέδϡʔϥͷߏ੒ཁૉ 

    εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸
  7. Goのスケジューラーの役割(4/5) 1. ランタイムとは ͦ͜Ͱ(Pͷεέδϡʔϥʔ͸ɺΰʔϧʔνϯ04εϨουؒͷׂΓ౰ͯΛௐ੔ ͢Δ໾ׂΛ୲͍·͢ɻ ฒྻʹ࣮ߦ͢Δΰʔϧʔνϯ਺ 04εϨου ͷ৔߹ go MyFunc1()

    go MyFunc2() ϓϩάϥϜத 04εϨου UJNF idle myFunc2 go MyFunc3() idle myFunc3 go MyFunc4() myFunc1 myFunc4 εέδϡʔϥ͕myFunc1Λதஅͤ͞ɺ myFunc4ʹϦιʔεΛ౉͢
  8. アジェンダ  (PϥϯλΠϜͷίϯϙʔωϯτ ᶃ ( . 1ͱ͸ʁ ᶄ ௥Ճͷߏ੒ཁૉ 

    ϥϯλΠϜͱ͸  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸
  9. Goランタイムのコンポーネント 2. Goランタイムのコンポーネント SVOUJNFύοέʔδ಺ʹ)"$,*/(NEͱ͍͏ϑΝΠϧ͕͋Γɺͦ͜ʹ͸ҎԼͷ Α͏ʹهड़͞Ε͍ͯ·͢ɻ 5IFTDIFEVMFSNBOBHFTUISFFUZQFTPGSFTPVSDFTUIBUQFSWBEFUIFSVOUJNF (T .T BOE1T ༁

    εέδϡʔϥͷ໾ׂ͸(PϥϯλΠϜΛࢧ͑ΔҎԼͭͷϦιʔεΛ؅ཧ͢Δ͜ͱͰ͋Δɻ Ұͭ͸( ΋͏Ұͭ͸. ͦͯ͠࠷ޙʹ1Ͱ͋Δɻ  SVOUJNF)"$,*/(NE ϥϯλΠϜΛࢧ͑Δʮ( . 1ʯͱ͸Կ͔ʁ
  10. Goランタイムのコンポーネント 2. Goランタイムのコンポーネント (PεέδϡʔϥͰ͸ɺҎԼͷ( . 1Λ͏·͘૊Έ߹ΘͤΔ͜ͱͰ࢓ࣄΛߦͳͬ ͍ͯ·͢ɻ ໊শ (PSPVUJOF (

    . 1 .BDIJOF 1SPDFTTPS ΰʔϧʔνϯͦͷ΋ͷɻ goจʹΑͬͯىಈ͞Εɺؔ਺ͷ࣮ߦ͕ऴΘͬͨΒऴྃ͞ΕΔɻ 04εϨουɻ (Pͷίʔυ΍ϥϯλΠϜίʔυΛ࣮ߦͨ͠ΓɺγεςϜίʔϧΛݺ ΜͩΓΞΠυϧʹͳͬͨΓ͢Δɻ ΰʔϧʔνϯΛ࣮ߦ͢Δͷʹඞཁͳ1$Ϧιʔεɻ 04εέδϡʔϥʹͱͬͯͷ$16ͷΑ͏ͳ΋ͷɻ ུশ ֓ཁ
  11. コードを実行するために必要なもの 2. Goランタイムのコンポーネント ϓϩάϥϜͷίʔυͱ͍͏όΠτྻ͚ͩͰ͸ɺͦΕΛಈ͔͢͜ͱ͸Ͱ͖ͳ͍ɻಈ ͔͢ʹ͸04εϨουͱ$16ίΞ͕ඞཁͰ͋Δɻ ϓϩάϥϜίʔυͷΈ ϓϩάϥϜίʔυͱ ͦΕ͕ͷͬͨϝϞϦۭ͚ؒͩ ˣ ࣮ߦ͢Δ͜ͱ͕Ͱ͖ͳ͍

    Πϝʔδ ίʔυ εϨουͷΈ ίʔυ εϨου $16 ϓϩάϥϜϝϞϦͱ 04εϨου͚ͩ ˣ ࣮ߦ͢Δ͜ͱ͕Ͱ͖ͳ͍ ϓϩάϥϜϝϞϦͱ 04εϨουͱ Ծ૝ $16 ˣ ࣮ߦͰ͖Δ γʔϯʜ γʔϯʜ DPEF 04 εϨου $16 ΢Οʔϯʂ DPEF 04 εϨου DPEF
  12. Goランタイム上でのモデリング 2. Goランタイムのコンポーネント (PϥϯλΠϜͷ( . 1͸ɺઌ΄Ͳͷ࿩ΛϞσϦϯάͨ͠΋ͷͰ͢ɻجຊతʹɺ ( . 1͕ͭଗΘͳ͍ͱϓϩάϥϜΛ࣮ߦ͢Δ͜ͱ͕Ͱ͖·ͤΜɻ (ͷΈ

    ϓϩάϥϜίʔυͱ ͦΕ͕ͷͬͨϝϞϦۭ͚ؒͩ ˣ ࣮ߦ͢Δ͜ͱ͕Ͱ͖ͳ͍ Πϝʔδ (ͱ.ͷΈ (ͱ.ͱ1 ϓϩάϥϜϝϞϦͱ 04εϨου͚ͩ ˣ ࣮ߦ͢Δ͜ͱ͕Ͱ͖ͳ͍ ϓϩάϥϜϝϞϦͱ 04εϨουͱ Ծ૝ $16 ˣ ࣮ߦͰ͖Δ ( γʔϯʜ . ( γʔϯʜ ϝϞϦ ϝϞϦ εϨου 1 . ( ϝϞϦ εϨου $16 ΢Οʔϯʂ
  13. Goランタイムのコンポーネント(再掲) 2. Goランタイムのコンポーネント (PεέδϡʔϥͰ͸ɺҎԼͷ( . 1Λ͏·͘૊Έ߹ΘͤΔ͜ͱͰ࢓ࣄΛߦͳͬ ͍ͯ·͢ɻ ໊শ (PSPVUJOF (

    . 1 .BDIJOF 1SPDFTTPS ΰʔϧʔνϯͦͷ΋ͷɻ goจʹΑͬͯىಈ͞Εɺؔ਺ͷ࣮ߦ͕ऴΘͬͨΒऴྃ͞ΕΔɻ 04εϨουɻ (Pͷίʔυ΍ϥϯλΠϜίʔυΛ࣮ߦͨ͠ΓɺγεςϜίʔϧΛݺ ΜͩΓΞΠυϧʹͳͬͨΓ͢Δɻ ΰʔϧʔνϯΛ࣮ߦ͢Δͷʹඞཁͳ1$Ϧιʔεɻ 04εέδϡʔϥʹͱͬͯͷ$16ͷΑ͏ͳ΋ͷɻ ུশ ֓ཁ
  14. Goランタイムのコンポーネント(再掲) 2. Goランタイムのコンポーネント (PεέδϡʔϥͰ͸ɺҎԼͷ( . 1Λ͏·͘૊Έ߹ΘͤΔ͜ͱͰ࢓ࣄΛߦͳͬ ͍ͯ·͢ɻ ໊শ (PSPVUJOF (

    . 1 .BDIJOF 1SPDFTTPS ΰʔϧʔνϯͦͷ΋ͷɻ goจʹΑͬͯىಈ͞Εɺؔ਺ͷ࣮ߦ͕ऴΘͬͨΒऴྃ͞ΕΔɻ 04εϨουɻ (Pͷίʔυ΍ϥϯλΠϜίʔυΛ࣮ߦͨ͠ΓɺγεςϜίʔϧΛݺ ΜͩΓΞΠυϧʹͳͬͨΓ͢Δɻ ΰʔϧʔνϯΛ࣮ߦ͢Δͷʹඞཁͳ1$Ϧιʔεɻ 04εέδϡʔϥʹͱͬͯͷ$16ͷΑ͏ͳ΋ͷɻ ུশ ֓ཁ
  15. Goランタイムのコンポーネント(再掲) 2. Goランタイムのコンポーネント (PεέδϡʔϥͰ͸ɺҎԼͷ( . 1Λ͏·͘૊Έ߹ΘͤΔ͜ͱͰ࢓ࣄΛߦͳͬ ͍ͯ·͢ɻ ໊শ (PSPVUJOF (

    . 1 .BDIJOF 1SPDFTTPS ΰʔϧʔνϯͦͷ΋ͷɻ goจʹΑͬͯىಈ͞Εɺؔ਺ͷ࣮ߦ͕ऴΘͬͨΒऴྃ͞ΕΔɻ 04εϨουɻ (Pͷίʔυ΍ϥϯλΠϜίʔυΛ࣮ߦͨ͠ΓɺγεςϜίʔϧΛݺ ΜͩΓΞΠυϧʹͳͬͨΓ͢Δɻ ΰʔϧʔνϯΛ࣮ߦ͢Δͷʹඞཁͳ1$Ϧιʔεɻ 04εέδϡʔϥʹͱͬͯͷ$16ͷΑ͏ͳ΋ͷɻ ུশ ֓ཁ
  16. アジェンダ  (PϥϯλΠϜͷίϯϙʔωϯτ ᶃ ( . 1ͱ͸ʁ ᶄ ௥Ճͷߏ੒ཁૉ 

    ϥϯλΠϜͱ͸  εέδϡʔϦϯάͱϓϦΤϯϓγϣϯ  ϥϯλΠϜ͕བྷΉॲཧ  ϥϯλΠϜΛֶͿʹ͸
  17. G,M,P以外の追加コンポーネント 2. Goランタイムのコンポーネント ͜ͷ5BMLͰ͸ɺ( . 1ʹՃ͑ͯҎԼͷͭ΋ʮεέδϡʔϥͷઆ໌ʹग़ͯ͘Δ ߏ੒ཁૉʯͱͯ͠औΓ্͍͛ͨͱࢥ͍·͢ɻ ໊শ runtime. sched

    TDIFE TZTNPO ( runtime. sysmon G0 (PϥϯλΠϜશମͷ؀ڥ৘ใΛอ͓࣋ͯͨ͘͠Ίͷάϩʔόϧม਺ɻ γεςϜϞχλɻ ϓϩάϥϜ࣮ߦ͕ԁ׈ʹߦΘΕ͍ͯΔ͔ɺϘτϧωοΫͱͳ͍ͬͯ Δΰʔϧʔνϯ͕ଘࡏ͍ͯ͠ͳ͍͔Λ؂ࢹ͢Δɻ (Pͷεέδϡʔϥͦͷ΋ͷΛಈ͔͢(ɻ ུশ ֓ཁ
  18. 説明を始める前に 3. スケジューリングとプリエンプション l ͔͜͜ΒͷεϥΠυͰ͸ɺҎԼͭΛݟͤͳ͕Βઆ໌Λ͍ͯ͠·͢ ◦ SVOUJNFύοέʔδͷιʔείʔυ ◦ Πϝʔδਤ l

    ʮ৘ใྔ͕ଟ͍͗ͯͬ͢ͺ͍͍ͬͺ͍ʂʯͱͳͬͨΒɺΠϝʔδਤ͚ͩݟͯ ฉ͘ɺͱ͍͏ͷͰ΋ߏ͍·ͤΜ ◦ εϥΠυ಺ʹίʔυͷग़యΛ໌هͯ͋͠ΔͷͰɺޙ͔Βੋඇʮ͋ʔ͋ͷ ਤͷಈ͖Λ࣮૷͍ͯ͠Δͷ͸͔͜͜ʯͱ௥ͬͯ΋Β͑Δͱخ͍͠Ͱ͢
  19. プリエンプション対象の検出(1/3) 3. スケジューリングとプリエンプション 1 . (  ( ( (

    . TZTNPO ( ؂ࢹ ৗ࣌Քಇ͍ͯ͠ΔTZTNPOͷதͰɺSFUBLFؔ਺͕ݺ͹Ε͍ͯ·͢ɻ ग़యSVOUJNFQSPDHP ௕͘ಉ͡΋ͷΛ࣮ߦதͩͬͨΓ γεςϜίʔϧʹೖ͍ͬͯΔ1͕͋Ε͹ ϓϦΤϯϓτ͍ͨ͠ͳʜ
  20. プリエンプション対象の検出(2/3) 3. スケジューリングとプリエンプション 1 . (  ( ( (

    . TZTNPO ( ؂ࢹ ͦͯͦ͠ͷSFUBLFؔ਺ͷதͰɺQSFFNQUPOFؔ਺͕௚Ͱݺ͹Ε͍ͯ·͢ɻ ௕͘ಉ͡΋ͷΛ࣮ߦதͩͬͨΓ γεςϜίʔϧʹೖ͍ͬͯΔ1͕͋Ε͹ ϓϦΤϯϓτ͍ͨ͠ͳʜ ग़యSVOUJNFQSPDHP
  21. GとMの切り離し作業(2/4) 3. スケジューリングとプリエンプション 1 . (  ( ( (

    TDIFE SVOR ( ( ( (ͷεςʔλεΛมߋ (SVOOJOHˠ (SVOOBCMF . TZTNPO ( ग़యSVOUJNFQSPDHP
  22. GとMの切り離し作業(3/4) 3. スケジューリングとプリエンプション 1 . (  ( ( (

    (Λ.͔Β੾Γ཭͢ TDIFE SVOR ( ( ( . TZTNPO ( ग़యSVOUJNFQSPDHP
  23. GとMの切り離し作業(4/4) 3. スケジューリングとプリエンプション 1 . (  ( ( (

    . TZTNPO ( TDIFE SVOR ( ( ( ( .͔Β੾Γ཭ͨ͠(Λ (ͷάϩʔόϧΩϡʔʹೖΕΔ ग़యSVOUJNFQSPDHP
  24. 実行可能なGを探索(1/9) 〜 グローバルキューの確認 3. スケジューリングとプリエンプション ग़యSVOUJNFQSPDHP 1 . ( 

    ( ( TDIFE SVOR ( ( ( ͨ·ʹνΣοΫ ·ͣ͸ɺʮάϩʔόϧΩϡʔʹ࣮ߦՄೳͳ(͕͋Δ͔ʯΛ֬ೝ͠·͢ɻ
  25. 実行可能なGを探索(2/9) 〜 グローバルキューの確認 3. スケジューリングとプリエンプション ग़యSVOUJNFQSPDHP 1 . ( 

    ( ( ·ͣ͸ɺʮάϩʔόϧΩϡʔʹ࣮ߦՄೳͳ(͕͋Δ͔ʯΛ֬ೝ͠·͢ɻ εέδϡʔϥ ࣍͸͜ΕΛ࣮ߦ͠Α͏ TDIFE SVOR ( ( (
  26. システムコールの呼び出し〜 Mの切り離し(3/6) 4. ランタイムが絡む処理 1 . (  ( (

    ( SFFOUFSTZTDBMMؔ਺தͰɺ( .ͷ੾Γ཭͕͠ߦΘΕ·͢ɻ .ͱ1Λ੾Γ཭͢ γεςϜίʔϧͷݺͼग़͠ ग़యSVOUJNFQSPDHP
  27. Goランタイムの要素はGとMとP – by 公式Doc 5. ランタイムを学ぶには SVOUJNFύοέʔδ಺ʹ)"$,*/(NEʹ͸ɺ͔֬ʹʮ( . 1Λίϯτϩʔϧ͢ Δͷ͕(PϥϯλΠϜͷ࢓ࣄͩʯͱॻ͔Ε͍ͯ·͢ɻ

    5IFTDIFEVMFSNBOBHFTUISFFUZQFTPGSFTPVSDFTUIBUQFSWBEFUIFSVOUJNF (T .T BOE1T ༁ εέδϡʔϥͷ໾ׂ͸(PϥϯλΠϜΛࢧ͑ΔҎԼͭͷϦιʔεΛ؅ཧ͢Δ͜ͱͰ͋Δɻ Ұͭ͸( ΋͏Ұͭ͸. ͦͯ͠࠷ޙʹ1Ͱ͋Δɻ  SVOUJNF)"$,*/(NE ϥϯλΠϜΛཧղ͢Δʹ͸ɺ( . 1ͭΛཧղ͍ͯ͠Ε͹े෼ʁ
  28. つまずきポイント1: だけどそのG,M,Pを動かしているのは誰 5. ランタイムを学ぶには ͕ͨΑ͘Α͘ߟ͑ͯΈΔͱɺ͜ΕΒͭͷಈ͖Λ( . 1͚ͩͰ੾ΓऔͬͯΈͯΈ Δͱɺ৭ʑͱٙ໰఺͕ଟ͔ͬͨͷͰ͢ɻ γεςϜίʔϧͷݺͼग़͠ (

    . 1ૢ࡞ͷ۩ମྫ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά 1 . ( ( ( . 1 . ( ( ( 1 . ( ( ( (ͷ੾Γ཭͠͸୭͕΍Δͷʁ ͜ͷ(.ඥ෇͚Λ΍͍ͬͯ ͏ͷ͸Ͳ͜ͷ୭ʁ ( . 1Λಈ͔͢ओମ͕Կͳͷ͔ʹ͍ͭͯԿ΋આ໌͕ͳ͍ʂ
  29. 苦労した上で得た感想 5. ランタイムを学ぶには ( . 1ΛͲ͔͜Βௐୡ͖ͯͯ͠Ͳ͜ʹ֨ೲ͢Δͷ͔ɺͦΕΛ΍Δͷ͸୭ͳͷ͔ɺ ͱ͍͏࿩͸͜ͷཁૉ͚ͩͰ͸ऩ·Βͳ͍ͷͰ͸ʁͱ͍͏ײ૝Λ๊͖·ͨ͠ɻ γεςϜίʔϧͷݺͼग़͠ ( .

    1ૢ࡞ͷ۩ମྫ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά 1 . ( ( ( . 1 . ( ( ( 1 . ( ( ( (ͷ੾Γ཭͠͸୭͕΍Δͷʁ ͜ͷ(.ඥ෇͚Λ΍͍ͬͯ ͏ͷ͸Ͳ͜ͷ୭ʁ TZTNPO͕΍Δ ˠ͜ͷޙ άϩʔόϧΩϡʔʹೖΔ (͕΍Δ άϩʔόϧΩϡʔ౳͔Β ୳ͯ͘͠Δ
  30. 提言1: Goランタイムの部品は6つ 5. ランタイムを学ぶには ϥϯλΠϜͷڍಈΛޠΔ্Ͱ܁Γฦ͠ొ৔͢Δ֓೦͸ɺ( . 1͚ͩʹݶΒͳ͍ɻ ໾ׂ ΰʔϧʔνϯ (

    . 1 04εϨου ࣮ߦϦιʔεɺԾ૝$16 ུশ ໾ׂ ϥϯλΠϜશମͷঢ়ଶ؅ཧ TDIFE TZTNPO ( γεςϜϞχλ εέδϡʔϥͷ࣮ଶ ུশ ( . 1 ( ( ( . TZTNPO ( ( 
  31. 何でこんなことになってるのか 5. ランタイムを学ぶには (P౰࣌ͷεέδϡʔϥEFTJHO%PDͷఏҊ͕ʮ1Λಋೖˠͦ͏͢Δͱγες Ϝίʔϧݺͼग़͠͸͜͏ͳΔʯͱ͍͏࿦ௐͩͬͨͩͬͨͷͰɺͦΕ͕࢒͍ͬͯΔɻ l (P4DBMBCMF(P4DIFEVMFS%FTJHO%PD ◦ ҙ༁ͦͷ ϥϯλΠϜʹ1Λ৽͘͠࡞Ζ͏ͥ

    ◦ ҙ༁ͦͷ 1ಋೖͨ͠Βɺྫ͑͹γεςϜίʔϧݺͼग़͠͸͜͏࣮૷͞ΕΔΑ l .PSTJOHbT#MPHd5IF(PTDIFEVMFS ༗໊ͳ(.1ਤΛࡌͤͨϒϩά ◦ γεςϜίʔϧ࣌ͷਤΛࡌͤΔ ◦ TUFBMXPSL࣌ͷਤΛࡌͤΔ
  32. 提言2: ランタイムの機能と挙動は分けて考えませんか 5. ランタイムを学ぶには ʮ෦඼ͦͷ΋ͷͷಈ͖ʯͳͷ͔ʮ෦඼Λ࢖ͬͨಈ͖ʯͳͷ͔ͱ͍͏໨ઢͰΈΔͱɺ ࣅͨ֓೦͕੔ཧ͞Ε͍͍ͯΜ͡Όͳ͍Ͱ͠ΐ͏͔ɻ γεςϜίʔϧͷݺͼग़͠ ϓϦΤϯϓγϣϯ εέδϡʔϦϯά (Λ࣮ߦ͍ͯ͠ͳ͍.ʹ

    ৽͍͠(ׂ͕Γ౰ͯΒΕΔ γεςϜίʔϧʹ൐͍ .ͷ෇͚ସ͕͑ߦΘΕΔ TZTNPOͰϑϥάΛ͚ͭͯ ͋ΔλΠϛϯάͰ .͔Βͷ੾Γ཭͕͠ߦΘΕΔ 1 . ( ( ( ( . 1 . ( ( ( ( 1 . ( ( ( ( ϥϯλΠϜͷػೳ ϥϯλΠϜͷڍಈ
  33. 1章 ランタイムとは l (PϥϯλΠϜϓϩάϥϜΛಈ͔͢ͷʹඞཁͳࡉʑͱͨ͠ॲཧΛɺਓͷ୅Θ ΓʹҾ͖ड͚ͯ͘ΕΔՕॴ ϝϞϦͷׂΓ౰ͯ intܕͭΛ֨ೲ͢ΔϝϞϦ͸ ࣗಈͰ֬อ͞ΕΔ ஫$ݴޠͩͱmallocͳͲͰ ໌ࣔతʹ֬อ͢Δඞཁ͋Γ

    (PϥϯλΠϜͷ໾ׂ ΨϕʔδίϨΫτ εέδϡʔϦϯά ࢖͍ऴΘͬͨม਺arrayͷ ϝϞϦղ์͸ࣗಈͰߦΘΕΔ ஫$ݴޠͩͱfreeͰ ໌ࣔతʹղ์͢Δඞཁ͋Γ ฒߦͳؔ਺Λ࣮ࡍʹͲͷλΠ ϛϯάͰಈ͔͢ͷ͔͸ࣗಈͰ ௐ੔͞ΕΔ
  34. 2章 Goランタイムのコンポーネント l (PϥϯλΠϜʹ͸ͭͷίϯϙʔωϯτ͕͋Γ·͢ɻ ໾ׂ ΰʔϧʔνϯ ( . 1 04εϨου

    ࣮ߦϦιʔεɺԾ૝$16 ུশ ໾ׂ ϥϯλΠϜશମͷঢ়ଶ؅ཧ TDIFE TZTNPO ( γεςϜϞχλ εέδϡʔϥͷ࣮ଶ ུশ ( . 1 ( ( ( . TZTNPO ( (