GoとRustの変更処理を比較することで両者を深く理解する試みです。
詳しい内容やスライドでは省いたところをブログに書きました https://zenn.dev/nasa/articles/compare_rust_go_concurrency
©2022 Wantedly, Inc.GoͱRust - ฒߦॲཧฤ\ඇެࣜ/ Go Conferenceޙࡇ2022/4/27 nasa (Asan Kondo)
View Slide
©2022 Wantedly, Inc.ࣗݾհ• nasa Ͱ͢• Backend engineer / Wantedly, inc• ਪનج൫ͷӡ༻։ൃ• DSͷੜ࢈ੑര্͛• কདྷͷເnasaͱ͍͏ϋϯυϧωʔϜΛ͗औΔ͜ͱ• GitHub: k-nasa• Twitter: nasa_desu • Zenn: nasa 🎉 🎉 🎉 🎉 🎉
©2022 Wantedly, Inc.͢͜ͱ• goroutineͱͳʹ͔• GoͷฒߦॲཧͷΈ• goroutine(Go)ͱasync/await(Rust)ͷൺֱ• GoͷϥϯλΠϜɺRustͷϥϯλΠϜͷ
©2022 Wantedly, Inc.͞ͳ͍͜ͱ• Ͳ͕ͬͪ༏Ε͍ͯΔͱ͍͏Λ͢ΔͭΓͳ͍• ߏจͷҧ͍ʹ͍ͭͯಛʹ৮Εͳ͍• ϕʔεʹͳ͍ͬͯΔࢥʹ͍ͭͯಛʹ৮Εͳ͍
©2022 Wantedly, Inc.࣍1. ͦΕͧΕͷฒߦϓϩάϥϛϯά2. ͦΕͧΕͷλεΫ3. ϥϯλΠϜ4. εέδϡʔϦϯά
©2021 Wantedly, Inc.ͦΕͧΕͷฒߦϓϩάϥϛϯά
©2022 Wantedly, Inc.• goΩʔϫʔυͰΒ͘Β͘• ϥϯλΠϜ͕͍͍ײ͡ʹޮతʹॲཧͯ͘͠ΕΔͦΕͧΕͷฒߦϓϩάϥϛϯά (Pͷฒߦϓϩάϥϛϯά
©2022 Wantedly, Inc.• RustͰϥϯλΠϜ͕ΈࠐΈͰೖͬͯͳ͍ͷͰϥϯλΠϜϥΠϒϥϦΛ͏ඞཁ͕͋Δ• ຊൃදͰtokioͱ͍͏ϥΠϒϥϦΛ͏ͦΕͧΕͷฒߦϓϩάϥϛϯά 3VTUͷฒߦϓϩάϥϛϯά
©2022 Wantedly, Inc.• ͳΜ͔mainͷલʹมͳͷ͍ͭͯΔ• tokio::spawn??ͦΕͧΕͷฒߦϓϩάϥϛϯά 3VTUͷฒߦϓϩάϥϛϯά
©2022 Wantedly, Inc.mainલͷσΟϨΫςΟϒϥϯλΠϜΛىಈ͢Δ + mainΛasyncؔʹग़དྷΔ͓·͡ͳ͍ͦΕͧΕͷฒߦϓϩάϥϛϯά 3VTUͷฒߦϓϩάϥϛϯά
©2022 Wantedly, Inc.tokio::spawngoΩʔϫʔυͱಉ͘͡λεΫΛىಈ͢ΔؔͦΕͧΕͷฒߦϓϩάϥϛϯά 3VTUͷฒߦϓϩάϥϛϯά
©2022 Wantedly, Inc.• ඇಉظؔΛఆٛ͢Δ͔൱͔• ϥϯλΠϜ͕ඪ४Ͱ͋Δ͔• ޙʹݟΔҧ͍ඪ४͔൱͔ʹΑΔͷͩͱࢥ͍ͬͯΔͦΕͧΕͷฒߦϓϩάϥϛϯά (Pͱ3VTUൺֱ
©2021 Wantedly, Inc.λεΫʹ͍ͭͯͦΕͧΕ͕ੜͨ͠λεΫʹ͍ͭͯݟ͍ͯ͘
©2022 Wantedly, Inc.• ͦΕͧΕ͕ੜͨ͠φχΧΛλεΫͱݺͼ·͢• ͜ΕΒʹ͍ͭͯݟ͍͖ͯ·͠ΐ͏λεΫʹ͍ͭͯ
©2022 Wantedly, Inc.• GoͰىಈͨ͠λεΫΛgroutingλεΫʹ͍ͭͯ• Tokio::spawnͰىಈͨ͠λεΫΛඇಉظλεΫ
©2021 Wantedly, Inc.·ͣHPSPVUJOFʹ͍ͭͯݟ͍͖ͯ·͠ΐ͏
©2022 Wantedly, Inc.HPSPVUJOFͱίϧʔνϯͷநԽ
©2022 Wantedly, Inc.HPSPVUJOFͱ🤔🤔🤔🤔
©2022 Wantedly, Inc.• ίϧʔνϯͷงғؾΛ௫Ή• ؔݺͼग़ͨ͠Β࠷ޙ·Ͱ࣮ߦ• ίϧʔνϯॲཧΛதஅग़དྷΔɺ్ͦͯ͠த͔Β࠶։Ͱ͖Δίϧʔνϯͱ
©2022 Wantedly, Inc.• goroutine్தͰதஅͱ࠶։Λ܁Γฦ͍ͯ͠Δ• ͜ΕΒͷཧGoϥϯλΠϜ͕͍ͬͯΔίϧʔνϯͱ
©2022 Wantedly, Inc.• Ͳ͜Ͱதஅɾ࠶։͢Δͷ͔?HSPVUJOH ࠶։தஅͷ
©2022 Wantedly, Inc.• Β࠶։ɾதஅϙΠϯτ໌͍ࣔͯ͠ͳ͍HSPVUJOH ࠶։தஅͷ
©2022 Wantedly, Inc.• զʑϓϩάϥϚʔ͕໌ࣔͤͣͱϥϯλΠϜ͕ӨͰ͏·͍͜ͱͬͯ͘Ε͍ͯΔ• ͏Ζ֮͑Ͱ͕͢Լهͷ࣌ʹΓସΘΔͣ• time.Sleep• IO• Memory allocationHSPVUJOH ࠶։தஅͷ
©2022 Wantedly, Inc.HSPVUJOH ࠶։தஅͷ
©2021 Wantedly, Inc.ඇಉظλεΫʹ͍ͭͯݟ͍͖ͯ·͠ΐ͏
©2022 Wantedly, Inc.• Ͳ͜Ͱதஅɾ࠶։͢Δͷ͔?• awaitͱॻ͍ͨͱ͖• ϓϩάϥϚʔ͕໌ه͢ΔඇಉظλεΫ ࠶։தஅͷ
©2022 Wantedly, Inc.• ϒϩοΩϯάॲཧΛࠞೖͤ͞ΔͱଞͷλεΫʹΓସΘΒͣ1ͭͷλεΫ͕ઐ༗ͯ͠͠·͏• ৻ॏ͕͞ඞཁඇಉظλεΫ ࠶։தஅͷ
©2022 Wantedly, Inc.• ੑೳͷϥϯλΠϜ͕͔࣋ͭϓϩάϥϚʔ͕͔࣋ͭ• GoϓϩάϥϚʔϑϨϯυϦʔײ͕͋Δ• ҰํͰΦʔόʔϔου͕͋Δ(Β͍͠)λεΫʹ͍ͭͯ
©2021 Wantedly, Inc.ϓϦΤϯϓςΟϒɾϊϯϓϦΤϯϓςΟϒ
©2022 Wantedly, Inc.w ·Ͱ(PͰ·ͰແݶϧʔϓͳͲ͕͋ͬͨ߹ʹଞͷHPSPVUJOF͕࣮ߦ͞Εͳ͍ͱ͍͏͕͋ͬͨΑ͏ϓϦΤϯϓςΟϒɾϊϯϓϦΤϯϓςΟϒ
©2022 Wantedly, Inc.w ͔ΒλεΫ͕͠Β࣮͘ߦ͞Ε͍ͯΔ͜ͱΛݕͯ͠ϥϯλΠϜʹΔίʔυʯΛૠೖ͢Δ༻ʹͳͬͨΑ͏Ͱ͢ɻศརʂϓϦΤϯϓςΟϒɾϊϯϓϦΤϯϓςΟϒ
©2022 Wantedly, Inc.w (PͷΑ͏ʹϥϯλΠϜ͕λεΫͷ࣮ߦΛதஅͯ͠ଞͷλεΫͷ࣮ߦʹҠΔΑ͏ͳϚϧνλεΫํ๏ΛϓϦΤϯϓςΟϒϚϧνλεΫw 3VTU ͱ͍͏͔BTZODBXBJUʁͷΑ͏ʹλεΫ͕ࣗൃతʹ࣮ߦݖΛ໌͚͢Α͏ͳϚϧνλεΫํ๏ΛϊϯϓϦΤϯϓςΟϒϚϧνλεΫ·ͨɺڠௐతϚϧνλεΫϓϦΤϯϓςΟϒɾϊϯϓϦΤϯϓςΟϒ
©2022 Wantedly, Inc.w (Pw ϓϦΤϯϓςΟϒϚϧνλεΫw ࠶։ɾఀࢭϙΠϯτϥϯλΠϜ͕͍͍ײ͡ʹؤுΔw 3VTUw ϊϯϓϦΤϯϓςΟϒϚϧνλεΫw ࠶։ఀࢭϓϩάϥϚʔ͕࣮ϓϦΤϯϓςΟϒɾϊϯϓϦΤϯϓςΟϒ
©2021 Wantedly, Inc.λεΫεέδϡʔϦϯά
©2022 Wantedly, Inc.λεΫεέδϡʔϦϯά͋·Γҧ͍͕ͳ͍ͷͰ(PϥϯλΠϜΛݟ͍ͯ͘͜͜Ͱઆ໌͍ͯ͠ΔϥϯλΠϜͷಈ࡞ݹ͍ͷ͔͠Ε·ͤΜ
©2022 Wantedly, Inc.λεΫεέδϡʔϦϯάw λεΫʹ.ݸͷ04εϨου্ʹߏங͞Εͨ/ݸͷάϦʔϯεϨου্Ͱ࣮ߦ͞Ε·͢ɻw ./ϞσϧͱݺΕΔͷͰ͢./Ϟσϧ
©2022 Wantedly, Inc.λεΫεέδϡʔϦϯά ϫʔΫεςΟʔϦϯάεέδϡʔϦϯάw HMPCBMUBTLRVFVFͦͷ໊ͷ௨ΓάϩʔόϧͳλεΫΩϡʔw MPDBMUBTLRVFVFPTεϨουʹ͖ͭͭͷϩʔΧϧλεΫΩϡʔ͕͋Δw QSPDFTTPS$16ΛநԽͨ͠ͷɻλεΫͷ࣮ߦ͍͕ͭ͜ߦ͍ͬͯΔw 04UISFBE
©2022 Wantedly, Inc.λεΫεέδϡʔϦϯά ϫʔΫεςΟʔϦϯάεέδϡʔϦϯάw λεΫΛফԽͨ͠ͱ͖ͷಈ͖
©2022 Wantedly, Inc.λεΫεέδϡʔϦϯά ϫʔΫεςΟʔϦϯάw λεΫͷ୳ࡧ͕࢝ΊΔw ୳ࡧॱংϥϯλΠϜʹΑͬͯҧ͏͔
©2022 Wantedly, Inc.λεΫεέδϡʔϦϯά ଞͷQSPDFTTPS͔Β౪Ήw ଞͷQSPDFTTPSͷϩʔΧϧΩϡʔ͔ΒλεΫΛ౪Ή͜ͱ͔Β͜ͷΞϧΰϦζϜϫʔΫεςΟʔϦϯάͱݺΕͯΔw ͜ΕʹΑΓɺͭͷQSPDFTTPSʹλεΫ͕ूதͨ͠ͱͯ͠ଞͷQSPDFTTPSʹॲཧΛࢄ͢Δ͜ͱ͕ग़དྷɺޮతʹλεΫΛॲཧ͍ͯ͘͜͠ͱ͕Ͱ͖Δ
©2021 Wantedly, Inc.νϟΠϧυεςΟʔϦϯάɾܧଓεςΟʔϦϯά
©2022 Wantedly, Inc.νϟΠϧυεςΟʔϦϯάɾܧଓεςΟʔϦϯάw ͜ͷΑ͏ͳΠϝʔδͷํ͕ଟ͍ͱ༧͍ͯ͠·͢
©2021 Wantedly, Inc.Goͩͱ͜Εؒҧ͍Ͱ͢Page Title Page Subtitle
©2022 Wantedly, Inc.νϟΠϧυεςΟʔϦϯάɾܧଓεςΟʔϦϯάw QSPDFTTPSͰAHPTBZ lIFMMPzA͕ಈ࡞͢Δw λεΫੜޙͷॲཧ͕λεΫͱͯ͠ΤϯΩϡʔ͞ΕΔ
©2022 Wantedly, Inc.νϟΠϧυεςΟʔϦϯάɾܧଓεςΟʔϦϯάw ܧଓεςΟʔϦϯάੑೳ্ͷར͕͋ΔͨΊ(PͰ࠾༻͞Ε͍ͯ·͢w ܧଓεςΟʔϦϯάίϯύΠϥͷαϙʔτ͕ඞཁʹͳΔΒ͘͠ɺ3VTUͰ࠾༻Ͱ͖͍ͯͳ͍ͷ͕ݱঢ়Ͱ͢w 3VTUͰεέδϡʔϦϯάͷͱ͖ʹઆ໌ͨ͠λεΫ͕ΩϡʔΛग़ೖΓ͢ΔνϟΠϧυεςΟʔϦϯάͱ͍͏ํࣜΛऔ͍ͬͯ·͢ɻ
©2021 Wantedly, Inc.·ͱΊ
©2022 Wantedly, Inc.·ͱΊw (Pʹඪ४ͷϥϯλΠϜ͕͋ΔΑɺ3VTUͰϥϯλΠϜϥΠϒϥϦΛ͏ඞཁ͕͋ΔΑw (PϥϯλΠϜ͕தஅ࠶։Λཧ͢ΔΑɺ3VTUͰϓϩάϥϚʔ͕ཧ͢ΔΑw ϒϩοΩϯάॲཧΛࠞೖͪ͠Ό͏ͱةݥͩͶw (PϓϦΤϯϓςΟϒͩΑ 3VTUͩͱϊϯϓϦΤϯϓςΟϒͩΑw ͲͬͪλεΫͷεέδϡʔϦϯάϫʔΫεςΟʔϦϯάͱ͍͏ઓུͩΑw (PλεΫຊମͰͳ͘ܧଓΛ౪Έ߹͍ͬͯΔΑ ܧଓϫʔΫεςΟʔϦϯάw 3VTUλεΫຊମΛ౪Έ߹͍ͬͯΔΑ νϟΠϧυϫʔΫεςΟʔϦϯά
©2022 Wantedly, Inc.Wantedly Engineering Handbook ཧຊΛϓϨθϯτʂࣾͷΤϯδχΞ͕Δ͖ใͷ͏ͪ֎෦ʹެ։Ͱ͖ΔใΛମܥతʹ·ͱΊͨ)BOECPPLͰ͢IUUQTEPDTXBOUFEMZEFWٕज़తͳΛ͍ͨ͠ํΦϯϥΠϯ໘ஊେܴʂ