ããã¯ãRFCããã¹ãšå¯èŠæ§ãæ確ã«ããŠåçåãããïŒrust-lang / rfcsïŒ2126ïŒã®è¿œè·¡ã®åé¡ã§ãã
æé ïŒ
foo.rs
ãŸãã¯foo/mod.rs
ãfoo/bar.rs
ïŒ45385ãªã©ã®ãµãã¢ãžã¥ãŒã«ããµããŒãããããšãèš±å¯ããcrate
ãå°å
¥ïŒ45388crate
ã絶察ãã¹ãéå§ã§ããããã«ããhttps://github.com/rust-lang/rust/issues/45477pub
ã¢ã€ãã ã®ãªã³ããè¿œå ããŸãhttps://github.com/rust-lang/rust/issues/45521crate
ã絶察ãã¹ãéå§ããããšãèš±å¯ãããšãäžéšã®å®è£
ã®åé¡ããããã¯ãããŸãã 次ã®æ¡åŒµæ©èœã䜿çšããªãéãããããã®é
ç®ã¯ããããæå¹ã«ãªããŸãããcrate
å§ãŸããªã絶察ãã¹ã®lintãè¿œå ããŸãïŒhttps://github.com/rust-lang/rust/issues/48722ïŒextern crate
åé€ã§ããããã«ããæªè§£æ±ºã®è³ªåïŒ
移è¡ã«ã©ã®ããã«åãçµãã¹ãã§ããïŒ ææ¡ãããŠããããã«ããã©ãŒã«ããã¯ãä»ããŠããŸãã¯ãšããã¯ãä»ããŠïŒ rustfix
ããŒã«ãæã«ããåŸãªã©ãããå€ãã®çµéšãç©ãã§ãã®æ±ºå®ãè¡ãã®ãããããæåã§ãã
絶察ãã¹ã®æçµçãªæ§æã ããŸããŸãªãªãã·ã§ã³ãå®éã«è©Šãããšãã§ããç¶æ³ã§ãããã§è¡ãã¹ããã€ã¯ã·ã§ãã£ã³ã°ã¯ä»ã«ããããŸãã ç¹ã«ã crate::
ãšextern::
äž¡æ¹ã®ãã¹ã䜿çšããããšã«ã¯ããã€ãã®å®éã®å©ç¹ããããŸãããçæ³çã«ã¯ãããç°¡æœãªæ¹æ³ã§ãããè¡ãããšãã§ããŸãã
::crate::foo
ã®ã¿ãåãä»ããŠããŸãã ãã ãã crate
ãå¯èŠæ§ä¿®é£ŸåãšããŠæ±ãã®ã§ã¯ãªãã struct Foo(crate ::foo)
ãäžæ£ãªãã¹ãšããŠè§£æããŸãã @petrochenkovã¯ããã®ã³ã¡ã³ãã§ããã€ãã®çç±ã説æããŠããŸãããã®RFCã«ã¯4ã€ã®ç°ãªãæ©èœããããã ããã
@ retep998 RFCã®èª¬æå
šäœã§èª¬æãããŠããããã«ããããã®æ©èœã¯ã°ããŒãã«ãªèšèšäžã®èæ
®äºé
ãéããŠæ¥ç¶ãããŠããŸãã ããšãã°ãã¯ã¬ãŒãã®ååãå€æŽããããã®å€éšã¡ã«ããºã ãæäŸããããšã¯ãæçµçã«extern crate
å»æ¢ãããããšã«ãã£ãŠéšåçã«åæ©ä»ããããŸãã ããŸããŸãªåŽé¢ãåå¥ã«ã²ãŒãããããšãã§ããŸãïŒãŸããç°ãªãæ§æãè©Šãããã«ããã€ãã®éè€ããã²ãŒããããå¯èœæ§ããããŸãïŒããå
šäœçãªèšèšãšå®å®åã«ã€ããŠè°è«ããã«ã¯ãã°ããŒãã«ãªäžè²«æ§ã念é ã«çœ®ãããšãéèŠã§ãã
æšæ ã®ååãå€æŽããããã®å€éšã¡ã«ããºã ãæã€ããšã¯ããã§ã«äœå¹Žã«ãããã£ãŠæãŸããå¿
èŠãšãããŠããïŒhttps://github.com/rust-lang/cargo/issues/1311ïŒãåç¬ã§åé¡ãªãåäœããå¯èœæ§ããããŸããã代ããã«äœ¿çšãããŠããŸãextern crate
殺害ããµããŒãããããŒã³ã«ãããŸããã
ãããŸã§ãå¯æ¥ã«é¢é£ããæ©èœã«å¯ŸããŠåå¥ã®RFCã䜿çšããããšã«åé¡ã¯ãããŸããã§ãããïŒ repr(align(N))
ãšrepr(packed(N))
ã®RFCãæãæµ®ãã³ãŸãïŒãä»ã§ã¯foo/mod.rs
ãå€æŽãããšäž»åŒµããŠããŸãã foo.rs
ã¯extern::
ãšcrate::
ãšå¯æ¥ã«é¢é£ããŠãããããåãRFCã«å±ããåã远跡ã®åé¡ã䜿çšããå¿
èŠããããŸããïŒ
ããã¯æ§æã®æªè§£æ±ºã®è³ªåã®æ¯èŒç埮åŠãªåŽé¢ã§ããããããã®ç¹ã«æ³šæããŠãã ãããå¯èŠæ§ä¿®é£Ÿåããã³ãã¹ãã¬ãã£ãã¯ã¹ãšããŠcrate
ã䜿çšãããšã crate ::absolute::path
ãšcrate::relative::path
ã ã³ã³ããã¹ãããŒã¯ãŒãã䜿çšãããšãåããããŸãããçããŸããå¯èŠæ§ä¿®é£ŸåãšããŠå®éã«æå³ã®ããäºçŽããŒã¯ãŒãã¯ä»ã«ãããŸããã
ãããã£ãŠãïŒå°ãªããšãïŒ crate
å¯èŠæ§ä¿®é£Ÿåãçç¥ããæ¢åã®pub(crate)
ã䜿çšããŠå®éšããããšæããŸãã
foo.rs
/ foo/mod.rs
ãã€ã³ããå¥ã®è¿œè·¡åé¡ã«åå²ããŠãããŸããŸãããããã¯ããã¹ãšå¯èŠæ§ä¿®é£Ÿåã®å€æŽãšã¯ãŸã£ããç¡é¢ä¿ã«èŠããããã§ãã
éãå€éšã¯ã¬ãŒããªããŒã ãšããŠ...ãã§ã«ããçšã«å¥ã®åé¡ãããã®ã§ãããåæ§ã«ããã®çœ°éã¯ãã®1ã€ã®äžéšã§ãããšæããŸãã®ã§ãããã¯ãã¹ã®å€æŽã®ããã«ããªãéèŠã§ãã
å¯èŠæ§ä¿®é£ŸåïŒãã¹ãã¬ãã£ãã¯ã¹ã§ã¯ãªãïŒãšããŠã®crate
ã®éžæã«é¢ããŠæ°é±éåã«å€ãã®è°è«ããããŸãããããã®ããŒã¯ãŒãã®éžæããæªè§£æ±ºã®è³ªåããšããŠãªã¹ããããŠããã«ãããããããç§ã¯ãã£ããããŸããã RFCãããã¯æããã«ä»å¿ããããŠããŸãã ç§èªèº«ãããã³ç§ãææããä»ã®ããã€ãã®äººã¯ããã®éžæã¯åœ¢å®¹è©/修食åã§ã¯ãªãããããŸãã«ãªãå¯èœæ§ããããããæ··ä¹±ãæããŸãã crate
ã¯ãã¯ã¬ãŒãã®ãããªãã¯APIã®äžéšãæå³ããŸããïŒ çªå·ïŒ ããã¯ãã¯ã¬ãŒãã«å¯ŸããŠlocal
ãŸãã¯internal
ãŸãã¯pub
ïŒæŽç·ŽãããïŒãæå³ããŸãïŒãããã£ãŠãåŸè
ã®ããŒã¯ãŒãã奜ãçç±ïŒã ãããã£ãŠãç§ã¯å³æã®å€æŽãèŠæ±ããŠããŸããããå°ãªããšããã®è¿œè·¡ã®åé¡ã§ã¯æªè§£æ±ºã®è³ªåã§ããããšãèªããå®å®åã®éã«å¿ããããªãããã«ããŸãã
ãã®ã¢ãžã¥ãŒã«ã®åèšèšããããŸã§ã«é²ãã ããšã¯çŽ æŽãããããšã§ãããåæã«ããimplæéããäœæããããã ãã«å€±æãããRustãŠãŒã¶ãŒã®å€§å€æ°ã«çžè«ããã«æ±ºå®ãäžãããšãéèŠã§ãã ãããŠãæ®å¿µãªãããGithub RFCã®è°è«ã«é¢äžããŠãã人ã ã¯ããŠãŒã¶ãŒããŒã¹å šäœã代衚ããŠããããã§ã¯ãªããšæããŸããæ å ±/ã³ã¡ã³ã/æèŠã殺å°ããŠãããããèœèããå¯èœæ§ããããŸãã ã ããã©ããããããããã察åŠããå¿ èŠããããŸãã
å®è£ ãã©ã®ããã«çµãã£ããã¯æããã§ã¯ãããŸãã...
@rpjohnst @ retep998 foo.rs + foo/
ã«ã€ããŠè°è«ãããã®RFCã®ããã€ãã®æ¹åãææ¡ããããã«ãæ°ããRFCãéããŸããã
ç·šéïŒå¯èŠæ§ä¿®é£ŸåãšããŠcrate
ã«ã€ããŠè°è«ããããã«ãå¥ã®RFCãéãããšããå§ãããŸãã å人çã«ã¯å察ã®ããšãæãã§ããŸãã pub(extern)
ãè¿œå ãããå€éšã§å
¬éãããŠãããã¹ãŠã®ã·ã³ãã«ã«å¿
èŠã§ãã ããã«ããã裞ã®pub
pub(crate)
ã¯ã次ã®ãšããã¯ã®
@rpjohnst
ã¯ã¬ãŒã::絶察::ãã¹ãšã¯ã¬ãŒã::çžå¯Ÿ::ãã¹ã®éã«è§£æã®ãããŸãããå°å ¥ããŸã
ãšã«ããcrate ::relative::path
ç¡å¹ãªã³ãŒãã§ã¯ãããŸãããïŒ è§£æäžã«æåŠããããšã¯ã§ããŸãããïŒ
@ est31ãããã解æäžã«åå解決ãè¡ãå¿
èŠããããŸãããããã¯çµ¶å¯Ÿã«ããããããšã§ã¯ãããŸããã ããã¯ãCããã³C ++ã®è§£æã§æãåä»ãªéšåã®ã²ãšã€ã§ããã a * b
ãä¹ç®ãŸãã¯å®£èšã§ããã a b(c, d);
ãå€æ°å®£èšãŸãã¯é¢æ°ãããã¿ã€ãã§ãããšããåæ§ã®ãããŸããããããŸãã
åãååã®äŸåé¢ä¿ãšãããã¬ãã«ã¢ãžã¥ãŒã«ãèš±å¯ãå§ããå Žåãåå解決ã解æãšçµã¿åãããŠãç¯çŽã§ããŸããcrate :: some :: item
ã¯crate
-visible item
ãªãå¯èœæ§ããããŸãsome
ããŸãã¯ãã©ã€ããŒãitem
æäžäœã¢ãžã¥ãŒã«ããsome
ã
ãããèŠéã«å
¥ããŠããããã«ããããŸãããããããã®æ¹æ³ã§ä»»æã«è§£æ±ºããä»ã®ã±ãŒã¹ïŒããããæããŸãã«èŠããcrate
-visibility絶察ãã¹ã±ãŒã¹ïŒãèšè¿°ããããã«æ¬åŒ§ãèŠæ±ããããšãã§ããŸãããããã§ãpub(crate)
ã«åºå·ããã°å¿
èŠã®ãªããããã¬ã³ã§ãæ§æã®ãããŸããã¯ãã§ã«è§£æ±ºãããŠããŸãã
ã¯ã¬ãŒããå¯èŠæ§ä¿®é£Ÿåããã³ãã¹ãã¬ãã£ãã¯ã¹ãšããŠäœ¿çšãããšã
crate ::absolute::path
ãšcrate::relative::path
éã«è§£æã®ãããŸãããçããŸãã
ã¿ãã«æ§é äœãã£ãŒã«ããšãã€ã³ã©ã€ã³ã絶察ãã¹ã®äž¡æ¹ã®å¯èŠæ§ããŸãã§ããããšãèãããšãããã¯å°ããªåé¡ãIMOã§ãã
çŸåšããã¹ã¯åžžã«è²ªæ¬²ã«è§£æãããããã crate :: x :: y
ãcrate::x::y
ãæå³ããããšã¯çã«ããªã£ãŠããŸãã
å察ã®æå³ãå¿
èŠãªå Žåã¯ã pub(crate) ::x::y
ãŸãã¯crate (::x::y)
ã䜿çšã§ããŸãã
@rpjohnst @petrochenkov pub ::relative::path
ãæå¹ãªã³ãŒãã§ããã³ãŒãäŸãæããŠãã ããã 2ã€ã®ã±ãŒã¹ã®ãããããç¡å¹ã§ãããšæãã®ã§ããããŸããã®ãã¹ãŠãç解ããããšã¯ã§ããŸããã
ç·šéïŒãããé¢é£ãã
@ est31ããªãã¯ééã£ãèããæã£ãŠããããã§ã-ããã¯çžå¯Ÿãã¹ã«é¢ãããã®ã§ã¯ãªãã決ããŠåé¡ã§ã¯ãããŸããã ååãäœãæããŠããã®ããç¥ãåã«ãASTãæ§ç¯ããããšã§ãã å®å šãªãµã³ãã«ã¯æ¬¡ã®ãšããã§ãã
struct S(crate :: x :: y);
ãããã®ååããŸã æ€çŽ¢ããããšãèš±å¯ãããŠããªãå Žåããã®æååãASTã«å€æããã«ã¯ã©ãããã°ããã§ããã èããããçãã¯2ã€ãããŸãã 1ã€ã«ã¯ãçŸåšã®ã¯ã¬ãŒãã®ã¢ãžã¥ãŒã«x
ã§å®çŸ©ãããã¿ã€ãy
ãã©ã€ããŒããã£ãŒã«ãããããŸãã ãã1ã€ã¯ãäŸåé¢ä¿ã®æäžäœx
å®çŸ©ãããå¥ã®ã¿ã€ãy
crate
å¯èŠãã£ãŒã«ããæã£ãŠããŸãã ãã¯ãã¯å¿
èŠãããŸããã
@rpjohnstæ確ã«ããŠãããŠããããšãã ãã®ç¢ºãã«ãããŸããã
@rpjohnst
ç°¡åãªè§£æ±ºçã¯ãã¯ã¬ãŒãã®å¯èŠæ§ä¿®é£Ÿåã«å¯ŸããŠæ確ã«è§£æããããã«å®çŸ©ããããšã§ãã æå®ãããã¿ã€ãã®ãã©ã€ããŒãã¡ã³ããŒãæã€ã¿ãã«æ§é äœãšããŠè§£æããå Žåã¯ã次ã®ããã«ããŸãã
struct S(:: crate :: x :: y);
ïŒã«ãŒã 'åå空é'ã瀺ã::
ãã¬ãã£ãã¯ã¹ã«æ³šæããŠãã ããïŒ
ããã¯ããµãã¢ãžã¥ãŒã«ã§ä»ã®ã«ãŒãåå空éãåç
§ããå¿
èŠãããæ¹æ³ãšäžèŽããŠããŸãïŒäŸïŒ ::std::x::y
ïŒã
crate
-as-a-visibilityã«ææ§ãããªããã ãã§ããããã¶ãé©ãã¹ãããšã ãšæããŸãã ãã ãããã®åé¿çãå°ããæ£èŠåãããŠã crate::
ãåžžã«å
é ã®::
ïŒãã¡ããuse
以å€ïŒã§äœ¿çšãããããã«ããããšããå§ãããŸãã ãææã®ãšãããããã«ãã::std::x::y
ãããªãã¹ãšã®å¯Ÿç§°æ§ãé«ãŸããçã«çžå¯Ÿçãªãã¹ïŒ self::
/ super::
/ something_in_scope::
ãã¬ãã£ãã¯ã¹ãªãã®åœ¢åŒãæ®ããŸãã
ãããè¡ãå¿
èŠããããŸããïŒ use
ãã¹ã§crate::x::y
ãèš±å¯ãããšã crate
ã¯éæ³ã®ãããªãã®ã«ãªããŸããã ::crate::x::y
ãé©çšãããšãäŸåé¢ä¿ãšåãã¬ãã«ã«ã¹ã³ãŒããããŸãããšã«ããæ瀺ããããšããŠããã
@rpjohnst
crate::
ãåžžã«å é ã®::
ãšãšãã«äœ¿çšãããããã«ããŸãïŒãã¡ãã䜿çšä»¥å€ïŒ
ããã¯ãå°ãªããšãæåã¯åççãããããŸããïŒåŸã§ããããªã©ãã¯ã¹ããããšã劚ãããã®ã¯äœããããŸããïŒã
ç§ã¯use extern::bar::foo
ãŸãã¯use crate::bar::foo
æ§æã®ãã¡ã³ã§ã¯ãããŸããã ãšãŠãããããããã§ãã ããã«ã¯ç ç³ãããã§ãã ããã«ã¯extern bar::foo
ããå§ãããŸãã
ãã1ã€ã®æé»ã®ã«ãŒã«ãè¿œå ããã®ã¯ã©ãã§ããïŒ extern crateãã«ãŒãåå空éã«èªåçã«ã€ã³ããŒãããããäžèŽãããã¹åŒãäœæããŸãïŒç§ã¯è±èªãèŠæã§ããplsã¯æ¬¡ã®äŸããç§ã®èŠè§£ãåŠã³ãŸãïŒ
äŸãã°
src
| --lib.rs
| --foo.rs
| --foo
| ---- | --bar.rs
Cargo.tomlã§äŸåé¢ä¿ãèšå®ããŸãã
[dependencies]
serde = "3.0.0"
mod bar
ãmod foo
ã«è¿œå ããmod foo
ãlib.rsã«è¿œå ããŸãã
lib.rsã§é¢æ°finlib
ãå®çŸ©ããfoo.rsã§é¢æ°finfoo
ãå®çŸ©ããbar.rsã§é¢æ°finbar
ãå®çŸ©ããŸãã
extern crateã®ã¹ã³ãŒããcrateã®ãããã¬ãã«ã¢ãžã¥ãŒã«ãšããŠäœæãããšããã®ãããªã³ãŒããã©ãã«ã§ãèšè¿°ã§ããŸãã
å®å š/修食ãã¹ã®å Žå
::serde::Deserialize
::serde::x::y
::finlib // not ::crate::finlib
::foo::finfoo // not ::crate::foo::finfoo
::foo::bar::finbar // not ::crate::foo::bar::finbar
ãã®ããã«çžå¯Ÿãã¹ãæžã
serde::Deserialize // no need to write `use serde`
serde::x::y // no need to write `use serde`
finlib
foo::finfoo
bar::finbar
ã«ãŒãåå空éãŸã§ãsupper modã§ã«ãã¯ã¢ãããèŠã€ãããªãå Žåã¯ãæåã«çŸåšã®modã¹ã³ãŒãã§serdefinlibfooãã«ãã¯ã¢ããããŸãã ååã®ç«¶åãããå Žåã¯ã代ããã«å®å šãªãã¹ãèšè¿°ããŸãã
ãŸããfoo.rsã§self::bar::finbar
ã䜿çšããŠãååã®æ€çŽ¢ãåé¿ããããšãã§ããŸãã
ããã«ã€ããŠèª¬æãã以åã®ã¹ã¬ãããèŠã€ããããšãã§ããŸããããã³ã³ãã€ã©ãŒã¯ãã®ããã«æ©èœããŠãããããåå解決ã«å€§ããªåé¡ãçºçããŸããã IIRC @ pcwaltonãŸãã¯@ arielb1ã¯ãããããã£ãšç¥ã£ãŠããŸãã
ãã®ãããŸããã«å¯Ÿããæãç°¡åãªè§£æ±ºçã¯ãã¯ã¬ãŒãããŒã«ã«ã®å¯èŠæ§ä¿®é£Ÿåã«å¥ã®ããŒã¯ãŒãã䜿çšããããšã§ã¯ãããŸããïŒã€ãŸãã pub(crate)
眮æïŒã ããšãã°ã以åã®RFCã®è°è«ã§äœåºŠãææ¡ãããããã«ã local
ã ãã®å Žåã struct S(local :: x :: y)
ã¯struct S(crate :: x :: y)
ãšã¯ç°ãªããŸãã
ããã¯ã <visibility> <absolute path>
ãš<relative path starting with the new keyword>
éã«å¥ã®ãããŸãããããããã ãã§ããããã¯ãæ°ããããŒã¯ãŒããã³ã³ããã¹ãã«äŸåããŠããå¿
èŠãããããã§ãã
@rpjohnstãããããŒ..ããããããã¯ãšããã¯ã解決ããããã«èšèšãããåé¡ã§ã¯ãããŸãããïŒ äŸïŒçŸåšã®ãšããã¯ã§ã¯pub(crate)
䜿çšãã次ã®ãšããã¯ã§ã¯ãããã人éå·¥åŠçããªæ°ããéã³ã³ããã¹ãããŒã¯ãŒããå°å
¥ããŸãã
@ neon64ã¯ãããã ããRFCã«ãããšãæ°ãããšããã¯ã¯å¿ èŠãªããšãã䞻匵ã§ãã ãã®äž»åŒµã¯æãç«ããªãããã§ãã
çŸåšã crate
å¯èŠæ§ãŸãã¯crate::
ãã¹ã䜿çšããã³ãŒãã¯ãªããããæ°ããã³ãŒãã®ã¿ã圱é¿ãåããŸãã 解å床ãéžæããŠãããç¶æããéããäºææ§ã®åé¡ã¯ãããŸããã
ç§ã«èµ·ãã£ãããšã®1ã€ã¯ã以åã«ãã£ã¹ã«ãã·ã§ã³ã®1ã€ã§åãäžããããããšãããå Žåã¯ããè©«ã³ããŸãïŒæåŸã®ã«ããã«ã§èŠãããšã¯ãããŸããïŒã
ææ°ã®ææ¡ã§ã¯ãããã®ã¯ã¬ãŒãå
ããåç
§ããããã®crate::
ãšãããã®ã¢ãžã¥ãŒã«å
ããåç
§ããããã®self::
ããããŸãã ããã¯å°ãäžè²«æ§ããªããæœåšçã«ãããããæ確ã§ã¯ãããŸãããããšãã°ã self
ããããããæãå Žåãæ¬è³ªçã«ãããã¯äœãã§ããself::
ããããšããäºå®ãããæããã§ã¯ãããŸããã ãã®ã¢ãžã¥ãŒã«ããæå³ãã crate::
ã¯ãä»ã®ã¯ã¬ãŒãããæå³ããå¯èœæ§ããããšæšæž¬ããããããããŸãããããã¯ãå®éã«ã¯ã¹ã¬ããã§èšåãããŠããæ··ä¹±ã§ãã
äžã€ã®å¯èœãªè§£æ±ºçã¯ã段éçã«å»æ¢ããããšã§ãself::
ã®è³æã§mod::
ã 次ã«ããæãè¿ãå²ã¿ç®±ã®äžããæå³ããcrate::
ãšããæãè¿ãå²ã¿ã¢ãžã¥ãŒã«å
ããæå³ããmod::
ããããæ確ã§äžè²«æ§ããããŸãã ãŸãã fn::
ãã¬ãã£ãã¯ã¹ãå°å
¥ããããšã§ã fn
ã¹ã³ãŒãå
ã®ã¢ã€ãã ã修食ãããæ¹æ³ã§åç
§ã§ããªããšããåé¡ã解決ã§ããå¯èœæ§ããããŸããããã¯ãåœç¶ã®ããšãªããããæãè¿ãå²ã¿ã®fn
"ã ïŒããã«å
ã«é²ãããšãçã«ããªã£ãŠããã®ãã©ããããŸãtrait::
ãimpl::
ãããªãã®ããããã©ããã«ã€ããŠã¯èããŠããŸãããïŒ
@glaebhoerlããã¯èå³æ·±ãææ¡ã§ãã å人çã«ã¯ã絶察ãã¹ã«æ°ããæ§æãå°å ¥ãã
ãã¹ã«æ¬¡ã®ææ³ããããšæ³åããŠãã ããã
Path = AbsolutePath | RelativePath
AbsolutePath =
| `@` ID?
| `@` ID? `::` RelativePath
| `self` :: RelativePath
| `super` :: RelativePath
RelativePath = ID (`::` ID)*
ãã®ææ³ã§ã¯ã @crate
ã§å§ãŸãä»ã®ã¯ã¬ãŒãããã®ãã®ãåç
§ããŸããããšãã°ã次ã®ããã«ãªããŸãã
use <strong i="13">@std</strong>::collections::HashMap;
ããšãã°ã @
ã ãã§ããŒã«ã«ã¯ã¬ãŒããåç
§ããŸãã
use @::something::in::my::crate;
ïŒãããŠã use self::something
ã¯ãè¯ããæªãããä»æ¥ãšåããŸãŸã§ããïŒ
ããã®è¯ãç¹ã¯ã絶察ãã¹ãçžå¯Ÿãã¹ãšå®å
šã«åºå¥ãããŠããããšã§ããã€ãŸãã use
ããã³ãŒãã«ãã¹ãã³ããŒããŠè²Œãä»ããããšãã§ãããšããæãŸããããããã£ãããããããæ©èœããŸãã
fn foo() {
<strong i="24">@std</strong>::cmp::min(a, b) // OK
}
ããã¯ä»æ¥ã¯çå®ã§ã¯ãªããããã¯ééããªãæã ç§ãæ··ä¹±ãããŸãã
ãŸãã crate
åšãã®è§£æã®ãããŸãããæé€ããã®ã§ã pub Foo(crate @::MyType)
ãªã©ãå®è¡ã§ããæ£åžžã«æ©èœããŸãã
ïŒäžè¬ã«ãçžå¯Ÿãã¹ãšçµ¶å¯Ÿãã¹ãåã::
éå§ããããšã¯ãäœåºŠãèŠçã®åå ã«ãªã£ãŠããŸãããããã¯çå®ã§ããïŒ
ç§ãç¥ããªãããšã®1ã€ã¯ã @foo
ãæé«ãã©ããã§ãã ç§ãããŸããããšæãããããŠç§ãèããä»ã®ãªãã·ã§ã³ã¯[]
ã§ãïŒ
[std]::collections
ãš[crate]::collections
// []::collections
ã¯å¥åŠãããããã§ãããã¹ã®ããã ãã«æ°ããã·ãžã«ãå°å
¥ããã¹ãã§ã¯ãªããšç§ã¯æ¬åœã«æããŸãã äžæµã®åŒ·å¶::
ã§::crate::foo
ã¢ãã¬ã¹@glaebhoerlããã®ã³ã¡ã³ãã«ååã§ãããšè§£æããããŸãããæé€ããŸãã ãŸãã crate::
ã®æå³ãããã¡ã³ã¿ã«ã¢ãã«ã«ããå¯æ¥ã«é©åããŸããããã¯ã self::
ãããªãã¹ãã¬ãã£ãã¯ã¹ã§ã¯ãªããçŸåšã®ã¯ã¬ãŒãã®ååã®ä»£çšã§ãã
ïŒäžè¬ã«ãçžå¯Ÿãã¹ãšçµ¶å¯Ÿãã¹ãåã
::
éå§ããããšã¯ãäœåºŠãèŠçã®åå ã«ãªã£ãŠããŸãããããã¯çå®ã§ããïŒ
ãããäœãæå³ããã®ãããããŸããã ::
ã§å§ãŸãçžå¯Ÿãã¹ã¯ãªããšæããŸããïŒ
@nikomatsakis @glaebhoerlç§ãããªãã®ææ¡ã奜ããã©ããã«é¢ä¿ãªãïŒç§ã¯å®éã«ã¯äž¡æ¹ãšäžç·ã«æ®ããããšãã§ããŸãïŒãRFCã«åºå·ããŠããããŸããïŒ ããã¯å€ãã®æ¹æ³ã§ååŸã«è°è«ãããŠããŸããããããŠç§ã¯åã³è°è«ãéãããšã誰ã«ã圹ç«ã€ãšã¯æããŸããã åèš82人ãææ°ã®RFCã®ã¹ã¬ããã«ã³ã¡ã³ããïŒä»¥åã¯ããªãã®è°è«ããããŸããïŒãå€ãã®äººãããã«ã€ããŠéåžžã«åŒ·ãæããŠããŸãã å€æŽãæ€èšããæ©äŒãäžããã«ããã®æç¹ã§ææ¡ã®åå£å Žã§ã®å€æŽããã£ãããšè¡ãããšã¯ã圌ãã«ãšã£ãŠäžå
¬å¹³ã ãšæããŸãã
ç¹ã«ãïŒ44721 @nikomatsakisã§ããå®è£
ã«ã€ããŠã®ã¿è©±ããŸãããããšããåŒæ°ã§æ©èœã«é¢ããè°è«ãã·ã£ããããŠã³ãããããå°ãæ··ä¹±ããŠããŸãã
@
è¡šèšãš[]
è¡šèšã®äž¡æ¹ãææ¡ãããŠããŸããïŒç§ã¯äž¡æ¹ã®ãµããŒã¿ãŒã§ãïŒããŠãŒã¶ãŒããã®åŠå®çãªåå¿ã®ããã«ãå°ãªããšãããã¯ç§ã®å°è±¡ã§ã¯ãããŸããã§ããã ã
å
é ã®::
ããå
è¡ããèå¥åã§å§ãŸããå
éšã«::
ããããã¹ãšæ··åãããå¯èœæ§ããŸã£ãããªãå Žåã§ããèŠèŠçã«ã¯ããŸãæ確ã§ã¯ãããŸããã
ãŸããããã¯ããŸã瀺åçã§ã¯ãããŸããã @
ã¯ããè¯ãããŒã¢ããã¯ã§ãã å
é ã«::
å Žåãå
é ã«ãã/
ã«ãŒããæå³ãããã¡ã€ã«åãã¹ã«äŒŒãŠããã®ãïŒUnixyã·ã¹ãã ã䜿çšããŠããå ŽåïŒããããšãå
é ã«ãªãæšæºã®çç¥åœ¢ã«ãªã£ãŠããã®ãçåã«æãå¿
èŠããããŸãã ãçžå¯Ÿçãªååãªã®ã§ãååãçç¥ããããšããæå³ã§ãã å°ãèããŠã¿ããšãåè
ã®æ¹ãçã«ããªã£ãŠããããšãããããŸãããèŠç¹ã¯å°ãèããŠã¿ããšããããšã§ãã @
ïŒãŸãã¯ãã®ãããªãã®ïŒã¯ãã³ã³ãã€ã©ãŒãšã³ãŒããŒã®äž¡æ¹ã§å³åº§ã«åºå¥ã§ãããããäœãèµ·ãã£ãŠããã®ããå³åº§ã«ææ¡ãããããªããŸãã
å
é ã®@
ã¯ãå
é ã®::
ãããã©ã®ããã«åºå¥ã::
ã¯ãRustãšC ++ã®äž¡æ¹ã§ãã§ã«ç¢ºç«ãããã¡ã«ããºã ã§ãã
@ rpjohnst-ç§ã¯ããªããå¿çããŠãããŸãã«ãã®æã®äžã§ã©ã®ããã«èšã£ããïŒ @
ã¯èŠèŠçã«åºå¥ãããŸãã æ¡åŒµããã«ã¯ïŒããã¯ããªãã«é£ã³åºããŸãã ããŒã¯ã³ã¹ããªãŒã ã®ã¡ã³ã¿ã«ã¢ãã«ã§ããªãŒãã£ã³ã°ãšå
éšã®ããžã·ã§ãã³ã°ãæ··åãããå±éºã¯ãããŸããã
@
ã¯ãŸã£ããæ°ããããŒã¯ã³ã§ããããŸã£ããæå³ããªããç解ããã«ã¯ãäžç¬ã®æèããããã¯ããã«å€ãã®æéãããããŸãã å
è¡ãã::
ãå
éšã®::
ãšæ··åããããšã¯ãããããåé¡ã§ã¯ãããŸãããå
è¡ãã::
ã¯çžå¯Ÿãã¹ã§ããå¯èœæ§ããããŸãã
@rpjohnst - ::
æå³ã«ã€ããŠååãªãã¬ãŒãã³ã°ãåããŠããã°ãããªãã®çºèšã¯çå®ã§ãïŒC ++ãŸãã¯Rustã®çµéšã«ãã£ãŠæäŸãããŸãïŒã ç§ã¯åŠç¿å¯èœæ§ãšæ¬è³ªçãªéãã«ã€ããŠè©±ããŠããŸããã ãç°ãªãã³ã³ããã¹ãã§äœ¿çšãããåãã·ã³ãã«ãã¯ããäžæã®ã·ã³ãã«ãã»ã©åºå¥ã§ãããã®ã«ã¯ãªããŸããã
@
ãã蚱容ã§ãã代æ¿æ¡ããããã®ãããªãŠãŒã¹ã±ãŒã¹ã®äžæã®ã·ã³ãã«ãšããŠçãã䟡å€ã¯ãªããšããè°è«ãåãå
¥ããããšãã§ããŸãã
@Ichoran ïŒç¹å®ã®ã»ãã³ãã£ã¯ã¹ïŒ @
ïŒã®æ°ããããŒã¯ã³ãRustææ³ã«è¿œå ããããšã¯ã軜èŠããã¹ãããã§ã¯ãªããšæããŸãã @ nikomatsakisã§ãããè¡ãã®ã«è¿ãããã®ã§ã¯ãªãããšå°ãçã£ãŠããŸãããšä»ã®äººã®ææ¡ã 1ã€ã¯ãèšèªã®å¯¿åœã®åŸåã§å¥ã®ç®çã«åå©çšã§ããªãããã§ãïŒãã¹ãã³ãŒãå
ã§éåžžã«æ®åããŠããããã @
ããŒã¯ã³ãå€ãã®å Žæã«è¡šç€ºãããå¯èœæ§ããããŸãïŒã ãŸããRustã³ãŒãã®è€éãã®èªèã«ã©ã®ãããªåœ±é¿ãããã®ã ãããã ããšãã°C ++ã«æ
£ããŠããªãåå¿è
ã«ãšã£ãŠãRustã¯éåžžã«ãããã¯çã§åšå§çãªè¡šèšã®èšèªã§ãããšç§ã¯ä¿¡ããŠããŸãïŒãã ããããã«é¢ããç 究ã¯ãããŸããïŒã ä»å¹Žã®æŠç¥ç®æšã®1ã€ã¯ãåŠç¿å¯èœæ§ãæé©åããããšã§ãããRustã®èŠªãã¿ããããæšæž¬ããŸãã ãããã£ãŠã @
空æ³ãããšãã¯ãã³ãŒãã§ç®ç«ã€ãšããçŽæãããããããããèæ
®ããå¿
èŠããããããããŸããïŒ @rpjohnstã¯åœç¶ã®è³ªåã ãšæããŸãïŒã ç§ã¯ããã§äœãæå³ããã®ãååã«æ確ã§ããïŒ
ïŒç§ã䞻匵ããããšã¯äœã§ãèªç±ã«èšæ£ãŸãã¯æ確åããŠãã ããããªããªããç§ã¯Rustææ³ã«é¢ããè°è«ã«ããã»ã©å³å¯ã«åŸãæéããªãããã§ããïŒ
@ est31
ç§ãããªãã®ææ¡ã奜ããã©ããã«é¢ä¿ãªãïŒç§ã¯å®éã«ã¯äž¡æ¹ãšäžç·ã«æ®ããããšãã§ããŸãïŒãRFCã«åºå·ã§ããŸããïŒ
åºæ¬çã«åæããŸãã ç§ã¯ä»ã倧ããªè°è«ã«åå ããããããŸãã-çµå±ã®ãšãããããã¯æé»ã®æéã§ãïŒ -ããããç§ã¯@
ã¢ã€ãã¢ããããã«ã眮ããŠãããã¯ã°ã©ãŠã³ãã§ç
®èŸŒãã§ãããã£ãã®ã§ãã ç©å¿ããã¡ãªããšããããæžãåºãããšã§åŸã§æãåºãããšãã§ããŸãã
ç§ã®èãã§ã¯ããã®æç¹ã§è¡ãã¹ãæ£ããããšã¯æ¬¡ã®ãšããã§ãã
::crate
ãããã¯éåžžã«å°ãããã«ã¿ã®ããã«æããã®ã§ãã¡ããã©è§£ædisambiguityã解決ããããã«ã絶察ãã¹ã®ããã«ããããŠå®éã«å
šäœã®äžè²«æ§ãåäžãããŸããããã¯ç§ãã³ã¡ã³ããæžãã€ããã ã£ã粟ç¥ã§ããããç§ã¯ãããæ確ã«ããªãã£ããšæããŸãã ãããããããããã©ã€ããŒããã¡ã€ã«ã«ä¿åããæ¹ãè¯ãã£ãã§ãããã ïŒwoman_shruggingïŒ
ç·šéïŒãŸãã @
ãš[]
ã以åã«èª¿éãããããšãç¥ã£ãŠããŸããã @::foo
è¡šèšãçŸåšã®çžå¯Ÿçãªãã®ãšããŠä»¥åã«èšåããããã©ããã¯æãåºããŸããæšæ ã ã ããç§ã¯ãã®ã¢ã€ãã¢ã®èè
ã§ãããšäž»åŒµããã€ããã¯ãããŸããã
OTOHãç§ãèšåããã¢ã€ãã¢ã¯ä»¥åã«æèµ·ããããã®ã§ã¯ãªããRFCãæ¡åŒµãããã®ã§ã¯ãããŸããã ãŸããã絶察ãã¹ã®æçµçãªæ§æãããŸããŸãªãªãã·ã§ã³ãå®éã«è©Šãããšãã§ããã³ã³ããã¹ãã§ãããã§å®è¡ãããã€ã¯ã·ã§ãã£ã³ã°ãããã«ãããŸããã åé¡ã®æ¬æã«æªè§£æ±ºã®è³ªåãšããŠæ瀺çã«ãªã¹ããããŠããŸãã äžè¬ã«ãåãå ¥ããããRFCã®å蚎èšãé¿ããããã«åªããã¹ãã§ããããšã«åæããŸããããã®ç¶æ³ã¯ãããšãã°å æ¬çç¯å²ã§ã®ç¶æ³ã«å¹æµãããšã¯æããŸããïŒughïŒã
ãã®ãã£ã¹ã«ãã·ã§ã³ã¹ã¬ãããåç §ããŠãã ããã
https://internals.rust-lang.org/t/the-great-module-adventure-continues/6678
ã°ã¬ãŒãã¢ãžã¥ãŒã«ã¢ããã³ãã£ãŒã®å¥ã®ãšããœãŒããžããããïŒ ç§ãã¡ãæåŸã«äŒã£ããšããç§ãã¡ã®åæ¢ãªåéºå®¶ãã¡ã¯ãRFCïŒ2126ãåãå ¥ããŠãã€ãã«äŒèª¬ã®åå°ã«ãã£ãŠæ¥ãŸããã ããã§åœŒãã¯çãäŒæ¯ãåããImplæéããå§ããæºåãããŸããã ãã®éã倧å€ãªäœæ¥ãè¡ãããå®éã«ã¢ãžã¥ãŒã«ã·ã¹ãã ã®æŠèŠãå®è£ ãããããã«ãªããŸããã ãããããŸã 解決ãã¹ãããã€ãã®ãã£ãããªè³ªåããããŸããâŠãããŠããã¯ç§ãã¡ããã®ãã£ã¹ã«ãã·ã§ã³ã¹ã¬ããã«å°ããŸãã
è±ã®å°ãªãèšèªã§ïŒå®è£ æéäžã«ãããã¹ãšå¯èŠæ§ãæ確ã«ããŠåçåãããRFCïŒããã³é¢é£ããå€ãã®RFCïŒã®å®è£ ã§å€ãã®é²æ©ãéããŸããã å®éãç§ãã¡ã¯ã»ãšãã©é²æ©ããããŠããŸãããããã€ãã®ç°ãªãããªã¢ã³ããå®è£ ããŸãããç§ãã¡ãæ¬åœã«æãã§ããããšã«ã€ããŠè©±ãåããå§ããããšæããŸãã
ãã€ããã®çŽ æŽãããäœåãå®å®ãããããšæã£ãŠããŸã=ïŒãããŠããã¯ç§ãã¡ãå€çš®ã®1ã€ãéžã¶ããšãèŠæ±ããã§ããã...ããæ ã«ã¹ã¬ããã
å人çã«ã¯ã@ nikomatsakisãèšåããŠãã@
æ§æã®ãã¡ã³ã§ãã ããã¯ç°¡æœã§ãåççã«èªæã§ãã ç§ãã¡ã¯ãããã«æ°ããæ§æã®å°å
¥ããã€ãã®äžŠã¹æ¿ããæã£ãŠãããããªäºçŽåããããšãŠãè¯ããç¹æ®ãªæåã€ããã crate
ïŒããµïŒãã
ç¹ã«https://github.com/rust-lang/cargo/issues/1311ã解決ãããããšãèãããšã2çªç®ã®å€åŽã®ãã€ã³ã¿ãŒã«åãçµãç«å Žã«ããããã§ãïŒå®éã«ã¯ãã§ã«éããŠããã¯ãã§ãïŒã å°ãã®æå°ãšã @
ãšcrate
æ§æã®æ±ºå®ã§ãããã«åãçµãããšãã§ãããããããŸããã èãïŒ
å®è£ ãããŠããªã2ã€ã®lintã®è¿œè·¡ã®åé¡ãè¿œå ããŸããã
å°ããªäºææ§ã®åé¡ãããããšã«æ°ã¥ããŸããã extern crate
æé»çã«ããå Žåããã®äœæ¥ãè¡ãéã«é倧ãªå€æŽãå¿
èŠã«ãªããŸãã extern crate
ã¯ãã¯ã¬ãŒãã匷å¶çã«ãªã³ã¯ããŸãã ããã¯ãCargo.tomlã§è¿œå ã®ã¯ã¬ãŒããæå®ããããæ£ãããªã³ã¯ãããŠããªãlib.rsãæå®ããªãå Žåã«ãšã©ãŒãåŒãèµ·ããå¯èœæ§ããããŸãïŒããšãã°ãpanic = unwindã¯ã¬ãŒããšpanic = abortããŸãã¯åãã·ã³ãã«ããšã¯ã¹ããŒãããã¯ã¬ãŒãïŒã ããã¯åé¡ã®ãªãç Žæã§ãããšå€æããŸãããïŒ
å°ããªäºææ§ã®åé¡ãããããšã«æ°ã¥ããŸãããå€éšã¯ã¬ãŒããæé»çã«ããå Žåããã®äœæ¥ãè¡ãéã«é倧ãªå€æŽãçºçããŸããå€éšã¯ã¬ãŒãã¯ã¯ã¬ãŒãã匷å¶çã«ãªã³ã¯ããŸãã ããã¯ãCargo.tomlã§è¿œå ã®ã¯ã¬ãŒããæå®ããããæ£ãããªã³ã¯ãããŠããªãlib.rsãæå®ããªãå Žåã«ãšã©ãŒãåŒãèµ·ããå¯èœæ§ããããŸãïŒããšãã°ãpanic = unwindã¯ã¬ãŒããšpanic = abortããŸãã¯åãã·ã³ãã«ããšã¯ã¹ããŒãããã¯ã¬ãŒãïŒã ããã¯åé¡ã®ãªãç Žæã§ãããšå€æããŸãããïŒ
ãããŸã§ç§ãèŠãå¯äžã®è§£æ±ºçã¯ãã¯ã¬ãŒãããäœããã€ã³ããŒããããšãã«ãã¯ã¬ãŒããæé»çã«ãªã³ã¯ããããšã ãã§ãããããã«ã¯ãŸã ããã€ãã®åé¡ããããŸãã ç¹å®ã®ãã€ãã£ãã©ã€ãã©ãªã«ãªã³ã¯ãããã #[no_mangle]
ã·ã³ãã«ããšã¯ã¹ããŒãããŠãã€ãã£ãã©ã€ãã©ãªã®äŸåé¢ä¿ã解決ããããããªã©ãã€ã³ããŒãããéã®ã·ã³ãã«ãåã«ãšã¯ã¹ããŒããã以å€ã®æ¹æ³ã§ãã¯ã¬ãŒããæ©èœãå
¬éããæ¹æ³ã¯ãããããããŸãã extern crate
ãåé€ããããããã®ãããªã¯ã¬ãŒãã匷å¶çã«ãªã³ã¯ãããå¯äžã®æ¹æ³ã¯ãå¿
èŠã«å¿ããŠã€ã³ããŒããããã©ã»ãã©ã¹ãã·ã³ãã«ããšã¯ã¹ããŒãããããšã§ãã extern crate
ã«åºå·ããã®ã§
ãããFirefoxã§ã¯ãã®ãã¿ãŒã³ãæ瀺çã«äœ¿çšããŠããŸã-ãªã³ã¯ããå¿
èŠãããã¯ã¬ãŒãã®extern crateã¹ããŒãã¡ã³ããå«ããããã¬ãã«ã®gkrust
ã¯ã¬ãŒãããããŸãïŒãããã¯FirefoxãåŒã³åºãRustã§èšè¿°ãããextern Cé¢æ°ãå
¬éããŸãïŒ
ããã匷å¶ããããã«lib.rsã§use cratename;
ãèŠæ±ããããšã§ãããæ©èœãããããšãã§ããŸãã
ãã®ç®çã®ããã«#![link_crates(stylo,webrender)]
å±æ§ãæã€ã®ã¯ã©ãã§ããïŒ extern crate
ãšã¯ç°ãªããååããªãŒã«ã¯ã¬ãŒãã¯è¿œå ãããŸããã æ°ããååãä»ãããšããªã³ã¯çšã®ã¯ã¬ãŒãã®ã¿ãå«ããã¹ããŒãã¡ã³ããåé€ããŠã¯ãªããã extern crate
ãåé€ããå¿
èŠãããããšãèªè
ã«æ確ã«ç€ºããŸãã
ããã¯å察ã®åé¡ã解決ããŸããïŒ
ãããããã§ããã2015幎ã®ãšããã¯ã®äººã ã«ãšã£ãŠã¯ããšããã¯ãåãæ¿ããããšãªãã³ãŒããã¢ããã°ã¬ãŒãã§ããŸãã
ãã ããããã¯ã_å
šå¡_ãlink_crates
ããŒã䜿çšããå¿
èŠãããããšãæå³ããŸãã ããã¯çæ³çã§ã¯ãããŸããã
ãã®ç®çã®ããã«ïŒïŒ[link_cratesïŒstyloãwebrenderïŒ]å±æ§ãæã€ã®ã¯ã©ãã§ããïŒ externã¯ã¬ãŒããšã¯ç°ãªããååããªãŒã«ã¯ã¬ãŒããè¿œå ããŸããã
ãªã³ã¯ã®ã¿ã®ã¯ã¬ãŒããRustã·ã³ãã«ã®ä»ããã¯ã¬ãŒãããŸãã¯ãã®äž¡æ¹ãšããŠäœ¿çšã§ããã¯ã¬ãŒãã¯ã©ãã§ããïŒ
@whitequarkãããã®ã¯ã¬ãŒãã®ã·ã³ãã«ã䜿çšãããšãçŸåšã®ããã«ç¡æã§ãªã³ã¯ãååŸã§ããŸãã å±æ§ã¯äœ¿çšãµã€ãã«ããããããŠãŒã¶ãŒãã¯ã¬ãŒãã®äœ¿çšæ¹æ³ã決å®ããŸãã
@Manishearth
ãã ããããã¯ãå šå¡ãlink_cratesããŒã䜿çšããå¿ èŠãããããšãæå³ããŸãã ããã¯çæ³çã§ã¯ãããŸããã
ããããç§ã¯èªåã®ææ¡ãååã«è¡šçŸããŠããŸããã use cratename::item;
ãlink_crates
ãšåãå¹æãæã€éšåããã®ãŸãŸã«ããŠããããã link_crates
æ©èœã¯ãã¯ã¬ãŒãããã®ã¢ã€ãã ã¯å¿
èŠãªããããªã³ã¯ã¯å¿
èŠãªå Žåã«ã®ã¿äœ¿çšããå¿
èŠããããŸãã ã¯ã¬ãŒãããã¢ã€ãã ãã€ã³ããŒããããšãRFCãææ¡ãããããªãªã³ã¯ãåŸãããŸãã
ãã®ç®çã®ããã«ã³ãŒãã«use cratename;
ãå«ããããšã¯ãlintãšïŒæãéèŠãªïŒã³ãŒããªãŒããŒ/ã©ã€ã¿ãŒãæ··ä¹±ããããããè¯ããšã¯æããŸããããããã£ãŠããã®æ£åœãªãã®ã«å°çšã®æ©èœãå¿
èŠã ãšæããŸãã ïŒãã ãããã£ãã«ãããŸããïŒãŠãŒã¹ã±ãŒã¹ã
@ est31 link_crates
ã®æ§æã«ã€ããŠãå±æ§ãšããŠäœ¿çšãã代ããã«ã extern crate foo;
ãããªããšãããŠã¿ãŸãããïŒ
@ retep998
è¯ãã¢ã€ãã¢ïŒ ïŒç¬é¡ïŒ
https://github.com/rust-lang/rfcs/pull/2166ã¯ããªã³ã¯ã®ã¿ã®ã¯ã¬ãŒãã®ã¹ã³ãŒã/ã¢ãžã¥ãŒã«ã«ã¯ã¬ãŒãã®ååãæã¡èŸŒãŸãªãããã«ããããã«ã extern crate foo as _;
ãå°å
¥ããŸããã
@ est31 link_cratesã®æ§æã«é¢ãããã€ã¯ã·ã§ãã£ã³ã°ã§ã¯ãå±æ§ãšããŠäœ¿çšãã代ããã«ãextern crate foo;ã®ãããªããšãããŠã¿ãŸãããïŒ
ãã ããéèŠãªã®ã¯ãé·æçã«ã¯extern crate
æ§æãåãé€ãããšã§ãã
@alexregãã€ã³ãã¯ãäžè¬çãªã±ãŒã¹ã§ã¯äžèŠã«ããããšã§ãã ããã¯ãå®å šã«æ ¹çµ¶ããå¿ èŠããããšããæå³ã§ã¯ãããŸããããããããRustã¢ã€ãã ã䜿çšããã«ãªã³ã¯ããå¿ èŠããããã¯ã¬ãŒãã®ãšããžã±ãŒã¹ã®åªãããœãªã¥ãŒã·ã§ã³ã§ããå¯èœæ§ããããŸãã ïŒãšã«ãããã³ã³ãã€ã©ãå€ããšããã¯ããµããŒãããŠããéããããã¯åç¶ããŸããïŒ
@SimonSapinããããå ã«é²ããšãããããšããžã±ãŒã¹ã«ãªãå Žåã¯ãããããç¹å¥ãªæ§æã䜿çšããããšã¯æå³ããªããå±æ§ïŒäžèšã§ææ¡ããããã«ïŒã®æ¹ãæå³ããããŸãã
ããã§ã¯ãŸã use foo
ãŸãã¯use foo as _
ã§ååã ãšæããŸã
@Manishearthã«åæããŸãã
extern crate;
ã«é¢ããç§ã®èŠè§£ãèŠçŽãããšïŒ
å©ç¹ïŒ
extern crate
ã¯ãã©ã€ãã©ãªã®äžçªäžã«ãã䜿çšæžã¿ã®æšæ ã®å
æ¬çãªãªã¹ããæäŸããŸãã ããCargo.tomlã§ãããäŸãæã£ãŠããå Žåãããã¯ããªãã«ã€ã³ããŒãããæšæ ã®ãªã¹ããäžãããšãããã¯éåžžã«æçšã§ãããšããŠãä»ãéåžžã®æšç®±ã§ãããã¯ãã®é¢ä¿ãããŸããã èããŠã¿ãŠãã ãããäŸã§éçºäŸåé¢ä¿ã®ãµãã»ãããã€ã³ããŒãããå Žåã¯ã©ãã§ããããã ããã¯ãæ°ããã¯ã¬ãŒãã®APIãç解ããããšãããšãã«é«ãã¡ãªããããããŸããããã¯ãåŠç¿å¯èœæ§ã®ã¡ãªãããšãåŒã°ããŸãã äžæ¹ã extern crate
ã¯æšæ ã®ã©ãã«ã§ã衚瀺ãããå¯èœæ§ãããããããªã¹ãã網çŸ
ããå¿
èŠã¯ãããŸããããããšãã°ãããã¯ããŸãé¢é£æ§ããããŸããã å¿
èŠã«å¿ããŠãå€éšã¯ã¬ãŒããã¯ã¬ãŒãã«ãŒãã§ã®ã¿æ©èœããããã«ãã€ã§ãå€æŽã§ããŸããçæïŒ
extern crate
ã¯ãã¯ã¬ãŒããè¿œå ãããšãã«å
¥åãããã®ãå¢ããããšãæå³ãããããå°ããªç
©ãããã§ãã ãããå€ãã®äººãextern crate
å察ããŠããçç±ã ãšæããŸãããç§ã«ãšã£ãŠã¯ãããããæ°ãèµ·ããããçç±ã§ã¯ãããŸãããextern crate
ã¯ååŒã®äžéšã§ãããšæããŸãã extern crate
ãæŸæ£ããŸãããç¬èªã®ã¯ã¬ãŒãããã®ã€ã³ããŒããšå®è¡äžã®ã¯ã¬ãŒãããã®ã€ã³ããŒããåºå¥ã§ããŸãã ããã¯ã¯ããã«äŸ¿å©ãªæ©èœã§ãããã³ãŒãäŸ/ãã¹ãã§ã®åŠç¿å¯èœæ§ã®æ¬ ç¹ãIMOãããäžåããŸãã ããããç§ãextern crate
åé€ã«åæããåæ©ä»ãã®çç±ã§ããextern crateã¯ãã©ã€ãã©ãªã®æäžéšã«ãã䜿çšæžã¿ã¯ã¬ãŒãã®å æ¬çãªãªã¹ããæäŸããŸãã éåžžã®ã¯ã¬ãŒãã§ã¯ãCargo.tomlããããããããã¯ããã»ã©éèŠã§ã¯ãããŸããããäŸãããå Žåã¯ãã€ã³ããŒãããã¯ã¬ãŒãã®ãªã¹ãã衚瀺ããããããããã¯éåžžã«äŸ¿å©ã§ãã
ãããããã§ã®è°è«ã«ã©ã®ããã«é¢é£ããŠãããããããŸããã ããã¯ããã§ã«ããŒãžãããŠããRFCã«å¯Ÿãããã€ã³ãã§ãã
@Manishearthç§ã¯ããã§@ retep998ã«ãã£ãšè¿ä¿¡ããŠããŸããã ãããããã€ã³ãã¯ããã§ã«ããŒãžãããRFCã«åããŠãããšããçç±ã ãã§ãéæ³ãŸãã¯ç¡é¢ä¿ã§ã¯ãããŸããã 決å®ã®é·æãšçæãåæ ããç¥ãå¿
èŠããããŸãã ããšãã°ã lib.rs
ããå€éšã¯ã¬ãŒããåé€ããããšã¯ã§ããŸããã人éå·¥åŠãšåŠç¿æ§ã®å©ç¹ã®ããã«ïŒäœæè
ã§ã¯ãªããã©ã€ãã©ãªã®ãŠãŒã¶ãŒã®ããã«ïŒ hello_world.rs
ãŸãŸã«ããŠãããŸãã
ïŒããªããè¿ä¿¡ããPeterã®ã³ã¡ã³ãã§ïŒè°è«ãããŠããã®ã¯ãªã³ã¯ã®ã¿ã®ã¯ã¬ãŒãã§ãããããããã¯ç¡é¢ä¿ã§ãã ããã¯ãããã¹ãŠã®å€éšã¯ã¬ãŒããäžçªäžã«ãªã¹ãããããšããããããªãŠãŒã¹ã±ãŒã¹ã§ãããããããªã¡ãªããã§ãã ç¹ã«ããªã³ã¯ã®ã¿ã®ã¯ã¬ãŒãã§ã¯ãªãäŸåé¢ä¿ãããå ŽåïŒããã¯Firefoxã«ã¯åœãŠã¯ãŸããŸããã§ããããçŸåšã¯åœãŠã¯ãŸããŸãïŒã
æé»ã®å€éšã¯ã¬ãŒãããã¹ãã«é©çšããªãããšã«ã€ããŠã®ããäžè¬çãªãã€ã³ãïŒç¹ã«ãªã³ã¯ã®ã¿ã®ã¯ã¬ãŒãã«ã€ããŠã§ã¯ãªãïŒã®å Žåãããã¯èå³æ·±ããã€ã³ãã§ãããããã¯ãã£ãšå€ããªãã®ã§ãç§ã¯æ¬åœã«åæããŸããã³ãŒãã®ååã ãã§äœ¿çšãããŠãããšæ··ä¹±ããŸãã
ã§ããããç§ãééã£ãŠããªããã°ãããã«æ®ã£ãŠããå¯äžã®å®è£ ãã€ã³ãã¯ïŒ48719ã§ãã ä»ããã«åãçµãã§ãã人ã¯ããŸããïŒ ããã§ãªããã°ãç§ã¯è¡ãããšãã§ããŸããç§ã¯æšæž¬ããŸã...
ã¯ããïŒ50260ã§è©ŠããŠã¿ãŸã
åã2018幎4æ28æ¥ã«ã¯ã9ïŒ15 AMã¢ã¬ã¯ãµã³ããŒRegueiro [email protected]
æžããŸããïŒ
ã§ããããç§ãééã£ãŠããªããã°ãããã«æ®ã£ãŠããå¯äžã®å®è£ ãã€ã³ãã¯
48719https ïŒ//github.com/rust-lang/rust/issues/48719 ã 誰ã
ä»ããã«åãçµãã§ããŸããïŒ ããã§ãªããã°ãç§ã¯è¡ãããšãã§ããŸããç§ã¯æšæž¬ããŸã...
â
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/rust-lang/rust/issues/44660#issuecomment-385187379 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/ABivSMyg6L4nQ1O7nMcvY4JCGjWKRiq3ks5ttJWhgaJpZM4PaPWi
ã
@ mark-im @Manishearth https://github.com/rust-lang/cargo/issues/1311ãå®äºããŠããã®ã§ããã®ãã€ã³ãããã§ãã¯ããã¯ã¹ã«å€æŽããŠãã§ãã¯ãã䟡å€ããããããããŸããã ã§ãæ°ã«ãªãã®ã§ãããCargoã䜿ããªããšãã®ã¢ãããŒãã¯ã©ããªã£ãŠããã®ã§ããããïŒ ïŒèª°ãã貚ç©ãé¿ããŠããããã§ã¯ãããŸãã...ïŒ
@alexreg Cargoãrustcã«ã¯ã¬ãŒãã®ååãå€æŽããããã«æ瀺ããããã«äœ¿çšããã¡ã«ããºã ã¯ã貚ç©ã䜿çšããŠããªã人ã«ãåæ§ã«ã¢ã¯ã»ã¹ã§ããŸãïŒ --extern name_rustc_sees=path_to_dep.rlib
ã
å®éã httpsïŒ//github.com/rust-lang/rust/pull/47992ããªãªãŒã¹ãããæç¹ã§ãå®è£ 段éå šäœããŸããªãçµäºããããã§ãã ç§ã¯äœãã足ããªãã®ã§ããïŒ ããã¹ãããšãæ®ã£ãŠããå Žåã¯ããããé²ããã®ãæäŒã£ãŠãã ããã
ãããããã¯éäžã§ãã ç§ã¯ããããŸãšããå¿
èŠããããŸã
次ã®é±ã
æšã2018幎5æ3æ¥ã«ã¯ãåå7æ51åPMã¢ã¬ã¯ãµã³ããŒRegueiro [email protected]
æžããŸããïŒ
å®è£ 段éå šäœããŸããªãçµäºããããã§ãâãã€
å®éã47992https ïŒ//github.com/rust-lang/rust/pull/47992ãçéžã
äœã足ããªãïŒ å°ãã§ãããã°ããããé²ããã®ãæäŒã£ãŠå¹žãã§ã
ããã¹ããããæ®ã£ãŠããŸããâ
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/rust-lang/rust/issues/44660#issuecomment-386494018 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/ABivSDYFonDWvxZEdxWXoykroaL2mJPxks5tu8I_gaJpZM4PaPWi
ã
@Manishearthè¯ããã®ã
@aturonãšhttps://github.com/rust-lang/rust/pull/50260ãçéžããŸãããããã¹ãŠå®è£ ãããŠããŸããïŒ
RFCã®åŸã«ææ¡ãããèšç»ãžã®ãªã³ã¯ã誰ããæã«å
¥ããŸãããïŒ å®éã«å®è£
ããããã®ã«ããè¿ããã®ã§ããïŒ ïŒ --extern
ã¯ã¬ãŒãã®ã€ã³ããŒãããã¬ãªã¥ãŒãã«è¿œå ãããå Žåãªã©ïŒ
èŠã€ããïŒ https ïŒ
ããã¯éåžžã«éèŠãªå€æŽã§ãããããRFCãæŽæ°ããå¿ èŠããããŸããïŒ
éåžžãRFCã¯æŽæ°ãããŸããã ãããã¯æçµçãªä»æ§ã§ã¯ãããŸããã 圌ãã¯
ã³ã³ã»ã³ãµã¹æ§ç¯ããŒã«ã
2018幎6æ18æ¥æææ¥ååŸ9æ43åã誰ã§ããïŒ èªåïŒïŒ [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãïŒ
ããã¯éåžžã«éèŠãªå€æŽã§ãããããRFCãæŽæ°ããå¿ èŠããããŸããïŒ
â
ãã®ã¹ã¬ããã«ãµãã¹ã¯ã©ã€ãããŠããããããããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/rust-lang/rust/issues/44660#issuecomment-398247665 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AABsij-Iwwb7vf4qBrsq9KFFqhuIbkVBks5t-Fc3gaJpZM4PaPWi
ã
@ mark-imãã®è«è©±ã®æçš¿ã¯RFCã®ç²Ÿç¥ã®äžã«ãšã©ãŸããŸãã RFCã®èŠçŽããã®æçš¿ãšæ¯èŒããŠãã ããã詳现ã¯ã»ãšãã©ãããŸããããã»ãšãã©åãã§ãã ããŒã ããŸã£ããç°ãªãå€æŽãè¡ãããšã決å®ããRFCããããŸããããããã¯ãããã®1ã€ã§ã¯ãããŸããã
ããã¯ãã¹ãŠçå®ã§ããããã¹ãŠã1ãæã«ãããšããã§ãããã ç§ã¯ãã®ããžã¹ãã£ãã¯ã®èª²é¡ãç解ããŠããŸãã...
ðð 2018幎åé ã®
@aturonæåŸã®æŽæ°ãããã³ã¢ãžã¥ãŒã«äœæ¥ã°ã«ãŒãã®æåŸã®äŒè°ã®çµæã httpsïŒ //internals.rust-lang.org/t/the-great-module-adventure-continues/6678/205ãäœæãããå ·äœçã«ã¯ã 2ã€ã®ããªãšãŒã·ã§ã³ãæã€åäžã®ã³ã¢ææ¡ã«çµã蟌ã¿ãŸãããã ç§ã®ç¥ãéããããã¯ãŸã çå®ã§ããã äž¡æ¹ã®å®éšããµããŒãããããã«ãæ¯æ©ããã£ãŒãã£ãŒãã°ã«ãä»ããŠäž¡æ¹ãå®è£ ãããšããå°è±¡ãåããŸããã
ãšãã£ã·ã§ã³ã¯2ã€ã®ããªã¢ã³ãã®ãããããéžæããæ©èœãã©ã°ãªãã§ãµããŒãããããšãéžæãããšãã£ã·ã§ã³ã¬ã€ãã«ææžåããããã§ãã ããã¯ã©ãã§è°è«ãããŸãããïŒ ç§ã®ç¥ãéããã¢ãžã¥ãŒã«ã¯ãŒãã³ã°ã°ã«ãŒããlangããŒã ãããã«é¢äžããŠããªãã£ãããã§ãã
2018ãã¬ãã¥ãŒããæ§ç¯ãããæ°ããææ¡ã«ã€ããŠã¯ã httpsïŒ//internals.rust-lang.org/t/relative-paths-in-rust-2018/7883ãåç
§ããŠuse
ã¹ããŒãã¡ã³ããšã³ãŒãå
ã®ãã¹ã®çŽæ¥äœ¿çšã®äž¡æ¹ã§åãåå解決ã䜿çšããŸãã
ããã«ã¡ã¯ã ::some::path
ãšcrate::some::path
ã»ã³ãã ãã§ããäž»ã«ãå¹³æãªè±èªãšããŠèªã¿ããããå·Šã«ã¶ãäžãã£ãŠããå¥èªç¹ãæ®ããªããããåŸè
ã®æ¹ã奜ãã§ãã
ã芧ã«ãªããããã«ãã£ãŒãããã¯ãæ®ããŠãã ããïŒ
ãããããªãã®æå³ããããšã ãšããã®ã§ããã ãã¹ãŠã®pub(crate)
ãcrate
ã«å€æŽãããå
ç©ã¯ã¬ãŒããžã®å€§ããªå€æŽã確èªããåŸãã€ã³ããŒããšå¯èŠæ§ã®äž¡æ¹ã§crate
ã䜿çšããããšã確信ããŠããŸããã¢ãã£ãã¡ã€ã¢ã¯äžèªç¶ã§çŽãããããšæããŸãã
crate enum Either<T, U> {
A(T),
B(U),
}
2ã€ãäžç·ã«äœ¿çšãããšãç¹ã«æ··ä¹±ããŸãã
crate use crate::foo;
ç§ãã¡å
šå¡ãåãæ¿ããããããšããlintã®åé¡ã§è¿°ã¹ãããã«ãããã¯ç§ãéåžžã«æ²ãããããŸããããããããµãŒãããŒãã£ã®lintãå®è£
ããŠãç§ãç¶æããŠããã©ã€ãã©ãªã§äœ¿çšããããã«ãå察ã®ããšãããããšæããŸãã pub(crate)
ãcrate
å€æããããšããã
ïŒæ³šïŒäžè²«æ§ãä¿ã€ããã«é©åãšæãããå€æŽã®ä»ã®éšåã«ã€ããŠã¯ã³ã¡ã³ãããŠããŸããã pub(crate)
ãããã¬ãŒã³ãªcrate
ãžã®å€æŽã®ã¿ã§ããïŒ
@seanmonstar次ã®ãšãã£ã·ã§ã³ã®ãã¬ãã¥ãŒã§ã¢ãžã¥ãŒã«ã·ã¹ãã ã«è¿œå ã®å€æŽãææ¡ãããŠããããã crate::foo
ã¯ããã«å°ãªããªããšäºæ³ããŠããã crate use crate::
ã¯ç¹ã«ãŸãã«ããçºçããªãããã§ãã
2018幎ã®æåã®ãã¬ãã¥ãŒã®ã¢ãžã¥ãŒã«ã·ã¹ãã ã§ã¯ãã¯ã¬ãŒãã®ããæ·±ãåç
§ã«å¯ŸããŠãcrate::
ãæžã蟌ãå¿
èŠããããŸãã ææ¡ãããã¢ãžã¥ãŒã«ã·ã¹ãã ã§ã¯ãããªãã ãã®å¿
èŠããããšæããŸãcrate::
ïŒäŸãã°ãfoo.rsããlib.rsã«ããŸãã¯FOO / bar.rsããfoo.rsã«ïŒããªãã®ã¯ã¬ãŒãå
ã®åç
§ã¢ããã®ããã«ããããããªãããªãã®ã¯ã¬ãŒãã§ããŠã³åç
§ã®ããã®ïŒäŸãã°ãlib.rsããfoo.rsã«ããŸãã¯foo.rsããã®foo / bar.rsãŸã§ïŒã ãããŠãäžè¬çã«ãåãšã¯ã¹ããŒãïŒ pub use
ãŸãã¯crate use
ãä»ããŠïŒã¯ãããé«ãã¬ãã«ã®ã¢ãžã¥ãŒã«ã®ããæ·±ãã¢ãžã¥ãŒã«ããäœããåãšã¯ã¹ããŒãããããšãæåŸ
ããŸããããã®éã§ã¯ãããŸããã
ãããã£ãŠãäžè¬çã«ã crate use crate::foo;
ãèŠãŠé©ãããããšã§ãããã
ããã§ããç§ãåãçµãã§ãããããžã§ã¯ãã§ã¯ããŸãã«ãã®ã·ããªãªããããŸãã ããã€ãã®ãäžè¬çãªããã«ããŒãå«ãã¢ãžã¥ãŒã«ãããã次ã«åºæ¬ç¹æ§ãšã³ã³ãããŒã¿ãŒãå®çŸ©ããå¥ã®ã¢ãžã¥ãŒã«ããããŸãããããã¯ããã€ãã®äžè¬çãªãã«ããŒã䜿çšããŠãããããä»ã®éšåã§èªåèªèº«ãå©ããããã«åãšã¯ã¹ããŒãããŸããã¯ã¬ãŒãïŒ
çŸåšïŒ
// in filter/mod.rs
pub(crate) use ::generic::{Combine, Func};
// in filters/foo.rs
use ::filter::{Filter, Func};
lintã¯ãããã次ã®ããã«å€æŽããããã«èŠæ±ããŸãã
// in filter/mod.rs
crate use crate::generic::{Combine, Func};
ã ãããç§ã¯èª°ãåºäŒãããšã®ãªã仮説ãèãåºãããšããŠããŸããã§ããã æ¬ç©ã ã
@seanmonstarã«å®å šã«åæããŸãã å¿ èŠããªãéãããã®ããŒã¯ãŒãããªãŒããŒããŒãããªãã§ãã ããïŒãªãŒããŒããŒãããŸããïŒã
ãããããªãã¯æ£ããã§ãããå茞åºã¯_éåžž_ããã«ã¢ããããŸãããã·ã§ãŒã³ãæŠèª¬ããŠããããã«ã_暪æ¹åã«å茞åºãããããšãéèŠã§ãã ãã¡ã€ã«ãéåžžã«ããŸãåå²ãããŠããã®ã§ãããã¯ãµãŒãã¡ãã£ã¢ã¯ã¬ãŒãã«å¯ŸããŠãæ€èšããŠããããšã§ãããããã¯ããã¹ãŠã®ããŒãå®è£ ã§å€ãã®äžè¬çãªã€ã³ããŒããæå³ããŸãã
ã¢ãžã¥ãŒã«ã§äœã䜿çšãããŠãããã宣èšãç¶ããããšã¯å¯èœã§ãããããããã¯ã¬ãŒãå±æ§ãšããŠæ瀺çã«äœ¿çšããå¿ èŠããããŸããïŒ ãœãŒã¹ãã¡ã€ã«ãèŠãŠããã®ç¯å²å ã«ãããã®ãç¥ãããšãã§ããããã«ããããšæããŸãã ãœãŒã¹ãã¡ã€ã«ã®å é ã«ã«ãŒãã¬ãã«ã®ã€ã³ããŒããæ°è¡å«ãããšãã¹ã³ãŒãå ã«ãã¹ãŠã®å€éšäŸåé¢ä¿ãæé»çã«å«ããã®ã§ã¯ãªãããœãŒã¹ãã¡ã€ã«å ã§å®éã«è¡ãããŠããããšã®ã³ã³ããã¹ããæäŸããã®ã«åœ¹ç«ã¡ããªãã¡ã¯ã¿ãªã³ã°æã«éåžžã«åœ¹ç«ã¡ãŸãã
ç§ã®ç®±ã®1ã€ã§å€æãè©Šããã®ã§ãããã«ã€ããŠè©±ããŠããã®ãèŠãä»ã®äººã®ããã«ã pub(crate)
代ããã«crate
ãå¯èŠæ§ä¿®é£ŸåãšããŠäœ¿çšããããšã«ç¢ºä¿¡ãæãŠãŸãããæ¹åã ããã§ã®ç§ã®æšè«ã¯ãã¯ã¬ãŒãã¢ãã«ãéåžžã«åºã䜿çšãããŠãããã¢ã€ãã ã®åã«è²Œãä»ããã ãã§å°ãåä»ã«ãªããšããããšã§ãïŒJavaã®public static void main()
ãªã©ã®äžéšã®èšèªã§åŸãããããŒã¯ãŒãã¹ãŒããæãåºãããŸã-å°ãªããšãRustã®æåŸã«ã¯ãªã¿ãŒã³ã¿ã€ãããããŸãïŒã pub(crate)
ãå°ãªããšãpub
ãä¿æããŠã crate
ããã®ã³ã³ããã¹ãã§ã®å¯èŠæ§ãæ±ã£ãŠããããšãããæ確ã«ããŸãã
ããã¯ãå¯èŠæ§ä¿®é£Ÿåãšãã¹ã®äž¡æ¹ã§crate
ããŒã¯ãŒããçµã¿åããããç§ãééããå¥ã®ã€ã³ã¹ã¿ã³ã¹ã§ããããã¯ã crate use crate...
ã€ã³ã¹ã¿ã³ã¹ãããããã«å¯èœæ§ãé«ãããã§ãã
é»æµïŒ
pub(crate) struct Bar {
pub(crate) foo: ::Foo,
}
pub(crate) struct Baz(pub(crate) ::Foo);
ãã®è¿œè·¡ã®åé¡ããã®å€æŽïŒ
crate struct Bar {
crate foo: crate::Foo,
}
crate struct Baz(crate crate::Foo);
ç§ã¯å人çã«ãæ°ãããã®ãçŸåšã®æ¹æ³ãããæ··ä¹±ããŠãããšæããŠããŸãã
pub(crate)
ãcrate
ã«å€æããããã«RFCãæåã«èªãã ãšããããã¯ç°¡åã«èããããšæããŸããã pub(crate)
ã¯ããã®é åã®é¢é£ããRustæ§æã®æ®ãã®éšåãšæ¯èŒããŠéåžžã«å¥åŠã«èŠããŸãã
ããã...
åŸå°ããã¹ãã³ã²ãŒã ãå€æé2018ã«ãããããæåã«æãèŠãŠãç§ã¯sããã³ä»ã®ã³ã¡ã³ãã@seanmonstarã«åæ
çã èªããªããã°ãªããªãããšæã€è£žcrate
ã©ãã§ãæ¯ãããèªç¥è³éããŸããã æéãçµã€ã«ã€ããŠèªç¶ã«ããã«æ
£ãããã©ããã¯ããããŸããã
ä»ã®äººãèšã£ãŠããããã«ãããŒã¯ãŒãã¯äž¡æ¹ã®æèã§éåžžã«ç°ãªãäœããæå³ããŠæããŸãã
use crate::menu::{Sound, Volume};
crate mod color;
...
/// A type for storing text and an associated color it should
/// be drawn as.
crate struct ColoredText {
crate color: types::Color,
crate text: &'static str,
}
ãã®ææ¡ã®æ®ãã®éšåïŒã¢ãžã¥ãŒã«ã·ã¹ãã ã®æŽæ°ïŒãæ¬åœã«å¥œãã§ããããšãæ確ã«ããããšæããŸãã
pub(crate)
ã¯å°ãæéãããããå¥åŠã«æããŸããã裞ã®crate
ãå°ãéåæãèŠããŸãã
crate
ãåå©çšãã代ããã«ãããã§å¥ã®ããŒã¯ãŒããæ€èšã§ããŸããïŒ
@ neon64ææ¡ãããinternal
ã¯åŠ¥åœã«èãããŸãããä»ã«ãããå¯èœæ§ããããŸãã Rust 2018ã§ããŒã¯ãŒããè¿œå ã§ããã®ã§ããããæ€èšããæ©äŒããããŸãã
internal
ã¯ç§ã«ã¯pub(crate)
ããéãããã§ãã çãã¯ãªããæ°ããããŒã¯ãŒãã§ãã
int
ã©ãã§ããïŒ ïŒP
å
éšïŒ ins
ïŒãå
éšïŒ int
ïŒãä¿è·ïŒ pro
ïŒãããŒã«ã«ïŒ loc
ïŒãç§å¯ïŒ sec
ïŒãå
åŽïŒ inn
ïŒ crate
ããŒã¯ãŒãã«ä»£ãããã®ã¯ãããããããŸãã
ãããã int
ã¯C / C ++éçºè
ãæ··ä¹±ãããã§ããããïŒ ïŒæŽæ°ããŒã¯ãŒãïŒ
ããã°ã©ããŒãšããŠãããªãããããèŠããšããããªãã¯ããããããªãã¯ãšããŠæ±ããŸããããªããå¥ã®å¯èŠæ§ã¬ãã«ãå°å
¥ããããªããããªãã¯ãããäžè²«æ§ãä¿ã€ããã«åœ¢å®¹è©ã§ããå¿
èŠããããŸãã ç§ãèŠããŠããéããããã¯æåã¯å
¬éã®ç¥ã§ãããã©ã¡ãã®å ŽåãããïŒã¯ã¬ãŒãïŒã¯ããèªç¶ã«æããŸãã ã¯ã¬ãŒãã¯ãã®ããã®å¥åŠãªããŒã¯ãŒãã§ãã
pubïŒcrateïŒã¯ãã®ãŸãŸã«ãããã圢容è©ã®ç¥èªãè¿œå ããã»ãããããšæããŸãã
ãŸããååä»ãã®é£ããã¯ããããç¥èªã§ãããšããäºå®ã«ãããšæããŸãããããå ¬éãããŠããã°ããã©ã€ããŒããŸãã¯å éšãšåŒãã§å¿ããŠãåé¡ãªããšæããŸãã
å人çã«ã¯ã pub(crate)
ã®åé¡ã¯èŠåœãããŸããã æ§æã¯äžèŠæ確ã§æ確ã§ãããå®éã®RustãšäžèŽããŠããŸãã ãããé »ç¹ã«å
¥åããå¿
èŠã¯ãªãã®ã§ã5åã®äœåãªããŒã¹ãããŒã¯ãåé¡ã«ãªããšæããŸãã
@UtherII
pub(crate)
ççž®åãå¿
èŠãªçç±ã¯ãçŸåšäœ¿çšãããŠããpub
å€ãïŒããããã»ãšãã©ïŒãããã«çœ®ãæããããããã§ãã
Rust 2018ã§ã¯ãå¹æçã«ãã©ã€ããŒãã¢ã€ãã ã«pub
ã䜿çšãããšïŒãã©ã€ããŒãã¢ãžã¥ãŒã«ã«è¡šç€ºãããããïŒãèŠåã衚瀺ãããŸãã 代ããã«ããã®ãããªã¢ã€ãã ã«ã¯pub(crate)
ã䜿çšããå¿
èŠããããŸãã ãã®èŠåã«ãããã³ãŒãã®å¯èªæ§ãåäžããŸããã¢ã€ãã ãpub
ãšããŒã¯ãããŠããå Žåã«ã®ã¿ãä»ã®ã¯ã¬ãŒãã«è¡šç€ºãããŸãããçŸåšãä»ã®ã¯ã¬ãŒãã«è¡šç€ºãããŠãããã©ããã¯äžç®ã§ããããŸããã
ç³ãèš³ãããŸãããããã®ã¹ã¬ããã«è¿ä¿¡ããã®ã§ã¯ãªãã誀ã£ãŠæ°ããåé¡ãäœæããŸããã ãã£ãšãç§ã¯githubã«ããªãæ £ããŠããªãã®ã§ããã¿ã³ãã¯ãªãã¯ããã ãã§ãããã§å¿çããŠãããšæã£ãŠãããã®ã«ãµã€ã³ã€ã³ããŸããããå®éã«ã¯æ°ããåé¡ãçºçããŠããŸããã æ°ããå·ã«æžãããã®ãããã«è²Œãä»ããŸããæ°ããå·ã¯åé€ã§ããŸããç³ãèš³ãããŸããã
çã®ããã¥ã¢ã«ã人ã ãããã«ãã£ãŒãããã¯ãæ®ãããšãææ¡ããã®ã§ãç§ã¯ããããããšã«æ±ºããŸããã
ã¯ã¬ãŒãã«ãŒãããèŠçŽ ã«ã¢ã¯ã»ã¹ããããã«ãcrate ::ãŸãã¯::ã®ã©ã¡ãã§ãããŸããŸããã ::ã¯ãã§ã«æ§æã«ãªã£ãŠããã®ã§ãcrate ::ãš::ã®äž¡æ¹ã䜿çšã§ããå Žåã¯ãäž¡æ¹ã䜿çšããå¿ èŠããããšæããŸãã ç§ã®èŠæ¹ã§ã¯ããã¹ã«é¢ããŠæ°ããææ¡ãããã¯ã¬ãŒãã·ã¹ãã ã¯ãåºæ¬çã«å€ãæ§æãšåçã§ãããå¯äžã®éãã¯ãexternããŒã¯ãŒãã䜿çšããå¿ èŠããªããªããæ瀺çã«äœ¿çšãããããã¢ã¯ã»ã¹ãããããªãããšã§ãããµãã¢ãžã¥ãŒã«ã§ã¯ãåºæ¬çã«ã©ãã«ã§ãæé»çã«ã€ã³ããŒããããŸãã
ä»ã®å¯äžã®è¿œå ã¯ãã¯ã¬ãŒãã«ãŒãã::ã§ã¯ãªãcrate ::ã§éå§ããããšã§ãã ããã¯ç§ãæåã«åŠãã æ¹æ³ãšäžèŽããŠããã®ã§ã::ã ãã§å§ããã®ã奜ãã§ãããã¢ãžã¥ãŒã«ã·ã¹ãã ããŸã åŠãã§ããªã人ã§ããcrate ::ã§å§ããæ¹ãçŽæçã§ãã ãªãäž¡æ¹ã®æ§æ圢åŒãèš±å¯ããªãã®ã§ããïŒ äž¡æ¹ãæã€ããšãäžå¯èœã«ãªãçç±ã¯ãããŸããïŒ äž¡æ¹ããµããŒãã§ããå Žåã¯ãäž¡æ¹ããµããŒãããããšã匷ããå§ãããŸãã 1ã€ãããµããŒãã§ããªãå Žåã¯ã::ã«æ £ããŠããã®ãšåãããã«ãåå¿è ã®æ¹ãã¯ã¬ãŒã::ãšããŠç¿åŸãããããããããŸãããã::ã®ç解ãç°¡åã«æŽæ°ã§ããŸãããããªãããã«ãããããç§ã®åæ©ã¯å©å·±çã§ãã
ã ããæ¬è³ªçã«ãç§ã¯æçµçã«ã¯ããŸãæ°ã«ããŸããããå人çã«ã¯::ã奜ã¿ãŸãããã©ã¡ãããéžæããå¿ èŠããããcrate ::ããå§ããããšãåå¿è ã«ãšã£ãŠåªããŠãããšäººã ãèããå Žåã¯ãäž¡æ¹ããµããŒãããã®ãçæ³çã ãšæããŸããããã«å察ããªãã§ãã ããã
#[path]
ã¯Rust 2018ã§ãã¹ããããã¢ãžã¥ãŒã«ã§ã©ã®ããã«æ©èœããããšã«ãªã£ãŠããŸããïŒ ïŒhttps://github.com/rust-lang/rust/issues/35016#issuecomment-409185342ïŒ
IIUCãçŸåšã2ã€ã®ãã¡ã€ã«src/lib.rs
ãšsrc/bar.rs
ãäžããããå Žåã次ã®ããã«çœ®ãæããããšãã§ããX
ã¯ãããŸããã
mod foo {
#[path = "X/bar.rs"]
mod bar;
}
bar.rs
ãžã®ãã¹ã¯åžžã«src/foo/X/bar.rs
ã§ãããããã¢ãžã¥ãŒã«bar.rs
ãæ€åºãããŸããããã¯ããã£ã¬ã¯ããªfoo
ãååšããªãããç¡å¹ã§ãã
ç§ãã¡ã¯pub(crate)
亀æã«é©ããååã§ãã€ã¯ã·ã§ãããè¡ã£ãŠãããã³ã¢ããŒã ã¯ãŸã ãã£ãŒãããã¯ãæ±ããŠããã®ã§ãç§ã®çµéšãå
±æããææ¡ãæäŸããããšæããŸãã
ç§ãæžããããæšæ ã®äžã§ãã©ãã§ãpub(crate)
å
¥åããã®pub
ççž®ããã¯ã¬ãŒãã®å€ã«è¡šç€ºããå¿
èŠã®ãªãå€ãã®ã·ã³ãã«ã誀ã£ãŠãšã¯ã¹ããŒãããŸããã ãã£ãšã£ãšã ðïŒç§ã®ç¹å®ã®ã±ãŒã¹ã§ã¯ãã¯ã¬ãŒãã¯å
éšã«ãããå
¬éãããŠããªããããå®éã«ã¯åé¡ã§ã¯ãããŸããããããã§ãïŒæ£ç¢ºãããã䟿å©ã§ããïŒããã§ããã¯ã¬ãŒãã¬ãã«ã®å¯èŠæ§ãäŒããã«ã¯ã2ã€ã®ããŒã¯ãŒãã®ããã·ã¥ã¢ãããããåªãããã®ãå¿
èŠã ãšåŒ·ãä¿¡ããŠããŸãã
ãããã crate
ããã®ããŒã¯ãŒããšããŠé©åã§ãããšã¯æããŸããïŒãã®ãããã¯ã«é¢ããä»ã®äººããã®ãã£ãŒãããã¯ã«ã€ããŠã¯äžèšãåç
§ããŠãã ããïŒãä»ã®ææ¡ãããããŒã¯ãŒãã¯ãåé¡ã«èŠç¹ããã¢ãããŒãããããšã§ããã€ã³ããéããŠããããã«æããŸããæšæ ã®æ ¹ã®; åé¡ã¯ãã¢ãžã¥ãŒã«ã®èŠ³ç¹ãã€ãŸãããŒã¯ãŒããå«ãç¹å®ã®ã³ãŒãè¡ã«ãããŸãã ã€ãŸããã³ãŒãã¯ãã¯ã¬ãŒãã®å±ææ§ããæäŸããããšããŠããã®ã§ã¯ãªããå®çŸ©ãããŠããã¢ãžã¥ãŒã«ããåç
§ããšã¯ã¹ããŒãããããšããŠããŸãã
ãã®æå³ã§ãç§ã¯ããŒã¯ãŒãexport
奜ãã§ãïŒ extern
ãšæ··åããå¯èœæ§ããããšããŠãã extern crate
ãæ»ãã§ããã®ã§ãããã¯æå³ããããŸãããïŒïŒ export struct Foo;
éåžžã«èªã¿ããããä»ã®ããã€ãã®èšèªïŒishïŒãšé£æºããŠããŸãã ãã®RFCãŸãã¯ä»ã®å Žæã§ãããŒã¯ãŒããšããŠexport
èšåãèŠã€ããããšãã§ããŸããã§ããã ã§ããããããããããŸãã
å®å šãæãããã«ã @ seanmonstar ã @ johnthagenãªã©ã«ãã£ãŠæèµ·ããããŠãŒã¹ã±ãŒã¹ãã«ããŒããŠããŸãã
export use crate::generic::{Combine, Func};
// Or even better using relative paths
export use ::generic::{Combine, Func};
export struct Bar {
export foo: crate::Foo,
}
export struct Baz(export crate::Foo);
use crate::menu::{Sound, Volume};
export mod color;
// ...
/// A type for storing text and an associated color it should
/// be drawn as.
export struct ColoredText {
export color: types::Color,
export text: &'static str,
}
ããã¯èšã£ãŠããç§ã¯pub(crate)
ãç«ã§æ®ºãããšã«è³æã§ãã ç§ãcrate
ãFWIWã奜ãã§ãã
@parasyte export
èŠãããåé¡ã¯ãããã®ã¯ã¬ãŒãã¯____ãpub
ç®çã§ãïŒãšæ··åãããå¯èœæ§ãããããšã§ãããããªããã©ã®ããã«äž»åŒµããŠããã®ãã¯ããããŸãå¥ã®èŠç¹ã
ã»ãšãã©ã®äººãpub(crate)
ã¯çæ³çã§ã¯ãªãããšã«åæããŠããããã§ããå€ãã®äººããçŸåšä»ã®ã³ã³ããã¹ãã§äœ¿çšãããŠããåè©ããŒã¯ãŒãcrate
ã代ããã«äžå¿«æãäžããå¯èœæ§ããããšããæžå¿µãè¡šæããŠããŸãã ä»ã®ïŒæœåšçã«æ°ããïŒããŒã¯ãŒããååã«æ€èšããããšã確èªããããšã¯ãRust 2018ãããã決å®ããåã«ãéåžžã«è¯ãæéã®äœ¿ãæ¹ã®ããã«æãããŸãã
ããããããããŸã è°è«ã®äœå°ãããå Žåãç§ã¯ãå ¬åŒã®ããã£ãŒãããã¯ãèããããšããããŸãããïŒ
@parasyteã®ææ¡ã«æ²¿ã£ãŠããã«ããã€ãã®åèªã玹ä»ããããã«ïŒ export
ã¯pub(crate)
ãããpub
ããã«èŠãããšãã@johnthagenã«åæã
shared use ::generic::{Combine, Func};
shared struct ColoredText {
export color: types::Color,
export text: &'static str,
}
global use ::generic::{Combine, Func};
global struct ColoredText {
export color: types::Color,
export text: &'static str,
}
Javaã®è¶³è·¡ããã©ã£ãŠã protected
ãããªãã®ã䜿çšããããšãlocal
ïŒcrate-localã®æå³ã§ïŒããããŸããã global
ã¯å®éã«ã¯æ··ä¹±ããå¯èœæ§ãäœããšæããŸãïŒããšãã°ã local
ã¯_file_-localã§ããå¯èœæ§ããããŸãïŒã
人ã
ã¯pub(cr)
ãããã¯åã«cr
ã©ãæããŸããïŒ
crate
ã¯ãèŠéããã«ã¯è¯ãããããã§ãã ããã¯ãã§ã«ããŒã¯ãŒãã§ããã extern crate
以åã®äœ¿çšã¯ãªããªããŸãã ä»ã®çšéã¯ãã§ã«å¯èŠæ§pub(crate)
é¢é£ããŠããŸãã
圢容è©ãšããŠã¯ã¬ãŒãã䜿çšããŠå°ãç®ã现ããŠããããã»ã©æžæãããšã¯ãããŸããã ã家ããªã©ã®åèªã¯åœ¢å®¹è©ãšããŠããŸã䜿çšã§ããŸãã IANAEnglishProfessorã
æšæ ã®ç®ã«èŠããã¢ã€ãã ãåãšã¯ã¹ããŒãããããšã¯ããã»ã©åé¡ã§ã¯ãªããšæããŸãã å人çã«ã¯ããããå®çŸ©ããã¢ãžã¥ãŒã«ã®çŽæ¥ã®èŠªã§ã¢ã€ãã ãåãšã¯ã¹ããŒãããããšããããŸããã€ãŸããïŒããããïŒ self
代ããã«crate
self
ã䜿çšããããšããããšã§ãïŒseanmonstarã®ã³ãŒãç·šæã®å Žåã«ããããããïŒ ïŒã äŸãã°ã
mod detail {
crate struct Foo;
}
crate use self::detail::Foo;
åãžã®çµ¶å¯Ÿãã¹ãšçµã¿åãããå¯èŠæ§ãšããŠã¯ã¬ãŒãã䜿çšãããšïŒããã§ãseanmonstarã®äŸã䜿çšïŒã pub(crate) struct Foo(pub(crate) ::Foo);
ã§ã¯ãªãcrate struct Foo(crate crate::Bar);
ããã«èŠããŸãã ç§ã®å¯äžã®åžæã¯ããã®æ§æã人æ°ããªãããããã£ãŠç§»è¡ããŠããã®ã¯ã¬ãŒãã¹ãŒããäœæãããªãããšã§ãã ãŠãŒã¶ãŒã¯ãæ瀺çã«ã€ã³ããŒãããããšã§ãããåé¿ã§ããŸãã
use crate::Bar;
crate struct Foo(crate Bar);
ç§ã¯share
ãŸãã¯ãã®ãããªãã®ã®ææ¡ã奜ãã§ãã give
ã provide
ã deliver
ã offer
ã serve
ã post
ã forward
.. ã圢容è©ã§ãªããã°ãªããªãå Žåã¯ãããããã¹ãŠã«æ¥å°ŸèŸãä»ããŠå€æã§ããŸãïŒ shared
ã givable
ã providable
ãªã©ã
å°ãã®éJavaScriptãéžæããããã«ãES6ã«ã¯ãèšèªã«çµã¿èŸŒãŸããããã±ãŒãžãšã¢ãžã¥ãŒã«ã®æŠå¿µãããããŸããã ã¢ãžã¥ãŒã«ãããããŸããã ES6ã®export
ããŒã¯ãŒãã¯ãåžžã«ã¢ãžã¥ãŒã«ããåç
§ããšã¯ã¹ããŒãããŸãã ããã䜿çšãããå Žåã¯ããã¹ã«ããåç
§ãimport
ããå¥ã®ã¢ãžã¥ãŒã«æ¬¡ç¬¬ã§ãã
ããã¯å€§ããç°ãªãã§ã¯ãããŸããpub
ãšuse
ããããã export
ããŒã¯ãŒãã䜿çšãããšãæ··ä¹±ãçãããšæããŸãã pub(crate)
ã¯å®éã«ã¯äžçš®ã®ãããã§ãã ããããéå»ã«pub
ã䜿çšããããšãéžæããçç±ã§ãã ;ïŒ
crate
å¯èŠæ§ä¿®é£Ÿåã®åé¡ã¯ãïŒ53120ã«æœåºãããŸããã ãããªãè°è«ãšæ±ºå®ã¯ãã¡ãã§ç¶ããããã¹ãã§ãã
mod.rs
å€æŽã®åé¡ã¯ãïŒ53125ã«æœåºãããŸããã ãããªãè°è«ãšæ±ºå®ã¯ãã¡ãã§ç¶ããããã¹ãã§ãã
extern crate
éæšå¥šã®åé¡ãããã³use crate_name::foo
ãšcrate_name::foo
JustWorkâ¢ã®åé¡ã¯ã httpsïŒ//github.com/rust-lang/rust/ã«æœåºãããŸãã
ã¢ãžã¥ãŒã«ãã¹ã·ã¹ãã ã®éžæã®åé¡ã¯ã httpsïŒ//github.com/rust-lang/rust/issues/53130ã«æœåºãããŠã
ãã®åé¡ãããã¹ãŠã®ããããå¥ã ã®åé¡ã«æœåºããŸããã ããã§ç· ãããããŸãã
@Centril ïŒ https ïŒ //doc.rust-lang.org/unstable-book/print.html#extern_preludeãªã³ã¯ã¯ãã¡ãã ããã¯ã©ãã§è°è«ãããŠããŸããïŒ ãã®æ å ±ãå®éã«æ¬ èœããŠããå Žåã¯ãOPã«è¿œå ã§ããŸããïŒ
@ sanmai-NLãexternpreludeããäœã§ãã£ããã«ã€ããŠç§ã®èšæ¶ããªãã¬ãã·ã¥ã§ããŸããïŒ
use some_crate::foo::bar;
ãå®è¡ããæ©èœã ãã®å Žåã¯ã httpsïŒ//github.com/rust-lang/rust/issues/53128ã«ãªã
ãã®äžéšã¯https://github.com/rust-lang/rust/issues/54230ã§è°è«ãããŠã
@ sanmai-NLåé¡ã¯äž»ã«èšºæã«ãããšæããŸãã
extern_prelude
ããcrate_name::foo::bar
ã®å€use
ïŒã€ã³ããŒãïŒçµè·¯ã
@Centril
ããšã¯ã¹ã¿ãŒã³ãã¬ãªã¥ãŒãããšã¯äœãã«ã€ããŠãç§ã®èšæ¶ããªãã¬ãã·ã¥ããŠããã ããŸãããïŒ
äžè¬ã«ãããã¬ãªã¥ãŒããã¯çŸåšãã¯ã¬ãŒãå šäœã®ã¹ã³ãŒãå ã«ãããç¹å®ã®ã¢ãžã¥ãŒã«ã«æ¥ç¶ãããŠããªããã¹ãŠã®ååã«äœ¿çšãããŠããŸãã ïŒå®éã«ã¯ãããããããŸããïŒ
@petrochenkovã§ã¯ãããã«é¢é£ããã
@alexreg
--extern
æž¡ãããã¯ã¬ãŒãã¯ãç¹å®ã®ã¢ãžã¥ãŒã«ã«æ¥ç¶ãããŠããªãéãã¯ã¬ãŒãå
šäœã®ã¹ã³ãŒãã«å«ãŸããŸãã
ãããã®æ å ±ã®å¡ããã©ããªã«äžå®å®ã§ãã£ãŠããå ¬åŒã®ããã¥ã¡ã³ããœãŒã¹ã«èšé²ãããŠããã°çŽ æŽããããšæããŸãã Espã äžå®å®ãªæ¬ã®ããã«ãæŠå¿µã®å€éšã®èšåãããå Žåã ãã ãããããã®æŠå¿µãå®è£ ããã¡ã³ããããããã¹ãã ãšèšã£ãŠããã®ã§ã¯ãããŸããã
@petrochenkovããããšããçã«ããªã£ãŠããŸãã
ãã®åé¡ãããã¹ãŠã®ããããå¥ã ã®åé¡ã«æœåºããŸããã ããã§ç· ãããããŸãã
@CentrilçŸåšã®ããŒã¿çã®åé¡ã®è¿œè·¡ãªã³ã¯ã¯ãã¡ãã 人ã ãã³ã¡ã³ããæŽçªæ¢æ€ããå¿ èŠããªãããã«ãå ã®ã³ã¡ã³ããææ°ã®æ å ±ã§æŽæ°ããŸããïŒ
æãåèã«ãªãã³ã¡ã³ã
ããã¯ãå¯èŠæ§ä¿®é£Ÿåãšãã¹ã®äž¡æ¹ã§
crate
ããŒã¯ãŒããçµã¿åããããç§ãééããå¥ã®ã€ã³ã¹ã¿ã³ã¹ã§ããããã¯ãcrate use crate...
ã€ã³ã¹ã¿ã³ã¹ãããããã«å¯èœæ§ãé«ãããã§ããé»æµïŒ
ãã®è¿œè·¡ã®åé¡ããã®å€æŽïŒ
ç§ã¯å人çã«ãæ°ãããã®ãçŸåšã®æ¹æ³ãããæ··ä¹±ããŠãããšæããŠããŸãã