Rust: RFC 2126์— ๋Œ€ํ•œ ์ถ”์  ๋ฌธ์ œ: ๊ฒฝ๋กœ ๋ฐ ๊ฐ€์‹œ์„ฑ์„ ๋ช…ํ™•ํžˆ ํ•˜๊ณ  ๊ฐ„์†Œํ™”ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 09์›” 17์ผ  ยท  120์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: rust-lang/rust

์ด๊ฒƒ์€ RFC "๊ฒฝ๋กœ ๋ฐ ๊ฐ€์‹œ์„ฑ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ณ  ๊ฐ„์†Œํ™”"(rust-lang/rfcs#2126)์— ๋Œ€ํ•œ ์ถ”์  ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

๋‹จ๊ณ„:

  • [ ] RFC๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๊ตฌํ˜„ ๋‹จ๊ณ„๋Š” ํ•˜์œ„ ๋ฌธ์ œ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.
  • [ ] crate ๊ฐ€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‹œ์ž‘ํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋ฉด ์ผ๋ถ€ ๊ตฌํ˜„ ๋ฌธ์ œ๊ฐ€ ์ฐจ๋‹จ๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ•œ ๋‹ค์Œ ํ•ญ๋ชฉ ์ค‘ ์–ด๋Š ๊ฒƒ๋„ ์ ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    • [x] crate ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๋ฆฐํŠธ ์ถ”๊ฐ€(https://github.com/rust-lang/rust/issues/48722)

    • [ ] ๊ธฐ๋Šฅ ๊ฒŒ์ดํŠธ๊ฐ€ ์ œ๊ณต๋  ๋•Œ extern crate ์ƒ๋žต ํ—ˆ์šฉ


  • [ ] ๋ฌธ์„œ ์กฐ์ •( forge ์ง€์นจ ์ฐธ์กฐ )
  • [ ] ์•ˆ์ •ํ™” PR( forge ์ง€์นจ ์ฐธ์กฐ )

ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ์งˆ๋ฌธ:

  • ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์— ์–ด๋–ป๊ฒŒ ์ ‘๊ทผํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? ๋Œ€์ฒด๋ฅผ ํ†ตํ•ด ์ œ์•ˆ๋œ ๋Œ€๋กœ ๋˜๋Š” ์—ํฌํฌ๋ฅผ ํ†ตํ•ด? ์˜ˆ๋ฅผ ๋“ค์–ด rustfix ๋„๊ตฌ๋ฅผ ์†์— ๋„ฃ์€ ํ›„์— ๋” ๋งŽ์€ ๊ฒฝํ—˜์„ ํ†ตํ•ด ์ด ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค.

  • ์ ˆ๋Œ€ ๊ฒฝ๋กœ์˜ ์ตœ์ข… ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ์‹ค์ œ๋กœ ์‹œํ—˜ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ๋” ๋งŽ์€ ์ž์ „๊ฑฐ ์ด๋™์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ crate:: ๋ฐ extern:: ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉ ํ•˜๋ฉด ๋ช‡ ๊ฐ€์ง€ ์‹ค์งˆ์ ์ธ ์ด์ ์ด ์žˆ์ง€๋งŒ ์ด์ƒ์ ์œผ๋กœ๋Š” ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•œ ๋ฐฉ์‹์œผ๋กœ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

B-RFC-approved C-tracking-issue E-needs-mentor T-lang WG-compiler-front

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‹ค์Œ์€ ๊ฐ€์‹œ์„ฑ ์ˆ˜์ •์ž์™€ ๊ฒฝ๋กœ ๋ชจ๋‘์—์„œ 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);

์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์ƒˆ๋กœ์šด ๊ฒƒ์ด ํ˜„์žฌ ๋ฐฉ์‹๋ณด๋‹ค ๋” ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  120 ๋Œ“๊ธ€

๊ทธ 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 ํฌ์ธํŠธ๋ฅผ ๋ณ„๋„์˜ ์ถ”์  ๋ฌธ์ œ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฝ๋กœ ๋ฐ ๊ฐ€์‹œ์„ฑ ์ˆ˜์ •์ž ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ์‹ค์ œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์™ธ๋ถ€ ์ƒ์ž ์ด๋ฆ„ ๋ณ€๊ฒฝ์— ๊ด€ํ•ด์„œ ๋Š” ... ์ด๋ฏธ ๋ณ„๋„์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๊ทธ๊ฒƒ์˜ ๋ฒŒ๊ธˆ์ด ํ•˜๋‚˜์˜ ์ผ๋ถ€๊ฐ€๋˜๋Š”๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ƒ๊ฐ ์žˆ๋„๋ก ๊ฒฝ๋กœ ๋ณ€๊ฒฝ์„ ์œ„ํ•ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

๋ช‡ ์ฃผ ์ „์— ๊ฐ€์‹œ์„ฑ ์ˆ˜์ •์ž(๊ฒฝ๋กœ ์ ‘๋‘์–ด ์•„๋‹˜)๋กœ crate ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋งŽ์€ ํ† ๋ก ์ด ์žˆ์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ด ํ‚ค์›Œ๋“œ ์„ ํƒ์ด RFC, ์ด์ œ ๋ถ„๋ช…ํžˆ ์žŠํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ๋‚˜ ์ž์‹ ๊ณผ ๋‚ด๊ฐ€ ์–ธ๊ธ‰ํ•œ ๋ช‡๋ช‡ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ์ด ์„ ํƒ์ด ํ˜•์šฉ์‚ฌ/์ˆ˜์‹์–ด๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๋ชจํ˜ธํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์„ ํƒ์ด ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. crate ๋Š” ํฌ๋ ˆ์ดํŠธ์˜ ๊ณต๊ฐœ API์˜ ์ผ๋ถ€๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ? ์•„๋‹ˆ! ๊ทธ๊ฒƒ์€ ์ƒ์ž์— local ๋˜๋Š” internal ๋˜๋Š” pub ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ ๋‚ด๊ฐ€ ํ›„์ž์˜ ํ‚ค์›Œ๋“œ๋ฅผ ์„ ํ˜ธํ•˜๋Š” ์ด์œ ). ๋”ฐ๋ผ์„œ ์ฆ‰๊ฐ์ ์ธ ๋ณ€๊ฒฝ์„ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์•ˆ์ •ํ™” ์‹œ ์žŠํ˜€์ง€์ง€ ์•Š๋„๋ก ์ตœ์†Œํ•œ ์ด ์ถ”์  ๋ฌธ์ œ์—์„œ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์€ ๋ฌธ์ œ๋กœ ์ธ์ •ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ชจ๋“ˆ ์žฌ์„ค๊ณ„๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ์ง„ํ–‰๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์€ ํ›Œ๋ฅญํ•˜์ง€๋งŒ ๋™์‹œ์— 'impl period'๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐ ์‹ค์ˆ˜ํ•˜์ง€ ์•Š๊ณ  ๋Œ€๋‹ค์ˆ˜์˜ Rust ์‚ฌ์šฉ์ž์™€ ์ƒ์˜ํ•˜์ง€ ์•Š๊ณ  ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ถˆํ–‰ํžˆ๋„ Github RFC ํ† ๋ก ์— ์ฐธ์—ฌํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ „์ฒด ์‚ฌ์šฉ์ž ๊ธฐ๋ฐ˜์„ ๋Œ€ํ‘œํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ •๋ณด/์ฝ”๋ฉ˜ํŠธ/์˜๊ฒฌ์ด ๋„˜์ณ์„œ ๋‚™๋‹ดํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋–ป๊ฒŒ ๋“  ์ฒ˜๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ตฌํ˜„์ด ์–ด๋–ป๊ฒŒ ๋๋‚ฌ๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ...

@rpjohnst @retep998 ์ €๋Š” foo.rs + foo/ ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์ด RFC์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ฐœ์„  ์‚ฌํ•ญ์„ ์ œ์•ˆํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ RFC ๋ฅผ ์—ด์—ˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘: ๊ฐ€์‹œ์„ฑ ์ˆ˜์ •์ž๋กœ crate ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ RFC๋ฅผ ์—ฌ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜๋Š” ๋ฐ˜๋Œ€์˜ ๊ฒƒ์„ ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. pub(extern) ๊ฐ€ ์ถ”๊ฐ€๋˜๊ณ  ์™ธ๋ถ€์ ์œผ๋กœ ๊ฒŒ์‹œ๋œ ๋ชจ๋“  ๊ธฐํ˜ธ์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‹ค์Œ ์—ํฌํฌ์—์„œ pub ๊ฐ€ pub(crate) ์™€ ๋™์ผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

@rpjohnst

crate ::absolute::path์™€ crate::relative::path ์‚ฌ์ด์— ๋ชจํ˜ธํ•œ ๊ตฌ๋ฌธ ๋ถ„์„์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“  crate ::relative::path ์ž˜๋ชป๋œ ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ๊ฐ€์š”? ํŒŒ์‹ฑ โ€‹โ€‹์ค‘์— ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์—†๋‚˜์š”?

@est31 ์•„๋‹ˆ์š”, ๊ตฌ๋ฌธ ๋ถ„์„ ์ค‘์— ์ด๋ฆ„ ํ™•์ธ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ํ™•์‹คํžˆ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. a * b ๋Š” ๊ณฑ์…ˆ์ด๋‚˜ ์„ ์–ธ์ด๊ณ , a b(c, d); ๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ์ด๋‚˜ ํ•จ์ˆ˜ ํ”„๋กœํ† ํƒ€์ž…๊ณผ ๋น„์Šทํ•œ ๋ชจํ˜ธ์„ฑ์ด ์žˆ๋Š” C ๋ฐ C++ ๊ตฌ๋ฌธ ๋ถ„์„์˜ ๊ฐ€์žฅ ์„ฑ๊ฐ€์‹  ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์ด๋ฆ„์ด ๊ฐ™์€ ์ข…์†์„ฑ๊ณผ ์ตœ์ƒ์œ„ ๋ชจ๋“ˆ์„ ํ—ˆ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด ๊ตฌ๋ฌธ ๋ถ„์„๊ณผ ์ด๋ฆ„ ํ™•์ธ์„ ๋’ค์„ž์–ด๋„ ์ €์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. crate :: some :: item ๋Š” crate -visible item ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. some ๋˜๋Š” ์ „์šฉ item ์ตœ์ƒ์œ„ ๋ชจ๋“ˆ some .

