
Go ãšã¯éããåã Rust ã«æãã âè²ãŠãâ é¢çœã
å¹çã® Go ã察話㮠Rustã
åãã·ã¹ãã ããã°ã©ãã³ã°ã®æ°ããªæãéããŸã§
ããã°ã©ãã³ã°èšèªã«ã¯ãæ§æ Œããããã
åã«ãšã£ãŠ Go èšèªã¯ãå€ããèªãããšãèäžãä»»ããããã寡é»ã§ä¿¡é Œã§ãã âçžæ£â ã ã£ãã
ããããããæ¥åºäŒã£ã Rust ã¯ããŸãã§éã£ãã圌ã¯åã«çµ¶ããåããããå¯Ÿè©±ãæ±ãããããŠå ±ã«æ©ã¿ãªããã³ãŒãã âè²ãŠãŠâ ãããå³ãããææ æ·±ã âåž«â ã®ããã ã£ãã
ããã¯ãåãå¹çã®å ã«ãããããã°ã©ãã³ã°ã®æ°ããªé¢çœããèŠã€ãããŸã§ã®ç©èªã
ãããããããããã°ã©ãã³ã°èšèªããããªé¢šã«èªãã®ã¯ãå°ãå¥åŠã«èããããããããŸãããæè¡ã®äžçã§ã¯ããã£ãšãã©ã€ã§å®¢èгçãªäºå®ã ããæ±ããããã®ãããããªãããã
ã§ãåã¯ãåãã¡ãæžãã³ãŒãã®äžè¡äžè¡ã«ã¯ããã®è£åŽã«å¿ ããåã³ãèŠæ©ããããŠå°ããªçºèŠãšãã£ããç©èªããæ¯ã¥ããŠãããšä¿¡ããŠããŸãã
ãããããåã¯ããããªæè¡ãšå¿ã®äº€å·®ç¹ã«ããç©èªããåãªãã®èšèã§ç¶Žã£ãŠãããããšæã£ãŠããŸããããããã£ããããã®å°ã颚å€ãããªãšã³ãžãã¢ã®åéºã«ãããå°ãã ããä»ãåãããã ãããšå¬ããã§ãã
ããªãã® ãçžæ£ã ã¯ãã©ããªæ§æ Œã§ããïŒ
ããªãŒã©ã³ã¹ãšããå€ç¬ãªèªæµ·ã«ãããŠãããã°ã©ãã³ã°èšèªã¯åãªãéå ·ä»¥äžã®ååšã ããšãã«ã¯çŸ éç€ãšãªãããšãã«ã¯ç¢ãšãªãããããŠå€ãã®æéãå ±ã«ãããçžæ£ããšãèšããã
ã¿ãªããã«ãšã£ãŠããã®ãçžæ£ãã¯ãã©ããªæ§æ ŒãããŠããã ãããïŒ
åã«ãšã£ãŠé·å¹Žã®çžæ£ã¯ãGo èšèªã ã£ãã
圌ãšã®åºäŒãã¯ãåã®ããªãŒã©ã³ã¹äººçã«ãéããªèªä¿¡ããšããåã®ã倧ããªå®å®ããããããŠãããã圌ã®é åã¯ããªããšãã£ãŠããã®ã·ã³ãã«ããšå®çŽãã«ãããäœèšãªããšã¯äžåèªããããã é»ã ãšãããã確å®ã«åã®æç€ºãããªããå®å®ããææç©ãçã¿åºããŠãããã
ã¯ã©ã€ã¢ã³ãããèšãããè€éãªæ¡ä»¶ãã圌ãšäžç·ãªã倧äžå€«ãããæãããŠããã絶倧ãªä¿¡é ŒæããGo èšèªã«ã¯ãã£ãã圌ã¯ãåã«ãšã£ãŠæé«ã®ããžãã¹ããŒãããŒã ã£ãã®ã ã
寡é»ãªçžæ£ã Go èšèªãšã®æ¥ã
Go èšèªãšã®æ¥ã ã¯ãå¹³ç©ãã®ãã®ã ã£ãã
圌ã®åŸææã¯ãã³ã³ãã€ã«ã®éããšãå®è¡å¯èœãªåäžã®ãã€ããªããã³ãšåãåºããŠãããæè»œãã
Docker ã€ã¡ãŒãžã¯é©ãã»ã©å°ãããªãããããã€ã®å¿ççããŒãã«ããã£ãšäžããŠãããããŸãã§éæ³ã®ããã ã£ãã
package main
import "fmt"
func main() {
fmt.Println("Hello, World!")
}ãã®æ°è¡ãæžãã°ãããã«äžçãåãåºããè€éãªã«ãŒã«ããé£è§£ãªäœæ³ããããªããããšããããåãããŠãããããèãããããšãããããã¯ãŒã¯ã®è»œããã圌ã¯åã«æããŠãããã
ãã API ãµãŒããŒéçºã®æ¡ä»¶ã§ã¯ã圌ã®ç䟡ãéºæŸãªãçºæ®ããããgoroutine ã䜿ãã°ã䞊è¡åŠçãé©ãã»ã©ã·ã³ãã«ã«æžãããéçåä»ãèšèªã§ãããªããããã®æžãå³ã¯ãŸãã§åçåä»ãèšèªã®ããã«è»œããã ã£ãã
çŽåãããµãŒããŒã¯å®å®ããŠåãç¶ããã¯ã©ã€ã¢ã³ããããé«ãè©äŸ¡ãåŸãããšãã§ãããGo èšèªã¯ãããªãŒã©ã³ã¹ãšããŠã®åã®ä¿¡é Œãéãã«ãããã確å®ã«ç©ã¿äžããŠããããæé«ã®çžæ£ã ã£ãã®ã ã
ãããããã®å®å®ããæ¥ã ã®ãªãã§ãåã®å¿ã«ã¯ããçš®ã® âæžãâ ãçãŸããŠããã
Go èšèªã®ã·ã³ãã«ãã¯ãæèã®ãã€ãºãæžãããŠãããäžæ¹ã§ãã³ã³ãã¥ãŒã¿ã®å¥¥æ·±ãã§äœãèµ·ããŠããã®ãããåããå°ãã ãé ãããŠããŸãæèŠããã£ãã
ã¬ããŒãžã³ã¬ã¯ã¿ãšããåªç§ãªå·äºããåã®ç¥ããªããšããã§ã¡ã¢ãªã®åŸå§æ«ãå®ç§ã«ããªããŠããããããã¯éåžžã«å¿«é©ãªã®ã ããå¿ã®ã©ããã§ããæãèªåãããã
ããã£ãšæ·±ããã³ã³ãã¥ãŒã¿ãšå¯Ÿè©±ãããããšã
åã¯ããã éå ·ã䜿ãã ãã§ãªãããã®éå ·ãåãä»çµã¿ããã®éã®æ ¹æºã«è§ŠããŠã¿ãããªã£ãŠããã®ãããããªãã
Rust ãšããåã®ã峿 Œãªåž«ãšã®åºäŒã
ãããªãšããåã®ç®ã«é£ã³èŸŒãã§ããã®ããRustããšããååã ã£ãã
ãã£ããã¯ãWebAssembly(Wasm) ãžã®èå³ã ã£ãããã©ãŠã¶äžã§ãã€ãã£ãã«è¿ãããã©ãŒãã³ã¹ãçºæ®ãããšãããã®æè¡ã¯ãåã®å¥œå¥å¿ã匷ãåºæ¿ããããããŠããã®æèã§é »ç¹ã«ç»å Žããã®ã Rust ã ã£ãã®ã ã
調ã¹ãŠã¿ããšã圌㯠Go èšèªãšã¯å šãéãæ§æ ŒãããŠããããã ã£ãã
ãã¡ã¢ãªå®å šæ§ããã¬ããŒãžã³ã¬ã¯ã¿ãªãã§ä¿èšŒããã
ãã®äžæã ãã§ãåã®èžã¯é«é³Žã£ããããã¯ãŸãã§ãéæ³ã®è£åŽã«ãããç·»å¯ãªç©çæ³åãè§£ãæãããããªé¿ãããã£ãã
å ¬åŒããã¥ã¡ã³ããèªã¿é²ãããšããæææš©ããåçšããã©ã€ãã¿ã€ã ããšãã£ãããããŸã§ã®ããã°ã©ãã³ã°äººçã§ã¯ããŸãæèããŠããªãã£ãã峿 Œã§ãã©ããå²åŠçãªé¿ããæã€èšèãã¡ãç®ã«é£ã³èŸŒãã§ããã
Go èšèªããJust get things done.ïŒãšã«ãããããéãããïŒããšããå®è·µçãªææ³ãªããRust ã¯ãDo things right.ïŒæ£ãããããéãããïŒããšãããè·äººçãªå²åŠãæããããã
ããã¯ãåãå¿ã®å¥¥åºã§æããŠãã âæžãâ ãæœ€ããŠããããççŸãªé¿ããæã£ãŠããã
åã¯ããã®å³æ Œãªåž«ã®éãå©ããŠã¿ãããšã«æ±ºãããããããé·ãéºããããããçºèŠã«æºã¡ã察話ã®å§ãŸãã«ãªããšãç¥ããã«ã
èµ€ããšã©ãŒã³ãŒãã¯ã察話ã®å§ãŸãã ã£ã
Rust ã®åŠç¿ã¯ããããŸã§ã®ã©ããªèšèªãšãéã£ããããã¯ãèªåã®ãã©ã€ããç²ã ã«ç ããããããªäœéšã®é£ç¶ã ã£ãã
ææ°æã ãšæžãå§ããæåã®ã³ãŒãã¯ãã³ã³ãã€ã«ãã¿ã³ãæŒããç¬éããã³ãã ããéã®èµ€ããšã©ãŒã³ãŒããšå ±ã«åã«çªãè¿ãããã
fn main() {
let s1 = String::from("hello");
let s2 = s1;
println!("{}, world!", s1); // ããã§ãšã©ãŒïŒ
}Go èšèªãªãäœã®åé¡ããªãã¯ãã®ãåçŽãªä»£å ¥ãšè¡šç€ºãããããRust ã³ã³ãã€ã©ã¯ãããèš±ããŠãããªãã£ãã
error[E0382]: borrow of moved value: `s1`ãs1 ã®å€ã¯ s2 ã«ã ãŒãïŒç§»åïŒããããããããå㯠s1 ã䜿ãããšã¯ã§ããªããã
ã³ã³ãã€ã©ã¯ãããå·ããèšãæŸã£ãããããããã®æåãªãæææš©ãã®æŽç€Œã ã£ãã
åã¯äœåºŠãã³ãŒããæžãçŽãããã®ãã³ã«ã³ã³ãã€ã©ã«çªãè¿ãããããŸãã§ãé åºãªåž«å ã«ãåºæ¬ããªã£ãŠããªãïŒããšãäœåºŠã竹åã§æãå©ãããŠãããããªæèŠãæ£çŽãå¿ãæãããã«ãªã£ããããªãŒã©ã³ã¹ãšããŠåæ°å¹Žãã£ãŠããèªä¿¡ããé³ãç«ãŠãŠåŽ©ããŠããã®ãæããã
ããªãããããªåçŽãªããšããèªç±ã«ãããŠãããªããã âŠã
ãããããã®æ Œéãæ°æ¥ç¶ããããå€ããµãšæ°ã¥ããã®ã ã
åãããããããŠããããã®é·ãäžå¯§ãªãšã©ãŒã¡ãã»ãŒãžãããã¯ãåãè²¶ãããã®ãã®ã§ã¯ãªããããããåãå±éºãªã³ãŒããæžããŠããŸãã®ãæªç¶ã«é²ããããå®å šã§ãããè¯ãèšèšãžãšå°ãããã®ã圌ããã®çæ¯ãªã察話ãã®è©Šã¿ãªã®ã§ã¯ãªããããšã
圌ã¯ãåãç¯ããééããææããã ãã§ãªãããªããããééããªã®ãããããŠã©ãããã°æ£ãããªããã®ãããåžžã«ç€ºåããŠãããŠããã
ããæ°ã¥ããç¬éãåã®äžã§äœããå€ãã£ãã
èµ€ããšã©ãŒã³ãŒãã¯ãæçµ¶ã®ãµã€ã³ã§ã¯ãªãã察話ã®å§ãŸããåããåå³ã«ãªã£ãã
åã¯ããã äžæ¹çã«åœä»€ããæžããã®ããããã代ããã«ãã³ã³ãã€ã©ãšã察話ããã圌ãçŽåŸããŠããããŸã§ã³ãŒããäžå¯§ã«ãè²ãŠãŠããããšããæèŠã«ç®èŠããã®ã ã
ããã¯ãå¹çãé床ã ããè¿œãæ±ããŠãããšãã«ã¯æ±ºããŠå³ãããªãã£ããããã°ã©ãã³ã°ã®æ°ããé¢çœãã ã£ãã
åã Rust ã âè²ãŠãŠããâ ãšæãã 3 ã€ã®çç±
ãã®ãã³ãŒããè²ãŠãããšããæèŠã¯ãäžäœã©ãããæ¥ãã®ã ãããã
ã¡ã³ããŒã·ããã«åå ããŠãããŠããã¿ãªããã«ã¯ããã®æèŠã®æ£äœããRust ãæã€ 3 ã€ã®å²åŠçãªç¹åŸŽãšçµã³ã€ããªãããããå°ãæ·±ãå ±æããããšæãã