ã2026幎çãRustã®å§ãæ¹ â å®å šã§é«éãªããã°ã©ãã³ã°ã®ç¬¬äžæ©
- rustupã§ã®ã€ã³ã¹ããŒã«ãšcargoã®äœ¿ãæ¹
- æææš©ã»åçšã»ã©ã€ãã¿ã€ã ã®æŠå¿µãçè§£ãã
- ãšã©ãŒãã³ããªã³ã°ïŒResult/OptionïŒ
- cratesã«ããäŸå管ç
ã»ããã¢ããæé
# rustupã§ã€ã³ã¹ããŒã«ïŒæšå¥šïŒ
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
# ããŒãžã§ã³ç¢ºèª
rustc --version
cargo --version
# æ°èŠãããžã§ã¯ãäœæ
cargo new myapp
cd myapp
cargo run
cargoã³ãã³ãæ©èŠè¡š
cargo new ãããžã§ã¯ãå # æ°èŠäœæ
cargo build # ãã«ãïŒãããã°ïŒ
cargo build --release # ãã«ãïŒæé©åïŒ
cargo run # å®è¡
cargo test # ãã¹ã
cargo check # åãã§ãã¯ã®ã¿ïŒéãïŒ
cargo add ããã±ãŒãžå # äŸåããã±ãŒãžè¿œå
cargo fmt # ãã©ãŒããã
cargo clippy # ãªã³ã
ã¯ãããŠã®ã³ãŒãïŒæææš©ã®äŸïŒ
fn main() {
// æææš©ã®ç§»åïŒmoveïŒ
let s1 = String::from("hello");
let s2 = s1; // s1ã®æææš©ãs2ã«ç§»ã
// println!("{}", s1); // ãšã©ãŒïŒs1ã¯ãã䜿ããªã
// åçšïŒborrowïŒ
let s3 = String::from("world");
print_str(&s3); // åç
§ãæž¡ãïŒæææš©ã¯ç§»åããªãïŒ
println!("{}", s3); // ãŸã 䜿ãã
// ãšã©ãŒãã³ããªã³ã°
let result: Result<i32, String> = Ok(42);
match result {
Ok(n) => println!("æå: {}", n),
Err(e) => println!("倱æ: {}", e),
}
}
fn print_str(s: &str) {
println!("{}", s);
}
ããããè©°ãŸããã€ã³ã
Q: æææš©ãšã©ãŒãå€ãããŠå
ã«é²ããªã
â ããã¯Rustç¹æã®å£ã§ãå€ãã®åŠç¿è
ãçµéšããŸãããŸã㯠clone() ã§åé¿ããªããåãã³ãŒããäœããåŸã
ã«åçšã»åç
§ã«çœ®ãæããŠããæ¹éã广çã§ãã
Q: lifetime ãšã©ãŒãé£ãããã
â æåã¯ã©ã€ãã¿ã€ã ãæç€ºçã«æžããªããŠãæžãã³ãŒãïŒã©ã€ãã¿ã€ã çç¥èŠåãé©çšãããã±ãŒã¹ïŒããå§ããŸããããã³ã³ãã€ã©ã®ãšã©ãŒã¡ãã»ãŒãžãéåžžã«äžå¯§ãªã®ã§ãå¿
ãèªãã§ã¿ãŠãã ããã
Q: ã³ã³ãã€ã«ãé
ã
â Rustã¯ã³ã³ãã€ã«æéãé·ãã§ããéçºäžã¯ cargo checkïŒåãã§ãã¯ã®ã¿ïŒã䜿ããšéã確èªã§ããŸãã
æè¿Rustã£ãŠååãããèããã ãã©ãã©ããªèšèªãªã®ïŒ
Rustã¯ã¡ã¢ãªå®å šæ§ãšé«éæ§ãäž¡ç«ããããã°ã©ãã³ã°èšèªã ããæ®éãã¡ã¢ãªãå®å šã«ç®¡çããã«ã¯ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ïŒGCïŒã£ãŠããä»çµã¿ãå¿ èŠãªãã ãã©ãRustã¯GCãªãã§å®å šæ§ãä¿èšŒãããã ãCèšèªãC++䞊ã¿ã«éãã®ã«ãã¡ã¢ãªé¢é£ã®ãã°ãã³ã³ãã€ã«æã«åŒŸããããããå®å šã§éãããŸãã«ãããšãåãã®èšèªã ãã
GCãªãã§å®å šã£ãŠãã©ããã£ãŠå®çŸããŠãã®ïŒ
ããããæææš©ïŒownershipïŒãã£ãŠããRustç¬èªã®ä»çµã¿ã ãããã¹ãŠã®å€ã«ã¯ãææè ãã1ã€ã ãããŠãææè ãã¹ã³ãŒããæãããšã¡ã¢ãªãèªåçã«è§£æŸããããã ãå€ãå¥ã®å€æ°ã«æž¡ããšæææš©ããç§»åïŒmoveïŒãããŠãå ã®å€æ°ã¯ãã䜿ããªããªããäžæçã«è²žãåºããããšãã¯ãåçšïŒborrowïŒãã䜿ãããã®ã«ãŒã«ãã³ã³ãã€ã©ãå³å¯ã«ãã§ãã¯ãããããå®è¡æã«ã¡ã¢ãªé¢é£ã®ãã°ãèµ·ããªããã ãã
ãªãã»ã©âŠïŒã§ãRustãå§ããã«ã¯ãŸãäœãããã°ããã®ïŒ
ãŸãã¯rustupã£ãŠããå ¬åŒã®ã€ã³ã¹ããŒã©ã䜿ãããå ¬åŒãµã€ã rustup.rs ã«ã¢ã¯ã»ã¹ããŠã衚瀺ãããã³ãã³ããå®è¡ããã ããrustupã¯Rustã®ããŒãžã§ã³ç®¡çããŒã«ãå ŒããŠããŠãå®å®çã»ããŒã¿çã»ãã€ããªãŒçãç°¡åã«åãæ¿ãããããã ãã€ã³ã¹ããŒã«ãçµãã£ãããrustc --versionãã§ç¢ºèªããŠã¿ãŠãã
ããã§ãcargo new hello-rustãâãcd hello-rustãâãcargo runããå®è¡ããŠã¿ãŠãããHello, world!ããšè¡šç€ºãããã°ç°å¢æ§ç¯ã¯å®ç§ã ãïŒsrc/main.rsãéããŠã³ãŒããå°ãå€ããŠå床ãcargo runãããŠã¿ããšãã³ã³ãã€ã«ã®æµããäœéšã§ãããã
ã€ã³ã¹ããŒã«ã§ããããæ¬¡ã¯ã©ããã£ãŠãããžã§ã¯ããäœãã®ïŒ
Rustã«ã¯cargoã£ãŠããè¶ äŸ¿å©ãªãã«ãããŒã«å Œããã±ãŒãžãããŒãžã£ãä»ããŠãããããcargo new my-projectãã§æ°ãããããžã§ã¯ããäœæããcargo buildãã§ãã«ãããcargo runãã§å®è¡ããcargo testãã§ãã¹ãå®è¡ããã®4ã€ã®ã³ãã³ãã ãã§åºæ¬çãªéçºãµã€ã¯ã«ãåãããã ãäŸåã©ã€ãã©ãªã®ç®¡çãCargo.tomlã£ãŠãããã¡ã€ã«ã«æžãã ãã§èªåçã«ããŠã³ããŒãã»ãã«ãããŠããããã
ãšã©ãŒåŠçã£ãŠã©ãããã®ïŒä»ã®èšèªã ãšäŸå€ã䜿ããã©âŠ
Rustã«ã¯äŸå€ããªããã ã代ããã«ResultãšOptionã£ãŠããåã䜿ãããResultã¯ãæåïŒOkïŒã倱æïŒErrïŒããã衚ãåã§ããã¡ã€ã«èªã¿èŸŒã¿ããããã¯ãŒã¯éä¿¡ã¿ããã«å€±æãããåŠçã«äœ¿ããOptionã¯ãå€ãããïŒSomeïŒããªãïŒNoneïŒããã衚ãåã§ãnullã®ä»£ããã«ãªããã ãã©ã¡ããã³ã³ãã€ã©ããã¡ãããšãšã©ãŒã±ãŒã¹ãåŠçããããããã§ãã¯ããŠãããããããšã©ãŒã®èŠèœãšããæ¿æžãããã
ã©ã€ãã©ãªãšãã¯ã©ãã§æ¢ãã°ããã®ïŒ
crates.ioã£ãŠããå ¬åŒã®ããã±ãŒãžã¬ãžã¹ããªãããããWebãã¬ãŒã ã¯ãŒã¯ã®actix-webãaxumãéåæã©ã³ã¿ã€ã ã®tokioãã·ãªã¢ã©ã€ãºã®serdeãªã©ãè±å¯ãªã©ã€ãã©ãªïŒRustã§ã¯crateãšåŒã¶ïŒãæã£ãŠããCargo.tomlã«ååãšããŒãžã§ã³ãæžãã ãã§äœ¿ãããã ãnpmãpipãšåãæèŠã ãã
Rustã§ã©ããªãã®ãäœããã®ïŒ
å®ã¯ããªãå¹ åºãããCLIããŒã«ãWebAssemblyãWebãµãŒããŒãã²ãŒã ãšã³ãžã³ãçµã¿èŸŒã¿ã·ã¹ãã ãŸã§äœã§ãããããæè¿ã ãšWebAssemblyãšã®çžæ§ãç¹ã«æ³šç®ãããŠããŠããã©ãŠã¶äžã§é«éã«åãã¢ããªãäœãããã ãåŠç¿ãªãœãŒã¹ãšããŠã¯ãå ¬åŒã®ãThe Rust Programming LanguageãïŒéç§°The Rust BookïŒãç¡æã§èªããŠããããäžçªãããããæ¥æ¬èªèš³ããããã
Rustã£ãŠé£ããã£ãŠèããã©ãå ·äœçã«ã©ã®ãããã倧å€ãªã®ïŒ
äžçªã€ãŸãããããã®ã¯ã©ã€ãã¿ã€ã ïŒlifetimeïŒã®æŠå¿µã ããåçšããåç §ããã€ãŸã§æå¹ããã³ã³ãã€ã©ã«æããä»çµã¿ãªãã ãã©ãè€éãªããŒã¿æ§é ãæ±ããšé ãæ©ãŸããããšããããããšãéåæåŠçãRustç¬ç¹ã®ã¯ã»ããã£ãŠãasync颿°ã®æ»ãå€ãFutureãã¬ã€ããå®è£ ããåã«ãªãããããã¬ã€ãå¢çã®æå®ãè€éã«ãªããã¡ãªãã ããã ãæè¿ã®Rustã¯ãšã©ãŒã¡ãã»ãŒãžããšãŠã芪åã ãããã³ã³ãã€ã©ã®æç€ºã«åŸãã°å€§äœè§£æ±ºã§ãããã
RustãLinuxã«ãŒãã«ã«æ¡çšãããã£ãŠæ¬åœïŒ
æ¬åœã ããLinux 6.1ïŒ2022幎æ«ïŒããRustãã«ãŒãã«ã®ãµããŒãèšèªãšããŠæ£åŒã«æ¡çšããããã ãã«ãŒãã«ã®ãããªã·ã¹ãã ããã°ã©ãã³ã°ã®äžçã§ã¯ãã¡ã¢ãªå®å šæ§ã®ãã°ãæ·±å»ãªã»ãã¥ãªãã£è匱æ§ã«ã€ãªãããããRustã®æææš©ã·ã¹ãã ã¯å€§ããªæŠåšã«ãªããçµã¿èŸŒã¿RustïŒEmbedded RustïŒã®åéãæé·ããŠããŠããã€ã³ã³äžã§ãRustã®å®å šæ§ã掻ãããéçºãã§ããããã«ãªã£ãŠããŠãããCèšèªãé·å¹Žç¬å ããŠããé åã«Rustãé£ã蟌ãã§ããããŸãã«æŽå²çãªè»¢ææã ãã