๊ด€์ ์—์„œ ์ด๊ฒƒ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด, ์šฐ๋ฆฌ๋Š” ๋‹จ์ง€ ์ž„์˜๋กœ ๋ชจํ˜ธ์„ฑ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ• ๋˜๋Š” ๊ธฐํƒ€๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  (์•„๋งˆ๋„ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์“ฐ๊ธฐ ๊ด„ํ˜ธ๋ฅผ ์š”๊ตฌํ•  ์ˆ˜ crate ํฌ๊ท€ ํ•œ ๊ฒƒ ๊ฐ™๋‹ค -visibility ์ ˆ๋Œ€ ๊ฒฝ๋กœ ์ผ€์ด์Šค),ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ์ž…๋‹ˆ๋‹ค pub(crate) ๊ณ ์ˆ˜ํ•œ๋‹ค๋ฉด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฐœ์ด์€ ์ด๋ฏธ ๊ตฌ๋ฌธ์ƒ์˜ ๋ชจํ˜ธ์„ฑ์„ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

crate๋ฅผ ๊ฐ€์‹œ์„ฑ ์ˆ˜์ •์ž ๋ฐ ๊ฒฝ๋กœ ์ ‘๋‘์‚ฌ๋กœ ์‚ฌ์šฉํ•˜๋ฉด crate ::absolute::path ์™€ crate::relative::path ์‚ฌ์ด์— ๊ตฌ๋ฌธ ๋ถ„์„์ด ๋ชจํ˜ธํ•ด์ง‘๋‹ˆ๋‹ค.

ํŠœํ”Œ ๊ตฌ์กฐ์ฒด ํ•„๋“œ์™€ "์ธ๋ผ์ธ" ์ ˆ๋Œ€ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ๊ฐ€์‹œ์„ฑ์ด ๋ชจ๋‘ ๋“œ๋ฌผ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ์ด๊ฒƒ์€ ์ž‘์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
๊ฒฝ๋กœ๋Š” ํ˜„์žฌ ํ•ญ์ƒ ํƒ์š•์Šค๋Ÿฝ๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„๋˜๋ฏ€๋กœ crate :: x :: y ๊ฐ€ crate::x::y ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.
๋ฐ˜๋Œ€์˜ ์˜๋ฏธ๋ฅผ ์›ํ•  ๊ฒฝ์šฐ pub(crate) ::x::y ๋˜๋Š” crate (::x::y) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@rpjohnst @petrochenkov pub ::relative::path ๊ฐ€ ์œ ํšจํ•œ ์ฝ”๋“œ์ธ ์ฝ”๋“œ ์˜ˆ์ œ๋ฅผ ๊ณต์œ ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋‘ ๊ฐ€์ง€ ๊ฒฝ์šฐ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ๋ชจํ˜ธ์„ฑ์„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

ํŽธ์ง‘: ์ด๊ฒƒ์ด ๊ด€๋ จ ๋  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ์žฅ์†Œ๋Š” ๊ฐ€์‹œ์„ฑ ํ•œ์ •์ž + ๊ฒฝ๋กœ์— ๋Œ€ํ•ด ์ผ์น˜ํ•  ๋•Œ ๋งคํฌ๋กœ ๋‚ด๋ถ€์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ IMO๊ฐ€ ์ˆ˜์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งค์šฐ ์ž‘์€ ํŒŒ์†์ž…๋‹ˆ๋‹ค.

@est31 ์ž˜๋ชป๋œ ์ƒ๊ฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ƒ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์ด ๋ฌด์—‡์„ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ์•Œ๊ธฐ ์ „์— AST๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ „์ฒด ์ƒ˜ํ”Œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

struct S(crate :: x :: y);

์•„์ง ๊ทธ ์ด๋ฆ„์„ ์กฐํšŒํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ํ•ด๋‹น ๋ฌธ์ž์—ด์„ AST๋กœ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๊นŒ? ๋‘ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ๋Œ€๋‹ต์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ํ˜„์žฌ ํฌ๋ ˆ์ดํŠธ์˜ x ๋ชจ๋“ˆ์— ์ •์˜๋œ y ์œ ํ˜•์˜ ๊ฐœ์ธ ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•˜๋‚˜์—๋Š” x ์ข…์†์„ฑ์˜ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ์ •์˜๋œ y ๋‹ค๋ฅธ ์œ ํ˜•์˜ crate -visible ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งคํฌ๋กœ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@rpjohnst ๋ช…ํ™•ํžˆ ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ฐธ์œผ๋กœ ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค.

@rpjohnst

๊ฐ„๋‹จํ•œ ์†”๋ฃจ์…˜์€ ํฌ๋ ˆ์ดํŠธ ๊ฐ€์‹œ์„ฑ ์ˆ˜์ •์ž๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋„๋ก ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ์œ ํ˜•์˜ private ๋ฉค๋ฒ„๊ฐ€ ์žˆ๋Š” ํŠœํ”Œ ๊ตฌ์กฐ์ฒด๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜์‹ญ์‹œ์˜ค.

    struct S(:: crate :: x :: y);

(๋ฃจํŠธ '๋„ค์ž„์ŠคํŽ˜์ด์Šค'๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด :: ์ ‘๋‘์‚ฌ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค)

์ด๋Š” ํ•˜์œ„ ๋ชจ๋“ˆ์—์„œ ๋‹ค๋ฅธ ๋ฃจํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ์ฐธ์กฐํ•ด์•ผ ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ::std::x::y ).

crate -as-a-visibility๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์†Œ ๋†€๋ผ์šด ์ผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•ฝ๊ฐ„ "์ •๊ทœํ™”"ํ•˜๊ณ  crate:: ๊ฐ€ ํ•ญ์ƒ ์„ ํ–‰ :: ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋„๋ก ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค(๋ฌผ๋ก  use ์ œ์™ธ). ๋‹น์‹ ์ด ์ง€์ ํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ::std::x::y ์™€ ๊ฐ™์€ ๊ฒฝ๋กœ๋กœ ๋Œ€์นญ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  ์ง„์ •ํ•œ ์ƒ๋Œ€ ๊ฒฝ๋กœ( self:: / super:: / something_in_scope:: ๋Œ€ํ•ด ์ ‘๋‘์‚ฌ๊ฐ€ ์—†๋Š” ํ˜•ํƒœ๋ฅผ ๋‚จ๊น๋‹ˆ๋‹ค

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ํ—ˆ์šฉ crate::x::y ๋น„์—์„œ use ๊ฒฝ๋กœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค crate ์ข…๋ฅ˜์˜ ๋งˆ๋ฒ•์˜์€, ์‹œํ–‰ํ•˜๋ฉด์„œ ::crate::x::y ์šฐ๋ฆฌ '์˜์กด์„ฑ๊ณผ ๊ฐ™์€ ์ˆ˜์ค€์— ์Šค์ฝ”ํ”„์ด๋‹ค ์–ด์จŒ๋“  ์•”์‹œํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

@rpjohnst

crate:: ๊ฐ€ ํ•ญ์ƒ ์„ ํ–‰ :: ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋„๋ก ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค(๋ฌผ๋ก  ์‚ฌ์šฉ ์ œ์™ธ).

์ด๊ฒƒ์€ ์ ์–ด๋„ ์ฒ˜์Œ์—๋Š” ํ•ฉ๋ฆฌ์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(๋‚˜์ค‘์— ์ด๊ฒƒ์„ ์™„ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•˜๋Š” ๊ฒƒ์€ ์—†์Šต๋‹ˆ๋‹ค).

์ €๋Š” use extern::bar::foo ๋˜๋Š” use crate::bar::foo ๊ตฌ๋ฌธ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ์‹œ๋„๋Ÿฌ์šด ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•ด ์•ฝ๊ฐ„์˜ ์„คํƒ•์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•ด extern bar::foo ๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

๋ฌต์‹œ์  ๊ทœ์น™์„ ํ•˜๋‚˜ ๋” ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ? extern crate๋ฅผ ๋ฃจํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋กœ ์ž๋™์œผ๋กœ ๊ฐ€์ ธ์˜ค๊ณ  ๋” ์ผ์น˜ํ•˜๋Š” ๊ฒฝ๋กœ ํ‘œํ˜„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์˜ˆ

  1. ์šฐ๋ฆฌ์˜ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

src
|--lib.rs
|--foo.rs
|--ํ‘ธ
|----|--bar.rs

  1. ๋‹ค์Œ๊ณผ ๊ฐ™์ด Cargo.toml์—์„œ ์ข…์†์„ฑ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    [dependencies] serde = "3.0.0"

  2. mod bar ๋ฅผ mod foo ์— ์ถ”๊ฐ€ํ•˜๊ณ  mod foo ๋ฅผ lib.rs์— ์ถ”๊ฐ€ํ•˜๊ณ ,

  3. lib.rs์—์„œ finlib ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  foo.rs์—์„œ finfoo ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  bar.rs์—์„œ finbar ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

extern ํฌ๋ ˆ์ดํŠธ์˜ ์Šค์ฝ”ํ”„๋ฅผ ํฌ๋ ˆ์ดํŠธ์˜ ์ตœ์ƒ์œ„ ๋ชจ๋“ˆ๋กœ ๋งŒ๋“ค๋ฉด ์–ด๋””์—์„œ๋‚˜ ์ด์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™„์ „ํ•œ/์ ๊ฒฉ ๊ฒฝ๋กœ

::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       

์šฐ๋ฆฌ๋Š” ๋จผ์ € ํ˜„์žฌ ๋ชจ๋“œ ๋ฒ”์œ„์—์„œ serdefinlibfoo๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ €๋… ๋ชจ๋“œ์—์„œ ์กฐํšŒ๋ฅผ ์ฐพ์ง€ ๋ชปํ•˜๋ฉด ๋ฃจํŠธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊นŒ์ง€ ์ฐพ์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„ ์ถฉ๋Œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋Œ€์‹  ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ์”๋‹ˆ๋‹ค.

๋˜ํ•œ foo.rs์—์„œ self::bar::finbar ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฆ„ ์กฐํšŒ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•ด ๋…ผ์˜ํ•œ ์ด์ „ ์Šค๋ ˆ๋“œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์ง€๋งŒ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ž‘๋™ํ–ˆ๊ณ  ์ด๋ฆ„ ํ™•์ธ์— ํฐ ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผฐ์Šต๋‹ˆ๋‹ค. IIRC @pcwalton ๋˜๋Š” @arielb1 ์ด ๋” ๋งŽ์ด ์•Œ๊ณ  ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ชจํ˜ธ์„ฑ์— ๋Œ€ํ•œ ๊ฐ€์žฅ ์‰ฌ์šด ํ•ด๊ฒฐ์ฑ…์€ crate-local ๊ฐ€์‹œ์„ฑ ์ˆ˜์ •์ž์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์˜ˆ: 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:: ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ƒˆ ์ฝ”๋“œ๋งŒ ์˜ํ–ฅ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ํ•ด์ƒ๋„๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ณ ์ˆ˜ํ•˜๋Š” ํ•œ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ์ผ์–ด๋‚œ ํ•œ ๊ฐ€์ง€, ์‚ฌ๊ณผ์™€ ํ•จ๊ป˜ ํ† ๋ก  ์ค‘ ํ•˜๋‚˜์—์„œ ์ด์ „์— ์ œ๊ธฐ๋œ ์ ์ด ์žˆ๋‹ค๋ฉด(์ง€๋‚œ ๋ช‡ ๋ฒˆ์—์„œ ๋ณธ ๊ธฐ์–ต์ด ์—†์Šต๋‹ˆ๋‹ค):

์ตœ์‹  ์ œ์•ˆ์—์„œ crate:: ๋Š” "in this crate"๋ฅผ ์ฐธ์กฐํ•˜๊ณ  self:: ๋Š” "in this module"์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ˆ˜๋ณด๋‹ค ์•ฝ๊ฐ„ ์ผ๊ด€์„ฑ์ด ์ž ์žฌ์ ์œผ๋กœ ๋œ ๋ช…ํ™•ํ•˜๋‹ค : ํ•œ ๊ฐ€์ง€์— ๋Œ€ํ•ด 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) ๋˜๋Š” ๋ฌด์—‡์ด๋“  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

