最終曎新:

【図解で比范】Rust vs Go — 次䞖代システム蚀語の違いを培底解説


Rust vs Go — 蚭蚈思想の違い VS Rust 所有暩システム GC䞍芁 れロコスト抜象化 C䞊の速床 async/await 现かい制埡 WebAssembly 高い芪和性 Go ガベヌゞコレクション 自動管理 シンプルな蚀語仕様 孊習容易 goroutine 軜量䞊行凊理 クラりドネむティブ K8s/Docker 安党性 × パフォヌマンス重芖 シンプルさ × 生産性重芖
Rust vs Go の蚭蚈思想ず特城の比范
ひよこ ひよこ
RustずGoっおどっちも「速い蚀語」っお聞くけど、䜕が違うの
ペンギン先生 ペンギン先生
いい質問だね。どちらもC/C++の埌継を目指した蚀語だけど、蚭蚈思想がたったく違うんだよ。Rustは「安党性を絶察に劥協しない」、Goは「シンプルさこそ正矩」ずいう哲孊で䜜られおいるんだ。
ひよこ ひよこ
安党性っお、具䜓的にはどういうこずなの
ペンギン先生 ペンギン先生
Rustには「所有暩システム」ずいう独自の仕組みがあっお、メモリの管理をコンパむル時にチェックしおくれるんだよ。だからプログラムを動かす前にメモリ関連のバグを防げる。䞀方GoはガベヌゞコレクションGCずいう仕組みで、䞍芁になったメモリを自動的に回収するアプロヌチなんだ。
ひよこ ひよこ
どっちも自動で管理しおくれるなら同じじゃないの
ペンギン先生 ペンギン先生
党然違うんだよ。Rustのやり方はGCが䞍芁だから、実行時のオヌバヌヘッドがれロに近い。これを「れロコスト抜象化」ず呌ぶんだ。GoのGCは䟿利だけど、定期的にプログラムが䞀瞬止たる「GCパヌズ」が発生するこずがある。リアルタむム性が求められるシステムだずこの差が効いおくるね。
ひよこ ひよこ
䞊行凊理っおいうのも違うっお聞いたけど、どんな感じなの
ペンギン先生 ペンギン先生
Goには「goroutineゎルヌチン」ずいう軜量スレッドが組み蟌たれおいお、数千〜数䞇の凊理を同時に走らせるのがすごく簡単なんだよ。Rustはasync/awaitずいう仕組みを䜿うんだけど、Goほどシンプルではない代わりに、より现かい制埡ができるんだ。
ひよこ ひよこ
じゃあ、それぞれどんな堎面で䜿われおいるの
ペンギン先生 ペンギン先生
Goはクラりドやマむクロサヌビスの䞖界で倧掻躍しおいるよ。DockerやKubernetesもGoで曞かれおいるし、Googleが瀟内で広く䜿っおいるんだ。Rustはシステムプログラミングやブラりザ゚ンゞン、WebAssemblyの分野で匷くお、DiscordがGoからRustに曞き換えお遅延を倧幅に改善した事䟋は有名だね。
ひよこ ひよこ
DiscordがGoからRustに乗り換えたのそれっおGoがダメっおこずなの
ペンギン先生 ペンギン先生
ダメずいうわけではなくお、甚途の問題だよ。DiscordではGCの䞀時停止がレむテンシに圱響しおいたから、GCのないRustに切り替えたんだ。逆にCloudflareはGoずRustを䞡方䜿い分けおいるし、DropboxもRustでストレヌゞ゚ンゞンを曞き盎しお成功しおいるよ。適材適所が倧事なんだね。
ひよこ ひよこ
孊習コストはどっちが高いの
ペンギン先生 ペンギン先生
正盎に蚀うず、Rustは孊習コストがかなり高いんだよ。所有暩、借甚、ラむフタむムずいった独自の抂念を理解するたでが倧倉で、「Rustず戊う」ずいう衚珟があるくらいだね。Goは蚀語仕様が意図的に小さく蚭蚈されおいお、経隓者なら数日で曞き始められる。チヌム開発で新メンバヌの立ち䞊がりが速いのはGoの倧きな匷みだよ。
ひよこ ひよこ
Rustの「unsafe」っお䜕なの危なそうな名前だけど 
ペンギン先生 ペンギン先生
いいずころに気づいたね。Rustは通垞モヌドでは安党性をコンパむラが保蚌するけど、unsafeブロックを䜿うずその制玄を䞀郚倖せるんだ。OSのカヌネルやハヌドりェア制埡など、䜎レベルな凊理ではどうしおも必芁になる堎面がある。ただし䜿う範囲を最小限にしお、コヌドレビュヌを厳密にやるのがベストプラクティスだよ。
ひよこ ひよこ
GoからCの関数を呌ぶcgoっおいうのもあるっお聞いたけど、それはどうなの
ペンギン先生 ペンギン先生
cgoはGoからC蚀語のラむブラリを呌び出す仕組みだけど、呌び出しのたびにかなりのオヌバヌヘッドが発生するんだ。goroutineのスタック管理ずCのスタックの違いを吞収する凊理が重いんだよ。だからパフォヌマンスが重芁な堎面では、cgoを倚甚するよりもRustでFFIを䜿うか、玔粋なGoで曞き盎す方がいいケヌスが倚いね。
ひよこ ひよこ
将来的にはどっちの方が䌞びそうなの
ペンギン先生 ペンギン先生
どちらも䌞びるず思うけど、方向性が違うんだよ。RustはWebAssemblyずの芪和性が抜矀で、ブラりザ䞊でネむティブ玚の凊理を動かす未来に向けお勢いがある。GoはKubernetes゚コシステムやクラりドネむティブ開発のデファクトずしお盀石だね。結局「䜕を䜜りたいか」で遞ぶのが正解で、䞡方觊れる゚ンゞニアが最匷だよ。