Rustã¯å®è¡å¹çãå®å šæ§ãéèŠããããã°ã©ã ãäœãã人æ°ã®ããã°ã©ãã³ã°èšèªã§ããããã§ãç¿åŸãé£ãããšèšãããããšããããŸããæ¬é£èŒã§ã¯ãããããªæåã¢ã«ãŽãªãºã ãè§£ãããšã§Rustã«æ £ããããšãç®çã«ããŠããŸããä»åã¯ãã·ãŒã¶ãŒæå·ãè§£ããŠã¿ãŸãããã
Rustã¯é£ããèšèªãïŒ
Rustã¯C/C++èšèªäžŠã¿ã«å®è¡å¹çãè¯ãã®ã§ãããå®å šæ§ãéèŠããèšèªã«ãªã£ãŠããŸããæè¿ã§ã¯ããã©ãŠã¶äžã§ãRustãå¿«é©ã«åããããšãã§ããããã«ãªã£ãŠããããŸããŸãå€ãã®ããã°ã©ããŒãRustãåŠãã§ããŸãã
ãšã¯èšããPythonãJavaScriptãRubyãªã©ã®ã¹ã¯ãªããèšèªãšæ¯ã¹ããé£ãããšæããå Žé¢ããããŸãã
ãŸããRustã¯ã³ã³ãã€ã«èšèªã§ããã鿬¡å®è¡ããã¹ã¯ãªããèšèªãšã¯å€§ããç°ãªã£ãŠããŸãããŸããã¹ã¯ãªããèšèªãããããŒã¿åã«å³å¯ã§ããå ããŠãã¹ã¯ãªããèšèªã§ã¯ããŸãæèããããšããªãã£ããã¡ã¢ãªã®æ±ãã«ã€ããŠãèããå¿ èŠããããŸãã
ããã§ããC/C++èšèªãšæ¯ã¹ãŠé£ããããšèšããããšãçè ã®å人çãªææ³ã§èšãã°ãããã»ã©é£ãããªãã®ã§ã¯ãšæããŸããC/C++ã§ã¯ã¡ã¢ãªã®ç¢ºä¿ãšè§£æŸã¯ããã°ã©ããŒã®è²¬ä»»ã§åŠçããªããŠã¯ãªããŸãããã¡ã¢ãªç®¡çã®å€±æã«ããã¢ããªãã¯ã©ãã·ã¥ããããè匱æ§ã®åå ã«ãªã£ããããŸãã
ããã«å¯ŸããŠãRustã§ã¯æææš©ã·ã¹ãã ã«ãããã³ã³ãã€ã©ã«ããèªåã§ç¢ºä¿ãšè§£æŸãè¡ãããããããã®ãããããã»ã©ç¥çµè³ªã«ã¡ã¢ãªç®¡çãæèããå¿ èŠã¯ãããŸããããã¡ãããRustã®ã¡ã¢ãªç®¡çã®èã§ããæææš©ã·ã¹ãã ã«ã€ããŠã¯åŠã¶å¿ èŠããããŸãããC/C++ã®ãã€ã³ã¿ã®æŠå¿µãšåãããæ £ãã®åé¡ãšãèšããã§ãããããŸããRustã®èšèªææ³ã¯æ°ããèšèªã ããã£ãŠæŽç¶ãšããŠãããè€éæªå¥ãšããèš³ã§ã¯ãããŸããã
ã©ããªèšèªã§ããæåã¯ãã®èšèªã«ã€ããŠç¿çããã®ã«æéããããã®ã¯ä»æ¹ã®ãªãããšã§ããå®éã®ãšãããPythonãJavaScriptãRubyãªã©ã®ã¹ã¯ãªããèšèªããã¯é£ãããã©ãC/C++ããã¯é£ãããªããšãããšããã§ããããæ¬é£èŒã§ã¯å®çªã¢ã«ãŽãªãºã ãRustã§è§£ããŠããã®ã§ãããããçºããããšã§èªç¶ãšRustã«æ £ããããšãã§ããŸãã
ã·ãŒã¶ãŒæå·ãšã¯ïŒ
é£èŒ2åç®ã®ä»åã¯ãRustã§ãã·ãŒã¶ãŒæå·ïŒè±èªïŒCaesar cipherïŒããå®è£ ããŠã¿ãŸãããã®ã·ãŒã¶ãŒæå·ã¯ãæãã·ã³ãã«ã§åºãç¥ãããæå·ã®äžã€ã§ããå€ä»£ããŒãã®è»äºçæå°è ã¬ã€ãŠã¹ã»ãŠãªãŠã¹ã»ã«ãšãµã«ã䜿çšããããšã§æåãªæå·ã§ããã«ãšãµã«ã®è±èªèªã¿ãã·ãŒã¶ãŒãªã®ã§ãã·ãŒã¶ãŒæå·ãšåŒã°ããŸãã
ãã®ä»çµã¿ã§ãããã¢ã«ãã¡ããããèŸæžé ã§3æåãããããšã§äœæããæå·ã§ããæ¬¡ã®å³ã®ããã«ã[A]ãªãã°B,C,Dãš3æåããããŠ[D]ã«ãåæ§ã«ã[B]ãªãã°[E]ã[C]ãªãã°[F]ãšãããããšã§æå·ãäœããŸãã
äŸãã°ãCAFEããªãã°ãã·ãŒã¶ãŒæå·ã§3æåå³ã«ããããŠãFDIHããšãªããŸããéã«ãæå·æãFDIHãã埩å·åããã«ã¯ã3æåå·Šã«æåãããããŸãããã¡ãããåãèŠé ã§ä»»æã®æåããã(ã·ãããã)ããšã§ãç°ãªãæå·æãäœãããšãã§ããŸãã
Rustã§å®è£ ããŠã¿ãã
ããã§ã¯ããã®ã·ãŒã¶ãŒæå·ãRustã§å®è£ ããŠã¿ãŸããããRustã§å®è£ ããå Žåããä»ã®èšèªãšåæ§ã«1æåãã€æå·åãããæåãåãåºããŠãæå®æåæ°ã ãã·ãããããŠçµææååã«è¿œå ããŠãããšããåŠçãè¡ããŸãã
以äžãã·ãŒã¶ãŒæå·ã®ããã°ã©ã ã§ãã以äžããcaesar.rsããšããååã§ä¿åããŸãããã
fn main() {
// æå·åãšåŸ©å·å --- (*1)
let text = "I LOVE YOU.";
let enc_text = rotate(&text, 3); // æå·å
let dec_text = rotate(&enc_text, -3); // 埩å·å
println!("æåå: {}", text);
println!("æå·å: {}", enc_text);
println!("埩å·å: {}", dec_text);
}
// ã·ãŒã¶ãŒæå·ãäœæãã颿° --- (*2)
fn rotate(text: &str, shift: i16) -> String {
// å€æçµæãä¿åããæååãªããžã§ã¯ã --- (*3)
let mut result = String::new();
// 1æåãã€ç¹°ãè¿ã --- (*4)
for ch in text.chars() {
// å°æåã¯å€§æåã«å€æ --- (*5)
let ch = if ch.is_lowercase() { ch.to_ascii_uppercase() } else { ch };
// 倧æåã®ãšãã®ã·ããåŠç --- (*6)
if 'A' <= ch && ch <= 'Z' {
let a = 'A' as i16;
let enc = (((ch as i16) - a + shift + 26) % 26 + a) as u8;
result.push(enc as char);
}
else { // ãã®ä»ã¯ãã®ãŸãŸæåã远å --- (*7)
result.push(ch);
}
}
return result;
}
ããã°ã©ã ã確èªããŠã¿ãŸããããRustã®ããã°ã©ã ã¯mainããå§ãŸããŸãã(ïŒ1)ã®main颿°ã§ã¯ã·ãŒã¶ãŒæå·ã®å®è¡ãã¹ãã®ãããI LOVE YOU.ããšããæãæå·åã»åŸ©å·åããŠè¡šç€ºããŸããããã§ã¯ãèŸæžé ã«3æåããããŸãããã®ããã(ïŒ2)ã§å®çŸ©ããŠããrotate颿°ããæå·åã®å Žåã¯3ã埩å·åã®å Žåã¯-3ããŸããæå·åãããæãå€ããã«ã¯ããã®(*1)ã®å€æ°textã倿ŽããŸãã
ãããŠãæå·åã®åŠçãè¡ãã®ã(ïŒ2)ã®rotate颿°ã§ãããã®é¢æ°ã§ã¯ã1æåãã€ç¢ºèªãã倿åŸã®æåã(ïŒ3)ã§åæåããŠãã倿°resultã«è¿œèšããŠãããŸããRustã§é¢æ°ãå®çŸ©ããå ŽåãåŒæ°ã«ã¯ããŒã¿åãæç€ºããå¿ èŠããããŸãããã ãã颿°å ã®ããŒã«ã«å€æ°ã¯ãåæšè«ã«ããèªåçã«ããŒã¿åãæ±ºå®ããã®ã§æç€ºããå¿ èŠãããŸãããä»åã®ããã°ã©ã ã§ããããŒã¿åãæç€ºããã®ã¯ã颿°ã®å®çŸ©ãšã(ïŒ6)ã®æååããæåã³ãŒããžã®å€æã®éšåã ãã§ããããããRustã®åæšè«ã匷åã§ããããšãåãããŸãã
ãªããRustã§å€æ°å®çŸ©ããå Žåããlet 倿°å = åæå€ããšæžããšå€æŽäžå¯ã®å€æ°ãšãªãããlet mut 倿°å = åæå€ããšæžããšå¯å€ã®å€æ°ãšãªããŸããæšä»ãç¡æå³ã«å¯å€ã®å€æ°ã䜿ãããšã¯ãã©ãã«ã®å ã«ãªãããšãå€ãã®ã§ãå¯å€ã®å€æ°ã䜿ãå Žåãå¯å€ã§ããããšãæç€ºãããšãã仿§ã«ãªã£ãŠããŸãã
ãããŠã(ïŒ4)ã§ã¯åŒæ°ãšããŠäžãããã倿°textã1æåãã€foræã§ç¹°ãè¿ããŸãã(ïŒ5)ã§ã¯åŠçã®ç°¡æåã®ãããè±æ°å°æåãè±æ°å€§æåã«å€æããŸããRustã§ã¯ifæãå€ãè¿ãããšãã§ããã®ã§ããã®ããã«èšè¿°ã§ããŸãã
(ïŒ6)ã§ã¯è±æ°å€§æåã®ãšãã«ãã·ããåŠç(æå®æååãããåŠç)ãè¡ããŸããæåchã®æåã³ãŒããåŸãã®ã¯ç°¡åã§ãch as i16ãã®ããã«æžããŸãããªããi16ãã¯ããŒã¿åã§16ãããæŽæ°ã®ããšã§ããã·ããåŠçã§ãããåã«3æåãããã ãã ãšãã¢ã«ãã¡ãããã®ç¯å²ãè¶ ããŠããŸãã®ã§ãå²ãç®ã®äœãæŒç®åã§ããã%ããå©çšããŠãã¢ã«ãã¡ãããã®ç¯å²ã«åãŸãããã«å·¥å€«ããŸãããããŠã·ããåŠçããæåã¯ã倿°resultã«è¿œèšããŸãã
ãŸãã(ïŒ7)ã®éšåã§ãããã¢ã«ãã¡ããã以å€ã®æåã§ããã°å€æå¯Ÿè±¡å€ãšããŠãæåãäœã倿ããã«ãã®ãŸãŸresultã«è¿œèšããŸãã
ããã°ã©ã ãå®è¡ããŠã¿ãã
ããã§ã¯ãããã°ã©ã ãã³ã³ãã€ã«ããŠå®è¡ããŠã¿ãŸããããRustã«ã¯Cargoãšãããã«ãã·ã¹ãã ããããŸãããä»åã¯Rustã®ã³ã³ãã€ã©rustcã䜿ã£ãŠã³ã³ãã€ã«ããŠã¿ãŸããã¿ãŒããã«ã§ä»¥äžã®ã³ãã³ããå®è¡ããŸãããã(ã$ãã¯å ¥åå¯èœã衚ãèšå·ãªã®ã§å ¥åäžèŠã§ãããŸããWindowsã§ã¯ã/ããã\ããšèªã¿æ¿ããŠãã ããã)
# ãœãŒã¹ã³ãŒããã³ã³ãã€ã«
$ rustc caesar.rs
# å®è¡
$ ./caesar
äžèšã³ãã³ããå®è¡ãããšã次ã®ããã«è¡šç€ºãããŸãããI LOVE YOU.ããšããæååãæå·åããããã«åŸ©å·åããŠè¡šç€ºããŸãã
ãŸãšã
以äžãä»åã¯Rustã§ã·ãŒã¶ãŒæå·ãå®è£ ããŠã¿ãŸããããã¡ãããRuståèŠã ãšãäžäœã©ããªã£ãŠããã®ã ãããšæãéšåãããã§ããããã³ã¡ã³ããå€ãå ¥ããã®ã§ãå°ãé·ãèŠããŸãããä»ã®èšèªãšæ¯ã¹ãŠãèšè¿°éãå¢ããããã§ã¯ãããŸãããéã«Rustã®åæšè«ã®ãããã§ãããã°ã©ã ãã¹ãããªãšèŠããã®ã§ã¯ãªãã§ããããã
ãªããããã§ã¯ãã³ãã³ãã©ã€ã³ããŒã«ãšããŠäœã£ãŠããŸããããäœåãããã°ãã³ãã³ãã©ã€ã³ãã䜿ããããæ¹è¯ããŠã¿ããšè¯ãã§ããããå¹ççã«ããã°ã©ãã³ã°ãåŠã¶äžã€ã®æ¹æ³ã¯ãæ¢åã®ããã°ã©ã ãæ¹è¯ããŠã¿ãããšã§ããææŠããŠã¿ãŠãã ããã
èªç±åããã°ã©ããŒããããã¯ãã©ã«ãŠãããã°ã©ãã³ã°ã®æ¥œãããäŒããæŽ»åãããŠããã代衚äœã«ãæ¥æ¬èªããã°ã©ãã³ã°èšèªããªã§ããã ãããã¹ã鳿¥œããµã¯ã©ããªã©ã2001幎ãªã³ã©ã€ã³ãœãã倧è³å ¥è³ã2004幎床æªèžãŠãŒã¹ ã¹ãŒããŒã¯ãªãšãŒã¿èªå®ã2010幎 OSSè²¢ç®è ç« åè³ãæè¡æžãå€ãå·çããŠãããçŽè¿ã§ã¯ããã·ãŽããã¯ãã©ã PythonèªååŠçã®æç§æž(ãã€ããåºç)ããããã«äœ¿ãã!æ¥åã§å®è·µã§ãã! Pythonã«ããAIã»æ©æ¢°åŠç¿ã»æ·±å±€åŠç¿ã¢ããªã®ã€ããæ¹ TensorFlow2察å¿(ãœã·ã )ãããã³ã¬ã§ãã£ããåŠã¶Python(ãã€ããåºç)ããªã©ã