(์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ๋™์ผํ•œ :: ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๊ณ ํ†ต์˜ ์›์ธ์ด ๋œ ๊ฒƒ์ด ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค.)

๋‚ด๊ฐ€ ๋ชจ๋ฅด๋Š” ํ•œ ๊ฐ€์ง€๋Š” @foo ๊ฐ€ ์ตœ๊ณ ์ธ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ƒ๊ฐ ํ•˜๊ณ  [] .

  • [std]::collections ๋ฐ [crate]::collections // []::collections ๋„ˆ๋ฌด ์ด์ƒํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ •๋ง๋กœ ์šฐ๋ฆฌ๊ฐ€ ๋‹จ์ง€ ๊ธธ์„ ์œ„ํ•ด ์–ด๋–ค ์ƒˆ๋กœ์šด ์ธ์žฅ์„ ๋„์ž…ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฐ•์ œ ์„ ๋„์  ์ธ :: ์—์„œ ::crate::foo ์ฃผ์†Œ @glaebhoerl์— ์ถฉ๋ถ„ํ•˜๋‹ค์˜ ์˜๊ฒฌ๊ณผ ํ•ด์„์˜ ๋ชจํ˜ธ์„ฑ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ crate:: ์— ๋Œ€ํ•œ ์˜๋„๋œ ๋ฉ˜ํƒˆ ๋ชจ๋ธ์— ๋” ๋ฐ€์ ‘ํ•˜๊ฒŒ ๋งž์Šต๋‹ˆ๋‹ค. ์ด๋Š” self:: ์™€ ๊ฐ™์€ ๊ฒฝ๋กœ ์ ‘๋‘์–ด๊ฐ€ ์•„๋‹ˆ๋ผ ํ˜„์žฌ ์ƒ์ž์˜ ์ด๋ฆ„์„ ๋Œ€์‹ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๋Œ€ ๊ฒฝ๋กœ์™€ ์ ˆ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ๋™์ผํ•œ :: ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์—ฌ๋Ÿฌ ๋ฒˆ ๊ณ ํ†ต์˜ ์›์ธ์ด ๋œ ๊ฒƒ์ด ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค.)

์ด๊ฒŒ ๋ฌด์Šจ ๋ง์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. :: ์‹œ์ž‘ํ•˜๋Š” ์ƒ๋Œ€ ๊ฒฝ๋กœ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

@nikomatsakis @glaebhoerl ๊ท€ํ•˜์˜ ์ œ์•ˆ์ด ๋งˆ์Œ์— ๋“œ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด (์‹ค์ œ๋กœ ๋‘˜ ๋‹ค ํ•จ๊ป˜ ์‚ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค), RFC๋ฅผ ๊ณ ์ˆ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ๋งŽ์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์•ž๋’ค๋กœ ๋…ผ์˜๋˜์—ˆ์œผ๋ฉฐ ๋‹ค์‹œ ํ† ๋ก ์„ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด 82๋ช…์˜ ์‚ฌ๋žŒ๋“ค์ด ์ตœ์‹  RFC์˜ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•ด ๋…ผํ‰ํ–ˆ์œผ๋ฉฐ(์ด์ „์—๋„ ๊ฝค ๋งŽ์€ ๋…ผ์˜๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค) ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด์— ๋Œ€ํ•ด ๋งค์šฐ ๊ฐ•ํ•˜๊ฒŒ ๋Š๋ผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ์ ์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•  ๊ธฐํšŒ๋ฅผ ์ฃผ์ง€ ์•Š๊ณ  ์ œ์•ˆ์„œ์˜ ๋งˆ์ง€๋ง‰ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชฐ๋ž˜ ๋„ฃ๋Š” ๊ฒƒ์€ ๋ถ€๋‹นํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
ํŠนํžˆ #44721 @nikomatsakis๊ฐ€ "๊ตฌํ˜„์— ๋Œ€ํ•ด์„œ๋งŒ ์ด์•ผ๊ธฐํ•ฉ์‹œ๋‹ค"๋ผ๋Š” ์ธ์ˆ˜๋กœ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ํ† ๋ก ์„ ์ข…๋ฃŒ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

@ ํ‘œ๊ธฐ๋ฒ•๊ณผ [] ํ‘œ๊ธฐ๋ฒ•์ด ๋‘˜ ๋‹ค ์ œ์•ˆ๋˜์—ˆ์ง€๋งŒ(์ €๋Š” ๋‘˜ ๋‹ค์˜ ์ง€์ง€์ž์ž…๋‹ˆ๋‹ค) ๊ฒฐ๊ตญ ์‚ฌ์šฉ์ž์˜ ๋ถ€์ •์ ์ธ ๋ฐ˜์‘์œผ๋กœ ์ธํ•ด ์ ์–ด๋„ ๊ทธ๊ฒƒ์ด ์ œ ๋Š๋‚Œ์ด์—ˆ์Šต๋‹ˆ๋‹ค. .

์„ ํ–‰ :: ๊ฐ€ ์„ ํ–‰ ์‹๋ณ„์ž์—์„œ ์‹œ์ž‘ํ•˜๊ณ  ๋‚ด๋ถ€ :: ๊ฐ€ ์žˆ๋Š” ๊ฒฝ๋กœ์™€ ํ˜ผ๋™๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ „ํ˜€ ์—†๋”๋ผ๋„ ์‹œ๊ฐ์ ์œผ๋กœ ๋งค์šฐ ๋šœ๋ ทํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋œ ์•”์‹œ์ ์ž…๋‹ˆ๋‹ค. @ ๊ฐ€ ๋” ๋‚˜์€ ๋‹ˆ๋ชจ๋‹‰์ž…๋‹ˆ๋‹ค. ์„ ํ–‰ :: ํ•˜๋ฉด ์„ ํ–‰ / ๋ฃจํŠธ๋ฅผ ์˜๋ฏธํ•˜๋Š” ํŒŒ์ผ ์ด๋ฆ„ ๊ฒฝ๋กœ์™€ ๊ฐ™์€์ง€(Unix ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ) ํ‘œ์ค€ ์•ฝ์–ด์ธ์ง€, ์„ ํ–‰ ํ‘œ์‹œ๊ฐ€ ์—†๋Š”์ง€ ๊ถ๊ธˆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ "์ƒ๋Œ€์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„์„ ์ƒ๋žตํ–ˆ์Šต๋‹ˆ๋‹ค"๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ž ์‹œ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์ „์ž๊ฐ€ ๋” ํƒ€๋‹นํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ ์š”์ ์€ ์ž ์‹œ ์ƒ๊ฐ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. @ (๋˜๋Š” ์ผ๋ถ€)๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์™€ ์ฝ”๋” ๋ชจ๋‘์—์„œ ์ฆ‰์‹œ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ˜„์žฌ ์ง„ํ–‰ ์ค‘์ธ ์ƒํ™ฉ์„ ๋” ์‰ฝ๊ฒŒ ์ฆ‰์‹œ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ ํ–‰ @ ๊ฐ€ ์„ ํ–‰ :: ๋ณด๋‹ค ๊ตฌ๋ณ„ ํ•˜๊ธฐ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? :: ๋Š” ์ด๋ฏธ Rust์™€ C++ ๋ชจ๋‘์—์„œ ํ™•๋ฆฝ๋œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค!

@rpjohnst - ๋‚˜๋Š” ๋‹น์‹ ์ด ๋Œ€๋‹ตํ•˜๋Š” ๋ฐ”๋กœ ๊ทธ ๋ฌธ์žฅ์—์„œ ์–ด๋–ป๊ฒŒ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค! @ ๋Š” ์‹œ๊ฐ์ ์œผ๋กœ ๊ตฌ๋ณ„๋ฉ๋‹ˆ๋‹ค. ํ™•์žฅํ•˜๋ ค๋ฉด: ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ํŠ€์–ด๋‚˜์˜ต๋‹ˆ๋‹ค. ํ† ํฐ ์ŠคํŠธ๋ฆผ์˜ ๋ฉ˜ํƒˆ ๋ชจ๋ธ์—์„œ ๋ฆฌ๋”์™€ ๋‚ด๋ถ€ ์œ„์น˜๊ฐ€ ํ˜ผ๋™๋  ์œ„ํ—˜์ด ์—†์Šต๋‹ˆ๋‹ค.

@ ๋Š” ์˜๋ฏธ๊ฐ€ ์ „ํ˜€ ์—†๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ํ† ํฐ์ด๋ฉฐ ํŒŒ์•…ํ•˜๋Š” ๋ฐ "์ž ์‹œ ์ƒ๊ฐ"๋ณด๋‹ค ํ›จ์”ฌ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ :: ๋Œ€ํ•ด ์„ ํ–‰ :: ๋ฅผ ํ˜ผ๋™ํ•˜๋Š” ๊ฒƒ์€ ์ฒ˜์Œ์—๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์„ ํ–‰ :: ์ด๋ผ๋Š” ์•„์ด๋””์–ด๋ฅผ ๊ธฐ๊ฐํ•˜๊ธฐ ์œ„ํ•ด "์ž ์‹œ ์ƒ๊ฐ"์„ ํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค

