ãå³è§£ã§æ¯èŒãRust vs Go â æ¬¡äžä»£ã·ã¹ãã èšèªã®éãã培åºè§£èª¬
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ã§ã¯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ãšã³ã·ã¹ãã ãã¯ã©ãŠããã€ãã£ãéçºã®ããã¡ã¯ããšããŠç€ç³ã ããçµå±ãäœãäœãããããã§éžã¶ã®ãæ£è§£ã§ãäž¡æ¹è§Šãããšã³ãžãã¢ãæåŒ·ã ãã