Rustã¯ãé¢æ°åã䞊ååãæç¶ãåãããã³ãªããžã§ã¯ãæåããã°ã©ãã³ã°ããµããŒãããŠããŸãã å®éã«å¿çšããã°ã©ãã³ã°ã§äœ¿çšããããã©ãã€ã ã®ã»ãŒå šç¯å²ã
ç§ã¯ããã¥ã¡ã³ãã翻蚳ããã€ããã¯ãããŸããïŒããã«ãèšèªã®å ¬åŒãªãªãŒã¹ããŸã ãªããããéåžžã«å°ãªãã絶ããå€æŽãããŠããŸãïŒãã代ããã«èšèªã®æãèå³æ·±ãæ©èœã匷調ãããã§ãã æ å ±ã¯ãå ¬åŒææžãšãã€ã³ã¿ãŒãããäžã®èšèªãžã®éåžžã«å°æ°ã®åç §ããåéãããŸãã
第äžå°è±¡
ãã®èšèªã®æ§æã¯ãåŸæ¥ã®Cã®ãããªã¹ã¿ã€ã«ã§æ§ç¯ãããŠããŸãïŒããã¯ãã§ã«äºå®äžã®æšæºã§ãããããåã°ããããåŸãŸããïŒã åœç¶ãããç¥ãããŠããC / C ++èšèšãšã©ãŒãèæ ®ãããŸãã
åŸæ¥ã®Hello Worldã¯æ¬¡ã®ããã«ãªããŸãã
use std; fn main(args: [str]) { std::io::println("hello world from " + args[0] + "!"); }
äŸã¯ããå°ãè€éã§ã-éä¹èšç®æ©èœïŒ
fn fac(n: int) -> int { let result = 1, i = 1; while i <= n { result *= i; i += 1; } ret result; }
äŸãããããããã«ãé¢æ°ã¯ãæ©èœçãã¹ã¿ã€ã«ã§å®£èšãããŠããŸãïŒãã®ã¹ã¿ã€ã«ã«ã¯ãåŸæ¥ã®ãint facïŒint nïŒããããããã€ãã®å©ç¹ããããŸãïŒã èªååæšè« ïŒletããŒã¯ãŒãïŒãwhileåŒæ°ã«æ¬åŒ§ããªãããšïŒGoãšåæ§ïŒãèŠãããŸãã ããŒã¯ãŒãã®ã³ã³ãã¯ããã¯ããã«æããã«ãªããŸãã Rustã®äœæè ã¯ãæå³çã«ãã¹ãŠã®ããŒã¯ãŒããã§ããéãçãããŠãããæ£çŽãªãšããããããæ°ã«å ¥ã£ãŠããŸãã
å°ãããªãããèå³æ·±ãæ§ææ©èœ
- ã¢ã³ããŒã¹ã³ã¢ã¯æ°å€å®æ°ã«æ¿å
¥ã§ããŸãã 䟿å©ãªããšã«ãçŸåšãã®æ©èœã¯å€ãã®æ°ããèšèªã«è¿œå ãããŠããŸãã
0xffff_ffff_ffff_ffff_ffff_ffff
- äºé
å®æ° ãã¡ãããæ¬ç©ã®ããã°ã©ãã¯å¿ã®äžã§ãã³ã16é²æ°ã«å€æããå¿
èŠããããŸããããã䟿å©ã§ãïŒ
0b1111_1111_1001_0000
- æŒç®åã®æ¬äœïŒåäžã®åŒã§æ§æããããã®ãå«ãïŒã¯ãäžæ¬åŒ§ã§å²ãå¿
èŠããããŸãã ããšãã°ãCã§ã¯ã
if(x>0) foo();
æžãããšãã§ãif(x>0) foo();
ãRustã§ã¯ãfooïŒïŒãäžæ¬åŒ§ã§å²ãå¿ èŠããããŸã - ãã ããifãwhileãªã©ã®æŒç®åã®åŒæ°ãæ¬åŒ§ã§å²ãå¿ èŠã¯ãããŸãã
- å€ãã®å Žåãã³ãŒãã®ãããã¯ã¯åŒãšèŠãªãããšãã§ããŸãã ç¹ã«ãããšãã°ãããã¯å¯èœã§ãïŒ
let x = if the_stars_align() { 4 } else if something_else() { 3 } else { 0 };
- é¢æ°ã宣èšããããã®æ§æ-æåã«ããŒã¯ãŒãfnã次ã«åŒæ°ã®ãªã¹ããååã®åŸã«åŒæ°ã®åã瀺ããã次ã«é¢æ°ãå€ãè¿ãå Žåãç¢å°ã->ããšæ»ãå€ã®å
- å€æ°ã¯åãæ¹æ³ã§å®£èšãããŸããletããŒã¯ãŒããå€æ°åãå€æ°ã®åŸãã³ãã³ã®åŸã®ã¿ã€ããæå®ããŠãããåæå€ãå²ãåœãŠãããšãã§ããŸãã
let count: int = 5;
- ããã©ã«ãã§ã¯ããã¹ãŠã®å€æ°ã¯äžå€ã§ãã mutableããŒã¯ãŒãã¯ãå¯å€å€æ°ã宣èšããããã«äœ¿çšãããŸãã
- åºæ¬åã®ååã¯ãç§ãåºäŒã£ãäžã§æãã³ã³ãã¯ãã§ãïŒi8ãi16ãi32ãi64ãu8ãu16ãu32ãu64ãf32ãf64
- äžèšã®ããã«ãèªååæšè«ããµããŒããããŠããŸã
ãã®èšèªã«ã¯ãããã°ã©ã çšã®çµã¿èŸŒã¿ã®ãããã°ããŒã«ããããŸãã
failããŒã¯ãŒãã¯ãçŸåšã®ããã»ã¹ãçµäºããŸãã
logããŒã¯ãŒãã¯ããã°å ã®èšèªè¡šçŸã衚瀺ããŸãïŒããšãã°ãstderrïŒ
assertããŒã¯ãŒãã¯åŒãæ€èšŒããfalseã®å ŽåãçŸåšã®ããã»ã¹ãçµäºããŸã
ããŒã¯ãŒãkeywordã䜿çšãããšãããã»ã¹ãç°åžžçµäºããå Žåã«è¿œå æ å ±ã衚瀺ã§ããŸãã
ããŒã¿å
Rustã¯Goãšåæ§ã«ã æ§é ã¿ã€ãã³ã°ããµããŒãããŸã ïŒãã ããèè ã«ãããšãç¬èªã«éçºãããèšèªã§ãããããããã¯å ±éã®å身ã§ããAlefãLimboãªã©ã®åœ±é¿ã§ãïŒã æ§é ã¿ã€ãã³ã°ãšã¯äœã§ããïŒ ããšãã°ããããã¡ã€ã«ïŒãŸãã¯ãRustã®çšèªã§ã¯ãã¬ã³ãŒããïŒã§å®£èšãããæ§é ããããŸã
type point = {xïŒfloatãyïŒfloat};
åŒæ°ã¿ã€ãã®ãã€ã³ãã䜿çšããŠãäžé£ã®å€æ°ãšé¢æ°ã宣èšã§ããŸãã 次ã«ãä»ã®ã©ããã§ãä»ã®æ§é ã宣èšã§ããŸããäŸãã°
ã¿ã€ãMySuperPoint = {xïŒfloatãyïŒfloat};
ãã®ã¿ã€ãã®å€æ°ã¯ããã€ã³ãåã®å€æ°ãšå®å šã«äºææ§ããããŸãã
å¯Ÿç §çã«ãCãC ++ãCïŒãããã³Javaã§æ¡çšãããŠããäž»æ Œã®é¡ååã§ã¯ããã®ãããªæ§æã¯èš±å¯ãããŠããŸããã äž»æ Œåæå®ã§ã¯ãåæ§é ã¯äžæã®åã§ãããããã©ã«ãã§ã¯ä»ã®åãšäºææ§ããããŸããã
Rustã®æ§é ã¯ãã¬ã³ãŒãããšåŒã°ããŸãã ã¿ãã«ããããŸã-ãããã¯åãã¬ã³ãŒãã§ãããååã®ãªããã£ãŒã«ãããããŸãã èšé²èŠçŽ ãšã¯ç°ãªããã¿ãã«èŠçŽ ã¯å€æŽã§ããŸããã
ãã¯ãã«ããããŸã-éåžžã®é åã«ãããã䌌ãŠããŠããããã®ã§ã¯stlããã®åïŒstlããã®ãã¯ãã«ã ãªã¹ããåæåãããšããè§æ¬åŒ§ã䜿çšãããC / C ++ã®ããã«äžæ¬åŒ§ã§ã¯ãããŸãã
let myvec = [1, 2, 3, 4];
ããã«ããããããããã¯ãã«ã¯åçãªããŒã¿æ§é ã§ãããç¹ã«ããã¯ãã«ã¯é£çµããµããŒãããŸãã
let v: mutable [int] = [1, 2, 3]; v += [4, 5, 6];
ãã¿ãŒã³ããããŸãã ãããã®æ§æã¯éåžžã«è«ççã§ãããC ++ããã®ããã³ãã¬ãŒããã®ããŒãã¯ãããŸããã é¢æ°ãã³ãã¬ãŒããšããŒã¿åããµããŒããããŠããŸãã
fn for_rev<T>(v: [T], act: block(T)) { let i = std::vec::len(v); while i > 0u { i -= 1u; act(v[i]); } } type circular_buf<T> = {start: uint, end: uint, buf: [mutable T]};
ãã®èšèªã¯ãããããã¿ã°ããµããŒãããŠããŸã ã ããã¯ãè¿œå ãã£ãŒã«ã-䜿çšããããªãã·ã§ã³ã®ã³ãŒãïŒã€ãŸããå ±çšäœãšåæåã®éã§å ±éãããã®ïŒãåããCã®å ±çšäœã«ãããŸããã ãŸãã¯ãçè«çãªèŠ³ç¹ããã代æ°çããŒã¿åã
tag shape { circle(point, float); rectangle(point, point); }
æãåçŽãªå Žåãã¿ã°ã¯åæãšåäžã§ãã
tag animal { dog; cat; } let a: animal = dog; a = cat;
ããè€éãªå Žåããåæãã®åèŠçŽ ã¯ãç¬èªã®ãã³ã³ã¹ãã©ã¯ã¿ããæã€ç¬ç«ããæ§é ã§ãã
ãã1ã€ã®èå³æ·±ãäŸã¯ãããªã¹ããã¿ã€ãã®ãªããžã§ã¯ããå®çŸ©ãããŠããååž°æ§é ã§ãã
tag list<T> { nil; cons(T, @list<T>); } let a: list<int> = cons(10, @cons(12, @nil));
ã¿ã°ã¯ãéåžžã«è€éãªãã¿ãŒã³ãããã³ã°åŒã«åå ã§ããŸãã
alt x { cons(a, @cons(b, _)) { process_pair(a,b); } cons(10, _) { process_ten(); } _ { fail; } }
ãã¿ãŒã³ãããã³ã°
ãŸãããããã³ã°ã®ãã¿ãŒã³ãæ¹åãããã¹ã€ãããšèŠãªãããšãã§ããŸãã altããŒã¯ãŒãã䜿çšãããç¶ããŠåæãããåŒã䜿çšããã次ã«ãªãã¬ãŒã¿ãŒã®æ¬äœã§-ãã¿ãŒã³ãšäžèŽããå Žåã®ãã¿ãŒã³ãšã¢ã¯ã·ã§ã³ã
alt my_number { 0 { std::io::println("zero"); } 1 | 2 { std::io::println("one or two"); } 3 to 10 { std::io::println("three to ten"); } _ { std::io::println("something else"); } }
ããã¿ãŒã³ããšããŠãå®æ°ïŒCãªã©ïŒã ãã§ãªããå€æ°ãã¿ãã«ãç¯å²ãåããã¬ãŒã¹ãã«ããŒæåïŒãã¬ãŒã¹ãã«ããŒãã_ãïŒãªã©ã®ããè€éãªåŒã䜿çšã§ããŸãã ãã¿ãŒã³ã®çŽåŸã«ããwhenã¹ããŒãã¡ã³ãã䜿çšããŠãè¿œå ã®æ¡ä»¶ãæå®ã§ããŸãã ãããã¿ã€ãã«ã¯ç¹å¥ãªæŒç®åãªãã·ã§ã³ããããŸãã ããã¯ãèšèªã«æ±çšããªã¢ã³ãåanyããã ããã®ãªããžã§ã¯ãã«ã¯ä»»æã®åã®å€ãå«ããããšãã§ããããã§ãã
ãã€ã³ã¿ãŒã éåžžã®ããã€ã³ã¿ãŒããã€ã³ã¿ãŒã«å ããŠãRustã¯çµã¿èŸŒã¿ã®åç §ã«ãŠã³ã-å ±æïŒå ±æããã¯ã¹ïŒãšäžæïŒäžæã®ããã¯ã¹ïŒãæã€ç¹å¥ãªãã¹ããŒãããã€ã³ã¿ãŒããµããŒãããŸãã ãããã¯ãC ++ã®shared_ptrããã³unique_ptrãšãã䌌ãŠããŸãã ãããã«ã¯ç¬èªã®æ§æããããŸãïŒ@ã¯å ±æããã¯äžæã§ãã äžæã®ãã€ã³ã¿ãŒã®å Žåãã³ããŒãã代ããã«ç¹å¥ãªæäœããããŸã-移åïŒ
let x = ~10; let y <- x;
ãã®ãããªç§»åã®åŸããã€ã³ã¿ãŒxã¯åæåãããŸããã
ã¯ããŒãžã£ãéšå䜿çšãã€ãã¬ãŒã¿
ãã®æç¹ãããé¢æ°åããã°ã©ãã³ã°ãå§ãŸããŸãã Rustã¯é«éé¢æ°ã®æŠå¿µãå®å šã«ãµããŒãããŠããŸããã€ãŸããåŒæ°ãšããŠä»ã®é¢æ°ãè¿ãããšãã§ããé¢æ°ã§ãã
1. lambdaããŒã¯ãŒãã¯ããã¹ããããé¢æ°ãŸãã¯é¢æ°ã®ããŒã¿åã宣èšããããã«äœ¿çšãããŸãã
fn make_plus_function(x: int) -> lambda(int) -> int { lambda(y: int) -> int { x + y } } let plus_two = make_plus_function(2); assert plus_two(3) == 5;
ãã®äŸã§ã¯ãintåã®1ã€ã®åŒæ°ãxããåãããint-> intãåã®é¢æ°ãè¿ãmake_plus_functioné¢æ°ããããŸãïŒããã§lambdaã¯ããŒã¯ãŒãã§ãïŒã ãã®é¢æ°ã¯ãé¢æ°ã®æ¬æã§èª¬æãããŠããŸãã ãreturnãæŒç®åããªãããšã¯å°ããããã«ããã§ãããFPã®å Žåãããã¯ããããããšã§ãã
2. blockããŒã¯ãŒãã䜿çšããŠãé¢æ°åïŒé¢æ°ãžã®åŒæ°ïŒã宣èšããŸããããã¯ãéåžžã®ã³ãŒãã®ãããã¯ã®ããã«èŠãããã®ã«çœ®ãæããããšãã§ããŸãã
fn map_int(f: block(int) -> int, vec: [int]) -> [int] { let result = []; for i in vec { result += [f(i)]; } ret result; } map_int({|x| x + 1 }, [1, 2, 3]);
ããã«ã¯ãå ¥åããããã¯ã«äŸçµŠãããé¢æ°ããããŸã-åºæ¬çã« "int-> int"åã®ã©ã ãé¢æ°ãšintåã®ãã¯ãã«ïŒä»¥äžã®ãã¯ãã«ã®æ§æã«ã€ããŠïŒã åŒã³åºãã³ãŒãå ã®ããããã¯ãèªäœã¯ãããçããæ§æ{| x | x + 1}ã å人çã«ã¯ãCïŒã®ã©ã ãã奜ãã§ãã ããã¯æ°žç¶çã«ãããåäœã®ORãšããŠèªèãããŸãïŒã¡ãªã¿ã«ãããã¯ãã¹ãŠã®å€ãè¯ãsyshnyæäœã®ããã«Rustã«ãååšããŸãïŒã
3.éšåçãªé©çšãšã¯ããã®å¥ã®é¢æ°ã®ããã€ãã®åŒæ°ã®å€ã瀺ãããšã«ãããå€æ°ã®åŒæ°ãæã€å¥ã®é¢æ°ã«åºã¥ããŠé¢æ°ãäœæããããšã§ãã ãããè¡ãã«ã¯ã bindããŒã¯ãŒããšãã¬ãŒã¹ãã«ããŒã_ãã䜿çšããŸãã
let daynum = bind std::vec::position(_, ["mo", "tu", "we", "do", "fr", "sa", "su"])
ããããããããããã«ã次ã®ãããªåçŽãªã©ãããŒãäœæããããšã§ãéåžžã®Cã§ãããå®è¡ã§ããããšãããã«èª¬æããŸãã
const char* daynum (int i) { const char *s ={"mo", "tu", "we", "do", "fr", "sa", "su"}; return s[i]; }
ããããéšåçãªã¢ããªã±ãŒã·ã§ã³ã¯æç¶ãåã§ã¯ãªãæ©èœçãªã¹ã¿ã€ã«ã§ãïŒãšããã§ãäžèšã®äŸãããåŒæ°ãªãã§é¢æ°ãååŸããããã«éšåçãªã¢ããªã±ãŒã·ã§ã³ãäœæããæ¹æ³ã¯æ確ã§ã¯ãããŸããïŒ
å¥ã®äŸïŒaddé¢æ°ã¯2ã€ã®intåŒæ°ã§å®£èšãããintãè¿ããŸãã 次ã«ãé¢æ°åsingle_param_fnã宣èšãããŸããããã¯ã1ã€ã®intåŒæ°ãæã¡ãintãè¿ããŸãã ãã€ã³ãã䜿çšããŠã2ã€ã®é¢æ°ãªããžã§ã¯ãadd4ããã³add5ã宣èšãããéšåçã«åŒæ°ãæå®ãããaddé¢æ°ã«åºã¥ããŠæ§ç¯ãããŸãã
fn add(x: int, y: int) -> int { ret x + y; } type single_param_fn = fn(int) -> int; let add4: single_param_fn = bind add(4, _); let add5: single_param_fn = bind add(_, 5);
æ©èœãªããžã§ã¯ãã¯ãéåžžã®é¢æ°ãšåæ§ã«åŒã³åºãããšãã§ããŸãã
assert (add(4,5) == add4(5)); assert (add(4,5) == add5(4));
4.çŽç²ãªé¢æ°ãšè¿°èª
çŽç²ãªé¢æ°ã¯ãå¯äœçšã®ãªãé¢æ°ã§ãïŒçŽç²ãªé¢æ°ä»¥å€ã®é¢æ°ãåŒã³åºããªãé¢æ°ãå«ãïŒã ãã®ãããªé¢æ°ã¯ãããŒã¯ãŒãpureã«ãã£ãŠæŒãåºãããŸãã
pure fn lt_42(x: int) -> bool { ret (x < 42); }
è¿°èªã¯ããŒã«åãè¿ãçŽç²ãªé¢æ°ã§ãã ãã®ãããªé¢æ°ã¯ãtypestateã·ã¹ãã ïŒä»¥äžãåç §ïŒã§äœ¿çšã§ããŸããã€ãŸããããŸããŸãªéçãã§ãã¯ã®ã³ã³ãã€ã«æ®µéã§åŒã³åºãããŸãã
æ§æãã¯ã
èšç»ãããæ©èœã§ãããéåžžã«äŸ¿å©ã§ãã Rustã§ã¯ããŸã åæéçºæ®µéã«ãããŸãã
std::io::println(#fmt("%s is %d", "the answer", 42));
printfã®åŒã«äŒŒãŠããŸãããã³ã³ãã€ã«æã«å®è¡ãããåŒïŒãããã£ãŠããã¹ãŠã®åŒæ°ãšã©ãŒã¯ã³ã³ãã€ã«æ®µéã§æ€åºãããŸãïŒã æ®å¿µãªãããæ§æãã¯ãã«é¢ããè³æã¯éåžžã«å°ãªãããããèªäœã¯éçºäžã§ããã Nemerleãã¯ãã®ãããªãã®ãå€æããå¯èœæ§ããããŸãã
ã¡ãªã¿ã«ãåãNemerleãšã¯ç°ãªããïŒèšå·ã䜿çšããŠãã¯ããæ§æçã«éžæãã決å®ã¯éåžžã«èªã¿æžãã容æã ãšèããŠããŸãïŒãã¯ãã¯é¢æ°ãšã¯éåžžã«ç°ãªããšã³ãã£ãã£ã§ãããã³ãŒãå ã®ã©ãã§é¢æ°ãåŒã³åºãããŠããããèŠãããšãéèŠã ãšæããŸã-ãã¯ãã
å±æ§
CïŒå±æ§ã«äŒŒãæŠå¿µïŒããã³åæ§ã®æ§æã§ãïŒã ãã®ãããéçºè ã«æè¬ããŸãã äºæ³ã©ãããå±æ§ã¯æ³šéãä»ãããšã³ãã£ãã£ã«ã¡ã¿æ å ±ãè¿œå ãã
#[cfg(target_os = "win32")] fn register_win_service() { /* ... */ }
å±æ§æ§æã®å¥ã®ããªã¢ã³ããçºæãããŸãã-åãè¡ã§ãããæåŸã«ã»ãã³ãã³ããããçŸåšã®ã³ã³ããã¹ãã«æ³šéãä»ããŸãã ã€ãŸãããã®ãããªå±æ§ãã«ããŒããæãè¿ãäžæ¬åŒ§ã«äžèŽãããã®ã§ãã
fn register_win_service() { #[cfg(target_os = "win32")]; /* ... */ }
䞊åèšç®
ãããããèšèªã®æãèå³æ·±ãéšåã®1ã€ã§ãã ããã«ããã¥ãŒããªã¢ã«ã¯çŸåšã®ãšãããŸã£ãã説æãããŠããŸãã:)
Rustããã°ã©ã ã¯ããã¿ã¹ã¯ããªãŒãã§æ§æãããŠããŸãã åã¿ã¹ã¯ã«ã¯ãå ¥åé¢æ°ãç¬èªã®ã¹ã¿ãã¯ãä»ã®ã¿ã¹ã¯ãšã®çžäºäœçšã®æ段ïŒçºä¿¡æ å ±ã®ãã£ãã«ãšçä¿¡ã®ããŒãïŒããããåçããŒãå ã®ãªããžã§ã¯ãã®äžéšãææããŠããŸãã
å€ãã®Rustã¿ã¹ã¯ã¯ãåããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ããã»ã¹å ã«ååšã§ããŸãã Rustã¿ã¹ã¯ã¯ã軜éãã§ããåã¿ã¹ã¯ã¯OSããã»ã¹ãããã¡ã¢ãªãæ¶è²»ãããOSããã»ã¹éã®åãæ¿ããããã¿ã¹ã¯éã®åãæ¿ããé«éã§ãïŒããã§ã¯ããããããã¹ãŠåãããããŒããæå³ããŸãïŒã
ã¿ã¹ã¯ã¯ãåŒæ°ã®ãªãå°ãªããšã1ã€ã®é¢æ°ã§æ§æãããŸãã ã¿ã¹ã¯ã¯ãspawné¢æ°ã䜿çšããŠèµ·åãããŸãã åã¿ã¹ã¯ã«ã¯ãä»ã®ã¿ã¹ã¯ã«æ å ±ã転éãããã£ãã«ãå«ããããšãã§ããŸãã ãã£ãã«ã¯ããã£ãã«ããŒã¿ã¿ã€ãã«ãã£ãŠãã©ã¡ãŒã¿åãããç¹å¥ãªchanã¿ã€ãã®ãã³ãã¬ãŒãã§ãã ããšãã°ãchanã¯ç¬Šå·ãªããã€ããéä¿¡ããããã®ãã£ãã«ã§ãã
ãã£ãã«ã«éä¿¡ããã«ã¯ãsendé¢æ°ã䜿çšããŸããæåã®åŒæ°ã¯ãã£ãã«ã§ã2çªç®ã¯éä¿¡ããå€ã§ãã å®éããã®é¢æ°ã¯å€ãå éšãã£ãã«ãããã¡ã«é 眮ããŸãã
ããŒãã¯ããŒã¿ã®åä¿¡ã«äœ¿çšãããŸãã ããŒãã¯ãããŒãããŒã¿ã¿ã€ãã«ãã£ãŠãã©ã¡ãŒã¿ãŒåãããæ±çšããŒãã¿ã€ãã§ããããŒã-笊å·ãªããã€ããåä¿¡ããããã®ããŒãã
ããŒãããèªã¿åãã«ã¯ãrecvé¢æ°ã䜿çšãããŸããåŒæ°ã¯ããŒãã§ãããæ»ãå€ã¯ããŒãããã®ããŒã¿ã§ãã èªã¿åãã¯ã¿ã¹ã¯ããããã¯ããŸãã ããŒãã空ã®å Žåãå¥ã®ã¿ã¹ã¯ãããŒãã«æ¥ç¶ãããŠãããã£ãã«ã«ããŒã¿ãéä¿¡ãããŸã§ãã¿ã¹ã¯ã¯åŸ æ©ç¶æ ã«ãªããŸãã
ãã£ãã«ãããŒãã«ãªã³ã¯ããã®ã¯éåžžã«ç°¡åã§ã-chanããŒã¯ãŒãã䜿çšããŠããŒãã§ãã£ãã«ãåæåããããšã«ããïŒ
let reqport = port();
let reqchan = chan(reqport);
è€æ°ã®ãã£ãã«ã1ã€ã®ããŒãã«æ¥ç¶ã§ããŸããããã®éã¯ã§ããŸããã1ã€ã®ãã£ãã«ãè€æ°ã®ããŒãã«åæã«æ¥ç¶ããããšã¯ã§ããŸããã
ã¿ã€ãã¹ããŒã
ãtypestateãã®æŠå¿µã®ãã·ã¢èªãžã®äžè¬çã«åãå ¥ããããŠãã翻蚳ãèŠã€ãããªãã£ãããããtype stateããšåŒã³ãŸãã ãã®æ©èœã®æ¬è³ªã¯ãéçåä»ãã§æ¡çšãããŠããéåžžã®åå¶åŸ¡ã«å ããŠãã³ã³ãã€ã«æ®µéã§è¿œå ã®ã³ã³ããã¹ããã§ãã¯ãå¯èœã§ããããšã§ãã
äœããã®åœ¢ã§ãåã®ç¶æ ã¯ãã¹ãŠã®ããã°ã©ããŒã«ããç¥ãããŠããŸã-ã³ã³ãã€ã©ãŒã«ãããšããå€æ°ã¯åæåãªãã§äœ¿çšãããŸããã ã³ã³ãã€ã©ãŒã¯ããããŸã§ã¬ã³ãŒãããªãã£ãå€æ°ãèªã¿åãã«äœ¿çšãããå Žæã決å®ããèŠåãçæããŸãã ããäžè¬çã«ã¯ããã®èãã¯æ¬¡ã®ããã«ãªããŸããåãªããžã§ã¯ãã«ã¯ãåãåŸãç¶æ ã®ã»ããããããŸãã ãã®ãªããžã§ã¯ãã®åç¶æ ã§ã¯ãæå¹ãªæäœãšç¡å¹ãªæäœãå®çŸ©ãããŠããŸãã ãŸããã³ã³ãã€ã©ã¯ãããå ŽæãŸãã¯å¥ã®å Žæã§ãªããžã§ã¯ãã«å¯Ÿããç¹å®ã®æäœãèš±å¯ãããŠãããã©ããã確èªã§ããŸãã ãããã®ãã§ãã¯ã¯ãã³ã³ãã€ã«æ®µéã§å®è¡ããããšãéèŠã§ãã
ããšãã°ããfileãã¿ã€ãã®ãªããžã§ã¯ããããå Žåããclosedãããã³ãopenãã®ç¶æ ã«ãªããŸãã ãŸãããã¡ã€ã«ãéããããŠããå Žåããã¡ã€ã«ããã®èªã¿åãæäœã¯åãå ¥ããããŸããã çŸä»£ã®èšèªã§ã¯ãéåžžãèªã¿åãé¢æ°ã¯äŸå€ãã¹ããŒãããããšã©ãŒã³ãŒããè¿ããŸãã åç¶æ ã·ã¹ãã ã¯ãã³ã³ãã€ã«æ®µéã§ãã®ãããªãšã©ãŒãæ€åºã§ããŸã-ã³ã³ãã€ã©ããå¯èœãªèªã¿åãæäœã®åã«å€æ°èªã¿åãæäœãçºçãããšå€æããã®ãšåæ§ã«ããã¡ã€ã«ã®ãªãŒãã³ç¶æ ã§æå¹ãªReadã¡ãœãããåŒã³åºããããšå€æã§ããŸããªããžã§ã¯ãããã®ç¶æ ã«è»¢éãããOpenãã¡ãœããã«ã
Rustã«ã¯ãè¿°èªããšããæŠå¿µããããŸã-å¯äœçšããªããããŒã«åãè¿ãç¹å¥ãªé¢æ°ã§ãã ãã®ãããªé¢æ°ã¯ãç¹å®ã®æ¡ä»¶ã®éçãã§ãã¯ã®ç®çã§ã³ã³ãã€ã«æ®µéã§åŒã³åºãããã³ã³ãã€ã©ãŒã«ãã£ãŠäœ¿çšãããŸãã
å¶çŽã¯ãã³ã³ãã€ã«æ®µéã§å®è¡ã§ããç¹å¥ãªãã§ãã¯ã§ãã ãããè¡ãã«ã¯ãcheckããŒã¯ãŒãã䜿çšããŸãã
pure fn is_less_than(int a, int b) -< bool { ret a < b; } fn test() { let x: int = 10; let y: int = 20; check is_less_than(x,y); }
ãã®æ¹æ³ã§ãé¢æ°ã®å ¥åãã©ã¡ãŒã¿ãŒã«è¿°èªãããã³ã°ããããããšãã§ããŸãã
fn test(int x, int y) : is_less_than(x,y) { ... }
ã¿ã€ãã¹ããŒãã«é¢ããæ å ±ã¯ã»ãšãã©ãªããããå€ãã®ç¹ã¯ãŸã æ確ã§ã¯ãããŸããããã³ã³ã»ããã¯ãšã«ããèå³æ·±ããã®ã§ãã
以äžã§ãã ããã«ãããããããç§ã¯ããã€ãã®èå³æ·±ãç¹ãèŠéããå¯èœæ§ããããŸãããèšäºã¯ãã§ã«èšãäžãã£ãŠããŸããã å¿ èŠã«å¿ããŠãRustã³ã³ãã€ã©ãã³ã³ãã€ã«ããããŸããŸãªäŸãè©ŠããŠã¿ãŠãã ããã ã¢ã»ã³ããªæ å ±ã¯ã å ¬åŒèšèªã®Webãµã€ãã§å ¥æã§ããŸãã