@rpjohnst - :: ์˜๋ฏธํ•˜๋Š” ๋ฐ”์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ๊ต์œก์„ ๋ฐ›์€ ๊ฒฝ์šฐ ๊ท€ํ•˜์˜ ์ง„์ˆ ์€ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค(C++ ๋˜๋Š” Rust ๊ฒฝํ—˜์— ์˜ํ•ด ์ œ๊ณต๋จ). ๋‚˜๋Š” ํ•™์Šต ๊ฐ€๋Šฅ์„ฑ๊ณผ ๋ณธ์งˆ์ ์ธ ์ฐจ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. "๋‹ค๋ฅธ ๋งฅ๋ฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋™์ผํ•œ ๊ธฐํ˜ธ"๋Š” "๊ณ ์œ ํ•œ ๊ธฐํ˜ธ"๋งŒํผ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ๋Œ€์•ˆ์ด ์žˆ๋Š” ์ด์™€ ๊ฐ™์€ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ @ ๋ฅผ ๊ณ ์œ ํ•œ ๊ธฐํ˜ธ๋กœ ํƒœ์šธ ๊ฐ€์น˜๊ฐ€ ์—†๋‹ค๋Š” ์ฃผ์žฅ์„ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Ichoran : Rust ๋ฌธ๋ฒ•์— ํŠน์ • ์˜๋ฏธ( @ )์— ๋Œ€ํ•œ ์ƒˆ ํ† ํฐ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋ณ๊ฒŒ ๋ฐ›์•„๋“ค์ผ ๋‹จ๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  @nikomatsakis ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ฐ ๋„ˆ๋ฌด ๊ฐ€๊น๋‹ค๋Š” ์•ฝ๊ฐ„์˜ ์˜์‹ฌ์ด @ ํ† ํฐ์ด ๋งŽ์€ ์žฅ์†Œ์— ๊ฒŒ์žฌ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ๋˜ํ•œ Rust ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ์— ๋Œ€ํ•œ ์ธ์‹์— ์–ด๋–ค ์˜ํ–ฅ์ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด C++์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์ดˆ๋ณด์ž์—๊ฒŒ๋Š” Rust๊ฐ€ ๋งค์šฐ ๋ฐ”๋กœํฌ์ ์ด๊ณ  ์œ„ํ˜‘์ ์ธ ํ‘œ๊ธฐ๋ฒ•์„ ๊ฐ€์ง„ ์–ธ์–ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค(๊ทธ๋Ÿฌ๋‚˜ ์ด์— ๋Œ€ํ•œ ์—ฐ๊ตฌ๋Š” ์—†์Šต๋‹ˆ๋‹ค). ์˜ฌํ•ด์˜ ์ „๋žต์  ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜๋Š” ํ•™์Šต ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ์ ํ™”ํ•˜๊ณ  Rust์˜ ์ ‘๊ทผ ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” @ ์ข‹์•„ํ•  ๋•Œ ์ด๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ง๊ด€์€ ๊ทธ๊ฒƒ์ด ์ฝ”๋“œ์—์„œ ๋ˆˆ์— ๋„๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค( @rpjohnst๋Š” ์ด๊ฒƒ์ด ์ •๋‹นํ•œ ์งˆ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค). ์ด ๋ง์˜ ์˜๋ฏธ๊ฐ€ ์ถฉ๋ถ„ํžˆ ๋ช…ํ™•ํ•ฉ๋‹ˆ๊นŒ?

(๋‚˜๋Š” Rust ๋ฌธ๋ฒ•์— ๋Œ€ํ•œ ๋…ผ์˜๋ฅผ ์ž์„ธํžˆ ๋”ฐ๋ฅผ ์‹œ๊ฐ„์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์ฃผ์žฅํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋ช…ํ™•ํžˆ ํ•˜์‹ญ์‹œ์˜ค.)

@est31

๊ท€ํ•˜์˜ ์ œ์•ˆ์ด ๋งˆ์Œ์— ๋“œ๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด(์‹ค์ œ๋กœ ๋‘˜ ๋‹ค ์‚ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค), RFC๋ฅผ ๊ณ ์ˆ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ์€ ํฐ ํ† ๋ก ์— ์ฐธ์—ฌํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ์ž„ํ”„ ๊ธฐ๊ฐ„์ž…๋‹ˆ๋‹ค! -- ํ•˜์ง€๋งŒ ์ €๋Š” @ ์•„์ด๋””์–ด๋ฅผ ๋ฐฐ๊ฒฝ์—์„œ ๋“์–ด์˜ค๋ฅด๊ฒŒ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ์ œ๊ฐ€ ๊ฑด๋ง์ฆ์ด ์žˆ๋Š” ๊ฒฝํ–ฅ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ์ด ๋‚˜์ค‘์— ๊ธฐ์–ตํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

์ œ ๋Š๋‚Œ์€ ์ด ์‹œ์ ์—์„œ ํ•ด์•ผ ํ•  ์˜ณ์€ ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ž‘์„ฑ๋œ ๋Œ€๋กœ ๋Œ€๋žต์ ์œผ๋กœ RFC๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

    • ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ตฌ๋ฌธ ๋ถ„์„์˜ ๋ชจํ˜ธ์„ฑ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ ˆ๋Œ€ ๊ฒฝ๋กœ์— ๋Œ€ํ•ด @rpjohnst ์˜ ์ œ์•ˆ ::crate ์„ ์ฑ„ํƒํ•˜๊ณ  ์‹ถ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋งค์šฐ ์ž‘์€ ๋ธํƒ€์ฒ˜๋Ÿผ ๋ณด์ด๊ณ  ์‹ค์ œ๋กœ๋Š” ์ „๋ฐ˜์ ์œผ๋กœ ์ผ๊ด€์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚ค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ ๊ฒฝํ—˜์„ ์–ป์œผ์‹ญ์‹œ์˜ค.
  • ๊ทธ ๋™์•ˆ ๋– ์˜ค๋ฅธ ๋Œ€์•ˆ์„ ์—ผ๋‘์— ๋‘๊ณ  ์„ค๊ณ„๋ฅผ ์žฌ๊ฒ€ํ† ํ•˜๊ณ  ์ตœ์ข… ์•ˆ์ •ํ™” ๊ฒฐ์ •์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฐํžˆ์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋‚ด ์˜๊ฒฌ์„ ์“ฐ๋ ค๋Š” ์˜๋„์˜€์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ฐœ์ธ ํŒŒ์ผ์— ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์•˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. :์—ฌ์ž_์–ด๊นจ๋ฅผ ์œผ์“ฑ:

ํŽธ์ง‘: ๋˜ํ•œ @ ๋ฐ [] ๊ฐ€ ๋” ์ผ์ฐ ์ œ๊ธฐ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ @::foo ํ‘œ๊ธฐ๋ฒ•์ด ํ˜„์žฌ์™€ ๊ด€๋ จํ•˜์—ฌ ์ด์ „์— ์–ธ๊ธ‰๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ๊ธฐ์–ต๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋ฌด ์ƒ์ž. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๊ทธ ์•„์ด๋””์–ด์˜ ์ €์ž๋ฅผ ์ฃผ์žฅํ•˜๋ ค๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

OTOH, ๋‚ด๊ฐ€ ์–ธ๊ธ‰ํ•œ ์•„์ด๋””์–ด๋Š” ์ด์ „์— ์ œ๊ธฐ๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ RFC์˜ ํ™•์žฅ์ด๋ผ๊ธฐ ๋ณด๋‹ค๋Š” RFC๋ฅผ ์ˆ˜์ •ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋˜ํ•œ "์ ˆ๋Œ€ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์ตœ์ข… ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์˜ต์…˜์„ ์‹ค์ œ๋กœ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ๋Š” ์ปจํ…์ŠคํŠธ์—์„œ ๋” ๋งŽ์€ ์ž์ „๊ฑฐ ์ด๋™์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." ๋ฌธ์ œ ๋ณธ๋ฌธ์— ๋ฏธํ•ด๊ฒฐ ์งˆ๋ฌธ ์œผ๋กœ ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค . ์ผ๋ฐ˜์ ์œผ๋กœ ์Šน์ธ๋œ RFC์— ๋Œ€ํ•ด ๋‹ค์‹œ ์†Œ์†ก์„ ์ œ๊ธฐํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ, ์ด ์ƒํ™ฉ์ด ์˜ˆ๋ฅผ ๋“ค์–ด ํฌ๊ด„์  ๋ฒ”์œ„์—์„œ ์žˆ์—ˆ๋˜ ์ƒํ™ฉ๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ํ† ๋ก  ์Šค๋ ˆ๋“œ๋„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

https://internals.rust-lang.org/t/the-great-module-adventure-continues/6678

Great Modules Adventure์˜ ๋‹ค๋ฅธ ์—ํ”ผ์†Œ๋“œ์— ์˜ค์‹  ๊ฒƒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ์šฐ๋ฆฌ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋งŒ๋‚ฌ์„ ๋•Œ ์šฐ๋ฆฌ์˜ ์šฉ๊ฐํ•œ ๋ชจํ—˜๊ฐ€๋“ค์€ ๋งˆ์นจ๋‚ด RFC #2126์„ ์ˆ˜๋ฝํ•˜๊ณ  ์ „์„ค์˜ ๋•…์— ์™”์Šต๋‹ˆ๋‹ค. ๊ทธ๊ณณ์—์„œ ๊ทธ๋“ค์€ ์ž ์‹œ ํœด์‹์„ ์ทจํ•˜๊ณ  ์ž„ํ”„ ๊ธฐ๊ฐ„์„ ์‹œ์ž‘ํ•  ์ค€๋น„๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ธฐ๊ฐ„ ๋™์•ˆ ๋งŽ์€ ์ž‘์—…์ด ์ด๋ฃจ์–ด์กŒ๊ณ  ์‹ค์ œ๋กœ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์˜ ๊ฐœ์š”๊ฐ€ ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ์‚ฌ์†Œํ•œ ์งˆ๋ฌธ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๋ฅผ ์ด ํ† ๋ก  ์Šค๋ ˆ๋“œ๋กœ ์ธ๋„ํ•ฉ๋‹ˆ๋‹ค.

๋œ ํ™”๋ คํ•œ ์–ธ์–ด๋กœ: impl ๊ธฐ๊ฐ„ ๋™์•ˆ "๊ฒฝ๋กœ ๋ฐ ๊ฐ€์‹œ์„ฑ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ณ  ๊ฐ„์†Œํ™”" RFC(๋งŽ์€ ๊ด€๋ จ RFC์™€ ํ•จ๊ป˜)๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ๋งŽ์€ ์ง„์ „์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ์šฐ๋ฆฌ๋Š” ๊ฑฐ์˜ ๋„ˆ๋ฌด ๋งŽ์€ ์ง„์ „์„ ์ด๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ณ€ํ˜•์„ ๊ตฌํ˜„ํ–ˆ์œผ๋ฉฐ ์šฐ๋ฆฌ๊ฐ€ ์ง„์ •์œผ๋กœ ์›ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋…ผ์˜๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด ํ›Œ๋ฅญํ•œ ์ž‘์—…์„ ์–ธ์  ๊ฐ€ ์•ˆ์ •ํ™”ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค =) ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๋ณ€์ข… ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค...๊ทธ๋Ÿฌ๋ฏ€๋กœ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ์ €๋Š” @nikomatsakis๊ฐ€ ์–ธ๊ธ‰ํ•œ @ ๊ตฌ๋ฌธ์˜ ํŒฌ์ž…๋‹ˆ๋‹ค. ๊ฐ„๊ฒฐํ•˜๊ณ  ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ž๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๋ž˜์„œ ๋”, ์—ฌ๊ธฐ์— ์ƒˆ๋กœ์šด ๊ตฌ๋ฌธ์˜ ๋„์ž… ์ผ์ข…์˜ ๊ฐ€์ง€๊ณ  ๊ฐ™์€ ์˜ˆ์•ฝ ๋œ ์ด๋ฆ„์ด ์•„๋‹Œ ํŠน์ˆ˜ ๋ฌธ์ž๊ฑฐ์•ผ crate (์šฐ)๋ฅผ.

