Go Conference 2017 @JP の発表資料です。
How to achieve parallel compilation in Go 1.9
View Slide
,PLJ*EF !OJDPOFHPUP'MBUU *ODTPQIPNPSFPGUIF6OJWFSTJUZPG5PLZP
ࠓͷΞδΣϯμɾίϯύΠϧͬͯͲ͏Δͷ͔ͬ͘͟Γ͓͞Β͍ɾ(PͰ͍ͬͨQBSBMMFMJ[FDPNQJMBUJPOͷઆ໌ɾ(Pͬͯ͢Β͍͠
1BSBMMFMJ[F$PNQJMBUJPO (P3FMFBTFE
1BSBMMFMJ[F$PNQJMBUJPOTZOD.BQ͚ͩ͡Όͳ͍Αʂʂ
1BSBMMFMJ[F$PNQJMBUJPO%POPUDPNNVOJDBUFCZTIBSJOHNFNPSZJOTUFBE TIBSFNFNPSZCZDPNNVOJDBUJOH
%POPUDPNNVOJDBUFCZTIBSJOHNFNPSZJOTUFBE TIBSFNFNPSZCZDPNNVOJDBUJOH1BSBMMFMJ[F$PNQJMBUJPO
1BSBMMFMJ[F$PNQJMBUJPOσϑΥͰฒྻίϯύΠϧ(0$0/$633&/5$0.1*-"5*0/ɹ·ͨHDqBHTDͰແޮʹͰ͖ΔHDqBHTDHPSPVUJOFੜ͞Εͣฒߦੑ͕ͳ͍
$PODVSSFODZ.PEFMDNEDPNQJMFJOUFSOBMHD DNEDPNQJMFJOUFSOBMTTBDNEDPNQJMFJOUFSOBMTZOUBY͋ͨΓΛಡΉ
1BSBMMFMJ[F$PNQJMBUJPO͓͞Β͍จࣈྻͱͯ͠ͷϓϩάϥϜYZ୯ޠྻͱͯ͠ͷϓϩάϥϜ*% lYz&2'MPBU 1-64*% lZz5*.&4*OU நߏจࣈ۟ղੳߏจղੳ
1BSBMMFMJ[F$PNQJMBUJPO͓͞Β͍நߏจநߏจܕͳͲͷՃใԾ໋ྩྻػցޠίʔυҙຯղੳதؒίʔυੜɾ࠷దԽػցޠίʔυੜUZYU'3Z'3'3'3'3Y'3
ॳظԽDNEDPNQJMFJOUFSOBMTZOUBYࣈ۟ղੳͱߏจղੳDNEDPNQJMFJOUFSOBMHD"45ͷมܕνΣοΫɺΤεέʔϓղੳɺΠϯϥΠϯల։ɺΫϩʔδϟʔॲཧɺࣜධՁͷॱং͚ʢPSEFSHPʣɺ࠷దԽʢXBMLHPʣDNEDPNQJMFJOUFSOBMTTB44"ܗࣜͷม44"ܗࣜͷ࠷దԽ44"ܗ͔ࣜΒΞηϯϒϥͷมΞηϯϒϥ͔ΒϚγϯίʔυͷมϚγϯίʔυɺ%8"3'γϯϘϧɺܕͱϦϑϨΫγϣϯͷใɺΤΫεϙʔτσʔλͳͲͷग़ྗ1BSBMMFMJ[F$PNQJMBUJPO$PNQJMFͷखॱ
DNEDPNQJMFJOUFSOBMTZOUBY"45ͷࣈ۟ղੳͱߏจղੳ1BSBMMFMJ[F$PNQJMBUJPO$PNQJMFͷखॱˠطʹHPͰฒྻԽࡁΈ
DNEDPNQJMFJOUFSOBMHD"45ͷม1BSBMMFMJ[F$PNQJMBUJPO$PNQJMFͷखॱˠআ༧ఆ
ࣜධՁͷॱং͚ʢPSEFSHPʣɺ࠷దԽʢXBMLHPʣ1BSBMMFMJ[F$PNQJMBUJPO$PNQJMFͷखॱˠDPODVSSFODZTBGFʹ࣮ߦ͢Δ͜ͱ͕͘͠ɺͦ͜·Ͱ͘ͳ͍ͷͰύε
DNEDPNQJMFJOUFSOBMTTB44"ܗࣜͷม44"ܗࣜͷ࠷దԽ1BSBMMFMJ[F$PNQJMBUJPO$PNQJMFͷखॱˠϘτϧωοΫ
1BSBMMFMJ[F$PNQJMBUJPO$PNQJMFͷखॱϑΣʔζ͕શͯͷؔʹର͔ͯྃͯ͠͠Β͜ΕΒΛಉ࣌ʹ࣮ߦ͢ΔɻDNEDPNQJMFJOUFSOBMTTB44"ܗࣜͷม44"ܗࣜͷ࠷దԽ44"ܗ͔ࣜΒΞηϯϒϥͷมΞηϯϒϥ͔ΒϚγϯίʔυͷม
1BSBMMFMJ[F$PNQJMBUJPO$PNQJMFͷखॱϚγϯίʔυɺ%8"3'γϯϘϧɺܕͱϦϑϨΫγϣϯͷใɺΤΫεϙʔτσʔλͳͲͷग़ྗ͜͜ͰϝιουϥούʔͳͲͷ৽͍͕ؔࣗ͠ಈੜ͞ΕɺdͷॲཧʹਐΉɻ࠷ॳ͜ͷࣗಈੜͷؔʹؔͯ͠ฒྻίϯύΠϧ͞Ε͍ͯͳ͔͕ͬͨޙ $-ʹ࣮͞Εͨɻ
ɾฒྻίϯύΠϧΛ҆શʹߦ͏ͨΊͷNVUFYͷՃ ɾݱঢ়ͷίϯύΠϥͷάϩʔόϧมΛඇάϩʔόϧʹมߋ͢Δɾdͷ࡞ۀΛฒྻԽɾෳࡶͳؔΛઌʹίϯύΠϧ͢ΔΑ͏ʹ͢Δɾࣗಈੜ͞ΕͨؔฒྻίϯύΠϧ ύϑΥʔϚϯεˋ্ɾͦͷଞࡉ͔͍࠷దԽमਖ਼ ZZFSSPSΛ͍ͬͯΔ෦Λ'BUBMGʹมߋɾ$ͱ1ͷΛมԽͤͨ͞ࡍͷੳ1BSBMMFMJ[F$PNQJMBUJPOͬͨ͜ͱ
ɾฒྻίϯύΠϧΛ҆શʹߦ͏ͨΊͷNVUFYͷՃ ɾݱঢ়ͷίϯύΠϥͷάϩʔόϧมΛඇάϩʔόϧʹมߋ͢Δɾdͷ࡞ۀΛฒྻԽɾࣗಈੜ͞ΕͨؔฒྻίϯύΠϧ ύϑΥʔϚϯεˋ্ɾͦͷଞࡉ͔͍࠷దԽमਖ਼ ZZFSSPSΛ͍ͬͯΔ෦Λ'BUBMGʹมߋɾ$ͱ1ͷΛมԽͤͨ͞ࡍͷੳ1BSBMMFMJ[F$PNQJMBUJPOͬͨ͜ͱ
1BSBMMFMJ[F$PNQJMBUJPONVUFYͷՃHDGVODTZNTNV HD"45͔Β44"ͷม࣌ɺύοέʔδݕࡧ࣌ʹ༻͞ΕΔ
1BSBMMFMJ[F$PNQJMBUJPOHDMBSHF4UBDL'SBNFT.Vɻ44"ίϯύΠϧޙʹؔͷελοΫϑϨʔϜ͕ڊେͰ͋Δ͜ͱΛൃݟͨ͠ࡍʹ༻͍ΒΕ·͢ɻNVUFYͷՃ
1BSBMMFMJ[F$PNQJMBUJPOPCK-JOLIBTINVDUYUIBTIUZQFT4ZNT ίϯύΠϥγϯϘϧ͔ΒPCK-4ZNT ϦϯΧγϯϘϧͷϚοϐϯάΛ֨ೲ͍ͯͯ͠ɺ͔ͳΓසൟʹΞΫηε͞ΕΔɻNVUFYͷՃ
1BSBMMFMJ[F$PNQJMBUJPOHDTJHOBUTFUNVTJHOBUTFUϚοϓ%8"3'ੜ࣌ʹΘΕͯΔ͜ͱ͔ͬͨΜͰ͕ͪ͢ΐͬͱৄ͍͠༻ঢ়گΘ͔Βͳ͔ͬͨͷͰޙͰͬͱௐͯه͠·͢ɻNVUFYͷՃ
1BSBMMFMJ[F$PNQJMBUJPOHDUZQFQLHNVόοΫΤϯυͷίϯύΠϧ࣌%8"3'ੜ࣌ʹUZQFTύοέʔδͷγϯϘϧͷݕࡧΑ͘ߦΘΕΔɻNVUFYͷՃ
1BSBMMFMJ[F$PNQJMBUJPOUZQFTJOUFSOFE4USJOHTNVHD"45͔Β44"ͷม44"ૢ࡞ʹ͓͍ͯɺBMMPDBUJPOΛݮΒͨ͢Ίʹ໊લΛࢦఆͨ͠৽͍͠BVUPUNQT͕ಋೖ͞Ε͍ͯͯɺUZQFTJOUFSOFE4USJOHTΛอޢ͢Δඞཁ͕͋ΔɻNVUFYͷՃ
$PODVSSFODZ.PEFM%POPUDPNNVOJDBUFCZTIBSJOHNFNPSZJOTUFBE TIBSFNFNPSZCZDPNNVOJDBUJOH
$PODVSSFODZ.PEFM͜ͷ$-ޙʹHDqBHTͷQ Dʹͳ͍ͬͯΔ 1ϓϩηε$ฒߦॲཧD͕૿Ճ͢Δͱ$16ίετ૿Ճ͢ΔͨΊD͕εΠʔτεϙοτ
$PODVSSFODZ.PEFMʢʣΑΓଟ͘ͷؔΛಉ࣌ʹίϯύΠϧ͢Δʢʣ࠷͍ؔ ͍ؔͷίϯύΠϧ࣌ؒͷվળʢʣίϯύΠϥͷΓͷγϦΞϧͳ෦ΛߴԽ͢Δʢʣେ͖ͳࣗಈੜؔ JOJUΛখ͞ͳͷʹࣗಈతʹׂ͢ΔύϑΥʔϚϯεվળ
'MBUUͰ(PΛॻؒ͘Λืू͍ͯ͠·͢qBUUUW
,PLJ*EF !OJDPOFHPUP'MBUU*ODTPQIPNPSFPGUIF6OJWFSTJUZPG5PLZP