ããã¯ãRFCããã¹ãšå¯èŠæ§ãæ確ã«ããŠåçåãããïŒrust-lang / rfcsïŒ2126ïŒã®ãµããã©ããã³ã°ã®åé¡ã§ãã
å¯èŠæ§ä¿®é£ŸåãšããŠcrate
ã®è³ªåãåŠçããŸãã
æªè§£æ±ºã®è³ªåïŒ
struct Foo(crate ::bar)
ãã©ã®ããã«è§£æããŸããïŒå¯èŠæ§ä¿®é£ŸåãšããŠã®crate
ã«é¢ããã³ã¡ã³ãïŒ
pub(extern)
å人çã«ã¯ãå¯èŠæ§ä¿®é£ŸåãšããŠcrate
ãéåžžã«æ¯æããŠããã @stepanchegã®ã³ã¡ã³ããããã§å
±æããŸãã ç§ãã¡ã¯ãããå°ãããããå³å¯ãªå¯èŠæ§ã奚å±ããå¿
èŠããããšæããŸãã crate
ã¯ãŸãã«ãããè¡ããŸãã
ç§ã¯å人çã«pub(crate)
ãæžããŠã倧äžå€«ã§ããæå³ã¯éåžžã«æçœãªããã§ãã
@johnthagenã«ãã£ãŠäžããããäŸã¯ãèŠãã®ãæ¬åœã«èŠçã§ãïŒ 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,
}
crate mod color;
ç¹ã«çŽããããããã§ãããããã§äœãèµ·ãã£ãŠããã®ããå°ãèããå¿
èŠããããŸãã
ãããã®äŸã®ããã€ãã¯ãéåžžã«C- static
-esque-çŽæçã«é¢é£ããŠããŸãããå®éã«ã¯é©ãã»ã©æ確ã§ãã
@johnthagenã«ããäŸã¯ãç§ã«ã¯ããèªããŸããã å®éãããã¯èªç¶ã«èªã¿ãç§ã¯å¯Ÿç§°æ§ããšãŠã奜ãã§ãã ããæå³çŸããã§ãã
èªã¿ãããã®å ŽåïŒ
crate struct ColoredText {
crate color: types::Color,
crate text: &'static str,
}
åé¡ã«ãªããŸãã 次ã«ãRustã®æ§æãç解ããIDE /ãšãã£ã¿ãŒã¯ãããŸããŸãªäœçœ®ã«ããcrate
ããŒã¯ã³ãããŸããŸãªè²ã§åŒ·èª¿è¡šç€ºã§ããŸãã ããã§éããããŸã解æ¶ããããšæããŸãã
å¯èŠæ§ä¿®é£ŸåãšããŠã®crate
ã¯ééããªãå¥åŠã§ããããã¯ãéã«åºæã§ã¯ãªããã®ã«éåžžã«éç¹æã®ããŒã¯ãŒãã䜿çšããŸãã KotlinãšCïŒã¯ããã«internal
ã䜿çšããŸãã
å人çã«ã¯ã pub
ãcrate-visible
ã«åå©çšãã pub*
ãpub!
ã®ããã«ãäžçã«èŠããããæ²æšãªæ§æã䜿çšããããšæããŸãã
以åã«åãäžããããããšããããŸãããç§ãç®ã«ããæ ¹æ¬çãªåé¡ã¯æ¬¡ã®ãšããã§ãã
crate
ã¯åè©ã§ãã pub(crate)
ã¯é·ããŠå¥åŠãªèŠãç®ã ãšæãã®ã§ãäœãã«çœ®ãæããããšãå®å
šã«ãµããŒãããŸãããããã«é¢é£ãã圢容è©ããã£ãã®ã§ãææ³çã«ã¯æµããè¯ããªããŸãããcrate
ã¯ããthis-crateãã€ã³ããŒãã®ã¢ã³ã«ãŒãšããŠäœ¿çšãããããã«ãªããŸãããããã¯ãããããå®çŸ©ãããŠããå Žåã¯ããã®ã¯ã¬ãŒããããç®ã«èŠãã圢ã§ãšã¯ã¹ããŒããããããšããæå³ãšã¯ç°ãªããŸãã// Here `crate` means the root of this crate.
use crate::menu::{Sound, Volume};
// Here, `crate` means: export crate::game::color
// The `crate` is referring to `color`, not the root.
crate mod color;
...
/// A type for storing text and an associated color it should
/// be drawn as.
// Same potential confusion as `crate mod color`
crate struct ColoredText {
crate color: types::Color,
crate text: &'static str,
}
äŸãšæ¯èŒãããšãKotlin / CïŒã®@matkladã®internal
ã䜿çšããŠããŸãã
use crate::menu::{Sound, Volume};
internal mod color;
...
/// A type for storing text and an associated color it should
/// be drawn as.
internal struct ColoredText {
internal color: types::Color,
internal text: &'static str,
}
internal
ãæ£ããããŒã¯ãŒãã ãšèšã£ãŠããããã§ã¯ãããŸããïŒRustã¯éåžžã«çãç¥èªã奜ãã§ã int
ã¯æ®å¿µãªããC / C ++ / Javaã®æ··ä¹±ã«æºã¡ãŠããŸãïŒããå人çã«ã¯2çªç®ã®äŸã ãšæããŸãããã«èªã¿ããããªããŸãã
ãŸãã crate
ã®å¯èŠæ§ããŒã¯ãŒãã¯ãä»ã®èšèªããRustã«æ¥ã人ã
ãæ··ä¹±ããããšæããŸãã ãããã®ã¹ã¬ããã«ã€ããŠã³ã¡ã³ãããã®ã«ååãªã»ã©Rustã«é¢äžããŠããç§ãã¡ã®å€ãã§ãããäžå¿«æãèŠãããªããRustã«äžæ
£ããªäººã
ãã€ãŸãããšæ³åããå¿
èŠããããŸãã
pub(crate)
ã®å°ãé·ãæ§æã¯ãã¯ã¬ãŒãã®å€ã«å°éã§ããªãpub
ã¢ã€ãã ããããšããèŠå/ãšã©ãŒã«ãªããªããã°ãããã»ã©å€§ããããšã§ã¯ãªããããããŸããã å人çã«ã¯ã pub(crate) struct Foo { ... }
ãããã°ãã³ã³ãã€ã©ãŒãimpl Foo
å
ã®ãã¹ãŠã®pub fn
ã«å°éã§ããªãããšãèªèããæ°ã«ããªãããšãæãã§ããŸãã
pub struct Foo
ããpub(crate) struct Foo
ãŸã§ã®ã¿ã€ããããŒã¯ãããšãã³ã³ãã€ã©ãä»ã®pub fn
ã®ãã¹ãŠã®å Žæã§ã©ã®ããã«å«ã¶ããçŸåšRust2015ã§å¿ããäœæ¥ã§ããããšãããããŸãã pub(crate)
ã¿ã€ãã䜿çšããŠååšããŸããããã¯ãä»ã®ã¿ã€ããpub(crate)
ã§ããããã§ãã
ãŸãã @ matkladãã pub
ãcrate-publicãšããŠåå©çšãã export
ãªã©ãäžççã«èŠãããšã¯ã¹ããŒãã«äœ¿çšãããšããã¢ã€ãã¢ãèŠã€ããŸããã ããããããã¯ãšãã£ã·ã§ã³ã«ãšã£ãŠå€§ããããçžéãããããŸãããïŒ
pub
ãcrate-publicãšããŠè»¢çšããworld-publicã®æ°ããå¯èŠæ§ãè¿œå ããããšã¯ãçŸåšã®ããŒãžã§ã³ããåã®ææ¡ã§ããã æ¢åã®ã»ãã³ãã£ã¯ã¹ãžã®ãã®ãããªå€æŽã¯ããšãã£ã·ã§ã³ã«å¯ŸããŠã倧å¹
ã§ãããšèŠãªãããŠããããã pub
ã¯çŸåšã®æå³ãç¶æããŠããŸãã
ããŸãè°è«ãæ€èšããããŠããªãã£ãã®ã¯ããªã³ãã ãã§pub
ã転çšããããšã ãšæããŸãã ããããããªã³ãããæšæ ã®å€ã§ã¯ã¢ã¯ã»ã¹ã§ããªãpub
ã§èŠåããããããæšæ ã®å€ã§ã¢ã¯ã»ã¹ã§ããpub
ã§èŠåãããã«åãæ¿ããŠãçŽç²ã«ãªãã·ã§ã³ã®pub(extern)
ãè¿œå ããããšãã§ããŸãã pub(extern)
/ export
ããŒã¯ãŒãã ã€ãŸããã»ãã³ãã£ã¯ã¹ãå€æŽããã«ãlint-silencingæ§æãè¿œå ããã ãã§ãã
ã¯ã¬ãŒããããªãã¯ã¢ã€ãã ãããäžçãããªãã¯ã¢ã€ãã ãå°ãªããšããä»®å®ã«åºã¥ããŠãããã¯æ··ä¹±ãå°ãªããšæããŸãã ãŸããå¯èŠæ§ã®çã®åäœã§ãã¹ãŠã®äººã«çŽé¢ããã®ã§ã¯ãªãããçŸåšã®ã¢ãžã¥ãŒã«ããã®ãšã¯ã¹ããŒãããšããŠpub
ã®çŽæçãªïŒåŸ®åŠã«æ£ãããªãïŒæå³ãä¿æããŸãã
Rustã¯ãããéåžžã«çãç¥èªã§ããããšã奜ãã§ã
int
ã¯æ®å¿µãªããC / C ++/Javaã®æ··ä¹±ã§ãã£ã±ãã§ã
FWIWã¯ã2æåããä¿åããŸãããã internal
ãçç¥ãããå Žåããæ£ãããçç¥åœ¢ã¯ãããããextern
alãšåæ§ã«ã intern
ã«ãªããŸãã æ®å¿µãªãããããã¯äžè¬çã«ç解ãããŠãããç°ãªãæå³ãæã€åè©ã§ããããŸãã ãããããªãã
@glaebhoerl intern
ã¯æ€èšããã®ã«è¯ããªãã·ã§ã³ã§ãïŒ â€ïž
extern
ãšã®å¯Ÿç§°æ§ã¯éåžžã«åªããŠãããIMOã¯intern
ã®åè©åœ¢åŒãšã®æœåšçãªæ··ä¹±ã倧å¹
ã«æžãããŸãã
çãïŒ crate
ãã1æåå€ãïŒã use crate::
ãšè¡çªããŸããã
æŽæ°ãããäŸã¯æ¬¡ã®ããã«ãªããŸãã
use crate::menu::{Sound, Volume};
intern mod color;
...
/// A type for storing text and an associated color it should
/// be drawn as.
intern struct ColoredText {
intern color: types::Color,
intern text: &'static str,
}
ãã£ããèšã£ããã©ã圢容è©ãšããŠäœ¿ãããåè©ã®äœãåé¡ãªã®ãããããªãïŒ
èŠçŽãããšã圢容è©ãšããŠäœ¿çšã§ããåè©ã¯ãããããããŸãã 飌ãç«ãã³ã³ãã¥ãŒã¿ãŒã®ããŠã¹ãã³ã³ãã¥ãŒã¿ãŒã®æºãªã©... _圢容è©ãšããŠäœ¿çšãããè±èªã®åè©_ãã°ãŒã°ã«ã§æ€çŽ¢ãããšããã¹ãŠã®åè©ã圢容è©ãšããŠæ©èœããããã§ã¯ãããŸããããæ¬è³ªçã«åé¡ã¯ãªãããã§ãã
è©ŠããŠã¿ããïŒ
_crate mod hello;_helloãšããååã®crateã¢ãžã¥ãŒã«ã¯åé¡ãããŸããã
_crate fn worldïŒïŒ{}_worldãšããååã®ã¯ã¬ãŒãé¢æ°ã¯åé¡ãããŸããã
_crate struct Foo;_Fooãšããååã®ã¯ã¬ãŒãæ§é äœã¯å
æ°ã§ãã
_crate enum Bar {}_Barãšããååã®ã¯ã¬ãŒãåæåã¯åé¡ãããŸããã
_crate trait Baz {} _Bazãšããååã®cratetraitã¯ãæ°åãããã§ãã
_crate use self :: local :: Foo; _ãããããã¯æ©èœããŸãããã¯ã¬ãŒãã䜿çšããŸããïŒ ããªãã¯ãããFooãšããååã®ã¯ã¬ãŒã䜿çšå¯èœãªã¢ã€ãã ãšããŠèªãããšãã§ããŸãã ããã¯ãã¿ãŒã³ãå£ããŸãã
ãŸããæ§é äœã¡ã³ããŒã®åã§äœ¿çšãããããã¹ã®ã«ãŒããšããŠã¯ã¬ãŒããšçµã¿åãããŠäœ¿çšââããããããšãæ±ãã«ãããªãå¯èœæ§ããããŸãã
ã¯ã¬ãŒãã¯å®ç§ã§ã¯ãããŸãããããåè©ã§ããããšãã決å®çãªèŠå ã§ãããšã¯ç¢ºä¿¡ããŠããŸããã
åé¡ã¯ããããéåžžã«ãŸãã§ãããšããããšã§ãã å修食åãšããŠåè©ã䜿çšããããšãç§ãç¥ã£ãŠããããã°ã©ãã³ã°èšèªã¯ãããŸããã
@Centril
åé¡ã«ãªããŸãã 次ã«ãRustã®æ§æãç解ããIDE /ãšãã£ã¿ãŒã¯ãããŸããŸãªäœçœ®ã«ããã¯ã¬ãŒãããŒã¯ã³ãããŸããŸãªè²ã§åŒ·èª¿è¡šç€ºã§ããŸãã ããã§éããããŸã解æ¶ããããšæããŸãã
å人çã«ã¯ãããŸããŸãªãšãã£ã¿ãŒã®æ©èœã¯çŽ æŽããããšæããŸãããååã«é«åºŠãªãšãã£ã¿ãŒãæ³å®ããŠèšèªãèšèšããã¹ãã§ã¯ãªããšæããŸãã CïŒã¯ãã®ããã«èšèšãããŠããããã«æããŸããããããããã®èšèªã«å¯Ÿããç§ã®ãã©ã¹ãã¬ãŒã·ã§ã³ã®äž»ãªèŠå ã§ããã
@epageå¯èŠæ§ä¿®é£ŸåãšããŠã®crate
ã¯ã匷調衚瀺ã«é¢ä¿ãªãè¯ãã¢ã€ãã¢ã ãšæããŸãã 匷調衚瀺ãè¿œå ã®ç·©åçã§ããããšã瀺åããŠããã ãã§ãã ç¹ã«ã crate::
ãcrate field
ãšã¯ç°ãªãæ¹æ³ã§åŒ·èª¿è¡šç€ºããããšã¯ãç·šéè
ã«ãšã£ãŠããªãç°¡åãªã¯ãã§ããåè
ã¯åžžã«crate
+ ::
ã§ããã確èªãç°¡åã ããã§ãã crate ::foo::bar
ãé€ããã¹ãŠã®å ŽåïŒãã ããããã¯ããªããŸãã§ããïŒã
IDEã®æ
åœè
ãšããŠããã®ãããªåŒ·èª¿è¡šç€ºã¯ãããããããªéã®æ
å ±ã«å¯ŸããŠããªãã®éã®ãã€ãºãè¿œå ãããã¬ãã£ãã«ãªããšæããŸãã IMOïŒããã¯éåžžã«å人çã§ããã匷åãªIDEã®äœ¿çšãšå®è£
ã®äž¡æ¹ã«ãã£ãŠéç¥ãããŸãïŒåŒ·èª¿è¡šç€ºã¯ãã»ãã³ãã£ãã¯ãªéããŒã«ã«æ
å ±ãäŒéããå Žåã«æé©ã«æ©èœãïŒãã®äœ¿çšæ³ã¯mut
ã§å®£èšãããå€æ°ãåç
§ããŸããïŒã匷調ããŸãã³ãŒãã®ããŒã«ã«ãªãboilerplatyãã®åŽé¢ïŒãããã£ãŠããã¹ãŠã®ããŒã¯ãŒãã¯ãŸã£ããåãã¹ã¿ã€ã«ã«ããå¿
èŠããããŸãïŒã
dom
ïŒã€ãŸãåœå
ïŒãæœåšçãªåè£ã§ããããã«ç§ã«ã¯æããŸãã
3æåããïŒé 眮ã«äŸ¿å©ã§èŠããããïŒãåè©ã§ã¯ãããŸããããŸãããããã¥ã¡ã³ããªããžã§ã¯ãã¢ãã«ããé€ããŠãç¹ã«ãããŸããã¯ãªããšæããŸãã
pub struct MyStruct {
dom num: i32,
pub msg: String,
}
誰ããããã«ã€ããŠèããŠããŸããïŒ
ç§ãèšåãããèŠçŽã§èŠã€ããããšãã§ããªãã£ãããã«é¢ãã1ã€ã®è§åºŠã¯ïŒãšããã§ãããããŠãããŠããããšãïŒïŒãã·ã§ãŒãã«ãããæ¢åã®pub()
æ§æã«ã©ã®ããã«é©åãããã§ãã
pub
ãš<something>
ïŒäŸïŒ crate
ïŒã«ç¹å¥ãªæå³ãããå Žåã pub(<something>)
ã®å¯èŠæ§ãããã«äœäžããã²ããŠã¯èŠªãã¿ããããäœäžããŸãã ã©ã®ãããªãœãªã¥ãŒã·ã§ã³ãæ¡çšããå Žåã§ããå¥ã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãªããæ¢åã®æ©æ¢°ããµããŒããŸãã¯çœ®ãæããå¿
èŠããããšæããŸãã
ããšãã°ã crate
ãŸãã¯çœ®æã䜿çšããå ŽåïŒ
crate
ãæ¡åŒµããŠãã¹ã³ãŒãã®å¶éãé©çšããå¿
èŠããããŸããïŒäŸïŒ crate(<something>)
ïŒïŒpub()
ãå»æ¢ããŠã pub
ã®æå³ã1ã€ã ãã«ãªãããã«ããå¿
èŠããããŸããïŒãããšç®æšã®ç解ïŒå
éšAPIãããããªãã¯APIãæ確ã«ããïŒãèæ
®ããŠã @ vitiralã®pub(extern)
ã®ã¢ã€ãã¢ãåçŸããããšã«ãªããŸããã
pub
ãpub(<something>)
ã®ã·ã§ãŒãã«ããã«ããããšã§ãæ¢åã®æ©æ¢°ãæ¹åããŸããpublic
ããããªãã¯APIã«å«ãŸããŠããå¯èœæ§ãããããšãæå³ãããä»ã®èšèªããæ¥ã人ã
ãæ··ä¹±ãããå¯èœæ§ããããŸããREã«ãã»ã«åãžã®åœ±é¿
æ¢åã®pub
ã·ã¹ãã ã®å©ç¹ã®1ã€ã¯ãã«ãã»ã«åã§ãã ç°¡åãªæ¹æ³ã¯ãAPIã1ã¬ãã«äžã«ã®ã¿å
¬éããããšã§ãã ããã«ãããã¯ã¬ãŒãã®äžéšã«ã¯å
¬éããäœæå
šäœã«ã¯éå
¬éã«ããããšã容æã«ãªããŸãã
pub(super)
ã¯ãŸã ååšããŸããã pub(crate)
ã®ã·ã§ãŒãã«ããã䜿çšãããšããŠãŒã¶ãŒã¯ãããããã«äœ¿çšããæ¹åã«é²ã¿ãAPIãã«ãã»ã«åããªãããã«ä¿ãããŸãã
å°ããªæšæ ã®æåã®ãããããã¯åé¡ã§ã¯ãªããšæããŸãã
ãããããããæ€èšããéã«ã pub(extern)
ã«é¢ããäžèšã®ã³ã¡ã³ããããäžåºŠç¹°ãè¿ããŸãã
pub
ã¯pub(super)
ã®ã·ã§ãŒãã«ããã«ãªããŸãpub(extern)
ãå¿
èŠã§ããç§ã¯ä»¥åãä»ã®èšèªãã移è¡ãã人ã ã®æžå¿µãæèµ·ããŸããã ããã¯ããããšããããäžèŽããŸãã
public
ãããŸããŸãªèšèªã§ã©ã®ããã«æ©èœããããããå³å¯ã«äžèŽãããimoããã¯ãã¹ãŠã®äžçã§æé«ã§ãã ã ããããããã©ãã©ã«ããŠããªãããããªãã®ãç解ããã®ãæäŒã£ãŠãã ãã:)
ç§ã¯ãŸã pub(foo)
æ§æãå«ãã§ãã åæ²ç·çã«ã¯ããããé¢æ°åŒã³åºããªã®ããè€æ°ã®ããŒã¯ãŒãã®ããã·ã¥ã¢ãããªã®ããå€æã§ããªãããã§ãã let(mut)
ãŸãã¯for(in)
ã䜿çšããªãã®ã§ãããã¯ã©ããªããŸããïŒ
@parasyte pub<foo>
åã€ããã«ïŒ çµå±ã®ãšãããããã¯_å¯èŠæ§ã®ã¿ã€ã_ã§ã¯ãããŸãããïŒ
pub<crate>
ãŸãã¯pub(crate)
ã¯ç¢ºãã«æ°åãè¯ããªããŸãã
ãã£ã³ããå€ãã人ããã®ããã€ãã®èãïŒ
æåãç§ã¯crate
ã«éåžžã«å察ãããããã¯çŽ æµãªpub
ãå°ç¡ãã«ããŠããããšæããŸããã
ããããç§ã¯ãããç§ã®ãããžã§ã¯ãã®ããã€ãã§äžŠã¹ãŠè©Šãããããæ²ããããŸããã
ççŽã«èšã£ãŠãæ°æ¥åŸãç§ã¯ããpub(X)
ãèŠãã®ã«èããããªããªããæ¯èŒãããšäžæ Œå¥œã«æããèªã¿ã«ãããªããŸããã
æåã¯ãïŒèŠèŠçãªïŒãããŸãããååšããã®ã§ã¯ãªãããšå¿é
ããŠããŸããã ããããç§ã«ã¯éã®ããšãèµ·ãããŸããã crate
ãèŠããšãããããæšæ ã®ãã®ãã§ããããšãããããŸãã ã¢ãžã¥ãŒã«ãã€ã³ããŒãããã®ããå¯èŠæ§ã宣èšããã®ãã å§åçå€æ°ã®ã±ãŒã¹ã§æ£ç¢ºã«äœãæèããéåžžã«æ確ã§ãããïŒè±èªã®ææ§ãã®ãããªãã®ïŒã
å Žåã«ãã£ãŠã¯ããŸã ãããé£ãããïŒèŠèŠçãªïŒãããŸãããæ®ã£ãŠããå¯èœæ§ãããããšã¯ããããŸãããããããå®éçãªèªã¿ãããã®å€§èŠæš¡ãªåå©ã®ããã«æãããããã®ãšåŒãæãã«ããããããŸããïŒæ¬¡ã®ããã«ïŒãããææ§ã«ãªã£ããœãŒã¹ã³ãŒãè¡ãšæ¯èŒããŠãèŠèŠçãªããŒã¯ã³å/åŽåãå°ãªããªããŸããïŒã
ãã®è§åºŠããã crate
- intern
ïŒãŸãã¯ãã®ä»ã®é察称æ§ïŒãäžæ©åŸéããããã«æããŸãã
ããã¯èšã£ãŠãããããŸããã®è§£æã«ã€ããŠã¯ããããŸããã ãããããéžæããå¿
èŠãããå Žåã¯ãã crate ::foo::bar
ãæ©èœããããšããè¯ã話ããããã crate
ã¯æšæ ã®ãã®ãæå³ããããšããè¯ã話ãããã»ããããã§ãã
ç§ã®2ã»ã³ãã¯ããã§ãïŒ
crate mod
ã crate struct
ã crate fn
ã...ãå¹
åºã䜿çšããŠããŸããããéåžžã«äŸ¿å©ã§ããcrate
ã pub(crate)
ã...ïŒã¯æ°ã«ããŸãããç§æ¬¡ç¬¬ã ãšããããããŒã¯ãŒããšããŠvis
ã䜿çšãã修食åãšããŠå¯èŠæ§ã®ã¿ã€ãã䜿çšããŸããããšãã°ã vis(pub)
ã vis(crate)
ãªã©ã§ããç§ã«ã¯æå³ããããŸãã
ãã§ã«ãå¯èŠæ§æå®åããšããŠpub
ã«åºå·ããŠããããšãèãããšãç§ã¯å®éã«ã¯crate
ã奜ãã§ãã pub(crate)
ããã®ã¢ãžã¥ãŒã«ã«å¯ŸããŠãããªãã¯ã§ãããã¯ã¬ãŒãã«å¯ŸããŠãã©ã€ããŒãã§ãããšç§ã«èªã¿ãŸããããã§ã¯ããããªãã¯ãšãã©ã€ããŒãã®äž¡æ¹ãåæã«äœ¿çšããã®ã¯å¥åŠã ãšæããŸãã
æ°ããããŒã¯ãŒããã³ã³ããã¹ãããŒã¯ãŒããªã©ãå°å
¥ããããšã¯ãç§ã®æèŠã§ã¯äŸ¡å€ããããŸããã pub
ãšcrate
ã®2ã€ã®å¯èŠæ§ãããããšãæãããšã1ã€ã¯ãããªãã¯ãæå³ãããã1ã€ã¯ã¯ã¬ãŒãã«ãã©ã€ããŒããæå³ããŸãã crate
ã¯ãéå»2é±éã§ãã§ã«äœ¿çšãããŠããŸãã
ãã§ã«äœ¿çšãããŠããããŒã¯ãŒãïŒã€ãŸãã crate
ïŒãæå³ãæ··ä¹±ãããããšã瀺åããŠãã人ã«ãšã£ãŠãæèã¯åèªèªäœãããéèŠã§ãããšç§ã¯äž»åŒµããŸãã è³ã¯ãã¹ãŠãã³ã³ããã¹ãã§è§£æããŸãïŒã³ã³ãã€ã©ããããã©ã®ããã«è§£æãããã¯å¥ã®åé¡ã§ãïŒïŒããã¯ã for x in y
ãšimpl X for Y
ã§for
ã®æå³ãæ··åããªãçç±ã説æããŠããŸãã
åæ§ã«ãå¯èŠæ§ä¿®é£ŸåãšããŠcrate
ãå°å
¥ããŠããã¡ã³ããŒãŸãã¯é¢æ°ä¿®é£Ÿåã®ã³ã³ããã¹ãã§ã®ãã®æå³ã¯ãè¿œå ã®ã³ã³ããã¹ããæäŸããããšãã«æããã§ãããããæ··ä¹±ãæãããšã¯ãããŸããã ããšãã°ã crate fn my_func();
ã¯ãããã¯æšæ ã§ãããšã¯èªã¿ãŸãããããããã¯æšæ ã«èŠããé¢æ°ã§ãããšèªã¿ãŸãã
ãšã¯ããããããåè©ã§ãããšããäºå®ã«ã¯äžè²«æ§ããããŸããã ãã®åé¡ã«å¯ŸåŠããããã«ãæ°ããå¯èŠæ§ä¿®é£ŸåããŒã¯ãŒããäœæããŸãã
å®éããŠãŒã¶ãŒã確å®ã«æ··ä¹±ããããã®ããããšããã°ãããã¯pub(crate)
æ§æã§ãããçŽæçã«é¢æ°åŒã³åºãã®ããã«èŠããèšèªã®ä»ã®å Žæã«åçã®æ§æã¯ãããŸããã ç§ã«ã¯ãããã¯éãããã¯ã®ããã«æããŸãã
pub(crate)
ã®ä»£ããã«crate
ã䜿çšããããšã«ã€ããŠæžå¿µãè¡šæãã人ãšããŠã @ aturonã®ææ°ã®æçš¿ãèªãã åŸïŒ
å¯èŠæ§ä¿®é£ŸåãšããŠã®ã¯ã¬ãŒãã®ãµããŒãïŒããã§è¿œè·¡ãããŸã138ããããŸã§ã®ãã£ãŒãããã¯ãèæ ®ãããšããã®æ©èœã¯Rust2018ã§å®å®åãããå¯èœæ§ã¯äœãã§ãã
ç§ã¯ã pub(crate)
ãäœãã«çœ®ãæããããšã«å人çã«å®å
šã«è³æããŠããããšãæ確ã«ãããã ãã§ãïŒå€§å€æ°ã¯ããã ãšæããŸãïŒã
奜ã¿ã®é ã«ãç¹ã«Rustã«æ £ããŠããªãããŸãã¯æ £ããŠããªã人ã«ãšã£ãŠã¯ãç§ãæãç解ãããããšæããã®ã䜿çšããŸãã
intern
ïŒãŸãã¯ä»ã®åæ§ã®æ°ããããŒã¯ãŒãïŒcrate
pub(crate)
ã³ã¢ããŒã ãintern
ãŸãã¯åæ§ã®ãã®ãæçµçã«åãå
¥ããããªããšæããå Žåã pub(crate)
ã倧å¹
ã«äžåã£ãŠãããšæãã®ã§ã crate
ã«é
ãããšãããšã«ãªããŸãã @Centrilãªã©ãæ確ã«è¿°ã¹ãçç±ã
ãããã£ãŠãã¯ããã«çµéšè±å¯ãªã³ã¢ããŒã ãããããæåã®éã§ãããšæããå Žåãç§ã¯ãããéªéããããšã¯ãããŸããã æ€èšã®ããã®ãã£ãŒãããã¯è¡šçŸã®ã¢ã€ãã¢ãæäŸã§ããã®ã¯çŽ æŽãããããšã§ãã ðãã³ïŒ
@ralfbiedert
æåã¯ãïŒèŠèŠçãªïŒãããŸãããååšããã®ã§ã¯ãªãããšå¿é ããŠããŸããã ããããç§ã«ã¯éã®ããšãèµ·ãããŸãããä»ãæšæ ãèŠããšãããããæšæ ã®ãã®ãã§ããããšãããããŸãã ã¢ãžã¥ãŒã«ãã€ã³ããŒãããã®ããå¯èŠæ§ã宣èšããã®ãã å§åçå€æ°ã®ã±ãŒã¹ã§æ£ç¢ºã«äœãæèããéåžžã«æ確ã§ãããïŒè±èªã®ææ§ãã®ãããªãã®ïŒã
@zesterer
ãã§ã«äœ¿çšãããŠããããŒã¯ãŒãïŒã€ãŸããã¯ã¬ãŒãïŒãæå³ãçµ±åããããšã瀺åããŠãã人ã«ãšã£ãŠãæèã¯åèªèªäœãããéèŠã§ãããšç§ã¯äž»åŒµããŸãã è³ã¯ãã¹ãŠãã³ã³ããã¹ãã§è§£æããŸãïŒã³ã³ãã€ã©ããããã©ã®ããã«è§£æãããã¯å¥ã®åé¡ã§ãïŒïŒããã¯ãfor in for xinyãšimplXforYã®æå³ãæ··åããªãçç±ã説æããŠããŸãã
ç§ã¯ããªãã«2人ãå人çã«åŒã¶ã€ããã¯ãããŸããããããã䜿çšããåŸã®å€æŽã«è³æãã人ã ã®äŸãšããŠåœ¹ç«ã¡ãŸãã
èŠãç®ã¯å€ã ãšæããŸãããç§ã®æ倧ã®é¢å¿äºã¯éã«ã¹ã¿ã·ã¢ã³ã§ãã
ãããã®æžå¿µãã©ãã»ã©ã®åœ±é¿ãäžããããããããç¥ãããã«ãããã«ã€ããŠãŠãŒã¶ããªãã£èª¿æ»ãè¡ãããšãã§ããã°ãç§ã¯ããã倧奜ãã§ãã
@epage ãéåžžã«åæããŸããRustã®ãŠãŒã¶ãŒåãã®éšåã¯UXãã¹ãããå¿ èŠããããŸãã ãããããããä»èµ·ãã£ãŠããããšã ãšæããŸããç§ãã¡ã¯çµæã«ã€ããŠè©±ãåã£ãŠããæäžã§ãã
ããã«å ããŠãç§ãã¡ã®äŒç€Ÿããã®ããã€ãã®äºäŸèŠ³å¯ïŒ
ç§ã¯ç§ãã¡ã®éšéã®ãéã®æè·è
ãã§ãããä»ã®3人ãšååããŠããŸãã ãã¹ãŠCïŒã®ããã¯ã°ã©ãŠã³ãã¯ãã£ããããŠããŸãããRustã¯æ¯èŒçæ°ãããã®ã§ãã å
æ¥ãç§ã¯ç 究ãããžã§ã¯ããã crate
-stuffããšäžç·ã«Rust2018ã«ç§»è¡ããŸããã
ã³ãŒãã調ã¹ããšãããäŒè©±ã¯ã»ãŒæ¬¡ã®ããã«ãªããŸããã
ãããã§ãç§ãè¡ã£ãä»ã®ããã€ãã®å€æŽãæ°ããã€ã³ããŒãã·ã¹ãã ã修食åããããŸããã
ãããã¯äœãããã®ïŒã ïŒ
use crate::object
ãšcrate x: object
ãæãïŒ
ããã®æšæ ããã€ã³ããŒãããŠãã ãããã ããã³ãå¯èŠæ§ä¿®é£Ÿåãã
ããããããããŸãããä»ã«äœãå€ãã£ãããšã¯ãããŸããïŒã
è°è«ã®çµããã
確ãã«ãç§ãã¡ã¯æ°æ©èœã«ã€ããŠããããŠç¹å®ã®ãã¿ãŒã³ãæ¡çšãã¹ããã©ããã«ã€ããŠããå°ããããã¹ãããŸããã ããããããã2ã€ã®é ç®ã®ãæè²çåŽé¢ãã¯ãããã€ãã®èšèã«èŠçŽããããã以æ¥ïŒç§ã®ç¥ãéãïŒèšåãããŠããŸããã
次åã話ããããšãã«äœãä»ã®ããšãèãããããã®ã³ã¡ã³ããæŽæ°ããŸãã
@ralfbiedertãããå ±æããŠãããŠããããšãïŒ
@epage ãéåžžã«åæããŸããRustã®ãŠãŒã¶ãŒåãã®éšåã¯UXãã¹ãããå¿ èŠããããŸãã ãããããããä»èµ·ãã£ãŠããããšã ãšæããŸããç§ãã¡ã¯çµæã«ã€ããŠè©±ãåã£ãŠããæäžã§ãã
ç§ã¯ãããã®UXã®éžè©±ããç¹ã«åŠç¿å¯èœæ§ã®é¢ã§è©äŸ¡ããŠããŸããããã®åé¡ã®ããã»ã¹ãUXãã¹ããšããŠèªå®ããããšã¯ã§ããªããšæããŸãã ç§ã®ã³ã¡ã³ãã¯ãããæ·±ãç解ãåŸãã®ã«åœ¹ç«ã€ãããæ£åŒãªããã»ã¹ã«èšåããŠããããã€ã¢ã¹ãåãé€ããªã©ã§ãã
ããã¯ãRustã®ããåå¿è ããã®ããã€ãã®èãã§ãã ãŸãæåã«ããã®èšèªã§æ¬åœã«æ£æ°ã§ãããšæãããã®ã¯ããããã©ã«ãã§ã¯äžå€ãããã©ã«ãã§ã¯ãã©ã€ããŒããã¢ãããŒãã§ãããšèšãããã§ãã
ããŠã pub
ã¯ã·ã³ãã«ã§ãçŸä»£èªã§æåŸ
ãããŠããã®ã§äŸ¿å©ã§ãã Rustã®ã³ã³ããã¹ãã§ãããåŠç¿ããã代ããã«å¥ã®ããŒã¯ãŒããã©ãã«ã§ãæ¯ããããå¿
èŠãããã®ã¯å°ãäžåšçšã ãšæããŸãã æå³çã«ã¯ããããã¯ããã¯ã¹ã«è¡šç€ºããããã¿ã³ã§ãããšããæå³ã§æ£ãããšæããŸããããã¯ã¹ã¯ã¢ãžã¥ãŒã«ã§ãããã1ã¬ãã«äžããã®å¯èŠæ§ãã§ãã
ãããã£ãŠãç§ã«ãšã£ãŠã pub
crate
ãŸãã¯ãã®æ§è³ªã®å¥ã®ããŒã¯ãŒãã䜿çšãããšãããã¿ãæããã ãã§ããå
¬éãããã©ã«ãã§ã¯ãªãå Žåãã¯ã¬ãŒããããšã¯ã¹ããŒãããããšã¯ããã«ç¹å¥ãªã¯ãã§ãã ã ã€ãŸããã¯ã¬ãŒãã®APIã¯ç¹å¥ãªæ¹æ³ã§æå®ããå¿
èŠããããŸãã
ã ãããç§ã¯@epageã«å¿ããåæããŸãã pub
ã¯åããŸãŸã§ãããçš®ã®pub(extern)
ãå°å
¥ãããã¹ãã§ãã ãã ããæ¬åŒ§ã§å²ãŸããããŒã¯ãŒãã¯æ¬åœã«æ¯æ·±ãã®ã§ãå°çšã®ããŒã¯ãŒãã«å€ãããããããŸããã crate
ããŒã¯ãŒãã¯ãã®æå³ã§æ©èœããŸããããã¯ããããã¯ãšã¯ã¹ããŒããããã¯ã¬ãŒãã¡ã³ããŒããæå³ããŠããããšãããããŸãã ãŸãã¯å®éã«ã¯export
ãããããŸããã ãã¶ãç§ã®ãã€ã³ãã¯ãã¹ãŠãã€ã¯ã·ã§ããã§ãããããã¯ãã¹ãŠãããŒã¯ãŒããæ£ãããªãããšããããšã«ãªããŸãã ãã ãã pub
ã¯éåžžã«äžè¬çã§ãããããç¹å¥ãªæãã¯ããŸããããããã£ãŠãæ¬åœã«ç¹å¥ãªãã®ïŒã¯ã¬ãŒãã§ãšã¯ã¹ããŒããããAPIïŒãè¡šããã®ã§ãã£ãŠã¯ãªããŸããã
ç§ã¯ä»é±æ«ãRustConfã§ãã³ãŒããµã³ãã«ã«å€ãã®pub(crate)
ã䜿çšããè¬æŒãèŠãŸããããããã¯æ¬åœã«æãªããã®crate
ãæãã§ããŸããã ç§ã¯ãŸã å
ã®èšç»ã«éåžžã«è³æã§ãã
@steveklabnik
ç§ã¯ä»é±æ«ãRustConfã§ãã³ãŒããµã³ãã«ã«å€ãã®pubïŒcrateïŒã䜿çšããè¬æŒãèŠãŠãæ¬åœã«å€ãã¯ã¬ãŒããæãã§ããŸããã ç§ã¯ãŸã å ã®èšç»ã«éåžžã«è³æã§ãã
ãã®ã³ã¡ã³ãã®ã³ã³ããã¹ãã¯äž»ã«RustConfããã®ãã®ã§ããããããšããã®ã¹ã¬ãããèæ
®ã«å
¥ããŠããããšã®äžäžèŽãåæãšããŠããŸããïŒ ä»¥åãç§ã¯pub(crate)
ã§ã¯ãªãã pub
ã®å€æŽãæšé²ããèŠä»¶ã«å¯ŸããŠä»£æ¿ãœãªã¥ãŒã·ã§ã³ãæäŸããŸããããããã人ã
ã®ããŒãºãæºããããšãé¡ã£ãŠããŸãã
èŠã
@superseed
ã§ããããç§ã¯@epageã«å¿ããåæããŸããããã¯åããŸãŸã§ãããçš®ã®ããïŒå€éšïŒãå°å ¥ããå¿ èŠããããŸãã ãã ããæ¬åŒ§ã§å²ãŸããããŒã¯ãŒãã¯æ¬åœã«æ¯æ·±ãã®ã§ãå°çšã®ããŒã¯ãŒãã«å€ãããããããŸããã crateããŒã¯ãŒãã¯ãã®æå³ã§æ©èœããŸããããã¯ããããã¯ãšã¯ã¹ããŒããããã¯ã¬ãŒãã¡ã³ããŒããæå³ããŠããããšãããããŸãã ãŸãã¯å®éã«ãšã¯ã¹ããŒãããããããããŸããã ãã¶ãç§ã®ãã€ã³ãã¯ãã¹ãŠãã€ã¯ã·ã§ããã§ãããããã¯ãã¹ãŠãããŒã¯ãŒããæ£ãããªãããšããããšã«ãªããŸãã ããããããã¯éåžžã«äžè¬çã§ãããããç¹å¥ãªæãã¯ããªãã®ã§ãæ¬åœã«ç¹å¥ãªãã®ïŒã¯ã¬ãŒãã§ãšã¯ã¹ããŒããããAPIïŒãè¡šãã¹ãã§ã¯ãããŸããã
REããã¬ã³ããµã€ãºã®ããŒã¯ãŒãã¯æ¬åœã«æ¯ãããããã ã
å人çã«ã¯ããããã«ã€ããŠç¥ã£ããšãã¯ãããã ãšæã£ãŠããŸãããïŒãªãŒã«ã»ãªã¢ã»ããã·ã³ã°friend
ãããã¯ããã«åªããŠããŸãïŒãç§ã®å€§ããªæžå¿µã¯ã䞊åæ§æãäœæãããç§ãã¡ãæã£ãŠãããã®ãåãå
¥ããããèŠã€ãããã®ãåãå
¥ããããšã§ãã代æ¿ãœãªã¥ãŒã·ã§ã³ã
äžæ¹ã§...
REãŸãã¯å®éã«ã¯export
ã
crate
ãšã¯å¯Ÿç
§çã«ã export
ãè¿œå ããããšã¯ç§ã®ä»¥åã®ã³ã¡ã³ããšççŸãããšã¯æããŸããã ãã®ã³ã³ããã¹ãã§ã¯ã export
ã¯å¯èŠæ§ãšã¯ç°ãªããã®ãšããŠæ±ãããå¯èœæ§ããããŸãã export
ã¯ã pub(crate)
ãæå³ããŸãã ããã¯æããäžã§ããã»ã©åé¡ã«ã¯ãªããªãã®ã§ã¯ãªãããšæããŸãã
ç§ã¯èªåã®å ã®ã¢ã€ãã¢ã®ãã®æ¡åŒµãã©ã¡ãã®æ¹åã«ãé²ããããšãã§ããŸãã
@superseed
pub
[âŠ]ã1ã¬ãã«äžãããã®å¯èŠæ§ã
crate
ããŒã¯ãŒãã¯ãã®æå³ã§æ©èœããŸããããã¯ããããã¯ãšã¯ã¹ããŒããããã¯ã¬ãŒãã¡ã³ããŒããæå³ããŠããããšãããããŸãã
ããã2ã€ã®ããŒã¯ãŒãã®æå³ã«ã€ããŠã®ããªãã®ç解ã¯ãããã§ææ¡ãããŠãããã®ãšã¯æ£å察ãããããªããšæããŸããã€ãŸãã pub
ã¯ãã¹ãŠã®äººã«å
¬éãããããšãæå³ãã crate
ã¯åãæšæ ããã¢ã¯ã»ã¹ã§ããããšãæå³ããŸãã
@epage
pub(crate)
ã®å Žåãããã¯æ¬åœã«çŽ æŽãããæ©èœãæäŸããå®éã«ã¯ããèªã¿ãŸãããç§ã®ç®ã«ã¯é¢æ°åŒã³åºãã«éåžžã«äŒŒãŠããŸãã ã€ãŸããæ§æã®åŒ·èª¿è¡šç€ºããªããšãç§ã¯ããããæ¬åœã«æ··ä¹±ããã§ããããèšèªã®ã»ãã³ãã£ã¯ã¹ãç解ããããã«åŒ·èª¿è¡šç€ºã¯å¿
èŠãªãã¯ãã§ãã
@SimonSapin
確ãã«ããããç解ãããã¯ãã®æ¹æ³ã ãšæããŸããã crate
ïŒåè©ïŒã¯ãæšæ ïŒïŒïŒãŸãã¯æšæ ã®ããããã£ã®ããããã宣èšããŠããããã«æããŸãã 宣èšããè³æ Œãæããªãããšã匷調ããŸãã
ãããŠã public
/ pub
ã¯ãã®ãããªãŠããã¿ã¹ãªä¿®é£Ÿåã§ããããããã¯æšæ ãããšã¯ã¹ããŒããããããšããæå³ã§ã¯ãªãããã«æããŸãïŒç§ã«ã¯ïŒïŒã ããã¯ã struct
ã¡ã³ããŒã®å¯èŠæ§ã修食ããå Žåãšåæ§ã«ããããã¯ãç§ãããã³ã³ããã¹ãã®ããå€åŽããèŠããããšããæå³ãæã£ãŠããŸãïŒééã£ãŠããå Žåã¯ä¿®æ£ããŠãã ããïŒãã®å Žåãã»ãã³ãã£ã¯ã¹ãå€åããŠãããšæããŸãïŒã
ãããŠãpublic / pubã¯ãã®ãããªãŠããã¿ã¹ãªä¿®é£Ÿåã§ããããããã¯æšæ ãããšã¯ã¹ããŒããããããšããæå³ã§ããå¿ èŠããããšã¯ïŒç§ã«ã¯ïŒïŒæããŸããã ããã¯ãæ§é äœã¡ã³ããŒã®å¯èŠæ§ã修食ããå Žåãšåæ§ã«ããããã¯ãç§ãããã³ã³ããã¹ãã®ããå€åŽããèŠããããšããæå³ãæã£ãŠããŸãïŒééã£ãŠããå Žåã¯ä¿®æ£ããŸãããã»ãã³ãã£ã¯ã¹ã¯ãã®å Žåã¯å€æŽããŸãïŒã
pub
ã¯åžžã«ãããã¯ã¯ã¬ãŒããããšã¯ã¹ããŒãããããããšãæå³ããŸããããã¯å€æŽã§ã¯ãªãããã§ã«è¡ãããŠããæ¹æ³ã§ãã å€ãã®äººãããã§ã¯ãªããšæ³å®ããŠãããšããäºå®ãã pub(crate)
ã®å¯èŠæ§ã¬ãã«ããŸã£ããæŒãäžããããŠããçç±ã§ãã
ããã¯åžžã«ãããã¯æšæ ãã茞åºãããããšããæå³ã§ãã
å
šäœåã§ã¯ãªãã®ã§ããã®ç解ãæ··ä¹±ãåŒãèµ·ããå¯èœæ§ããããšæããŸãã pub
æ¬åœã«ããã®ã¢ãžã¥ãŒã«ã®å€éšã®èª°ããã®ã¢ã€ãã /ãã£ãŒã«ã/ã¡ãœããã«ã¢ã¯ã»ã¹ãããã¯æ°ã«ããªãããšããæå³ã§ãã ã¯ã¬ãŒããããšã¯ã¹ããŒãããã«ã¯ãã¢ã€ãã ãžã®ãã¹ã«ãåãpub
修食åãä»ããŠããå¿
èŠããããŸãã
ãã®è©³çŽ°ã¯ãå€ãã®èšèªã§ããªãäžè¬çã§ãã ããã¯ãŸããç§ãunreachable_pub
ãªã³ãã«ç±å¿ã§ã¯ãªãçç±ã§ããããŸãããªããªããããããã®åé¡ãéåžžã«æšé²ããŠãããã®ã®äžéšã ããã§ãã ãããã¬ãã«ã§ãšã¯ã¹ããŒããããªãã¿ã€ããããå Žåããã®ã¡ãœããã«pub
ãšããŒã¯ãä»ããã®ã¯ããã€ãºã®ããã«æããŸãã
@rpjohnstããã¯æ¬åœã«ããããã€ãæå³ããŠããããšã§ããïŒ èŠçŽ ããšã¯ã¹ããŒãããã®ã¯ãã¯ã¬ãŒãã®äžéšããã®ã super
ããèŠããããã§ãŒã³ã§ãããèã®èŠçŽ èªäœãpub
ãšããŠä¿®é£ŸããŠããŸããã§ãããïŒ
ããããããã ãã§ã¯ãããŸããã @seanmonstarã®èª¬æã¯æ®ãã®éšåã瀺åããŠããŸãã æ倧ã®äŸå€ã¯åãšã¯ã¹ããŒãã§ãã芪ã¢ãžã¥ãŒã«ããã©ã€ããŒãã§ãããã®ãpub use
ã§ããŸãã å¥åŠãªäŸã¯ãã®ãããªãã®ã§ã芪ã¢ãžã¥ãŒã«ããã©ã€ããŒãã§ãã£ãŠãããããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã§pub
ã¢ã€ãã ã䜿çšã§ããŸãã
ãŸããéã®æ¹åã«é²ããšã pub(crate)
以äžã®å¯èŠæ§ãåãæ¹æ³ã§ãã€ãã¹ããããšã¯ã§ããŸãããããšãããŸã pub
ã«ãªã£ãŠããªããã®ãã pub use
ããããšã¯ã§ããŸããã pub use
èªäœã¯ã¯ã¬ãŒãã®å€åŽããã¯èŠããŸããã
ãããã£ãŠãã¢ã€ãã èªäœã®å¯èŠæ§ã¯ã super
ã«å¯Ÿããå¯èŠæ§ã§ã¯ãªããã©ãã§ãå¯èŠæ§ã®ãäžéãã§ãã
ããããŸããã説æããŠãããŠããããšãïŒ ç§ã¯ãã£ââãšçŽ æŽãªã¢ãã«ã念é ã«çœ®ããŠããŸããã ãããã®çŸåšã®æå³ãã«ã€ããŠã®ä»¥åã®ã³ã¡ã³ãã«é¢ããŠã¯ãããçã«ããªã£ãŠããŸãã
ä»æ¥ã¯@rust-lang/langããŒãã£ã³ã°ã§ç°¡åã«è©±ãåããŸããã
crate::foo::bar
ãã¹ãšçµã¿åããããšãã«æ··ä¹±ãåŒãèµ·ããå¯èœæ§ããããã©ããã«ã€ããŠã¯çåãæ®ããŸããstruct Foo ( crate :: foo :: Bar )
ã解決ããæ¹æ³ã決å®ããå¿
èŠãããããšãææãã䟡å€ããããŸããããã¯ãã¿ã€ã(crate::foo::Bar)
ã®ãã©ã€ããŒããã£ãŒã«ãã§ããããããšãcrate
ãã£ãŒã«ãã§ãããã¿ã€ã::foo::Bar
ïŒåçïŒãã¹ïŒéã³å ŽïŒãšããŠè§£æããŸãã
::foo::bar
ãã¹ã¯ãŸããŸããŸãã«ãªããšæãã®ã§ãããã¯ããããç§ã«ã¯åé¡ãªãããã§ãã
ç§ãã¡ã®å€ãã¯ããã«ã€ããŠååãã«æããŠããŸãããããŒã¯ãŒãã®éžæãããã³crate :: foo::barãã¹ãšçµã¿åããããšãã«æ··ä¹±ãåŒãèµ·ããå¯èœæ§ããããã©ããã«ã€ããŠã¯çåãæ®ããŸãã
@nikomatsakisç§ãã¡ãè¿œãã€ãããã®äŒè°ã¡ã¢ãèŠçŽã¯ãããŸããïŒ ãã®ã¹ã¬ããã®äžã§ãç§ã¯èªåã®æžå¿µã®å°ãªããšã1ã€ã«ã€ããŠè°è«ããããšã¯ãªã[0]ãå察ã®ææ¡ã«ã€ããŠãããŸãè°è«ããŠããŸããã ãã¶ã[0]ãšä»ã®ããã€ãã¯ãããŸããŸãªå éšã¹ã¬ããã§è°è«ãããŸããããããã¯æãäžããããšããããããããŸãã
[0] $ïŒ$ 0 $ïŒ$ãåé€ãããã pub(...)
ãæ¡çšããå¿
èŠããããšããæèŠã§ã pub(...)
ããããŸãã«ãã䞊åå¯èŠæ§æ§æãäœæãã
@epage
@nikomatsakisç§ãã¡ãè¿œãã€ãããã®äŒè°ã¡ã¢ãèŠçŽã¯ãããŸããïŒ
ç³ãèš³ãããŸããã ç§ãã¡ã¯ããã«ã€ããŠéåžžã«é·ãéïŒããããæ°åïŒè°è«ãããããã«ã€ããŠã®äŒè°ã¡ã¢ãæžãçããŸããã§ããã
@eddybã¯ãããçãããã人éå·¥åŠçãªå¯èŠæ§ä¿®é£ŸåãšããŠmy
ãç°¡åã«ã»ã®ããããŸããã
mine
ãšèšã£ããšæããŸããã my
ã¯ãã£ãšçããŠçŽ æµã§ãïŒ
ïŒèšé²ã®ããã«ãç§ã¯äŒè°ã§åååè«ãèšã£ãŠããŸããïŒ
ç·šéïŒ my
ãã¯ã¬ãŒãããŒã«ã«ã®å Žåã pub
ãour
ã«çœ®ãæããããšã¯ã§ããŸããïŒ äŸãã°ïŒ
our struct Foo(my FooImpl);
ïŒèšé²ã®ããã«ãç§ã¯äŒè°ã§åååè«ãèšã£ãŠããŸããïŒ
my
ãã¯ã¬ãŒãããŒã«ã«ã®å Žåãpub
ãour
ã«çœ®ãæããããšã¯ã§ããŸããïŒ
PerlïŒãžã§ãŒã¯ãçŸå®ã®ãã®ã«ããã
https://perldoc.perl.org/functions/my.html
https://perldoc.perl.org/functions/our.html
my
local
internal
ã§ãïŒãããŠä»¥åã«åºãŠããŸããïŒãããã¯äœã«é¢ããŠïŒãŸãã¯ãã®å Žåããã®ïŒããããå
šäœã®åé¡ã§ãã
ç§ãã¡ãçŽé¢ããŠããåä»ãªç¶æ³ã¯ããå®å
šã«å
¬éãããå®å
šã«éå
¬éãããäžéãïŒã€ãŸããã¯ã¬ãŒãã¬ãã«ïŒã®3ã€ã®ãã©ã€ãã·ãŒã¬ãã«ãå¿
èŠãªããšã§ããäžäœäºææ§ã®å¶çŽã«ããã 'ãããã®æåã®ãã®ã¯å¿
ç¶çã«pub
ã§ããã2çªç®ã¯æé»ã®ããã©ã«ãã§ããã3çªç®ã®ããã«äœãæ°ãããã®ãèãåºãå¿
èŠããããŸãã ãŸããè±èªã«ã¯ãå®å
šã«ã°ããŒãã«ã§ãå®å
šã«ããŒã«ã«ã§ããªããããã®äžéããæ£ç¢ºã«è¡šãåèªã¯å€ããããŸããã
ãããŠã crate
ããŒã¯ãŒãã¯ããããæºè¶³ããããã®ã§ããããã¯ãååã®äžã§å®éã®ã¹ã³ãŒããäœã§ããããæ£ãã瀺ããŠããããã§ããããã¯ã¯ã¬ãŒãã§ãã ãããïŒãç§ã¯ãããç¥ã£ãŠããïŒãã解ãæããåã«ïŒãããã®ä»£åã¯ããããå¯èŠæ§ä¿®é£Ÿåã§ããããšã¯ãã¯ãæããã§ã¯ãªããšããããšã§ãã ããããã¯ããããªãã¯ãã®ç¥ã§ãçŽæçã«ç解ã§ããŸãã ããããä»ã®èšèªã«ã¯ãã¯ã¬ãŒããïŒãã®ååïŒã®æŠå¿µããããŸããã crate struct
ãç解ããåžæãæã£ãŠããããã«ã¯ãæåã«ããã«ã€ããŠåŠã¶å¿
èŠããããŸãã 1 ãèšèªã¹ãã¬ã³ãžãã¹äºç®ãããããã«æ€éããå¿
èŠãããããã©ã³ã¹ããŸã è¯ããã©ããã«ã€ããŠã¯æèŠãç°ãªãå ŽåããããŸãã
äžæ¹pub(crate)
äž¡æ¹ã®åé¡ã解決ããŸããããã¯ãå¯èŠæ§ä¿®é£Ÿåã§ãããã¹ã³ãŒããäœã§ãããã瀺ããŸããã代ããã«é·ããŠæ±ãã«ãããã®ã§ãã
ãããåºæ¬çã«èŠå¢ã®åœ¢ã§ãã
1 ïŒäžèšã®èª°ãããã crate
ã®æå³ãå°ãããšããããããå¯èŠæ§ä¿®é£Ÿåã§ãããšèšã£ãã®ã§ãããã§çµããã§ãããšããã€ã³ã¿ã©ã¯ã·ã§ã³ã«ã€ããŠèª¬æããŸãããåé¡ã®ãããããããããäžè¬çãªç¶æ³ã¯ã次ã®å Žåã§ããããŸããŸããªãã®é£ã«ã«ã¹ã¿ã·ã¢ã³ã座ã£ãŠããããšã¯ãããŸãããïŒ
FWIWãã¯ã¬ãŒãããŒã«ã«ã¢ã€ãã ã®å Žåã¯our
ãŸãã¯my
ã§å®å
šã«å€§äžå€«ã§ãã
our
ã¯3æåã®ããŒã¯ãŒãã§ããããã pub
ãããã³PerlããšããŸãæŽåããŸãã
圌ããããŸãã«ãéå
¬åŒã«èããããšããåé¡ã¯ãããŸããïŒãã€ãã£ãã®è±èªè©±è
ã«ãšã£ãŠïŒïŒ
intern
ã«ã€ããŠäººã
ã¯ã©ã®ããã«æããŸããïŒ crate
ãã1æåé·ãã§ããããã以å€ã¯ãRustãåããŠäœ¿çšãã人ã«ãšã£ãŠã¯ã crate
ãããçŽæçã§ã extern
ããŒã¯ãŒããšå¯Ÿç§°æ§ããããŸãã
IMO our
ããã³my
ã«ã¯ã local
ããã³internal
ãšåã匱ç¹ããããŸãããããã¯ãç¯å²ã«ã€ããŠããŸãæ確ã§ã¯ãããŸããã ç¹ã«local
ã¯ãã¹ã³ãŒããããŒã«ã«å€æ°ãšã¯æ ¹æ¬çã«ç°ãªããããéåžžã«æ··ä¹±ããŸããããŒã«ã«ãšã¯ãå²ãã§ããã¹ã³ãŒãã«å¯ŸããŠãã©ã€ããŒããæå³ããŸããããã¯ãã¢ã€ãã ã®å Žåãã¯ã¬ãŒãã§ã¯ãªãã¢ãžã¥ãŒã«ã«ãªããŸãã internal
ã¯å°ãäžç¹å®ã ãšæããŸãã äœã®å
éšïŒ ã¢ãžã¥ãŒã«ïŒ ã¿ã€ãïŒ ã¯ã¬ãŒãïŒ ããã䜿çšãããŠããèšèªããæ¥ã人ã«ãšã£ãŠã¯æãããããããŸããããå¿
ãããä»ã®äººã«ãšã£ãŠã¯ããã§ã¯ãããŸããã our
ãšmy
ã¯ããã«ãããŸãã§ãã 察ç
§çcrate
ã¯ã¹ã³ãŒãã«ã€ããŠéåžžã«æ確ã§ãã
pub(extern)
ã«ã€ããŠãå®éã«è³ªåããããŸãã pub
ãåã«ä»ããã«ã$ extern "C" fn foo() {}
ã䜿çšããããšã¯æå³ããããŸããïŒ ããã§ãªãå Žåã¯ãéåžžã®ãCã以å€ã®abiRusté¢æ°ã«ãextern fn foo() {}
ãåå©çšã§ããããã§ãã ç§ã¯ãããçµ±äžããŠãFFIã®ããã«externæ§æãç¹å¥ã«ä¿ã€ããšã¯ã§ããªããšèããŠããŸããã ã€ãŸãã extern
ã¯pub(extern)
ã«ãã·ã¥ã¬ãŒããã pub
ã¯ä»æ¥ãšåããŸãŸã§ãããã¢ã€ãã ããµããŒãããå Žåã¯ãªãã·ã§ã³ã®ABIæååãåãå
¥ãã pub
ã®ãªã³ããåãå
¥ããŸãã pub(extern)
ãŸãã¯extern
ãªãã§ãšã¯ã¹ããŒããããpub
ã¢ã€ãã ã
extern fn foo() {
println!("Just called a Rust function from Rust!");
}
#[no_mangle]
extern "C" fn foo_from_c() {
println!("Just called a Rust function from C!");
}
ç§ãèªãã ã¹ã¬ããã§ãããèšåãããŠããã®ãèŠãããšããªãã®ã§ãããã以åã«è°è«ãããããšãããã°ãè©«ã³ããŸãïŒ
ç®ã®åã«ããããªããŠãã
extern "C" fn foo() {}
ãæã£ãŠããã®ã¯æå³ããããŸããïŒ
ã¯ã-ããšãã°ãé¢æ°ãã€ã³ã¿ãšããŠfoo
ã ãã䜿çšãããå ŽåããããŸãã å®éãæ§æextern fn foo() {}
ã¯ã$ïŒ$ 4 $ïŒ$ã®ãªã$ïŒ extern
"C"
ãããã©ã«ãã§C ABIã«èšå®ãããŠãããããããã«åå©çšããããšã¯ã§ããŸãããããã¯ãå°ãªããšãäžéšã§ã¯æ
£çšçãªãã®ãšèŠãªãããŸãã
ããã¯ãã£ãšåã«åºãŠããææ¡ã§ã-æ°ããã¢ãžã¥ãŒã«ã·ã¹ãã ã®ããã€ãã®åŽé¢ãçµæ¶åãããä»ãç§ãã¡ã¯ããã«ããäžåºŠãã£ã³ã¹ãäžããããšãã§ããŸããïŒ
// Public to the world.
pub struct Foo;
// Private to the crate.
priv struct Foo;
// Basically not visible at all (only inside the module).
struct Foo;
次ã®ããšãèããã°ãããã¯çã«ããªã£ãŠãããšæããŸãã
priv
ãæãå¶éçãªãã®ã§ã¯ãªãããšã«ã²ããŸããåå¿ã瀺ãã人ãããŸãããããã«ã€ããŠ2ã€ã®ç¹ãææããããšæããŸãã
Rustã§ã¯ãã¢ãžã¥ãŒã«ã¯åå空éã®äžã§ç©äºãæŽçããããã«äœ¿çšãããã¯ã¬ãŒãã¯ã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ããããã«äœ¿çšãããŸãã ãããã£ãŠãã¯ã¬ãŒãããAPIã®åäœãã§ããå Žåãå¯èŠæ§ä¿®é£Ÿåãäž»ã«ã¯ã¬ãŒãã«ã€ããŠè©±ãããšã¯çã«ããªã£ãŠããŸãã
Javaã¯ããã¯ã©ã¹ã«ãã©ã€ããŒãããæå³ããprivate
ãšããããã±ãŒãžå
ã«è¡šç€ºãããããæå³ããå¯èŠæ§ä¿®é£ŸåãééãããšæããŸãã ç§ã«ãšã£ãŠãã¢ãã£ãã¡ã€ã¢ãªãïŒã€ãŸãããã©ã«ãïŒãæãå¶éçã§ããæ¹ãçã«ããªã£ãŠããŸãã
@stjepangä»ã®ã»ãšãã©ã®ç¶æ³ã§ã¯ãããã©ã€ããŒããã¯ãå€æŽãããŠããªãç¶æ ãããå¶éçãªæå³ãæã€ããšã«ãªããŸãã äžè¬çãªæå³ã§ã®private-default-publicã¹ãã¯ãã«ã¯ãprotected-available-advertisedã«é¡äŒŒããŠããŸãã
ãã©ã€ããŒãã¯ã©ãã¯ã¯ã©ããããæä»çã§ãã
ç§çãªè¡çºã¯ãäžè¬çãªèŠæ¹ããé ãããã«ããããã®åªåãæãããããšãæå³ããŸãã
é²åè«ããã¬ãã·ãŒãç§ãã¡ã«äžããããšãã§ããªãããšãèãããšãç§çãªèãã¯åé·ãªæŠå¿µã§ãªããã°ãªããŸããããã»ãšãã©ã®äººã¯ãããå
±æãããªãããšãæå³ããèããæå³ãããšèªèããŠããŸãã
çµéšã®æµ ãèšèªåŠç¿è ãšããŠãç§ã¯ãŸããè¿œå ã®ããŒã¯ãŒãã¯ãè€æ°ã®æèäŸåã®æå³ãæã€åäžã®ããŒã¯ãŒããããèªç¥çè² æ ãå°ãªãããšãææ¡ããŸãã CostelloãL and AbbotãB "Who's on first"ã1938ãåç §ããŠãã ããã
my
ãšour
ã«ã¯ãããããããŒã¯ãŒããšããŠäºçŽããããšã®é£ãããé€ãã°ãç§ãã¡ãæãŸãªãæå³åãããããšæããŸãã 圌ãã¯é¢çœãåè«ãèšããŸãããç§ãã¡ã¯ãã®ã«ãŒãã«è¡ãã¹ãã§ã¯ãªããšæããŸãã
æ£çŽãªãšããã人ã
ã¯crate
ã®å¯èŠæ§ãäœãæå³ããã®ããåŠã¶ã ãããšæããŠããŸãã ãã倧ããªåé¡ã¯ãèªã¿ã«ãããªã£ããã解æãææ§ã«ãªã£ããããã³ãŒãã«èµ·å ãããšæããŸãã
crate struct S(crate crate::Foo);
crate struct S(crate ::Foo);
ç§ã¯å人çã«ããããã·ã§ãŒããããŒãšã¯èŠãŠããŸããããããã§ã¯ééããªãæ£åœãªæžå¿µäºé ã§ãã
Scalaèšèªã«ã¯pub(path)
ã®é¡äŒŒç¹ããããããã¯private[path]
ã§ãããã»ãšãã©åãããã«æ©èœããŸãã ããã®ã¢ã€ãã ã¯éå
¬éã§ããã$pathå
ã®ãŠãŒã¶ãŒã®ã¿ã衚瀺ã§ããããšå°ãç°ãªããŸãã ããããããã©ã«ãã¯ãããªãã¯ã§ãããããScalaã§äœãããã©ã€ããŒãã«ããã«ã¯ã¢ãããŒã·ã§ã³ãå¿
èŠã§ãããRustã§ã¯ããã§ã¯ãããŸããã
friend
ã®C ++ã®æŠå¿µããåäŸã®1ã€ãšããŠã pub(path)
ã«äŒŒãŠããããšã«æ°ã¥ããŸããã
æçµçã«ãåé¡ã¯æ¬¡ã®ãšããã§ãã
crate
ããŒã¯ãŒãã¯ãçžå¯Ÿãã¹ã®ã€ã³ããŒããšå¯èŠæ§ä¿®é£Ÿåã®äž¡æ¹ã«äœ¿çšãããŸããcrate
ããŒã¯ãŒãã¯ã pub(...)
ã®ãããªçµ±äžãããå¯èŠæ§ä¿®é£Ÿåæ§æãé²ããŸããpub(crate)
æ§æãå«ããªäººãããŸãïŒé·ããããé¢æ°åŒã³åºãã®ããã«èŠããŸãïŒãæ¬åœã«æ·±ãèããŠ5ååŸãç§ã¯æ¬¡ã®ããšãæãã€ãã...ïŒP
_ïŒäŸãšããŠ@
ã䜿çšïŒ_
<strong i="18">@pub</strong> use crate::Foo;
<strong i="19">@crate</strong> struct Bar;
å人çã«ã¯ããªãéãã®ã§ã @crate
ãŸãã¯pub(crate)
ã®ã©ã¡ããå
¥åããããããŸããã
裞ã®pub
ãšextern
ããã§ã«ããã®ã§ã crate
ããŒã¯ãŒãã¯éåžžã«ããŸãé©åããŠãããšæããŸãïŒéåžžã®public
ã protected
ã private
ããŒã¯ãŒãïŒã
crate struct Foo;
crate fn path() -> PathBuf { ... }
ããããç§ãèšã£ãããã«ãããã¯crate
ã€ã³ããŒããã¬ãã£ãã¯ã¹ã§ã¯ããŸãæ©èœãããç§ãã¡ã¯ãããéè¡ãããããã«æãå§ããŠããŸãã æ¬åœã®åé¡ã¯ãããšãã°ãæ§æã®åŒ·èª¿è¡šç€ºããªãããã¹ã®æ確ãã®å€æŽã«ãããšæããŸãã
use crate::utils;
crate
ã«ã¯ç¹å¥ãªæå³ã¯ãªãããã§ãã
宣èšåãã¯ãã®æ§æãã倧ããªã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸãŠãå¯èŠæ§ä¿®é£Ÿåã®ããçš®ã®çµ±äžãããæ§æãèŠã€ãã代ããã«ãç§ã¯ããã次ã®ããšãããããšæããŸãã
use std::io;
use std::path::Path;
use log::info;
use $crate::utils;
crate fn hello() -> io::Result<()> {
utils::rm_rf(Path::new("/"))?;
info!("Goodbye, World!");
}
ïŒ self
ã super
ãããã³crate
ã®ãã¹ã€ã³ããŒãçšã®ç¹å¥ãªã¢ã³ã«ãŒã«ã¯ãããšãã°$crate
ãªã©ã®ãã¬ãã£ãã¯ã¹ãå¿
èŠã§ããããã«ãããããããç¹å¥ã§ãããå€æ°ã®ããã«èŠããïŒ
è€éãªäŸïŒ
crate struct Foo(crate crate::Bar);
ã«ãªããŸãïŒ
crate struct Foo(crate $crate::Bar);
éè€ãã远跡ã®åé¡ãããããã§ãïŒ httpsïŒ//github.com/rust-lang/rust/issues/45388ã
ãããæ¯æããŠãããéããŸãã
rustcã®å®è£
ããã®æ©èœãããã°ããŒãã£ã³ã°ããŠããçç±ã¯ãããŸããïŒ crate fn
pub(crate) fn
ã«å€æŽããŠãäžå®å®ãªæ©èœAFAICTãžã®äŸåãåæ¢ããããšãã§ããŸãã
ç§ãã¡ãããããæ£åœãªçç±ã¯ããããŸããã Clippyãšrustcã¯ã©ã¡ããåžžã«äžå®å®ãªæ©èœã䜿çšããŠãããå®è£ ã®ãã°ããã£ãããããšãã芳ç¹ãããããããã®äœ¿çšæ¹æ³ãç解ã§ãããããããåºç¯å²ã«ãã¹ãã§ããããããããã®æ©èœã䜿çšããå¿ èŠããããŸãã
ãã®å ŽåãClippyãšrustcã§ã®å¯èŠæ§ä¿®é£ŸåãšããŠã®crate
ã®äœ¿çšã¯ã pub(crate)
ãããèªã¿ãããããã®è¿œè·¡ã®åé¡ã§åç
§ãããŠããåé¡ã®ã»ãšãã©ãé-å®éã®åé¡ã https://github.com/rust-lang/rust/issues/53120#issuecomment -413466129ãhttpsïŒ //github.com/rust-lang/rust/issues/53120#issuecomment -414392549ã httpsïŒ/ /github.com/rust-lang/rust/issues/53120#issuecomment -413498376ã¯ãå¯èŠæ§ä¿®é£ŸåãšããŠã®crate
ãå€éšã§ãããŸãæ©èœããããšã瀺åããŠããŸãã
å®éã«ã¯ããŸãæ©èœããŠããã®ã§ãèšèªããŒã ã®ç§ãã¡ã®å€ãã¯ããã«ã€ããŠååãã«æããŠããã RFCã§åãå
¥ããããŠããã®ã§ã struct Foo ( crate :: foo :: Bar )
ãã©ã®ããã«è§£æããããæ€èšããåŸãå¯èŠæ§ä¿®é£ŸåãšããŠcrate
ãå®å®ãããããšãæ€èšããå¿
èŠããããšæããŸãã struct Foo ( crate :: foo :: Bar )
ïŒçŸåšã¯ãã¹ãšããŠãããããããã§ãïŒã
FWIWãç§ã¯ãã®æ©èœãcargo-n64ã§äœ¿çšããŠããŸããããšãŠã䟿å©ã§ãã
rustcã§ã¯crate
ãåžžã«äœ¿çšããŠããŸããããã¯ãçãã pub(crate)
ã®ãããªæ¬åŒ§ããªãããã§ãã
ç§ã¯ãŸã ãããã©ã®ããã«èªãã®ã奜ãã§ã¯ãããŸããã
ãŸãã3æåããªãããã pub
<-> crate
ã®å€æŽãšãšãã«ãã©ãŒããããå€æŽãããŸãã
ç§ã¯ãŸã our
ãç®èãªããšã«å¥œãã§ãã
@petrochenkovããªããæžããããšã«ã€ããŠã®ç§ã®ç解ã¯ãããªãã¯pub(crate)
ããã$ crate
ã奜ããã crate
ãããè¯ããã®ãæãã§ãããšããããšã§ãã ããã¯æ£ç¢ºãªè©äŸ¡ã§ããïŒ
FWIWãç§ã¯ãŸã intern
ãè¯ããªãã·ã§ã³ã ãšæããŸãã
pub(crate)
ããçãïŒãã ãã1æåã¯crate
ããé·ãïŒcrate
ïŒãã¹ãªã©ã®ä»ã®ãã®ã«äœ¿çšãããŸããäŸïŒ crate::foo::bar
ïŒãããèªã¿ããããªããŸãïŒIMOïŒextern
ãšã®å¯Ÿç§°æ§ãè¯ãinternal
ïŒã KotlinãCïŒãªã©ãããã¯èšã£ãŠãã pub(crate)
ãäœãã«çœ®ãæããå¿
èŠãããããšã«ãåæããŸãã
ããŠãããã§è§£æ±ºããŸãã-3æåãããã§ãããããŠãã€ã³ã¿ãŒã³ããããã§ããããã§... int
ã ;ïŒ
crate ::T
ïŒã¹ããŒã¹ä»ãïŒã®å Žåã®ãªã³ãããé¡ãããŸãã
@Centrilç§ãã¡ã®äœäººãã¯ãïŒrocketã§åé²ããæ¹æ³ã«ã€ããŠè©±ãåã£ãŠããŸããã æè¿ã®ã³ã¡ã³ããããè¿ãå°æ¥ãFCPãææ¡ãããå¯èœæ§ã¯ãããŸããïŒ
@jhprattç§ã¯èšäºãæžããæçµçã«ãããææ¡ããã€ããã§ããããä»ã®ããšã«å¿ããããŠããŸãã è¿ãå°æ¥ãæéãèŠã€ããããšæããŸãã
ããã§ãç§ã¯ãã åé¡ãé²èŠ§ããŠããã¯ãã«ã€ããŠäœããæ¢ããŠããŠããããèŠã€ããŸããã
pub(crate)
ããã§ã«é·ãéå®å®ããŠããã®ã§ããã®åé¡ã¯è§£æ±ºãããã¹ãã§ã¯ãªãã§ããããã
èå³æ·±ãããšã«ãããã¯æè¿ã®lang-teamããŒãã£ã³ã°ã§åãäžããããŸãããããã§ã¯ãããã埩掻ããããå¯èœæ§ã®ããåé¡ãšããŠè°è«ããŸããã
å人çã«èšãã°ããã£ãŒã«ããªã©ã«crate fn
ãšcrate foo: T
ãæžãããšãã§ããªãã®ã¯ééããããŸããã pub(crate)
ãšã®æ§æäžã®å€§ããªéãã§ã¯ãããŸããããç¹ã«å€ãã®ãããªãã¯ãã£ãŒã«ããæã€æ§é äœã§ã¯ãã³ãŒããã¯ããã«èªã¿ããããªãããšãããããŸããã ç§ã¯ãŸãããããåççã«åœ¹ç«ã€ãåçŽåãããããã©ã€ãã·ãŒã¢ãã«ãã«è²¢ç®ããŠããããšãçºèŠããŸãã-
crate
ãripgrepããå¿
èŠããããŸãïŒpub
ïŒç§ã®èŠè§£ã§ã¯ããã®ããŒã¯ãŒããšhttps://github.com/rust-lang/rust/issues/48054ã§æ³å®ãããŠããå€æŽãšã®éã«ã¯ããã€ãã®å ±éç¹ããããããããäžç·ã«æ¡çšããããšã確å®ã«ããããšæããŸãã 詳现ã¯å¿ããŠããŸããŸããããäžèšã®ã¢ãã«ãå®è·µããããšãããšãšã©ãŒãçºçããããšãèŠããŠããŸãã
ããã«åããæåã®ã¹ãããã¯ã誰ããæŽå²ãææžåããŠãæèµ·ããããã¹ãŠã®æžå¿µã匷調ããããšã確èªããããã®æžã蟌ã¿ãè©Šã¿ãããšã ãšæããŸãã
ç§ãèŠããŠããç¹å®ã®æžå¿µã®1ã€ã¯ãæ§æã®ãããŸããã§ãã
struct Foo(crate ::x)
ä»æ¥ãããã¯åãå
¥ãããã crate ::x
ã¯ãã¹crate::x
ãšããŠè§£æãããŸããããããããŠãŒã¶ãŒã¯crate
ããã¹ãšããŠ::x
ãæã€å¯èŠæ§ä¿®é£ŸåãšããŠæ©èœããããšãæå³ããŠããŸããã
crate
修食åãåå°å
¥ããäžèšã®ã±ãŒã¹ã®è§£æãä»æ¥ãšåãããã«ç¶æããåŸåããããŸãã Rust 2018以éã ::foo
ãã¹ã¯å€§å¹
ã«å»æ¢ãããŸããããããã®ãã¹ã¯åŒãç¶ãååšãããã¯ããªã©ã®ç¹å®ã®ã³ã³ããã¹ãã§åœ¹ç«ã€å¯èœæ§ããããŸãããã»ãšãã©ã®çšèªã§ã¯ã crate_name::b
ã®ãããªçµ¶å¯Ÿãã¹ãæšå¥šããŠããŸãã crate_name
ã¯ãããŒã¯ãŒãcrate
ãŸãã¯ä»ã®ã¯ã¬ãŒãã®ååã®ããããã§ãã ãããã£ãŠã crate::x
ïŒç©ºçœãç¡èŠïŒã¯å®éã«ã¯ãã¹ãšããŠæå³ãããŠããå¯èœæ§ãé«ãããããã£ãŠçŸåšã®è§£æã¯æ£ããã§ãã
æœåšçãªãŠãŒã¶ãŒã®æ··ä¹±ã«å¯ŸåŠãããå Žåã¯ã空çœã«ææãªãªã³ããããªãè¯ãèãã ãšæããŸãã ã€ãŸãã struct Foo(crate ::x)
ã¯èŠåããŸããã struct Foo(crate::x)
ã¯èŠåããŸããããã©ã¡ããåãå
¥ããããåçã§ãã
å人çã«ã¯ãçµ±äžãããæ§æãšåçŽãªlookaheadïŒ1ïŒããŒãµãŒã®æ¹ã奜ãã§ãã ãŸããæšæ ã¯æšæ ã§ãããããã«ã¯crates.ioãããããããã¯ãã¹ãŠã pub(_)
ã®ã³ã³ããã¹ãã§ã®ã¿ãå¯èŠæ§ãšã¯çŽæ¥é¢ä¿ãããŸããã
ãããããŸããç§ã¯äœãç¥ã£ãŠããŸããïŒ ããã¯ãŸãå¥ã®èŠæ¹ã§ãã ããªããã¡ã¯ééããªãããå€ãã®çµéšãšãã䟡å€ã®ããæèŠãæã£ãŠããŸãã
@nikomatsakisãã®ãŠãŒã¹ã±ãŒã¹ã®intern
ã«ã€ããŠäœãèãããã£ããã©ããïŒãŸãã¯ããã®æç¹ã§ã¹ã³ãŒãå€ã®æ°ããããŒã¯ãŒããäºçŽããŠãããã©ããïŒã«èå³ããããŸãã
æ°å¹Žçµã£ãŠããç§ã®æ°æã¡ã¯åãã§ããèªã¿ããããæé©åããŠãã ããã ã³ãŒããæžããããèªãæ¹ãã¯ããã«å€ãããšãããããŸããã ãããã£ãŠãç§ã®æèŠã§ã¯ã pub(scope)
ãèªãæ¹ãæ確ã§ããããã¯ã pub
ã pub(crate)
ã pub(super)
ã pub(in proto::h1)
ã®ããããã«ãªããŸãã ã
ããããç§ãã¡ã¯ãããã®æèŠãšã®äŒè©±ã«å®éã«æ°ãããã®ãè¿œå ããŠãããšã¯æããŸããã以åã®ã³ã¡ã³ãã§ãã¹ãŠãè¿°ã¹ããšç¢ºä¿¡ããŠããŸãã 決å®ã¯äœãæ°ããããšã«åºã¥ãã¹ãã§ããïŒ ãŸãã¯ãå¥ã®èšãæ¹ãããã°ããã®æ§æãæ¡çšãããšãã決å®ã¯ã2ã3幎åã«ãããããã§ãã£ããã延æããããšãã«ãã¯ããã§ãããšã©ã®ããã«å€æããã®ã§ããããã
ç§ã¯ãŸãããããåççã«åœ¹ç«ã€ãåçŽåãããããã©ã€ãã·ãŒã¢ãã«ãã«è²¢ç®ããŠããããšãçºèŠããŸãã-
- æ§é äœããã£ãŒã«ãã¯ã¢ãžã¥ãŒã«ã«å¯ŸããŠããŒã«ã«ã§ãïŒéåžžã«çãæšè«ïŒ
- ãŸãã¯ãçŸåšã®ã¯ã¬ãŒãå ã®ã©ããã§äœ¿çšãããŠããŸãïŒ
crate
ãripgrepããå¿ èŠããããŸãïŒ- ãŸãã¯ãããã¯äžçã«å ¬éãããŠããŸãïŒ
pub
ïŒ
ç§ã¯ããã®åçŽåã®å©ç¹ãšããããè¡šçŸåã倱ã䟡å€ãããããšãç解ããŠããŸããã 䟡å€ãããã®ã§ãç§ã¯ãã°ãã°ã¢ã€ãã ã芪ã¢ãžã¥ãŒã«ã«å ¬éããŸããïŒå åŒã¢ãžã¥ãŒã«ããããã䜿çšã§ããããã«ããããïŒãã¯ã¬ãŒãå šäœã§ã¯ãããŸããã ç¥ç¶æ¯ã¢ãžã¥ãŒã«ã«ã¯ããã»ã©å ¬éãããŠããŸããããããã§ãææãããŸãã
pub(super)
ãå»æ¢ããããšã¯ã倧ããªæ倱ã«ãªããšæããŸãã
ãããšã¯å¥ã«ãç¬ç«ããŠååšã§ããã¢ã€ãã ãå€æŽãã修食åãšããŠåè©crate
ã䜿çšããããšã«ããããããŠããŸããã æ¯èŒã®ããã«ïŒpubïŒlicïŒãunsafeãããã³constïŒantïŒã¯åœ¢å®¹è©ã§ãã ã¢ã€ãã å®çŸ©ã§ããŒã¯ãŒããšããŠãã§ã«äœ¿çšãããŠããåè©ã¯ä¿®é£Ÿåã§ã¯ãããŸãããããã®ã¢ã€ãã ã®æ§è³ªã瀺ããŸãïŒæ©èœãç¹æ§ãã¢ãžã¥ãŒã«ãâŠ
ã¯ã¬ãŒãã¯ãã§ã«ç§ãã¡ãæ±ã£ãŠããæŠå¿µã§ããããã®ææ¡ã§ã¯ã crate
ã§å§ãŸãã¢ã€ãã å®çŸ©ã¯æ°ããã¯ã¬ãŒããå®çŸ©ããŸããã
ã¡ãã£ãšããæ°ããæ å ±ïŒ
rust-analyzerã¯è£å®ãæäŸãã pub(crate)
ãè¿œå ããã®ãæ¯æŽããŸããããã«ããã3åã®ããŒã¹ãããŒã¯ã§ïŒäž»èŠ³çã«ïŒå
¥åã®ç
©ãããã倧å¹
ã«è»œæžãããŸãã
ããã«æ°ããæ å ±ãã»ãšãã©è¿œå ãããŠããªãããšã«åæããŸãã ææ¡ãæ¯æãããã®ã§ããã°ã次ã®è¯ãã¹ãããã¯ãæ»ã£ãŠæªè§£æ±ºã®æžå¿µäºé ãèŠçŽãããããlangããŒã ã«æåºããŠæçµæ±ºå®ãäžãããšã ãšæããŸãã ç§ã¯ç¢ºãã«ãã®ææ¡ãåãå ¥ãããæåŠãããã奜ã¿ãŸããç§ã¯ãããéæ¹ã«æ®ããããšã«ããããããŠããŸãã
ãã®åé¡ã®å
šäœããã°ãã調ã¹ãŠã¿ããšã @nikomatsakisã®æè¿ã®ã³ã¡ã³ãã¯ç©äºãããªãããŸããŸãšããŠãããšæããŸãã intern
ã®ãããªãã®ããŸã ãµããŒãããŠããå°æ°ã®äººã
ãé€ãã°ã crate
ãæãè«ççã§ããããã«æãããŸãïŒãããŠRFC 2126ã§åãå
¥ããããŸããïŒã å¯äžã®çã«æªè§£æ±ºã®åé¡ã¯ã fn foo(crate ::bar)
ã解æããæ¹æ³ã§ãã
ããã©ã«ãã§èŠåãã空çœã«ææãªlintã¯ãéå§ããã®ã«æãè«ççãªå Žæã®ããã§ãã crate ::bar
ã¯çŸåšãã¹ãšããŠè§£æãããŠãããRust 2015ãš2018ã®äž¡æ¹ã§ãã®ç¶æ
ãç¶æããå¿
èŠããããŸãããã ãããšãã£ã·ã§ã³ã®é倧ãªå€æŽã®åè£ã«ãªããšæããŸãã
crate ::bar
ã®å Žåã¯ãå®éã«ã¯ãŸã£ããéèŠã§ã¯ãªãããã§ã«ä»ã®èšèªãšäžè²«ããŠåäœããŸãã ããã¯äžè²«ããŠè°è«ã®çã£èµ€ãªãã·ã³ã§ãããããã«æ³šæãåããªãã§ãã ããã
ç§ã¯ç¢ºãã«ãã®ææ¡ãåãå ¥ãããæåŠãããã奜ã¿ãŸããç§ã¯ãããéæ¹ã«æ®ããããšã«ããããããŠããŸãã
ç§ã¯æåŠã«æ祚ãããšæããŸãã
ç§ã¯äžè²«ããŠrustcã§pub(crate)
crate
ã䜿çšããŠããŸããããçãã«ãããããããç¹ã«ãã£ãŒã«ããã€ã³ããŒãã§ã¯ãã»ãšãã©ã®å Žåã crate
ããéžæãããšèŠåœéãã«èŠããŸãã pub(crate)
ã¯ãã©ã¡ããå°ãããããããªããŸãŸã2ã€ã®æªã®ã©ã¡ãããéžæããããã«æããŸãã
ããã ããã«éèŠãªã®ã¯ã @ SimonSapinãã crate bar
ã¯ãæ°ããã¯ã¬ãŒããå®çŸ©ããŠããããã«èŠããã«ãããããããå®éã«ã¯æ°ããã¯ã¬ãŒããå®çŸ©ããŠããªããšè¿°ã¹ãããšã§ãã
@petrochenkovããªãã¯ãªã³ããæå³ããªããªããšæããŸããïŒ å人çã«ã¯ããã®ãã£ã¹ã«ãã·ã§ã³ãèŠãã«crate ::bar
ãèŠãå Žåã pub(crate) ::bar
ã®ããã«åäœãããšæããŸãã ãã¹ã«ç©ºçœãèš±å¯ããããšã¯ãæ··ä¹±ãæããšæããŸãã
@jhprattããŒãµãŒãããŒã¯ã³ãåŠçããæ¹æ³ã®æ§è³ªäžããã¹ã»ã°ã¡ã³ãéã®ç©ºçœãæåŠããã®ã¯å°é£ã§ãã ãŸããquoteïŒãsynããã®ä»å€ãã®ããŒã«ã®éåžžã«å€ãã®ããŒã«ãå£ããŠããŸããŸãã
ç§ããããéããããšããµããŒããããšæããŸãã ãã®æ§æã®æå³ã«ã€ããŠååãªæ··ä¹±ãèŠãããã®ã§ãç°¡æœãã®åäžã¯èªã¿ããããæãªãå¯èœæ§ããããšã¯æããŸããã
ããã¯ãããã倧ããªãïŒãã ãã¯ããŒãºãããïŒè¿œè·¡åé¡ïŒ44660ã«é©ããŠããå¯èœæ§ããããŸãããå¯èŠæ§ä¿®é£Ÿåã«ãçŽæ¥é¢é£ããŠãããïŒ44660ã®ä»ã®ãµãåé¡ã«ã¯é©åããŸããã
ããæç¹ã§ã pub(path)
ãåæ³ã«ãªãã pub(in path)
pub(crate)
ãšpub(super)
ãå«ããããšãææ¡ãã人ãèŠããŠããŸãã ããã¯pub(...)
ãåçŽåãããã®ã®ããã§ããã crate
ãšã¯æ¹åãç°ãªããŸããããããæ€èšããå¿
èŠããããŸãã
ç·šéïŒå®éã«ãããæ©èœãããã©ããã¯ããããŸãã... struct S(pub(path) Type)
ã¯struct S(pub (Type,))
ã®ãããªãã®ã§ïŒLL颚ã®è§£æã«å¯ŸããŠïŒãããŸãã§ãã
ã§ããããç§ã¯ãã®æ°ã¶æéãã®èããæã£ãŠããŸããã ç§ã¯ãè¿ããäœçœ®ã«æ¥ããšæããŸãã ç§ã®ç«å Žã®èŠçŽã¯æ¬¡ã®ãšããã ãšæããŸãã
pub(super)
ãç¹ã«ãå®éã«ã¯éåžžã«äžè¬çã§ãããè€æ°ã®ã¬ãã«ïŒã€ãŸãã pub(crate::foo)
ïŒãå¿
èŠã«ãªãããšã¯ãã£ãã«ãããŸããã ããšãã°ããµãã¢ãžã¥ãŒã«ãæã€ã¢ãžã¥ãŒã«ãå¿
èŠãªããšããããããŸããããããã®è©³çŽ°ã«ã¯ã¬ãŒãã®å¯èŠæ§ã䜿çšããŠããæå³ããã¬ãã«ã®ãã©ã€ãã·ãŒãäŒããããšãã§ããŸãããpub(crate) fn
ã¯ãåãªãcrate fn
ããã倧å¹
ã«ç°¡æœã§ã¯ãããŸããããããã»ã©æªãã¯ãããŸããã pub(crate)
ãpub(crate::foo)
$ã«æ¡åŒµãããã®ã¯ããããã§ãããããã¯ç§ãæã
åããä»ã®ãŠãŒã¹ã±ãŒã¹ïŒã€ãŸããã¯ã¬ãŒãå
ã®ã倧ããªãã¢ãžã¥ãŒã«ïŒãã«ããŒããŠããŸãããããã¯éåžžã«åé·ãªã®ã§ããã£ãã«ãªãã ãããšæããŸã䜿çšããããšã«ãããããã®å€§ããªã¢ãžã¥ãŒã«ã¯ãµãã¯ã¬ãŒãã«å æ°å解ãããã»ããããã§ããã...pub(x) fn
ã«è¡šç€ºããããã¹ãŠã®ã¿ã€ããé©åãªãã©ã€ãã·ãŒã§ããããšã確èªããããšããããšã«é¢é£ãããªã³ããšãšã©ãŒã«èµ·å ãããšæããŸãã ç§ãã¡ã¯ãããã®ã«ãŒã«ã埮調æŽããŸããããããŠç§ã¯ãããã®ç
©ããããããæã£ãŠããªããããªæ°ãããŸã-ãããŠãã£ãšãã®ãããªç
©ããããåºãŠããããç§ãã¡ããããã«å¯ŸåŠã§ãããšæããŸããpub
ãèšè¿°ããŠããæ§é äœèªäœãšåãããããããªãã¯ããæå³ããããšã¯å¯èœã§ãããããã¯åé¡ãªãæ©èœãããšæããŸãããããŠãã¡ããã crate fn
ãè¿œå ããªããšããããšã¯ãåŸã§è¿œå ã§ããªããšããæå³ã§ã¯ãããŸããã ç¹ã«ãå¥ã®ã¯ã¬ãŒãå
ã§ã軜éã®ã€ã³ã©ã€ã³ã¯ã¬ãŒãããå®è¡ããæ¹æ³ãããã°ãã3ã¬ãã«ã®ãã©ã€ãã·ãŒãã¢ãã«ã®æ¹ãããŸããããšæããŸãã ã€ãŸããã¯ã¬ãŒãå
ã«ãµãã¢ãžã¥ãŒã«ãé
眮ãã代ããã«ããã¹ãŠãæ瀺ãããã©ã€ããŒãã¯ã¬ãŒãã宣èšã§ããŸãïŒæã泚ç®ãã¹ãã¯ããããããä»ã®ãã®ãšã®DAGã®ãããªé¢ä¿ã§ãïŒã 軜éã®ã€ã³ã©ã€ã³ã¯ã¬ãŒããå®éã«æ©èœãããã©ããã¯ããããŸãããã pub(super)
ã®ãããªãŠãŒã¹ã±ãŒã¹ã®å€ããã«ããŒããŠçœ®ãæããå¯èœæ§ããããŸãã ãããæ¢æ±ããå Žåã¯ã crate fn
ãããã®ãã£ã¹ã«ãã·ã§ã³ãåéããããšãæ€èšããŸããããã¯ãéåžžã«äŸ¿å©ã§äžè¬çãªãã®ã«ãªãå¯èœæ§ãããããã§ãã
ã€ãŸããã³ã³ãã€ã©ããcrate
ã®å¯èŠæ§ã¬ãã«ãåé€ããæ©èœã²ãŒããåé€ããããšã«è³æã§ãã
ãã®æ©èœããã€å®å®ãããã確èªãããã£ãã®ã§ãããåé€ããèšç»ãããããšã«é©ãã倱æããŸããã è¿œå ããŠããéããªããæ¥åžžçã«äœ¿ã£ãŠãããäžèšã®ãããªåé¡ã¯ã»ãšãã©ãããŸããã ããšãã°ãç§ã¯ãŸã crate ::path
ã«äŒŒããã®ãæžããŠããŸããããŸãã ::path
æ§æã«è§Šããããšããªãã®ã§ããããã決ããŠæžããŸããã
確ãã«ãæ¹åã®äœå°ããããŸãã ããŒã¯ãŒãã®æ¹ãé©åã«éžæã§ããŸããã pub(super)
ã¯äŸç¶ãšããŠäžäŸ¿ã§ããããã«ããŒã¡ãœããã«ã¯ã¬ãŒãã¬ãã«ã®å¯èŠæ§ã䜿çšãããšããããã³ãŒãã®èŠåãããããšããã«è¡šç€ºãããã®ã¯åä»ã§ãã ãã ãããŠãŒã¶ãŒãšããŠã¯ãããè¯ã解決çãèŠã€ãããŸã§ããã®æ©èœããã®ãŸãŸã«ããŠããïŒæ©èœã²ãŒãïŒããšããå§ãããŸãã pub(crate)
æ§æã¯ç®éããªãã®ã§ããã倧ããªã¢ãžã¥ãŒã«ãããå°ãããããã¿ã€ããªã¢ãžã¥ãŒã«ã«åå²ããããšãããæããšã©ãŸãããŸãã
ãæ··åã¬ãã«ã®ãã©ã€ãã·ãŒãã«é¢ããæ倧ã®äººéå·¥åŠçããŒãã«ã¯ãïŒããšãã°ïŒpubïŒxïŒfnã«è¡šç€ºããããã¹ãŠã®ã¿ã€ããé©åãªãã©ã€ãã·ãŒã§ããããšã確èªããããšããç§ãã¡ã«é¢é£ãããªã³ããšãšã©ãŒããæ¥ããšæããŸãã
ããã¯ããå°éäžèœãªããããªã³ãïŒ mod private { pub fn f() {} }
ïŒãæå¹ã«ããªãããšãæå³ããŸããïŒ
ãããšãç§ã¯ããŸããŸãªrustcã³ãŒããèªãã§ã crate
ã䜿çšãããŠããã®ãèŠãŠãèãçŽããŠããŸããããããã®ã±ãŒã¹ã¯ãã¹ãŠpub(crate)
ã ã£ããšæããŸã...ãããããã䟡å€ãããã§ãããå·®åãã©ã®ããã«æãããããã確èªããããã«ãå®éšçã«é·ç§»ããŸãã ãã§ãŒã¯ãæ¯æ©ããå®å®ãããã®ã«å€ãããšãã¯ããšãŠãæ²ããã£ãã®ãèŠããŠããŸãããæ
£ããŠããã®ã§ããŸãæ°ã«ãªããªãã£ããšæããŸãã
@matkladç§ã¯ããããªãããšãæã¿ãŸããç§ã¯ãªã³ããéåžžã«éèŠã ãšæããŸãã æ£çŽãªãšããã以åã®ãããªãšã©ãŒãç
©ããããæããªãã£ãçç±ã¯ããããããŸããã ãã¶ãç§ã¯æè¿ååãªRustã³ãŒããæžããŠããŸããïŒ ç§ã¯ãç§ãæãã§ãããããå€ãã®ãã®ãpub
ã«ããããšãé€ããŠãã³ã³ãã€ã©ãŒãæºè¶³ãããããšãã§ããªãããã«æããããããã®åä»ãªãµã€ã¯ã«ãæã£ãŠããããšãééããªãèŠããŠããŸãã
pub(crate)
ãä¿æãããšã€ãªã¢ã¹pubc
ãè¿œå ããã®ã¯ã©ãã§ããïŒ ããã¯éåžžã«ãã䌌ãŠãããçŸåšã®ã³ãŒããå£ãããšã¯ãªããæ¬åŒ§ãå
¥åããå¿
èŠããããŸããïŒããã«ããå°ãéããªããŸãïŒã
ããã«ããã芪ã§ã®å¯èŠæ§ã®ããã«pubs
ãèš±å¯ãããŸãã
ã€ãŸããã³ã³ãã€ã©ãã
crate
ã®å¯èŠæ§ã¬ãã«ãåé€ããæ©èœã²ãŒããåé€ããããšã«è³æã§ãã
ã³ãŒããèªãã§ãããšãã pub(crate)
ã¯äžçš®ã®ç®éãã§éšã
ãããšæããŸãã 代ããã«crate
ã®å¯èŠæ§ä¿®é£Ÿåããããšéåžžã«äŸ¿å©ã§ãã
ãããŠãã¡ããã
crate fn
ãè¿œå ããªããšããããšã¯ãåŸã§è¿œå ã§ããªããšããæå³ã§ã¯ãããŸããã ç¹ã«ãå¥ã®ã¯ã¬ãŒãå ã§ã軜éã®ã€ã³ã©ã€ã³ã¯ã¬ãŒãããå®è¡ããæ¹æ³ãããã°ãã3ã¬ãã«ã®ãã©ã€ãã·ãŒãã¢ãã«ã®æ¹ãããŸããããšæããŸãã ã€ãŸããã¯ã¬ãŒãå ã«ãµãã¢ãžã¥ãŒã«ãå«ãã代ããã«ããã¹ãŠãæ瀺ãããã©ã€ããŒã_crate_ã宣èšã§ããŸãïŒç¹ã«ããããããä»ã®ãã®ãšã®DAGã®ãããªé¢ä¿ïŒã 軜éã®ã€ã³ã©ã€ã³ã¯ã¬ãŒããå®éã«æ©èœãããã©ããã¯ããããŸããããpub(super)
ã®ãããªãŠãŒã¹ã±ãŒã¹ã®å€ããã«ããŒããŠçœ®ãæããå¯èœæ§ããããŸãã ãããæ¢æ±ããå Žåã¯ãcrate fn
ã®åšãã§ãã£ã¹ã«ãã·ã§ã³ãåéããããšãæ€èšããŸããããã¯ãéåžžã«äŸ¿å©ã§äžè¬çãªãã®ã«ãªãå¯èœæ§ãããããã§ãã
ç§ã¯ããªããèšåãããããã®ã軜éãã®æšæ ã絶察ã«æ¬²ããã§ãïŒ ã¡ãã£ãšéãã¯ãŒã¯ã¹ããŒã¹ã«ããã«è¡ãããããã£ãšããã§ãããã
æãåèã«ãªãã³ã¡ã³ã
ç§ã¯å人çã«
pub(crate)
ãæžããŠã倧äžå€«ã§ããæå³ã¯éåžžã«æçœãªããã§ãã@johnthagenã«ãã£ãŠäžããããäŸã¯ãèŠãã®ãæ¬åœã«èŠçã§ãïŒ
crate
ã䜿çšïŒïŒcrate mod color;
ç¹ã«çŽããããããã§ãããããã§äœãèµ·ãã£ãŠããã®ããå°ãèããå¿ èŠããããŸãã