ํŠนํžˆ https://github.com/rust-lang/cargo/issues/1311 ์ด ์ด์ œ ํ•ด๊ฒฐ๋œ ๊ฒฝ์šฐ ๋‘ ๋ฒˆ์งธ ์™ธ๋ถ€ ํฌ์ธํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์— ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค(์‚ฌ์‹ค ์ด๋ฏธ ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•จ). ์•ฝ๊ฐ„์˜ ๋ฉ˜ํ† ๋ง๊ณผ @ ๋Œ€ crate ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ๊ฒฐ์ •์œผ๋กœ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ๊ฐ?

๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋‘ ๊ฐœ์˜ ๋ฆฐํŠธ์— ๋Œ€ํ•œ ์ถ”์  ๋ฌธ์ œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์•ฝ๊ฐ„์˜ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. extern crate ๊ฐ€ ์•”์‹œ์ ์ด๋ฉด ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. extern crate ๋Š” ํฌ๋ ˆ์ดํŠธ๋ฅผ ๊ฐ•์ œ๋กœ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. Cargo.toml์— ์ถ”๊ฐ€ ํฌ๋ ˆ์ดํŠธ๋ฅผ ์ง€์ •ํ•˜์ง€๋งŒ ๊น”๋”ํ•˜๊ฒŒ ํ•จ๊ป˜ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š” lib.rs๋Š” ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ:panic=unwind ํฌ๋ ˆ์ดํŠธ์™€ ํŒจ๋‹‰=abort ๋˜๋Š” ๋™์ผํ•œ ๊ธฐํ˜ธ๋ฅผ ๋‚ด๋ณด๋‚ด๋Š” ํฌ๋ ˆ์ดํŠธ). ์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ํŒŒ์†์œผ๋กœ ๊ฒฐ์ •๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ์—๊ฒŒ ์ž‘์€ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ญ๋‹ˆ๋‹ค. extern crate๋ฅผ ์•”์‹œ์ ์œผ๋กœ ๋งŒ๋“ค๋ ค๋ฉด ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ๋œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. extern crate๋Š” ํฌ๋ ˆ์ดํŠธ๋ฅผ ์—ฐ๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Cargo.toml์— ์ถ”๊ฐ€ ํฌ๋ ˆ์ดํŠธ๋ฅผ ์ง€์ •ํ•˜์ง€๋งŒ ๊น”๋”ํ•˜๊ฒŒ ํ•จ๊ป˜ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š” lib.rs๋Š” ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ:panic=unwind ํฌ๋ ˆ์ดํŠธ์™€ ํŒจ๋‹‰=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 ๊ธฐ๋Šฅ์€ ์ƒ์ž์˜ ํ•ญ๋ชฉ์ด ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ

๋‚˜๋Š” ๋‹จ์ง€ ๊ทธ ๋ชฉ์ ์„ ์œ„ํ•ด ์ฝ”๋“œ์— use cratename; ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ๊ฒƒ์ด lints์™€ (๊ฐ€์žฅ ์ค‘์š”ํ•œ) ์ฝ”๋“œ ๋ฆฌ๋”/๋ผ์ดํ„ฐ๋ฅผ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ํ•  ๊ฒƒ์ด๊ณ  ๋”ฐ๋ผ์„œ ํ•ฉ๋ฒ•์ ์ธ ์ „์šฉ ๊ธฐ๋Šฅ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (๊ทธ๋Ÿฌ๋‚˜ ๋“œ๋ฌผ๊ฒŒ) ์‚ฌ์šฉ ์‚ฌ๋ก€.

@est31 link_crates ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ Bikeshedding์„ ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  extern crate foo; ์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ?

@retep998
์ข‹์€ ์ƒ๊ฐ! :์›ƒ๋‹ค:
https://github.com/rust-lang/rfcs/pull/2166 ์€ ์—ฐ๊ฒฐ ์ „์šฉ ํฌ๋ ˆ์ดํŠธ์˜ ๋ฒ”์œ„/๋ชจ๋“ˆ์— ํฌ๋ ˆ์ดํŠธ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด extern crate foo as _; ๋„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

@est31 link_crates ๊ตฌ๋ฌธ์— ๋Œ€ํ•ด Bikeshedding์„ ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  extern crate foo;์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์š”์ ์€ ์žฅ๊ธฐ์ ์œผ๋กœ extern crate ๊ตฌ๋ฌธ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@alexreg ์š”์ ์€ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์— ํ•„์š”ํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ์™„์ „ํžˆ ๊ทผ์ ˆ๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์•„๋งˆ๋„ Rust ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐํ•ด์•ผ ํ•˜๋Š” ์ƒ์ž์˜ ๊ฒฝ์šฐ์—๋Š” ์—ฌ์ „ํžˆ ์ข‹์€ ์†”๋ฃจ์…˜์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์–ด์จŒ๋“  ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ด์ „ ์‹œ๋Œ€๋ฅผ ์ง€์›ํ•˜๋Š” ํ•œ ๊ณ„์† ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.)

@SimonSapin ๊ทธ๋Ÿฌ๋‚˜ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋ฉด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋  ๊ฒƒ์ด๋ฏ€๋กœ ์•„๋งˆ๋„ ํŠน๋ณ„ํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฉฐ ์†์„ฑ(์œ„์—์„œ ์ œ์•ˆํ•œ ๋Œ€๋กœ)์ด ๋” ์˜๋ฏธ๊ฐ€ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ use foo ๋˜๋Š” use foo as _ ๋กœ ์ถฉ๋ถ„ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@Manishearth์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

extern crate; ์— ๋Œ€ํ•œ ๋‚ด ๊ฒฌํ•ด ์š”์•ฝ:

์žฅ์ :

  • extern crate ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ๋‹จ์—์„œ ์‚ฌ์šฉ๋œ ์ƒ์ž์˜ ํฌ๊ด„์ ์ธ ๋ชฉ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด Cargo.toml์ด์ง€๋งŒ,์ด ์˜ˆ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋‹น์‹ ์—๊ฒŒ ์ˆ˜์ž…์— ์ƒ์ž์˜ ๋ชฉ๋ก์„ ์ œ๊ณต์œผ๋กœ ์ด๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์€ ์ •์ƒ ์ƒ์ž์™€ ํ•จ๊ป˜์ด๋Š” ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ๊ฐ€ ๊ฐœ๋ฐœ ์ข…์†์„ฑ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๊ฐ€์ ธ์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์ด๊ฒƒ์€ ์ƒˆ๋กœ์šด ํฌ๋ ˆ์ดํŠธ์˜ API๋ฅผ ์•Œ์•„๋‚ด๋ ค๊ณ  ํ•  ๋•Œ ๋†’์€ ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ช… ํ•™์Šต์„ฑ ์ด์ ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์— extern crate ๋Š” ํฌ๋ ˆ์ดํŠธ์˜ ์•„๋ฌด ๊ณณ์—๋‚˜ ๋‚˜ํƒ€๋‚  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ชฉ๋ก์ด ์™„์ „ํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ ์˜ˆ๋ฅผ ๋“ค์–ด ์ด๊ฒƒ์€ ๋œ ๊ด€๋ จ์„ฑ์ด ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์›ํ•  ๊ฒฝ์šฐ ํ•ญ์ƒ ํฌ๋ ˆ์ดํŠธ ๋ฃจํŠธ์—์„œ๋งŒ ์ž‘๋™ํ•˜๋„๋ก extern ํฌ๋ ˆ์ดํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ์ :

  • extern crate ๋Š” ํฌ๋ ˆ์ดํŠธ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ์ž…๋ ฅํ•ด์•ผ ํ•  ํ•ญ๋ชฉ์ด ๋” ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„์˜ ์„ฑ๊ฐ€์‹ฌ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด extern crate ์— ๋ฐ˜๋Œ€ํ•˜๋Š” ์ด์œ ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์ €์—๊ฒŒ๋Š” ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์ด์œ ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
  • extern crate ๋ฅผ ๊ฑฐ๋ž˜์˜ ์ผ๋ถ€๋กœ ๋ด…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” extern crate ํฌ๊ธฐํ•˜์ง€๋งŒ ์ž์ฒด ์ƒ์ž์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ์™€ ์™ธ๋ถ€ ์ƒ์ž์—์„œ ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ›จ์”ฌ ๋” ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด๋ฉฐ ์ฝ”๋“œ ์˜ˆ์ œ/ํ…Œ์ŠคํŠธ์—์„œ IMO์˜ ํ•™์Šต ๊ฐ€๋Šฅ์„ฑ ๋‹จ์ ์„ ๋Šฅ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ extern crate ์ œ๊ฑฐ์— ๋™์˜ํ•˜๋Š” ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

extern crate๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ƒ๋‹จ์—์„œ ์‚ฌ์šฉ๋œ ์ƒ์ž์˜ ํฌ๊ด„์ ์ธ ๋ชฉ๋ก์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ผ๋ฐ˜ ์ƒ์ž์—์„œ๋Š” Cargo.toml๋งŒํผ ๊ด€๋ จ์„ฑ์ด ์—†์ง€๋งŒ ์˜ˆ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๊ฐ€์ ธ์˜ฌ ์ƒ์ž ๋ชฉ๋ก์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์—ฌ๊ธฐ์„œ ๋…ผ์˜์™€ ์–ด๋–ป๊ฒŒ ๊ด€๋ จ์ด ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๋ฏธ ๋ณ‘ํ•ฉ๋œ RFC์— ๋Œ€ํ•œ ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค.

