Yahoo!ã®ãšã³ãžãã¢ã§ããArthur Liaoã®ããã°ã®èšäºãRust Borrow and Lifetimesãã®ç¿»èš³ã玹ä»ããŸããRustã¯ã
ããŒãžã§ã³1.0ãã掻çºã«éçºã
ããŠããæ°ããããã°ã©ãã³ã°èšèªã§ãã Rustãšããããªãã¯ãŒã«ãªã®ãã«ã€ããŠå¥ã®ããã°ãæžãããšãã§ããŸãããä»æ¥ã¯åçšã·ã¹ãã ãšèªåèªèº«ãå«ãå€ãã®æ°äººãæ··ä¹±ããã寿åœã«çŠç¹ãåœãŠãŸãã ãã®æçš¿ã§ã¯ãRustã®åºæ¬çãªç解ãããããšãåæãšããŠããŸãã ããã§ãªãå Žåã¯ãæåã«
ã¬ã€ãèªäœãš
éæ¡å
ã¬ã€ããèªãããšãã§ããŸãã
ãªãœãŒã¹æææš©ãšåå
¥
Rustã¯ãæŽç·Žãããåçšã·ã¹ãã ã䜿çšããããšã«ãããã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãªãã§ã¡ã¢ãªã»ãã¥ãªãã£ãæäŸããŸãã ãªãœãŒã¹ã解æŸããŠãããªãœãŒã¹ã«ã¯ãå°ãªããšã1人ã®ææè
ãããŸãã ïŒãŸãã¯ïŒmutã䜿çšããŠãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããã®æ°ãããã€ã³ããŒãäœæã§ããŸããããã¯ãåçšããã³å¯å€åçšãšåŒã°ããŸãã ã³ã³ãã€ã©ã¯ããã¹ãŠã®ææè
ãšåãæã®é©åãªåäœãç£èŠããŸãã
ã³ããŒããŠç§»å
åçšã·ã¹ãã ã«ç§»è¡ããåã«ãRustã§copyããã³moveã¡ãœãããã©ã®ããã«åŠçãããããç¥ãå¿
èŠããããŸãã
StackOverflowããã®ãã®
åçã¯ãèªãã ãã§
ååã§ãã äžè¬ã«ãå²ãåœãŠãšé¢æ°ã§ã¯ã次ã®ããã«åŒã³åºãããŸãã
1.å€ãã³ããŒãããå ŽåïŒããªããã£ãåã®ã¿ãé¢äžããã¡ã¢ãªããã¡ã€ã«åŠçãªã©ã®ãªãœãŒã¹ãé¢äžããªãå ŽåïŒãã³ã³ãã€ã©ãŒã¯ããã©ã«ãã§ã³ããŒããŸãã
2.ãã以å€ã®å Žåãã³ã³ãã€ã©ã¯æææš©ã転éïŒè»¢éïŒããå
ã®ãã€ã³ãã£ã³ã°ãç¡å¹ã«ããŸãã
èŠããã«ããããïŒå€ãããŒã¿ã®èªã¿åãïŒ=>ã³ããŒãéãããïŒç·åœ¢ã¿ã€ãïŒ=>移åã
åèã®ããã«ãè¿œå ã®æ³šæäºé
ãããã€ããããŸãã
* Rustã³ããŒæ¹æ³ã¯Cã«äŒŒãŠããŸãã å€ããšã®äœ¿çšã¯ãã»ãã³ãã£ãã¯ã³ããŒãŸãã¯ã¯ããŒã³ã§ã¯ãªãããã€ãã³ããŒïŒã·ã£ããŠmemcpyã³ããŒã¡ãœããïŒã§ãã
*ãããæ§é ãã³ããŒäžå¯ã«ããã«ã¯ãNoCopyããŒã«ãŒãã£ãŒã«ãã䜿çšããããããããç¹æ§ãå®è£
ããŸãã
移ååŸãæææš©ã¯æ¬¡ã®ææè
ã«ç§»ãããŸãã
ãªãœãŒã¹ãªãªãŒã¹
Rustã§ã¯ã次ã®å Žåãªã©ãæææš©ããªããªããšããã«ãªããžã§ã¯ãã解æŸãããŸãã
1.ææè
ã¯ãšãªã¢ã®å€ã«ãããã
2.ãã€ã³ãã£ã³ã°ã®æææš©ãå€æŽãããŸãïŒããã«ãããå
ã®ãã€ã³ãã£ã³ã°ã¯ç¡å¹ã«ãªããŸãïŒ
ææè
ïŒåãæïŒãšåãæïŒåãæïŒã®ç¹æš©ãšå¶é
ãã®ã»ã¯ã·ã§ã³ã¯ãç¹æš©ã®èŠ³ç¹ããã³ããŒãšç§»åã®æ¹æ³ãåç
§ããRustãã³ãããã¯ã«åºã¥ããŠããŸãã
ææè
ã«ã¯ããã€ãã®ç¹æš©ããããŸãã ãããŠå€åïŒ
1.ãªãœãŒã¹å²ãåœãŠãç£èŠãã
2.ãªãœãŒã¹ãå€æŽããã«åããïŒè€æ°ã®åãå
¥ãïŒãŸãã¯å€æŽå¯èœïŒæä»çïŒã§ã
3.æææš©ã®ç§»è»¢ïŒç§»è»¢ã䌎ãïŒã
ææè
ã«ã¯ããã€ãã®å¶éããããŸãã
1.åçšã®ããã»ã¹ã§ã¯ãææè
ã¯ïŒaïŒãªãœãŒã¹ãå€æŽããããïŒbïŒå€æŽããã圢åŒã§åçšããããšã¯ã§ããŸããã
2.å¯å€åå
¥ã®ããã»ã¹ã§ã¯ãææè
ã¯ïŒaïŒãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããšãïŒbïŒåããããšãã§ããŸããã
åãæã«ã¯ããã€ãã®ç¹æš©ããããŸãã åãæã¯ãã¢ã¯ã»ã¹ã®ååŸãŸãã¯åãããªãœãŒã¹ã®å€æŽã«å ããŠãå¥ã®åãæãšå
±æããããšãã§ããŸãã
1.åçšè
ã¯ããã€ã³ã¿äžå€ã®åçšãé
åžïŒã³ããŒïŒã§ããŸãã
2.å€ååå
¥äººã¯å€ååå
¥ãè²æž¡ïŒç§»åïŒã§ããŸãã ïŒå¯å€åç
§ã移åãããŠããããšã«æ³šæããŠãã ããïŒã
ã³ãŒãäŸ
ååãªè©±ã ããã€ãã®ã³ãŒããèŠãŠã¿ãŸãããïŒplay.rust-lang.orgã§Rustã³ãŒããå®è¡ã§ããŸãïŒã 次ã®ãã¹ãŠã®äŸã§ã¯ããstruct Fooãã䜿çšããŸããããã¯ãããã¯ãããïŒåçã«å²ãåœãŠãããïŒå€ãå«ãããã³ããŒã§ããªãFooæ§é ã§ãã ã³ããŒäžå¯èœãªãªãœãŒã¹ã䜿çšãããšãæäœã®å¯èœæ§ãå¶éãããŸããããã¯ã調æ»æ®µéã§ã¯è¯ãèãã§ãã
ãµã³ãã«ã³ãŒãããšã«ãææè
ãåãæãªã©ã®é åã瀺ãããã«ãå°åã°ã©ããã瀺ãããŠããŸããã¿ã€ãã«ããŒã®æ³¢æ¬åŒ§ã¯ãã³ãŒãèªäœã®äžæ¬åŒ§ãšäžèŽããŠããŸãã
ææè
ã¯ãå€æ°åå
¥ã®ããã»ã¹ã§ãªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããŸãã
ãprintlnïŒãã®æåŸã®è¡ã®ã³ã¡ã³ããå€ããªãéãã次ã®ã³ãŒãã¯ã³ã³ãã€ã«ãããŸããã
struct Foo { f: Box<int>, } fn main() { let mut a = Foo { f: box 0 };
ããã¯ææè
ã®å¶éïŒ2ïŒaïŒã«éåããŸãã ãã¹ãããããããã¯ã«ãlet x =ïŒmut a;ããå
¥ãããšãprintlnè¡ã®åã§åçšãçµäºããŸãã ããã¯ããŸããããããããŸããïŒ
fn main() { let mut a = Foo { f: box 0 }; {
åãæã¯å€æ°ã®åãå
¥ããæ°ããåãæã«ç§»ãããšãã§ããŸã
ãã®ã³ãŒãã¯ãåãæïŒ2ã®ç¹æš©ã瀺ããŠããŸããå€æ°åãæxã¯ãå€æ°åãå
¥ããæ°ããåãæyã«è»¢éïŒç§»åïŒã§ããŸãã
fn main() { let mut a = Foo { f: box 0 };
移ååŸãå
ã®åãæxã¯åãããªãœãŒã¹ã«ã¢ã¯ã»ã¹ã§ããªããªããŸãã
åå
¥ãšãªã¢
ããã«ãªã³ã¯ïŒïŒãšïŒmutïŒãæž¡ããšãã¹ãŠãé¢çœããªããå€ãã®åå¿è
ãæ··ä¹±ããŸãã
ç涯
åå
¥ã®å
šæŽå²ã«ãããŠãåãæã«ããåãå
¥ãã¯ã©ãã§å§ãŸããã©ãã§çµããããç¥ãããšãéèŠã§ãã
ã©ã€ãã¿ã€ã ã¬ã€ãã§ã¯ãããã
ã©ã€ãã¿ã€ã ãšåŒã³ãŸãã
ã©ã€ãã¿ã€ã ã¯ããã€ã³ã¿ãŒãæå¹ãªå®è¡è·é¢ã®éçãªæšå®å€ã§ããåžžã«ãããã°ã©ã å
ã®åŒãŸãã¯ãããã¯ã«å¯Ÿå¿ããŸãã
ïŒ=åçš
åçšã«ã€ããŠã®ããã€ãã®èšèã ãŸããïŒ=åçšãããã³ïŒmut =å¯å€åçšã§ããããšãæãåºããŠãã ããã ïŒèšå·ã衚瀺ããããšããã¯ã©ãã§ããããã¯åçšã§ãã
次ã«ãïŒèšå·ãåæ§é äœïŒãã£ãŒã«ãå
ïŒãŸãã¯é¢æ°/ã¯ããŒãžã£ãŒïŒæ»ãå€åãŸãã¯ãã£ããã£ãŒããããªã³ã¯ïŒã«è¡šç€ºãããå Žåããã®ãããªæ§é äœ/é¢æ°/ã¯ããŒãžã£ãŒã¯åçšè
ã§ããããã¹ãŠã®åçšèŠåãé©çšãããŸãã
第äžã«ãåå
¥ããšã«ææè
ãšåäžã®åãæãŸãã¯è€æ°ã®åãæãããŸãã
ããŒã³ãšãªã¢ã®æ¡å€§
ããŒã³ã®åéã«ã€ããŠäžèšã ãŸããããŒã³å°åïŒ
åå
¥ãæå¹ãªå°åã§ããã
-åãæã¯ããŒã³ã®ç¯å²ãæ¡å€§ã§ããŸãïŒä»¥äžãåç
§ïŒã
第äºã«ãåãæã¯ãå²ãåœãŠãŸãã¯é¢æ°åŒã³åºãã§çºçããã³ããŒïŒäžå€ã®åå
¥ïŒãŸãã¯ç§»åïŒäžå€ã®ããŒã³ïŒãéããŠããŒã³ã®ç¯å²ãæ¡å€§ã§ããŸãã åä¿¡è
ïŒããã¯ãæ°ããæ¥ç¶ãæ§é ãæ©èœããŸãã¯ã¯ããŒãžã£ã§ããå ŽåããããŸãïŒãæ°ããåãæã«ãªããŸãã
第äžã«ãããŒã³å°åã¯ãã¹ãŠã®åãæã®ãšãªã¢ã®
çµåã§ãããåãããªãœãŒã¹ã¯ããŒã³å°åå
šäœã§æå¹ã§ãªããã°ãªããŸããã
ããŒã³åŒ
ããã§ãããŒã³ã®å
¬åŒãã§ããŸããã
ãªãœãŒã¹é å> =ããŒã³é å=ãã¹ãŠã®åãæã®é åã®çµå
ã³ãŒãäŸ
ããŒã³ã®ç¯å²ãæ¡å€§ããããã€ãã®äŸãèŠãŠã¿ãŸãããã struct Fooæ§é ã¯ä»¥åãšåãã§ãã
fn main() { let mut a = Foo { f: Box::new(0) }; let y: &Foo; if false {
ããŒã³ãifãããã¯å
ã§çºçããåãæxãifãããã¯ãè¶
ãããšããŠãã圌ã¯å²ãåœãŠy = x;ãä»ããŠåãå
¥ãã®ç¯å²ãæ¡å€§ããããã2ã€ã®åãæxãšyããããŸãã ããŒã³ã®åŒã«ãããšãããŒã³ã®é åã¯åãæxãšåãæyã®çµåã§ãããæåã®ããŒã³let x =ïŒa; æ¬äœã®æåŸãŸã§ã ïŒlet yïŒïŒFoo;ãã€ã³ãã£ã³ã°ã¯åãæã§ã¯ãªãããšã«æ³šæããŠãã ããïŒ
æ¡ä»¶ã¯åžžã«falseã§ãããããifãããã¯ã¯æ±ºããŠæºããããªãããšã«æ°ä»ãããããããŸããããã³ã³ãã€ã©ã¯ãªãœãŒã¹ `a`ã®ææè
ããªãœãŒã¹ã«ã¢ã¯ã»ã¹ããããšãäŸç¶ãšããŠé²ããŸãã ããã¯ããã¹ãŠã®ããŒã³ãã§ãã¯ãã³ã³ãã€ã«æã«è¡ãããå®è¡æã«ã¯äœãããªãããã§ãã
è€æ°ã®ãªãœãŒã¹ãåãã
ãããŸã§ã®ãšããã1ã€ã®ãªãœãŒã¹ããã®åçšã®ã¿ã«çŠç¹ãåœãŠãŠããŸããã åãæã¯è€æ°ã®ãªãœãŒã¹ãåãããšãã§ããŸããïŒ ãã¡ããïŒ ããšãã°ãé¢æ°ã¯2ã€ã®ãªã³ã¯ãååŸããç¹å®ã®åºæºã«å¿ããŠ1ã€ãè¿ãããšãã§ããŸããããšãã°ãã©ã¡ãã®ãªã³ã¯ãä»ã®ãªã³ã¯ããã倧ããããªã©ã§ãã
fn max(x: &Foo, y: &Foo) -> &Foo
maxé¢æ°ã¯ïŒãã€ã³ã¿ãŒãè¿ããããåãæã§ãã è¿ãããçµæã¯ã€ã³ããŠã³ããªã³ã¯ã®ããããã«ãªãå¯èœæ§ãããããã2ã€ã®ãªãœãŒã¹ãåçšããŸãã
ååä»ãããŒã³ãšãªã¢
å
¥åãšããŠè€æ°ã®ïŒãã€ã³ã¿ãŒãããå Žå
ãã©ã€ãã¿ã€ã ã¬ã€ãã§å®çŸ©ãã
ãååã§
ãã©ã€ãã¿ã€ã ã䜿çšããŠãããã®é¢ä¿ã瀺ãå¿
èŠããããŸãã ããããä»ã®ãšããã¯ãããããååä»ãããŒã³ãšãªã¢ãšåŒã³ãŸãããã
äžèšã®ã³ãŒãã¯ãåãæéã®é¢ä¿ã瀺ãããšãªãã«ã³ã³ãã€ã©ãŒã«ãã£ãŠåãå
¥ããããŸãããã€ãŸããåãæãã€ãŸãããŒã³é åã«ã°ã«ãŒãåãããåãæã§ãã ãã®å®è£
ã¯æ£ããã§ãããïŒ
fn max<'a>(x: &'a Foo, y: &'a Foo) -> &'a Foo { if xf > yf { x } else { y } } ( 'a'.) max( { } ) *x <--------------> *y <--------------> 'a <==============> x |___| y |___| |___|
ãã®é¢æ°ã«ã¯ã1ã€ã®ããŒã³é åãaããš3ã€ã®åãæããããŸãã2ã€ã®å
¥åãã©ã¡ãŒã¿ãŒãšãé¢æ°ã«ãã£ãŠè¿ãããçµæã§ãã äžèšã®åå
¥åŒã¯åŒãç¶ãé©çšãããŸãããä»ã§ã¯ãã¹ãŠã®åå
¥ãªãœãŒã¹ãåŒãæºããå¿
èŠããããŸãã 以äžã®äŸãåç
§ããŠãã ããã
ã³ãŒãäŸ
次ã®ã³ãŒãã§maxé¢æ°ã䜿çšããŠãaãšbããæãå€ããéžæããŠã¿ãŸãããã
fn main() { let a = Foo { f: Box::new(1) }; let y: &Foo; if false { let b = Foo { f: Box::new(0) }; let x = max(&a, &b);
let x = maxïŒïŒaãïŒbïŒ;ã®åã« ïŒaããã³ïŒbã¯åŒã§ã®ã¿æå¹ãªäžæåç
§ã§ããã3çªç®ã®åãæxã¯ifãããã¯ã®æåŸãŸã§2ã€ã®ãªãœãŒã¹ïŒäž¡æ¹ãšãåãæãã§ãã¯ãããå Žåã¯aãŸãã¯bã®ããããïŒã䜿çšããããããã¹ãŠãé 調ã§ããããŒã³ã¯let x = maxïŒïŒaãïŒbïŒ; ifãããã¯ã®æåŸãŸã§ã ãªãœãŒã¹aããã³bã¯ãããŒã³é åå
šäœã§æå¹ã§ãããããããŒã³ã®åŒãæºãããŸãã
ããã§ãæåŸã®å€y = x;ã®ã³ã¡ã³ããå€ããšãyã4çªç®ã®åãæã«ãªããã¡ã€ã³ãããã¯ã®æåŸãŸã§ããŒã³é åãå¢å ãããã®çµæããªãœãŒã¹bãããŒã³èšç®åŒãã¹ãã«å€±æããŸãã
åãæãšããŠã®æ§é
é¢æ°ãšã¯ããŒãžã£ã«å ããŠãæ§é ã¯ãã®é åã§è€æ°ã®åç
§ãç¶æããªãããããã€ãã®ãªãœãŒã¹ãå æããããšãã§ããŸãã 以äžã®äŸãšãããŒã³ã®åŒãã©ã®ããã«é©çšãããããèŠãŠã¿ãŸãããã Linkæ§é ã䜿çšããŠãªã³ã¯ãä¿åããŸãããïŒäžå€ã®åçšïŒïŒ
struct Link<'a> { link: &'a Foo, }
æ§é ã¯ããã€ãã®ãªãœãŒã¹ãåããŸã
ãã£ãŒã«ãã1ã€ã ãã®å Žåã§ãããªã³ã¯æ§é ã«ã¯è€æ°ã®ãªãœãŒã¹ã䜿çšã§ããŸãã
fn main() { let a = Foo { f: Box::new(0) }; let mut x = Link { link: &a }; if false { let b = Foo { f: Box::new(1) };
äžèšã®äŸã§ã¯ãåãæxã¯ææè
aãããªãœãŒã¹ãåããŠããã貞ãåºããšãªã¢ã¯ã¡ã€ã³ãããã¯ã®æåŸãŸã§è¡ããŸãã ãã¹ãŠé 調ã§ãã æåŸã®è¡x.link =ïŒb;ã®ã³ã¡ã³ããå€ããšãxã¯ææè
bãããªãœãŒã¹ãåçšããããšãããªãœãŒã¹bã¯ããŒã³èšç®åŒãã¹ãã«å€±æããŸãã
è¿ãå€ãªãã§ããŒã³é åãæ¡åŒµããæ©èœ
æ»ãå€ã®ãªãé¢æ°ã¯ãå
¥åãã©ã¡ãŒã¿ãŒãä»ããŠããŒã³ã®ç¯å²ãæ¡åŒµããããšãã§ããŸãã ããšãã°ãstore_fooé¢æ°ã¯Linkãžã®å¯å€ãªã³ã¯ãåãå
¥ããFooïŒäžå€ãªåçšïŒãªã³ã¯ãããã«ä¿åããŸãã
fn store_foo<'a>(x: &mut Link<'a>, y: &'a Foo) { x.link = y; }
次ã®ã³ãŒãã§ã¯ãåçšãããªãœãŒã¹ããªãœãŒã¹ãææããŠããŸãã ãªã³ã¯æ§é ã¯çžäºã«åãæxãåç
§ããŸãïŒã€ãŸãã* xã¯åãæã§ãïŒã ããŒã³ãšãªã¢ã¯ã¡ã€ã³ãããã¯ã®æåŸãŸã§è¡ããŸãã
fn main() { let a = Foo { f: Box::new(0) }; let x = &mut Link { link: &a }; if false { let b = Foo { f: Box::new(1) };
æåŸã®è¡ã®ã³ã¡ã³ãã解é€ããå Žåstore_fooïŒxãïŒbïŒ; ãã®é¢æ°ã¯ãïŒbãx.linkã«ä¿åããããšããŸãããªãœãŒã¹bã®é åã¯ããŒã³é åå
šäœãã«ããŒããŠããªãããããªãœãŒã¹bãå¥ã®åå
¥ãªãœãŒã¹ã«ããããŒã³èšç®åŒã®ãã¹ãã«å€±æããŸãã
è€æ°ã®ããŒã³ãšãªã¢
é¢æ°ã«ã¯ãããã€ãã®ååä»ãããŒã³é åããããŸãã äŸïŒ
fn superstore_foo<'a, 'b>(x: &mut Link<'a>, y: &'a Foo, x2: &mut Link<'b>, y2: &'b Foo) { x.link = y; x2.link = y2; }
ãã®ïŒããããããŸãæçšã§ã¯ãªãïŒæ©èœã«ã¯ã2ã€ã®ç°ãªãããŒã³é åãå«ãŸããŸãã åããŒã³å°åã«ã¯ãç¬èªã®åå
¥åŒããããŸãã
ç涯ãæ··ä¹±ããçç±
æåŸã«ãRustã®ããŒã³ã·ã¹ãã ã§äœ¿çšãããåç¶æéãšããçšèªãçŽãããããšæãçç±ã説æããŸãïŒãããã£ãŠããã®ããã°ã§ã¯ãã®çšèªã®äœ¿çšãé¿ããŠããŸãïŒã
ããŒã³ã«ã€ããŠè©±ããšãããç涯ãã«ã¯3ã€ã®ã¿ã€ãããããŸãã
AïŒãªãœãŒã¹ã®ææè
ã®å¯¿åœïŒãŸãã¯ææ/åçšãããªãœãŒã¹ïŒ
BïŒããŒã³å
šäœã®ãåç¶æéããã€ãŸã æåã®ããŒã³ããè¿åãŸã§
CïŒåã
ã®åãæãŸãã¯åãããã€ã³ã¿ã®å¯¿åœ
誰ãããååšæéããšããçšèªã話ããšãã圌ã¯äžèšã®ãããããæå³ãããããããŸããã è€æ°ã®ãªãœãŒã¹ãšåãæãé¢äžããŠããå Žåããã¹ãŠãããã«æ··ä¹±ããŸãã ããšãã°ãé¢æ°ãŸãã¯æ§é äœã®å®£èšã§ãååä»ãã©ã€ãã¿ã€ã ãã¯äœãããŸããïŒ ããã¯AãBããŸãã¯Cãæå³ããŸããïŒ
以åã®maxé¢æ°ã§ã¯ïŒ
fn max<'a>(x: &'a Foo, y: &'a Foo) -> &'a Foo { if xf > yf { x } else { y } }
ãaãã®åç¶æéãšã¯ã©ãããæå³ã§ããïŒ 2ã€ã®ãªãœãŒã¹ãé¢ä¿ããååšæéãç°ãªããããããã¯Aã§ãã£ãŠã¯ãªããŸããã xãyãããã³é¢æ°ã®æ»ãå€ã®3ã€ã®åãæãããããããã¯ãã¹ãŠç°ãªãã©ã€ãã¿ã€ã ãæã£ãŠãããããCã«ããããšã¯ã§ããŸããã ããã¯Bãæå³ããŸããïŒ ããããã ããããããŒã³ã®å
šé åã¯ç¹å®ã®ãªããžã§ã¯ãã§ã¯ãããŸãããã©ã®ããã«ããŠãååšæéããæã€ããšãã§ããŸããïŒ ãããååšã®æéãšåŒã¶ã®ã¯ééã£ãŠããŸãã
ããã¯ãåãããªãœãŒã¹ã®ã©ã€ãã¿ã€ã ã®æå°èŠä»¶ãæå³ãããšèšããããããŸããã å Žåã«ãã£ãŠã¯ããããéããçãå¯èœæ§ããããŸãããã©ã®ããã«ããŠãããããååšæéããšåŒã¶ããšãã§ããŸããïŒ
æææš©/åå
¥ã®æŠå¿µèªäœã¯è€éã§ãã ãã©ã€ãã¿ã€ã ããäžãããã®ããããæ··ä¹±ã¯ãéçºãããã«ç解ãã«ãããã®ã«ããŠãããšæããŸãã
PSäžèšã§å®çŸ©ããAãBãããã³Cã䜿çšãããšãããŒã³ã®åŒã¯æ¬¡ã®ããã«ãªããŸãã
A >= B = C1 U C2 U ⊠U Cn
RustãåŠã¶ã®ã¯ããªãã®äŸ¡å€ããããŸãïŒ
ããŒã³ãšç¿åŸãåŠã¶ã«ã¯é·ãæéãããããŸãããå匷ããã®ã¯é¢çœãã§ãã Rustã¯ã¬ããŒãžã³ã¬ã¯ã·ã§ã³ãªãã§ã»ãã¥ãªãã£ãéæããããšããŸãããããã§ãéåžžã«ããŸãæ©èœããŸãã Haskellããã¹ã¿ãŒãããšãããã°ã©ã ã®æ¹æ³ãå€ãããšèšã人ãããŸãã Rustãéçºããããšãããªãã®æéã®äŸ¡å€ããããšæããŸãã
ãã®æçš¿ãã圹ã«ç«ãŠã°å¹žãã§ãã