
æ°é±éåãAndrei Alexandrescuã«ããRustãD and Goã®æ¯èŒåæã«åºäŒããŸããã C ++ã³ãã¥ããã£ã®å°æ¬ãããŠããã¡ã³ããŒã§ ãããDããã°ã©ãã³ã°èšèªã®äž»ä»»éçºè
ã§ãã Andreiã¯ãã¹ããŒãªãŒã®æåŸã§Rustã«è¡æçãªææãäžããããªãæŽå¯åã«å¯ãã 芳å¯ã®ããã«èŠããäœããè¿°ã¹ãŸããã
Rustã³ãŒããèªããšããå人ã¯å人ã«è¶³ã®1æ¥ãéããŠã¯ãããªãããšãããžã§ãŒã¯ãæãèµ·ããããandããèã§ãã©ã³ã¹ã®åããèŽäœã®ç·æ§ã®æŒ«ç»ç»åã飿³ãããŸãã Rustã¯ãå®å
šæ§ãšãžã¥ãšãªãŒã®åãæ±ããæéèŠèŠããŠããŸãã å®éãããã¯ãã£ãã«æ¬åœã®åé¡ã§ã¯ãªãããã®ã¢ãããŒãã¯ã³ãŒããèããŠæžãããã»ã¹ãå調ã§éå±ãªããã»ã¹ã«ããŸãã
ã¢ã³ãã¬ã€ãšã®ããã€ãã®äŒè°ã®åŸã圌ã®ã¹ããŒãã®ããã€ããèŠãŠãç§ã¯åœŒãããããã®ã奜ãã ãšç¢ºä¿¡ããŸããã ããããé€ã飲ã¿èŸŒã¿ãŸãããã ãã®ãžã§ãŒã¯ã¯ããããããã«èŠãããšããçç±ã ãã§é¢çœãã®ã§ããããããããšããžã§ãŒã¯ã®äžéšããæã£ãŠããªãããã§ããããïŒ
ãã©ãã®é説
æ¯åãããã°ã©ãã³ã°èšèªã®ç¹å®ã®æ©èœã®å©ç¹ãåæ ããŠãPaul Graham ã®ãšãã»ã€ãåŸæããå¹³å¡ããã«æ»ããŸãã ããã°ã©ããŒã®éã®è峿·±ãçŸè±¡ã«ã€ããŠèªã£ãŠããã圌ã¯ãããããã©ããã¯ã¹ãªããã©ãããšåŒãã§ããŸãã ç¥ããªã人ã«ãšã£ãŠã¯ãéèª¬ã¯æ¬¡ã®ããã«èãããŸããããèšèªã®Blabã䜿çšããããã°ã©ãããããšããŸãããã 衚çŸåã®é¢ã§ã¯ãBlabã¯ãã¹ãŠã®ããã°ã©ãã³ã°èšèªã®æœè±¡æ§ã®é£ç¶ã®çãäžã«ãããŸãã ããã¯æãåå§çã§ã¯ãããŸããããæã匷åãªããã°ã©ãã³ã°èšèªã§ã¯ãããŸããã
ç§ãã¡ã®Blubããã°ã©ããŒã¯ãããã°ã©ãã³ã°èšèªã®ãäžäœãéšåãèŠããšããããã®èšèªãèªåã®æããBlubããã衚çŸåã«ä¹ããããšãç°¡åã«èгå¯ããŸãã ããããç§ãã¡ã®ä»®æ³ããã°ã©ããŒãã¹ãã¯ãã«ã®ãäžäœãéšåãèŠããšãã圌ã¯é垞圌ãå®éã«èŠäžããŠããããšã«æ°ã¥ããŸããã ããŒã«ã¯æ¬¡ã®ããã«èª¬æããŠããŸãã
圌ãèŠãŠããã®ã¯ãå¥åŠãªãèšèªã ãã§ãã ããããã圌ã¯ããããBlabaãšåçã§ãããšèªèããŠããŸããããããã®äžã«ã¯ãŸã ç¡æå³ã§çè§£ã§ããªããŽãããããããããŸãã ããã°ã©ããŒã«ãšã£ãŠã¯ååã§ãã圌èªèº«ãBlabaã«ã€ããŠèããŠããããã§ãã
ç§ããããæåã«èªãã ãšããç§ã¯æããŸããïŒããããŒãããã¯éåžžã«æŽå¯åã«å¯ãã§ããŸããã äœå¹ŽåŸã«ãã®æŠå¿µãç§ã®èãæ¹ã«æ ¹ä»ããšèª°ãèããã§ããããç§ã人ã
ã«ããã°ã©ãã³ã°ã®æ¹æ³ãæããããšè©Šã¿ããšãã
Microsoftã®èšèªã®ãããžã§ã¯ããããŒãžã£ãŒãšããŠãJavascriptã®åä»ãããŒãžã§ã³ã§ããTypeScriptã«åãçµãã§ããŸãã ééããªããäž»ã«JavaScriptéçºè
ã®èŽè¡ãšè©±ãããJavascriptã«å°ã匷ãåä»ãã远å ããã®ãã©ãã»ã©çŽ æŽãããããšããèããäŒããããšãããšãæ²èгçãªé¡ãç§ãèŠãŸãã æ¯åã ãªãã·ã§ã³ã§ãã£ãŠãã åããŒã¹ã®ã¡ãªããã説æããåŸã§ãã ããŒã«ãèšã£ãããã«ãããã¯ãã ãå¥åŠãã«èŠããŸãã JavaScriptããã°ã©ããŒã«ãšã£ãŠãTypeScriptã¯åºæ¬çã«JavaScriptãšåãããã«èŠããŸããããã«ãããã®ããããŸããªãã®ããããããããŸãã
ä»ã®ããã°ã©ãã³ã°èšèªã®ããŒã ãšè©±ãããããäŒè°ã§ãŸããŸãå€ãã®äººãèŠããšãããŒã«ã®èгå¯ã¯æ£ç¢ºã§ããã ãã§ãªããé©ãã»ã©æ®éçã§ããããšãããããŸããã ã»ãšãã©ã®ããã°ã©ããŒã¯ãäžåºŠã䜿çšããããšã®ãªãæ°ããããã°ã©ãã³ã°èšèªãç®ã«ãããšãããããåã§æµæããæºåãã§ããŠããŸãã æ°ããããããã«ç°è³ªãªæ©èœã¯ããããã«ã¢ã¬ã«ã®ãŒåå¿ãåŒãèµ·ãããŸãã é·ãéæ°æ©èœã䜿çšããŠåããŠã圌ãã¯ããããã¹ãŠç¡é§ãªè¿·èµ°ã§ã¯ãªãããšãçè§£ãå§ããŸãã
èŠããã«ãBlobã®ãã©ããã¯ã¹ã¯ãããã°ã©ããŒãšããŠç§ãã¡ãèæ
®ããªããã°ãªããªããã®ãç§ãã¡ãé¥ããã¡ãªãã®ããããŠç§ãã¡ããã¹ãŠã®åªåã§è±åºãã¹ããã®ã§ãã
ãã£ãŠã¿ãŸãããã Rustã®æãå¥åŠã§æã圹ã«ç«ããªãæ©èœãããã€ãèŠãŠã¿ãŸãããã ãããŠãéãããã¯åãå®è¡ã§ãããã©ããã確èªããŸãã
å¥åŠãªã§ãããçªå·1ã ãã³å€å
Rustã§ã2ã€ã®ç°ãªãæ§é ãå°å·ããããã«å°ãã®ããªã¢ãŒãã£ãºã ã䜿çšããããã°ã©ã ãäœæããŸãããã æåã«ã³ãŒãã瀺ããæ¬¡ã«è©³çްã«èª¿ã¹ãŸãã
use std::fmt; struct Foo { x: i32 } impl fmt::Display for Foo { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "(x: {})", self.x) } } struct Bar { x: i32, y: i32 } impl fmt::Display for Bar { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "(x: {}, y: {})", self.x, self.y) } } fn print_me<T: fmt::Display>(obj : T) { println!("Value: {}", obj); } fn main() { let foo = Foo {x: 7}; let bar = Bar {x: 5, y: 10}; print_me(foo); print_me(bar); }
ããã¯ãªããšvyrviglaznoeã§ãïŒ ã¯ããããªã¢ãŒãã£ãºã ããããŸãããããã¯OOPã«ãã䌌ãŠããŸããã ãã®ã³ãŒãã§ã¯ãäžè¬åã ãã§ãªãäžè¬åã䜿çšããŸããããã®ã¢ãããŒãã«ã¯å€ãã®å¶éããããŸãã ãããŠããã®impl
ã¯äœã§ããïŒ
éšåã«è¡ããŸãããã å€ãä¿åããããã«2ã€ã®æ§é ãäœæããŸãã ãããã«å®è£
ããæ¬¡ã®ã¹ãããã¯ã fmt::Display
ãšåŒã°ãããã®ã§ãã C ++ã§ã¯ã ostream
<<
æŒç®åããªãŒããŒããŒãããŸãã çµæã¯åæ§ã§ãã ããã§ãprint颿°ãåŒã³åºããŠãæ§é äœãçŽæ¥æž¡ãããšãã§ããŸãã
ããã¯ãã§ã«è©±ã®ååã§ãã
次ã«ã print_me
颿°ãååŸããŸãã ãã®é¢æ°ã¯äžè¬åãããŠããã fmt::Display
ã§ããå Žåã¯äœã§ã䜿çšã§ããŸãã 幞ããªããšã«ãç§ãã¡ã¯æ§é ããããè¡ããããšã確èªããŸããã
ä»ã®ãã¹ãŠã¯ç°¡åã§ãã æ§é äœã®ããã€ãã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããããprint_me
å°å·ããããã«éä¿¡ããŸãã
ãµã...äžçæžåœåããªããã°ãªããŸããã§ããã ããããRustã§ããªã¢ãŒãã£ãºã ãè¡ãããæ¹æ³ã§ãã å
šäœã®ãã€ã³ãã¯äžè¬åã§ãã
ã§ã¯ãC ++ã«å°ãåãæ¿ããŸãããã å€ãã®ãç¹ã«åå¿è
ã¯ããã³ãã¬ãŒãã®äœ¿çšãããã«èããããšãã§ããããªããžã§ã¯ãæåã®ããªã¢ãŒãã£ãºã ã®éããã©ããŸãã
#include <iostream> class Foo { public: int x; virtual void print(); }; class Bar: public Foo { public: int y; virtual void print(); }; void Foo::print() { std::cout << "x: " << this->x << '\n'; } void Bar::print() { std::cout << "x: " << this->x << " y: " << this->y << '\n'; } void print(Foo foo) { foo.print(); } void print2(Foo &foo) { foo.print(); } void print3(Foo *foo) { foo->print(); } int main() { Bar bar; bar.x = 5; bar.y = 10; print(bar); print2(bar); print3(&bar); }
ããªãç°¡åã§ããã ããŠãããã«å°ããªã¯ã€ãºããããŸãïŒC ++ã³ãŒãã¯æ£ç¢ºã«äœãå°å·ããŸããïŒ
æšæž¬ããŠããªããã°ãèœèããªãã§ãã ããã ããªãã¯è¯ã仲éã§ãã
ãæ³åã®ãšãã-ããã§ãšãããããŸãïŒ ããã§ãæ£ããçããåºãããã«C ++ã«ã€ããŠã©ãã ãç¥ã£ãŠããã¹ãããå°ãèããŠãã ããã ç§ãèŠããã®ãããã¹ã¿ãã¯ãã©ã®ããã«æ©èœãããããªããžã§ã¯ããã³ããŒããããšãã«ã©ã®ããã«ã³ããŒããããããã€ã³ã¿ãŒãã©ã®ããã«æ©èœãããããªã³ã¯ãã©ã®ããã«æ©èœããããä»®æ³ããŒãã«ãã©ã®ããã«é
眮ããããããããŠåçãã£ã¹ããããšã¯äœããçè§£ããå¿
èŠããããŸãã OOPã¹ã¿ã€ã«ã§ããã€ãã®ç°¡åãªè¡ãæžãã ãã§ãã
ç§ãC ++ãåŠã³å§ãããšãããã®ç»å±±ã¯ç§ã«ãšã£ãŠããŸãã«ãæ¥ã§ããããšã倿ããŸããã 幞ããªããšã«ãç§ã®ããšãã¯C ++ã®å°éå®¶ã§ããããšã倿ããç§ã圌ã®ç¿Œã®äžã«é£ããŠè¡ã£ãŠã圌ã¯ç§ã«æãããéãèŠããŠãããŸããã ããã«ãããããããç§ã¯ãã®äŸã®ããã«ããªããšãåã©ããã¡ã®éã¡ãç¯ããŸããã ãªãã§ïŒ C ++ã®é£æ»äžèœã®çç±ã®1ã€ã¯ããã®éçºã«ãããé«ãèªç¥è² è·ã§ãã
èªç¥çè² è·ã®äžéšã¯ãæ¬è³ªçã«ããã°ã©ãã³ã°ã«åºæã®ãã®ã«åœãŠã¯ãŸããŸãã ã¹ã¿ãã¯ãçè§£ããå¿
èŠããããŸãã ãã€ã³ã¿ãŒãã©ã®ããã«æ©èœããããç¥ãå¿
èŠããããŸãã ããããC ++ã¯è² è·ã®åºŠåããå¢å ããããããå€ãå®å
šã«ã³ããŒãããªãå Žåãä»®æ³ãã£ã¹ãããã䜿çšãããå Žåãããã³äœ¿çšãããªãå Žåãçè§£ããå¿
èŠããããŸã-éçºè
ãäœããè¡ãå Žåãã³ã³ãã€ã©ããã®èŠåãªãã§ã ãã»ãšãã©ã®å Žåãæªãèãã§ããã
ããã¯ãC ++ãšã®æŠäºã詊ã¿ããã®ã§ã¯ãããŸããã Rustã®å€ãã®ãã®ã¯ãC ++ããåãããäœã¬ãã«ã§å¹ççãªæœè±¡åã®å²åŠãç¶æãããšããèãæ¹ã§å®è£
ãããŠããŸãã Rustã®äŸãšéåžžã«ãã䌌ãã³ãŒããæžãããšãã§ããŸãã
Rustãå®éã«è¡ãã®ã¯ãç¶æ¿ãããªã¢ãŒãã£ãºã ãšã¯å¥ã«ããããšã§ããããã«ãããæåããäžè¬åãäœæããæ¹åã«èããããããšãã§ããŸãã ãããã£ãŠãããªãã¯äžè¬çãªçšèªã§æåã®æ¥ããèãå§ããŸãã ãã ããç¶æ¿ã倿
æ§ããåé¢ããããšã¯ãç¹ã«ããããåžžã«äžç·ã«äœ¿çšããããšã«æ
£ããŠããå Žåã¯ç¹ã«ãå¥åŠãªã¢ã€ãã¢ã®ããã«æãããããããŸããã
ãã®ãããªåé¢ã¯ãBlubå¹æã®æåã®å
åã®1ã€ãåŒãèµ·ããå¯èœæ§ããããŸããç¶æ¿ãšããªã¢ãŒãã£ãºã ãåé¢ããäžè¬çãªå©ç¹ã¯äœã§ããïŒ ãšããã§ãRustã«ã¯ç¶æ¿ããããŸããïŒ
ä¿¡ããããªããããããŸããããå°ãªããšãRust 1.6ã§ã¯ãæ§é ãç¶æ¿ããããã®ç¹å¥ãªããŒã«ã¯ãŸã£ãããããŸããã 代ããã«ãèšèªã®ç¹å¥ãªæŠå¿µã§ãããã¿ã€ããã®å©ããåããŠããããã®æ©èœãæ§é èªäœã®å¢çãè¶
ããŠæ¡åŒµãããŠããŸãã ç¹æ§ã䜿çšãããšãã¡ãœããã远å ããããã¡ãœããã®å®è£
ãèŠæ±ããããæ¢åã®ã·ã¹ãã ã®ããããæ¹æ³ã§ããŒã¿æ§é ãæ¹è¯ãããã§ããŸãã ãã¬ã€ãã¯ç¶æ¿ããµããŒãããŸãããããã¬ã€ãã¯å¥ã®ãã¬ã€ããæ¡åŒµã§ããŸãã
æ·±ãæãäžãããšãäœãä»ã®ãã®ã«æ°ä»ãããšãã§ããŸãã Rustã«ã¯ãC ++ã§å¿é
ããå¿
èŠã®ãã£ãåé¡ããã¹ãŠãããŸããã 颿°ãäœããã®æ¹æ³ã§åŒã³åºããããšãã«äœãã倱ãããããšããä»®æ³ãã£ã¹ããããã³ãŒãã«äžãã圱é¿ã«ã€ããŠèããããšã¯ã§ããªããªããŸããã Rustã§ã¯ãã¿ã€ãã«é¢ä¿ãªãããã¹ãŠãåãã¹ã¿ã€ã«ã§æ©èœããŸãã ãããã£ãŠã幌幎æã®ééãã®å
šäœã®ã¯ã©ã¹ã¯åã«æ¶ããŸãã
ïŒã¬ãŒã³ã«æ³šæããŠãã ããã-ã¿ã€ãã«é¢ãã詳现ã¯ãæ¬ããã·ã¢èªããã°ã©ãã³ã°èšèªãã®ãã·ã¢èªã®ç¿»èš³ã«ãããŸããïŒ
å¥åŠãªã§ãããæ°2ã ã€ãŸããäŸå€ã¯ãããŸãããïŒ
Rustã«ã¯ãªããã®ã«ã€ããŠè©±ããŠããã®ã§ã次ã®å¥åŠãªããšã¯äŸå€ããªãããšã§ãã ããã¯äžæ©åŸéã§ã¯ãããŸãããïŒ ç§ãã¡ã¯ééããã©ãããŸããïŒ äžåºŠã«ãã¹ãŠãåŠçããããã«ããããããã·ã¥ã§ããŸããïŒ
ããŠãã¢ãããç¥ãæéã§ãã
ã§ã...倧äžå€«ãåè«ã§ãããä»åã¯ããããªãã§ãã§ããŸãã Rustã§ã¯ããšã©ãŒåŠçã¯ã¯ããã«ç°¡åã§ãã å®éã«ã©ã®ããã«èŠãããã®äŸã次ã«ç€ºããŸãã ãŸãã颿°å®£èšãã©ã®ããã«èŠãããã®äŸïŒ
impl SystemTime {
now
颿°ã¯åã«SystemTime
ãè¿ãã ãã§äŸå€ã¯ãããŸãããã duration_from_earlier
ã¯Duration
ãŸãã¯SystemTimeError
ã®ããããã®å€ãåãããšãã§ããRsult
åãè¿ãããšã«æ³šæããŠãã ããã ãããã£ãŠã颿°ã®ãã¹ãŠã®å¯èœãªçµæïŒæåãšå€±æã®äž¡æ¹ïŒãããã«ããããŸãã
ãããããããã®äŸå€çãªç¶æ³ã¯ãã¹ãŠãæ»ãå€ã«æ··ä¹±ããããããŸãã 誰ãã³ãŒãã§ãããèŠããã§ããïŒ ãã¡ãããåžžã«ãšã©ãŒããã§ãã¯ããã®ã¯çŽ æŽãããããšã§ãããäŸå€ã®ãã€ã³ãã¯ããšã©ãŒãããŒã«ã«ã§åŠçã§ããã ãã§ãªãããããã«è»¢éããŠ1ãæã§åŠçã§ããããšã§ãã
Rustã§ãåãããšãã§ããŸãã
fn load_header(file: &mut File) -> Result<Header, io::Error> { Ok(Header { header_block: try!(file.read_u32()) }) } fn load_metadata(file: &mut File) -> Result<Metadata, io::Error> { Ok(Metadata { metadata_block: try!(file.read_u32()) }) } fn load_audio(file: &mut File) -> Result<Audio, io::Error> { let header = try!(load_header(file)); let metadata = try!(load_metadata(file)); Ok(Audio { header: header, metadata: metadata }) }
å®å
šã«ã¯æããã§ã¯ãããŸãããããã®ã³ãŒãã¯ã¹ããŒäŸå€ã䜿çšããŸãã try!
ãã¯ãã®ãããå
šäœtry!
ã 圌ã¯ããªãç°¡åãªããšãããŠããŸãã 颿°ãåŒã³åºããŸãã æåããå Žåã圌ã¯èšç®çµæãããªãã«æž¡ããŸãã 代ããã«ãšã©ãŒãçºçããå Žåã¯ã try!
ãã®ãšã©ãŒãã¹ããŒãããçŸåšã®é¢æ°ã®å®è¡ãå®äºããŸãã
ã€ãŸãã load_header
åŒã³åºããšãã«file.read_u32
ã«åé¡ãããå Žåã颿°ã¯io::Error
ãè¿ããŸãã ããã«ã load_audio
åãããšãèµ·ãããåããšã©ãŒãè¿ãããŸãã åŒã³åºãå
ã®é¢æ°ãæçµçã«ãšã©ãŒãåŠçãããŸã§ç¶ããŸãã
ïŒã¬ãŒã³ã«æ³šæããŠãã ããã- ãšã©ãŒåŠçã®è©³çްã«ã€ããŠã¯ãHabrã®èšäºãRustã§ã®ãšã©ãŒåŠçããåç
§ããŠãã ãããïŒ
å¥åŠãªã§ãããã®æ°3ã åçšãã§ãã«ãŒ
ããã¯é¢çœãã§ãã Rustã«ã€ããŠè©±ããšãã«å€ãã®äººãæåã«èšåããã®ã¯ãåå
¥ãã§ãã«ãŒã§ãã ããã«ãä»ã®ããã°ã©ãã³ã°èšèªãšåºå¥ããŠãRustã®äž»ãªæ©èœãšããŠæç€ºãããããšããããããŸãã ããšãã°ãAndreyã®å ŽåããããŒãã§ãã«ãŒã¯ããã«ã¯åã®èŽäœãRustã§ãã ç§ã«ãšã£ãŠããããŒãã§ãã«ãŒã¯åãªãã³ã³ãã€ã©ãŒãã§ãã¯ã§ãã ã¿ã€ããã§ãã¯ãšåæ§ã«ããããŒãã§ãã«ãŒã䜿çšãããšãå®è¡æã«çºçããåã«ã»ãšãã©ã®ãã°ããã£ããã§ããŸãã 以äžã§ãã ãã¡ãããæåã¯æªç©ã®ãããªä»æãã®ããã«æãããããããŸããããããã§ã®ãã€ã³ãã¯ãRustãããã€ãã®æ°ããäžå¯è§£ãªåã·ã¹ãã ãåŠã¶ããšã匷å¶ãããšããããšã§ã¯ãªãããããšé£æºããèœåãããªãã®ããã«æ°ããçèãæ§ç¯ãããšããããšã§ãããã°ã©ããŒã
ããã§ã¯ããããŒãã§ãã«ãŒã¯ã©ã®ãããªãšã©ãŒããã£ããããŸããïŒ
ã¡ã¢ãªãè§£æŸããåŸã®ãã€ã³ã¿ãŒã®äœ¿çš
ãããããå€å
žçãªç¶æ³ã§ã¯ãæåã«ã¡ã¢ãªãè§£æŸããŠããåã³äœ¿çšããŸãã ã»ãšãã©ã®å ŽåãããããŸãã«æãããããã«ãã€ã³ã¿äŸå€ãã§ããã°ã©ã ãã¯ã©ãã·ã¥ããçç±ã§ãã
è§£æŸåŸäœ¿çšãåé¿ããC ++ã®ãã°ãããã©ã¯ãã£ã¹ãã倿°ãããŸããRAIIã䜿çšãããçã®ãã€ã³ã¿ãŒã®ä»£ããã«åç
§ãŸãã¯ã¹ããŒããã€ã³ã¿ãŒã䜿çšãããAPIã®æææš©ãšé¢ä¿ãåçšãããªã©ã§ãã Andreiã«ããã°ãããã¯ãã¹ãŠãã³ãŒããèããŠæžãããã»ã¹ãå調ã§éå±ãªããã»ã¹ã«å€ããŠããŸãããšããããšã§ãã ããèšç·ŽãããC ++ããã°ã©ããŒã®ããŒã ã¯ãå調ã§éå±ãªäœæ¥ãè¡ãããšã§ãã»ãšãã©ã®è§£æŸåŸäœ¿çšãã¹ãåé¿ã§ããŸããããã¯ããã¹ãŠã®ãã°ãããã©ã¯ãã£ã¹ãã«åŸããé«åºŠãªè³æ Œãæã€C ++å°éå®¶ã®ã¿ã§ããŒã ãcheããè£å
ããããšã¯ãªãããã§ãã
ç¡å¹ãªã€ãã¬ãŒã¿ãŒ
C ++ã§ç¹°ãè¿ãåŠçããã³ã³ããã倿Žããªããã°ãªãããããã«ããå°æ¥çªç¶ã¯ã©ãã·ã¥ããããšããããŸããïŒ ããªããã°ãªããŸããã§ããã ã³ã³ããã«å°ãªããšã1ã€ã®èŠçŽ ã远å ãŸãã¯åé€ããå Žåã¯ãã³ã³ãããå®è£
ããŠã€ãã¬ãŒã¿ãç¡å¹ã«ããå¿
èŠããããŸãã
ç§ã¯ãã®ã¬ãŒããèžãããšã¯ããŸããããŸããããããã§ãæã
çºçããŸãã
ããŒã¿ã®ç«¶åç¶æ
Rustã§ã¯ãããŒã¿ã¯å
±æãŸãã¯å¯å€ã§ãã ããŒã¿ã倿Žã§ããå Žåãè€æ°ã®ã¹ããªãŒã éã§ããŒã¿ãå
±æã§ããªãããã2ã€ã®ã¹ããªãŒã ã§åæã«å€æŽãéå§ããæ¹æ³ã¯ãªããç«¶åç¶æ
ãçºçããŸãã ããŒã¿ãå
±æãããŠããå ŽåãããŒã¿ã¯å€æŽã§ããªããããä»»æã®æ°ã®ã¹ããªãŒã ãã奜ããªã ãèªã¿åãããšãã§ããŸãã
C ++ãŸãã¯ä»ã®å€ãã®åªãã䞊åã©ã€ãã©ãªãåããèšèªã®äžçããæ¥ãå Žåããã®ãããªå¶éã¯å³ãããããããããŸããã 幞ããªããšã«ãããã¯ã¹ããŒãªãŒå
šäœã§ã¯ãããŸããããããè€éãªæœè±¡åãäœæããããã®äžé£ã®åçŽãªã«ãŒã«ãæäŸããåºç€ã§ãã ç©èªã®æ®ãã®éšåã¯çŸåšæžãããŠããŸãã Rustãšã³ã·ã¹ãã ã§ã¯ ã åæå®è¡æåã®ã©ã€ãã©ãªãå¢ããŠããŸãã ãã£ãšåŠã¶ããšã«èå³ããããªãã圌ãã®ä»äºã®åçãåŠã¶ããšãã§ããŸãã
æææš©ã®è¿œè·¡
ãã®æŠå¿µã¯å°ãåé·ã«èŠãããããããŸããããå®éãããã¯ãŸãã«C ++ãåžžã«æŠã£ãŠãããã®ã§ãã åã«ããAPIã®æææš©ãšåçšé¢ä¿ãææžåãããããã®åªãããã©ã¯ãã£ã¹ã®1ã€ã«èšåããŸããã åé¡ã¯ããã®æ
å ±ãã³ãŒãã«çŽæ¥å«ãŸãããã®ã§ã¯ãªããã³ã¡ã³ãã«ä¿åãããããšã§ãã
ã¹ã¯ãªããã¯æ¬¡ã®ãšããã§ããC++ã§èšè¿°ããä»ã®èª°ããèšè¿°ããã©ã€ãã©ãªãåŒã³åºãå¿
èŠããããŸãã ãããCã©ã€ãã©ãªã§ãããåŒæ°ãšããŠçã®ãã€ã³ã¿ãåããšããŸãããã ãã®ã©ã€ãã©ãªã«è»¢éãããã®ãåŸã§åé€ããããã«æ³šæããå¿
èŠããããŸããïŒ ãŸãã¯ã圌女ã¯èªåã®æ§é ã®1ã€ã«ããŒã¿ãä¿åããããšã§ãã®è²¬ä»»ãè² ããŸããïŒ Rubyã®ãããªã¹ã¯ãªãããšã³ãžã³ãåŒã³åºããŠããã®ã§ããããïŒ ãã®åŸã誰ãããŒã¿ãææããŸããïŒ
ããã¥ã¡ã³ããèªã代ããã«ãRustã§ã¯ãããŒãã§ãã«ãŒã䜿çšããŠã©ã€ãã©ãªAPIã®æ£ãã䜿çšãåžžã«ãã§ãã¯ããããšã«ãããæåŸ
ã確å®ã«ããããšãã§ããŸãã
ãã®ä»
åçšãã§ãã«ãŒã¯ãä»ã®å€ãã®ãšã©ãŒãåé¿ããã®ã«åœ¹ç«ã¡ãŸãã ããšãã°ãäœæãã颿°ã§åãå
¥ããå¯å€ããŒã¿ã¯å€éšç¶æ
ã«åœ±é¿ãäžããªããšããäºå®ã«åžžã«äŸåããããšãã§ããé©åãšæãããå Žåã¯å®å
šã«å€æŽã§ããŸãã
ã¡ãªã¿ã«ãããã¯ãCã®ãããªããã°ã©ãã³ã°èšèªã§ã¯å°é£ãªè¿œå ã®æé©åã®å¹
åºãæ©äŒãåãéããŸããã³ã³ãã€ã©ãŒã¯ãè€æ°ã®ãšã€ãªã¢ã¹ãæã€å€ã¯å€æŽå¯èœã§ã¯ãªãããšãä¿èšŒããŠããããããã®éãåæ§ã§ã-倿Žå¯èœãªå€ã«ã¯åžžã«1ã€ã®ååãããããŸããã
ïŒã¬ãŒã³ã«æ³šæããŠãã ãããæææš©ãšåçšã®æŠå¿µã®è©³çްã«ã€ããŠã¯ãæ¬ããã·ã¢èªããã°ã©ãã³ã°èšèªãã®ãã·ã¢èªã®ç¿»èš³ãåç
§ããŠãã ãããïŒ
ã§ããããªæ°4ã ããããç Žãã«ã¯ã«ãŒã«ãå¿
èŠã§ã
Rustã®åŒ·ã¿ã®1ã€ã¯ãã©ã°ããã£ãºã ã ãšæããŸãã å³å¯ãªå¶éã®ã»ãšãã©ã¯ã unsafe
ãmem::transmute
ãªã©ã®æ©èœã§åé¿ã§ããŸãã ãããŒãã§ãã«ãŒã¯ããªãã®åé¡ã解決ããã®ã«é©ããŠããŸãããïŒ åé¡ãããŸããããã æããŠãã ããã
ïŒã¬ãŒã³ã«æ³šæããŠãã ããã-å³å¯ã«èšãã°ãããã¯çå®ã§ã¯ãããŸãããRustã§ã¯ãåçšãã§ãã«ãŒãç¡å¹ã«ããç°¡åãªæ¹æ³ã¯ãããŸãããå®å
šã§ãªããããã¯å
ã§ãããã«ãã£ãã·ãã£ã§åäœããŸãã unsafe
ã§unsafe
ãããã¯ã®å Žåãšåæ§ã«ã çã® *const T
ããã³*mut T
ãã€ã³ã¿ãŒã䜿çšããããšãã§ããŸãããããã¯ãCããã®ãã€ã³ã¿ãŒãšã»ãŒåæ§ã«æ©èœããŸãããããã®äœ¿çšã¯ãåçšèŠåã«ãã£ãŠå¶éãããŸããã詳现ã«ã€ããŠã¯ã ãThe RustonomiconïŒThe Darké«åºŠã§å®å
šã§ãªãRustããã°ã©ãã³ã°ã®æè¡ ã ã
ããã«ãããCã©ã€ã¯ãªã·ã¹ãã ããã°ã©ãã³ã°èšèªã§æ
£ããŠããããšãªãäœã§ãã§ããŸãã Rustã®å©ç¹ã¯ãæåããããã©ã«ãã§å®å
šãªã³ãŒããèšè¿°ããå¿
èŠã«å¿ããŠå®å
šã§ãªãã»ã¯ã·ã§ã³ã远å ããæ¹ãã¯ããã«ç°¡åã§ããããšã§ãã æåã¯å®å
šã§ãªããã®ã«åºã¥ããŠå®å
šãªã³ãŒããæžãããšã¯ã¯ããã«å°é£ã§ãã
Rustã«ã¯éžæè¢ããããŸãããèªåã§è¶³ãæããªãããã«å§ããŠããŸãã
ã§ã¯ãè¶³ã®èª¿åã¯ã©ãã§ããïŒ
圌ã®è¶³å
ã«æ»ã£ãŠãRustã¯åœŒã®ãã¬ãŒãã³ã°ãéããŸãããïŒ åœŒã¯äžæ¹çã«ãªããŸãããïŒ åœŒã¯ééã£ãããšã«éäžããŠããŸãããïŒ
éã¯æ¯æ¥åŒ·ããªã£ãŠããã幞ããªããšã«ã圌ã¯èäžãæ²ããã«ã¹ã¯ã¯ãããè¡ãæ¹æ³ãããç¥ã£ãŠããŸãã ãã®ç¹ãé倧è©äŸ¡ããããšã¯å°é£ã§ãã Rustã®å²åŠã«ã¯åŒ·åºãªåºç€ããããããã¯èšèªãæé·ãçºå±ããããšãæå³ããŸãã
翻蚳è
ããïŒãã€ãã®ããã«ãç§ã¯ãã·ã¢èªã話ãRustã³ãã¥ããã£ã®ç¿»èš³ãšè²Žéãªã³ã¡ã³ãã®å©ãã«æè¬ããŠããŸãã