@Manishearth ์—ฌ๊ธฐ์—์„œ @retep998 ์—๊ฒŒ extern crate๋ฅผ ๋ณด๊ด€ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•œ ์‚ฌ๋žŒ์—๊ฒŒ ๋” ๋งŽ์ด ํšŒ์‹ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋‹ˆ์š”. ์ด๋ฏธ ๋ณ‘ํ•ฉ๋œ RFC์— ๋ฐ˜๋Œ€ํ•œ๋‹ค๊ณ  ํ•ด์„œ ํ•ด๋‹น ํฌ์ธํŠธ๊ฐ€ ๋ถˆ๋ฒ•์ ์ด๊ฑฐ๋‚˜ ๊ด€๋ จ์ด ์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ฒฐ์ •์˜ ์žฅ์ ๊ณผ ๋‹จ์ ์„ ๋ฐ˜์„ฑํ•˜๊ณ  ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด lib.rs ์—์„œ extern crate๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ธ์ฒด ๊ณตํ•™ ๋ฐ ํ•™์Šต ์šฉ์ด์„ฑ ์ด์ ์„ ์œ„ํ•ด hello_world.rs ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค(์ €์ž๊ฐ€ ์•„๋‹Œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•ด).

๋…ผ์˜๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ(๋‹น์‹ ์ด ๋‹ต์žฅํ•˜๋Š” Peter์˜ ์ฝ”๋ฉ˜ํŠธ์—์„œ)์ด ๋งํฌ ์ „์šฉ ํฌ๋ ˆ์ดํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์€ ๋ถ€์ ์ ˆํ•ฉ๋‹ˆ๋‹ค. "๋ชจ๋“  ์™ธ๋ถ€ ์ƒ์ž๋ฅผ ๋งจ ์œ„์— ๋‚˜์—ด"ํ•˜๋Š” ํ‹ˆ์ƒˆ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ๋ฏธ๋ฏธํ•œ ์ด์ ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋งํฌ ์ „์šฉ ํฌ๋ ˆ์ดํŠธ๊ฐ€ ์•„๋‹Œ _not_ ์ข…์†์„ฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ(์ด๊ฒƒ์€ Firefox์—์„œ๋Š” ์‚ฌ์‹ค์ด ์•„๋‹ˆ์—ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค).

๊ท€ํ•˜์˜ ์š”์ ์ด ์•”์‹œ์  extern crate๋ฅผ ํ…Œ์ŠคํŠธ์— ์ ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ(ํŠนํžˆ ๋งํฌ ์ „์šฉ ํฌ๋ ˆ์ดํŠธ์— ๋Œ€ํ•œ ๊ฒƒ์ด ์•„๋‹˜)์— ๋Œ€ํ•œ ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ๊ฒƒ์ด๋ผ๋ฉด ํฅ๋ฏธ๋กœ์šด ์š”์ ์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ์˜ ์ ˆ๋ฐ˜์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ํ‹€๋ฆฌ์ง€ ์•Š์•˜๋‹ค๋ฉด ์—ฌ๊ธฐ์— ๋‚จ์€ ์œ ์ผํ•œ ๊ตฌํ˜„ ์ง€์ ์€ #48719์ž…๋‹ˆ๋‹ค. ์ง€๊ธˆ ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๋Š” ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๊ฐ€๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€๋ฐ...

์˜ˆ, #50260์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์‹œ๋„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

2018๋…„ 4์›” 28์ผ ํ† ์š”์ผ ์˜ค์ „ 9์‹œ 15๋ถ„ Alexander Regueiro [email protected]
์ผ๋‹ค:

๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ํ‹€๋ฆฌ์ง€ ์•Š์•˜๋‹ค๋ฉด ์—ฌ๊ธฐ์— ๋‚จ์€ ์œ ์ผํ•œ ๊ตฌํ˜„ ํฌ์ธํŠธ๋Š”

48719 https://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
.

48722๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. @Manishearth OP๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜

@mark-im @Manishearth https://github.com/rust-lang/cargo/issues/1311 ๋„ ์™„์„ฑ ๋˜์—ˆ์œผ๋‹ˆ ๊ทธ ์ ์„ ์ฒดํฌ๋ฐ•์Šค๋กœ ๋ฐ”๊ฟ”์„œ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. Cargo๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์–ด๋–ป๊ฒŒ ๋˜๋‚˜์š”? (์ œ์ •์‹ ์ด ์žˆ๋Š” ์‚ฌ๋žŒ์ด ํ™”๋ฌผ์„ ํ”ผํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค...)

@alexreg Cargo๊ฐ€ Rustc์—๊ฒŒ ํฌ๋ ˆ์ดํŠธ์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ๋„๋ก ์ง€์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์€ Cargo๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค๋„ ๋™์ผํ•˜๊ฒŒ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: --extern name_rustc_sees=path_to_dep.rlib .

https://github.com/rust-lang/rust/pull/47992 ๊ฐ€ ์‹ค์ œ๋กœ ๋„์ฐฉํ•˜๋ฉด ์ „์ฒด ๊ตฌํ˜„ ๋‹จ๊ณ„๊ฐ€ ๊ณง ์™„๋ฃŒ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ํ•  ์ผ์ด ๋‚จ์•„ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

๋„ค, ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด๊ฐ€ ์ผ์ฐ ํ•  ๊ฐ€๋Šฅ์„ฑ์ด์žˆ๋Š” ๊ทธ๊ฒƒ์„ ๋งˆ๋ฌด๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ์ฃผ.

2018๋…„ 5์›” 3์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 7:51 Alexander Regueiro ์•Œ๋ฆผ @github.com
์ผ๋‹ค:

๊ณง ์ „์ฒด ๊ตฌํ˜„ ๋‹จ๊ณ„๋ฅผ ์™„๋ฃŒํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‚ฌ์‹ค 47992 https://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 with https://github.com/rust-lang/rust/pull/50260 ์ฐฉ๋ฅ™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๊นŒ?

RFC ์ดํ›„ ์— ์ œ์•ˆ๋œ ๊ณ„ํš์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์–ป์€ ์‚ฌ๋žŒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์‹ค์ œ๋กœ ๊ตฌํ˜„๋œ ๊ฒƒ๊ณผ ๋” ์œ ์‚ฌํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? (์—ฌ๊ธฐ์„œ --extern ์ƒ์ž์˜ ์ˆ˜์ž…์ด ์„œ๊ณก์— ์ถ”๊ฐ€๋˜๋Š” ๋“ฑ)

๊ทธ๊ฒƒ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค: https://internals.rust-lang.org/t/the-great-module-adventure-continues/6678/205

์ด๊ฒƒ์€ ๋งค์šฐ ์ค‘์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด๋ฏ€๋กœ 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๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ์ด๊ฒƒ์€ ๊ทธ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

๋‹ค ๋งž๋Š” ๋ง์ด์ง€๋งŒ ์ด ๋ชจ๋“  ๊ฒƒ์ด ํ•œ ๊ณณ์— ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ๋ฌผ๋ฅ˜ ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜์ง€๋งŒ ...

๐Ÿ”” ๐Ÿ”” 2018๋…„ ์ดˆ

@aturon ๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์™€ ๋ชจ๋“ˆ ์ž‘์—… ๊ทธ๋ฃน์˜ ๋งˆ์ง€๋ง‰ ํšŒ์˜ ๊ฒฐ๊ณผ https://internals.rust-lang.org/t/the-great-module-adventure-continues/6678/205 , ๊ตฌ์ฒด์ ์œผ๋กœ " ๋‘ ๊ฐ€์ง€ ๋ณ€ํ˜•์ด ์žˆ๋Š” ๋‹จ์ผ ํ•ต์‹ฌ ์ œ์•ˆ์œผ๋กœ ์ขํ˜€์กŒ์Šต๋‹ˆ๋‹ค." ๋‚ด๊ฐ€ ์•„๋Š” ํ•œ ๊ทธ๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์‚ฌ์‹ค์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” nightly๊ฐ€ ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด ๋‘˜ ๋‹ค์— ๋Œ€ํ•œ ์‹คํ—˜์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋‘˜ ๋‹ค ๊ตฌํ˜„ํ–ˆ๋‹ค๋Š” ์ธ์ƒ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

์—๋””์…˜์€ ๋‘ ๊ฐ€์ง€ ๋ณ€ํ˜• ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๊ณ  ๊ธฐ๋Šฅ ํ”Œ๋ž˜๊ทธ ์—†์ด ์ง€์›ํ•˜๋„๋ก ์„ ํƒํ•˜๊ณ  ์—๋””์…˜ ๊ฐ€์ด๋“œ์— ๋ฌธ์„œํ™”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด๋””์—์„œ ๋…ผ์˜๋˜์—ˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜ ์žˆ๋Š” ํ•œ, ๋ชจ๋“ˆ ์ž‘์—… ๊ทธ๋ฃน์ด๋‚˜ lang ํŒ€์ด ๊ฑฐ๊ธฐ์— ๊ด€์—ฌํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

2018๋…„ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์—์„œ ์ž‘์„ฑ๋œ ์ƒˆ๋กœ์šด ์ œ์•ˆ์€ https://internals.rust-lang.org/t/relative-paths-in-rust-2018/7883 ์„ ์ฐธ์กฐ use ๋ฌธ๊ณผ ์ฝ”๋“œ์—์„œ ๊ฒฝ๋กœ์˜ ์ง์ ‘ ์‚ฌ์šฉ ๋ชจ๋‘์—์„œ ๋™์ผํ•œ ์ด๋ฆ„ ํ™•์ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ::some::path ๋Œ€ crate::some::path ์— ๋Œ€ํ•œ ๋‚ด 2์„ผํŠธ - ์ €๋Š” ํ›„์ž๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ์ผ๋ฐ˜ ์˜์–ด๋กœ ์ฝ๊ธฐ ์‰ฝ๊ณ  ์™ผ์ชฝ์— ๋งค๋‹ฌ๋ฆฐ ๊ตฌ๋‘์ ์„ ๋‚จ๊ธฐ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ๋ณด์‹œ๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ๋‚จ๊ฒจ์ฃผ์„ธ์š”!

์ด๊ฒƒ์ด ๋‹น์‹ ์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”์˜€๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋ชจ๋“  pub(crate) ๊ฐ€ crate ๋กœ ๋ณ€๊ฒฝ๋œ ์„ ๋ฌผ ์ƒ์ž์— ๋Œ€ํ•œ ํฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฒ€ํ† ํ•œ ํ›„ ์ˆ˜์ž… ๋ฐ ๊ฐ€์‹œ์„ฑ ๋ชจ๋‘์—์„œ crate ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ํ™•์‹คํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ •์ž๋Š” ๋ถ€์ž์—ฐ์Šค๋Ÿฝ๊ณ  ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

crate enum Either<T, U> {
    A(T),
    B(U),
}

๋‘ ๊ฐ€์ง€๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๋•Œ ํŠนํžˆ ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

crate use crate::foo;

๋‚ด๊ฐ€ ๋ฆฐํŠธ ๋ฌธ์ œ์—์„œ ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์ „ํ™˜ํ•˜๋„๋ก ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๊ฒƒ์„ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ๋งค์šฐ ์Šฌํ”„๊ฒŒ ํ•  ๊ฒƒ์ด๊ณ , ์•„๋งˆ๋„ ๋‚˜๋Š” ๋ฐ˜๋Œ€๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌํ˜„๋œ ์ œ3์ž ๋ฆฐํŠธ๊ฐ€ ๋‚ด๊ฐ€ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉ๋˜๊ธฐ๋ฅผ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค: ์‚ฌ๋žŒ๋“ค์„ ๋ฉˆ์ถ”๋Š” ๊ฒƒ pub(crate) ๋ฅผ crate ํ•ฉ๋‹ˆ๋‹ค.

(์ฐธ๊ณ : ์ผ๊ด€์„ฑ์— ์ข‹์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ๋Š” ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๊ณ  pub(crate) ์—์„œ ์ผ๋ฐ˜ crate ๋กœ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋งŒ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.)

@seanmonstar ๋‹ค์Œ ์—๋””์…˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์—์„œ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ œ์•ˆ๋จ์— ๋”ฐ๋ผ crate::foo ๊ฐ€ ๋” ํฌ๊ท€ํ•ด์งˆ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ crate use crate:: ๋Š” ํŠนํžˆ ๋“œ๋ฌธ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ดˆ๊ธฐ 2018 ๋ฏธ๋ฆฌ ๋ณด๊ธฐ์˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ์ž์— ๋Œ€ํ•œ ๋” ๊นŠ์€ ์ฐธ์กฐ๋ฅผ ์œ„ํ•ด crate:: ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ ๋œ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์œผ๋กœ ๋งŒ ํ•„์š”ํ•  ๊ฒƒ crate:: ๋‹น์‹ ์˜ ์ƒ์ž์—์„œ ์ฐธ์กฐ ์ตœ๋Œ€์— (์˜ˆ๋ฅผ ๋“ค์–ด, foo.rs์—์„œ lib.rs, ๋˜๋Š” foo.rs์— foo๋Š”์—์„œ / bar.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};

๋ฆฐํŠธ๊ฐ€ ์ด๊ฒƒ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•˜๊ธฐ๋ฅผ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

// in filter/mod.rs
crate use crate::generic::{Combine, Func};

๊ทธ๋ž˜์„œ ์ €๋Š” ์•„๋ฌด๋„ ๋งŒ๋‚˜์ง€ ์•Š์„ ๊ฐ€์„ค์„ ์„ธ์šฐ๋ ค๊ณ  ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ง„์งœ์•ผ

@seanmonstar์— ์ „์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ฉด ์ด ํ‚ค์›Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋กœ๋“œํ•˜์ง€ ๋ง์ž.

์˜ˆ, _๋ณดํ†ต_ ์žฌ์ˆ˜์ถœํ•˜๋Š” ๊ฒƒ์ด ์˜ณ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Sean์ด ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์žฌ์ˆ˜์ถœ๋˜๋Š” _์ธก๋ฉด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํŒŒ์ผ์ด ๊ฝค ๋ฉ‹์ง€๊ฒŒ ๋ถ„ํ• ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ณด ๋ฏธ๋””์–ด ํฌ๋ ˆ์ดํŠธ์— ๋Œ€ํ•ด์„œ๋„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์ง€๋งŒ ์ด๋Š” ๋ชจ๋“  ๋…ธ๋“œ ๊ตฌํ˜„์—์„œ ๋งŽ์€ ๊ณตํ†ต ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๊ณ„์† ์„ ์–ธํ•˜๊ณ  ์•„๋งˆ๋„ ํฌ๋ ˆ์ดํŠธ ์†์„ฑ์œผ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์†Œ์Šค ํŒŒ์ผ์„ ๋ณด๊ณ  ๊ทธ ์•ˆ์— ์žˆ๋Š” ๋ฒ”์œ„๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ํŒŒ์ผ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ๋ช‡ ์ค„์˜ ๋ฃจํŠธ ์ˆ˜์ค€ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉด ๋ฒ”์œ„ ๋‚ด์—์„œ ๋ชจ๋“  ์™ธ๋ถ€ ์ข…์†์„ฑ์„ ์•”์‹œ์ ์œผ๋กœ ํฌํ•จํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‹ค์ œ๋กœ ๋‚ด๋ถ€์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์— ๋Œ€ํ•œ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋ฆฌํŒฉํ† ๋งํ•  ๋•Œ ํฌ๊ฒŒ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋‚ด ์ƒ์ž ์ค‘ ํ•˜๋‚˜์—์„œ ๋ณ€ํ™˜์„ ์‹œ๋„ํ•œ ํ›„ ์ด์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์„ ๋ณธ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ฒ˜๋Ÿผ ์–ธ๊ธ‰ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. 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 ์–ด๋–ป์Šต๋‹ˆ๊นŒ? :ํ”ผ

๋‚ด๋ถ€( ins ), ๋‚ด๋ถ€( int ), ๋ณดํ˜ธ( pro ), ๋กœ์ปฌ( loc ), ๋น„๋ฐ€( sec ), ๋‚ด๋ถ€( inn ) crate ํ‚ค์›Œ๋“œ์— ๋Œ€ํ•œ ๋Œ€์•ˆ์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

int ๊ฐ€ C/C++ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ํ˜ผ๋ž€์„ ์ค„๊นŒ์š”? (์ •์ˆ˜ ํ‚ค์›Œ๋“œ)

ํ”„๋กœ๊ทธ๋ž˜๋จธ๋กœ์„œ pub์„ ๋ณผ ๋•Œ ๊ณต๊ฐœ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฐ€์‹œ์„ฑ ์ˆ˜์ค€์„ ๋„์ž…ํ•˜๋ ค๋ฉด ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ˜•์šฉ์‚ฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ํ•œ pub์€ ์ฒ˜์Œ์— publish๋ฅผ ์˜๋ฏธํ–ˆ์œผ๋ฉฐ ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ pub(crate)๊ฐ€ ๋” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. Crate๋Š” ๊ทธ์— ๋Œ€ํ•œ ์ด์ƒํ•œ ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.
pub(crate)๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘๊ฑฐ๋‚˜ ํ˜•์šฉ์‚ฌ์—์„œ ์•ฝ์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ๋„ค์ด๋ฐ์˜ ์–ด๋ ค์›€์€ ํŽ์ด ์ค„์ž„๋ง์ด๋ผ๋Š” ์ ์—์„œ ๋น„๋กฏ๋œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ, ๊ณต์ ์ด๋ผ๋ฉด ์‚ฌ์„ค์ด๋‚˜ ๋‚ด๋ถ€๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  ์žŠ์–ด๋ฒ„๋ ค๋„ ๋ฌธ์ œ ์—†์„ ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ ๋‚˜๋Š” pub(crate) ๋ฌธ์ œ๋ฅผ ๋ณด์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ์€ ์ฒซ๋ˆˆ์— ๋ช…ํ™•ํ•˜๊ณ  ๋ชจํ˜ธํ•˜์ง€ ์•Š์œผ๋ฉฐ ์‹ค์ œ Rust์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. 5๋ฒˆ์˜ ์ถ”๊ฐ€ ํ‚ค ์ž…๋ ฅ์ด ๋ฌธ์ œ๊ฐ€ ๋  ์ •๋„๋กœ ์ž์ฃผ ์ž…๋ ฅํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@UtherII

pub(crate) ๋Œ€ํ•œ ์งง์€ ์ด๋ฆ„์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ํ˜„์žฌ pub ์˜ ๋งŽ์€ (์•„๋งˆ๋„ ๋Œ€๋ถ€๋ถ„ ) ์‚ฌ์šฉ์ด ๋Œ€์ฒด๋  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

Rust 2018์—์„œ ํšจ๊ณผ์ ์ธ ๋น„๊ณต๊ฐœ ํ•ญ๋ชฉ์— pub ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด(๋น„๊ณต๊ฐœ ๋ชจ๋“ˆ์— ๋‚˜ํƒ€๋‚˜๊ธฐ ๋•Œ๋ฌธ์—) ๊ฒฝ๊ณ ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ์ด๋Ÿฌํ•œ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด pub(crate) ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ทœ์น™์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. pub ๋กœ ํ‘œ์‹œ๋œ ๊ฒฝ์šฐ์—๋งŒ ํ•ญ๋ชฉ์„ ๋‹ค๋ฅธ ์ƒ์ž์—์„œ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ํ˜„์žฌ๋Š” ๋‹ค๋ฅธ ์ƒ์ž์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๊ฐ€ ํ•œ ๋ˆˆ์— ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ์Šค๋ ˆ๋“œ์— ์‘๋‹ตํ•˜์ง€ ์•Š๊ณ  ์‹ค์ˆ˜๋กœ ์ด์— ๋Œ€ํ•œ ์ƒˆ ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” github์— ์ต์ˆ™ํ•˜์ง€ ์•Š๊ณ  ์—ฌ๊ธฐ์—์„œ ์‘๋‹ตํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ ์‹ค์ œ๋กœ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ค๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ์— ๋กœ๊ทธ์ธํ•˜๋„๋ก ํ•˜๋Š” ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ƒˆํ˜ธ์— ์“ด ๋‚ด์šฉ์„ ๋ถ™์—ฌ๋„ฃ๊ณ  ์ œ ์ƒˆํ˜ธ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

์—๋””์…˜ ๋งค๋‰ด์–ผ์—์„œ ์‚ฌ๋žŒ๋“ค์ด ์—ฌ๊ธฐ์— ํ”ผ๋“œ๋ฐฑ์„ ๋‚จ๊ธธ ๊ฒƒ์„ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์„ ๋ณด๊ณ  ๊ทธ๋ ‡๊ฒŒ ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” crate:: ๋˜๋Š” :: ํฌ๋ ˆ์ดํŠธ ๋ฃจํŠธ์—์„œ ์š”์†Œ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ์ „ํ˜€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ::๋Š” ์ด๋ฏธ ๊ตฌ๋ฌธ์ด์ง€๋งŒ, ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด crate::์™€ :: ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ณด๊ธฐ์—๋Š” ๊ฒฝ๋กœ์™€ ๊ด€๋ จํ•˜์—ฌ ์ œ์•ˆ๋œ ์ƒˆ๋กœ์šด ํฌ๋ ˆ์ดํŠธ ์‹œ์Šคํ…œ์ด ๋ณธ์งˆ์ ์œผ๋กœ ์ด์ „ ๊ตฌ๋ฌธ๊ณผ ๋™์ผํ•˜์ง€๋งŒ ์œ ์ผํ•œ ์ฐจ์ด์ ์€ ๋” ์ด์ƒ extern ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ๋ณด๋‹ค ์•ก์„ธ์Šค๊ฐ€ ๋” ์‰ฝ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์œ„ ๋ชจ๋“ˆ์—์„œ๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ๋ชจ๋“  ๊ณณ์—์„œ ์•”์‹œ์ ์œผ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์œ ์ผํ•œ ๋‹ค๋ฅธ ์ถ”๊ฐ€ ์‚ฌํ•ญ์€ ::๊ฐ€ ์•„๋‹Œ crate::๋กœ ํฌ๋ ˆ์ดํŠธ ๋ฃจํŠธ๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ::๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ œ๊ฐ€ ์›๋ž˜ ๋ฐฐ์šด ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์•„์ง ๋ฐฐ์šฐ์ง€ ์•Š์€ ์‚ฌ๋žŒ๋“ค์ด crate::๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ง๊ด€์ ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ตฌ๋ฌธ ํ˜•์‹์„ ๋ชจ๋‘ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค ๊ฐ€์งˆ ์ˆ˜ ์—†๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค ์ง€์›๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‘˜ ๋‹ค ์ง€์›ํ•˜๋Š” ๊ฒƒ์„ ์ฒ ์ €ํžˆ ์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋งŒ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‚˜๋Š” ์ต์ˆ™ํ•ด์ง„ ๋Œ€๋กœ :: ์ชฝ์œผ๋กœ ๋” ๊ธฐ์šธ์–ด์ง€์ง€๋งŒ ์ดˆ๋ณด์ž์—๊ฒŒ๋Š” crate::๋กœ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ๋” ์‰ฌ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„๋งˆ๋„ ๋‚ด ๋™๊ธฐ๋Š” ์ด๊ธฐ์ ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ณธ์งˆ์ ์œผ๋กœ ๋‚˜๋Š” ๊ถ๊ทน์ ์œผ๋กœ ๋ณ„๋กœ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ ::๋ฅผ ์„ ํ˜ธํ•˜์ง€๋งŒ ๋‘˜ ๋‹ค ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์ด์ƒ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๊ณ  ์‚ฌ๋žŒ๋“ค์ด crate:: ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ดˆ๋ณด์ž์—๊ฒŒ ๋” ์šฐ์ˆ˜ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ €๋Š” ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์— ์ด์˜๋ฅผ ์ œ๊ธฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

#[path] ๋Š” Rust 2018์—์„œ ์ค‘์ฒฉ ๋ชจ๋“ˆ๊ณผ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ• ๊นŒ์š”? (https://github.com/rust-lang/rust/issues/35016#issuecomment-409185342)

IIUC, ํ˜„์žฌ src/lib.rs ๋ฐ src/bar.rs ๋‘ ๊ฐœ์˜ ํŒŒ์ผ์ด ์ฃผ์–ด์ง€๋ฉด ๋‹ค์Œ์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” X ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

mod foo {
    #[path = "X/bar.rs"]
    mod bar;
}

bar.rs ๋Œ€ํ•œ ๊ฒฝ๋กœ๋Š” ํ•ญ์ƒ src/foo/X/bar.rs ์ด๊ณ  foo ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์œ ํšจํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— bar.rs ๋ชจ๋“ˆ์ด ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค.

pub(crate) ๊ต์ฒด๋ฅผ ์œ„ํ•œ ์ข‹์€ ์ด๋ฆ„์„ ๊ณต์œ ํ•˜๊ณ  ์žˆ๊ณ  ํ•ต์‹ฌ ํŒ€์—์„œ ์—ฌ์ „ํžˆ ํ”ผ๋“œ๋ฐฑ์„ ๊ตฌํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ œ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ณ  ์ œ์•ˆ์„ ๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์“ด ํ•œ ์ƒ์ž์—์„œ pub(crate) ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์ด ์งœ์ฆ๋‚˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ pub ๋กœ ์ค„์—ฌ์„œ ์ƒ์ž ๋ฐ–์—์„œ ๋ณผ ํ•„์š”๊ฐ€ ์—†๋Š” ๋งŽ์€ ๊ธฐํ˜ธ๋ฅผ ์‹ค์ˆ˜๋กœ ๋‚ด๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜› (์ œ ๊ฒฝ์šฐ์—๋Š” ํฌ๋ ˆ์ดํŠธ๊ฐ€ ๋‚ด๋ถ€์— ์žˆ๊ณ  ๊ณต๊ฐœ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ! ์ •ํ™•์„ฑ๋ณด๋‹ค ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.) ๋„ค, ํฌ๋ ˆ์ดํŠธ ์ˆ˜์ค€์˜ ๊ฐ€์‹œ์„ฑ์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐœ์˜ ํ‚ค์›Œ๋“œ๋ฅผ ๋งค์‹œ์—…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋‚˜์€ ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฐ•๋ ฅํžˆ ๋ฏฟ์Šต๋‹ˆ๋‹ค. .

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” 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์˜ ๋ผ์ธ์„ ๋”ฐ๋ผ ์ข€ ๋” ๋‹จ์–ด๋ฅผ ๋„์ž…์˜ ๊ด€์‹ฌ์—์„œ (๋‚˜๋Š” ๊ฒƒ์„ @johnthagen์— ๋™์˜ export ๋งŽ์€ ๊ฒƒ ๊ฐ™์•„ pub ์— ๋น„ํ•ด pub(crate) ) :

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) ๊ฐ€์‹œ์„ฑ๊ณผ ๊ด€๋ จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ์ž๋ฅผ ํ˜•์šฉ์‚ฌ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๊ธˆ ๊ณ๋ˆˆ์งˆํ•˜๋ฉด ๊ทธ๋ ‡๊ฒŒ ๋‹นํ™ฉ์Šค๋Ÿฝ๊ฒŒ ๋“ค๋ฆฌ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. '์ง‘'๊ณผ ๊ฐ™์€ ๋‹จ์–ด๋Š” ํ˜•์šฉ์‚ฌ๋กœ ์ž˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. IANA์˜์–ด๊ต์ˆ˜.

์ƒ์ž์— ๋ณด์ด๋Š” ํ•ญ๋ชฉ์„ ๋‹ค์‹œ ๋‚ด๋ณด๋‚ด๋Š” ๊ฒƒ์€ ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ ๋‚œ ๋‹จ์ง€ ์  ์˜๋ฏธ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ชจ๋“ˆ์˜ ์ง์ ‘ ๋ถ€๋ชจ์˜ ํ•ญ๋ชฉ์„ ์žฌ์ˆ˜์ถœํ–ˆ๋‹ค (์•„๋งˆ) ์‚ฌ์šฉํ•˜๋ ค๋ฉด self ๋Œ€์‹  crate ์ฝ”๋“œ ์กฐ์ง์˜ (seanmonstar์˜ ๊ฒฝ์šฐ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ). ์˜ˆ.

    mod detail {
        crate struct Foo;
    }

    crate use self::detail::Foo;

์œ ํ˜•์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ์™€ ๊ฒฐํ•ฉ ๋œ ๊ฐ€์‹œ์„ฑ์œผ๋กœ ์ƒ์ž๋ฅผ ์‚ฌ์šฉ (๋‹ค์‹œ seanmonstar์˜ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”) ๋ชจ์Šต์ด ๋” ๋ฌธ์ œ๊ฐ€ ์•Š์Šต๋‹ˆ๋‹ค : crate struct Foo(crate crate::Bar); ์— ๋ฐ˜๋Œ€ pub(crate) struct Foo(pub(crate) ::Foo); . ๋‚ด ์œ ์ผํ•œ ํฌ๋ง์€ ์ด ๊ตฌ์กฐ๊ฐ€ ๋Œ€์ค‘์ ์ด์ง€ ์•Š์•„ ์ „ํ™˜์œผ๋กœ ์ธํ•ด ์ด ์ƒ์ž ์ˆ˜ํ”„๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋ช…์‹œ์  ๊ฐ€์ ธ์˜ค๊ธฐ๋ฅผ ํ†ตํ•ด ์ด๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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 Just Workโ„ข๊ฐ€ 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 "extern prelude"๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ธฐ์–ต์„ ์ƒˆ๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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 (๊ฐ€์ ธ ์˜ค๊ธฐ) ๊ฒฝ๋กœ.

@์„ผํŠธ๋ฆด

"extern prelude"๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ๋‚ด ๊ธฐ์–ต์„ ์ƒˆ๋กœ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ผ๋ฐ˜์ ์œผ๋กœ "์„œ๊ณก"์€ ํ˜„์žฌ ์ „์ฒด ํฌ๋ ˆ์ดํŠธ์˜ ๋ฒ”์œ„์— ์žˆ๊ณ  ํŠน์ • ๋ชจ๋“ˆ์— ์ฒจ๋ถ€๋˜์ง€ ์•Š์€ ๋ชจ๋“  ์ด๋ฆ„์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. (์‹ค์ œ๋กœ ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.)

@petrochenkov ๊ทธ๋ ‡๋‹ค๋ฉด ์ด์™€ ๊ด€๋ จํ•˜์—ฌ "extern" ์„œ๊ณก์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@alexreg
--extern ๋กœ ์ „๋‹ฌ๋œ ํฌ๋ ˆ์ดํŠธ๋Š” ํŠน์ • ๋ชจ๋“ˆ์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ณ  ์ „์ฒด ํฌ๋ ˆ์ดํŠธ์˜ ๋ฒ”์œ„์— ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ •๋ณด์˜ ๋ฉ์–ด๋ฆฌ๊ฐ€ ์•„๋ฌด๋ฆฌ ๋ณ€๋•์Šค๋Ÿฝ๋”๋ผ๋„ ๊ณต์‹ ๋ฌธ์„œ ์†Œ์Šค์— ๊ธฐ๋ก๋œ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ Unstable ์ฑ…์—์„œ์™€ ๊ฐ™์ด ๊ฐœ๋…์— ๋Œ€ํ•œ ์™ธ๋ถ€ ์–ธ๊ธ‰์ด ์žˆ๋Š” ๊ฒฝ์šฐ. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•˜๋Š” ์œ ์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

@petrochenkov ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ์˜ ๋ชจ๋“  ๋น„ํŠธ๋ฅผ ๋ณ„๋„์˜ ๋ฌธ์ œ๋กœ ์ถ”์ถœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ์จ ์ด ๊ธ€์„ ๋งˆ์นฉ๋‹ˆ๋‹ค.

@Centril ํ˜„์žฌ ๋ฒ ํƒ€ ๋ฒ„์ „์˜ ๋ฌธ์ œ ์ถ”์ ์€ ์—ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์‚ฌ๋žŒ๋“ค์ด ๋Œ“๊ธ€์„ ์†์ผ ํ•„์š”๊ฐ€ ์—†๋„๋ก ์›๋ž˜ ๋Œ“๊ธ€์„ ์ตœ์‹  ์ •๋ณด๋กœ ์—…๋ฐ์ดํŠธํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