์ด๊ฒ์ RFC "๊ฒฝ๋ก ๋ฐ ๊ฐ์์ฑ์ ๋ช ํํ๊ฒ ํ๊ณ ๊ฐ์ํ"(rust-lang/rfcs#2126)์ ๋ํ ์ถ์ ๋ฌธ์ ์ ๋๋ค.
๋จ๊ณ:
foo/bar.rs
#45385์ ๊ฐ์ ํ์ ๋ชจ๋์ ์ง์ํ๊ธฐ ์ํด foo.rs
๋๋ foo/mod.rs
ํ์ฉcrate
๋์
#45388crate
๊ฐ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์์ํ๋๋ก ํ์ฉ https://github.com/rust-lang/rust/issues/45477pub
ํญ๋ชฉ์ ๋ํ ๋ฆฐํธ ์ถ๊ฐcrate
๊ฐ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์์ํ๋๋ก ํ์ฉํ๋ฉด ์ผ๋ถ ๊ตฌํ ๋ฌธ์ ๊ฐ ์ฐจ๋จ๋ฉ๋๋ค. ํด๋น ํ์ฅ์ ์ฌ์ฉํ์ง ์๋ ํ ๋ค์ ํญ๋ชฉ ์ค ์ด๋ ๊ฒ๋ ์ ์ฉ๋์ง ์์ต๋๋ค.crate
์์ํ์ง ์๋ ์ ๋ ๊ฒฝ๋ก์ ๋ํ ๋ฆฐํธ ์ถ๊ฐ(https://github.com/rust-lang/rust/issues/48722)extern crate
์๋ต ํ์ฉํด๊ฒฐ๋์ง ์์ ์ง๋ฌธ:
๋ง์ด๊ทธ๋ ์ด์
์ ์ด๋ป๊ฒ ์ ๊ทผํด์ผ ํฉ๋๊น? ๋์ฒด๋ฅผ ํตํด ์ ์๋ ๋๋ก ๋๋ ์ํฌํฌ๋ฅผ ํตํด? ์๋ฅผ ๋ค์ด rustfix
๋๊ตฌ๋ฅผ ์์ ๋ฃ์ ํ์ ๋ ๋ง์ ๊ฒฝํ์ ํตํด ์ด ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์ ๋ ๊ฒฝ๋ก์ ์ต์ข
๊ตฌ๋ฌธ์
๋๋ค. ๋ค์ํ ์ต์
์ ์ค์ ๋ก ์ํํด ๋ณผ ์ ์๋ ์ํฉ์์ ๋ ๋ง์ ์์ ๊ฑฐ ์ด๋์ด ์์ต๋๋ค. ํนํ crate::
๋ฐ extern::
๊ฒฝ๋ก๋ฅผ ๋ชจ๋ ์ฌ์ฉ ํ๋ฉด ๋ช ๊ฐ์ง ์ค์ง์ ์ธ ์ด์ ์ด ์์ง๋ง ์ด์์ ์ผ๋ก๋ ๋ณด๋ค ๊ฐ๊ฒฐํ ๋ฐฉ์์ผ๋ก ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค.
::crate::foo
๋ง ๋ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ crate
๋ฅผ ๊ฐ์์ฑ ์์ ์๋ก ์ทจ๊ธํ์ง ์๊ณ struct Foo(crate ::foo)
๋ ์๋ชป๋ ๊ฒฝ๋ก๋ก ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค. @petrochenkov ๋ ์ด ์๊ฒฌ์์ ๋ช ๊ฐ์ง ์ถ๋ก ์ ์ค๋ช
ํฉ๋๋ค.๊ทธ RFC์๋ 4๊ฐ์ง ๊ณ ์ ํ ๊ธฐ๋ฅ์ด ์์ง๋ง ์ฌ์ ํ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ํด ํ๋์ ์ถ์ ๋ฌธ์ ๋ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋์ด ๊ฐ์ ์๋ก ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋ฐ์ดํ์ง์๊ฒ ์ต๋๊น?
@retep998 RFC ํ ๋ก ์ ๋ฐ์ ๊ฑธ์ณ ์ค๋ช
ํ๋ฏ์ด ์ด๋ฌํ ๊ธฐ๋ฅ์ ๊ธ๋ก๋ฒ ์ค๊ณ ๊ณ ๋ ค ์ฌํญ์ ํตํด ์ฐ๊ฒฐ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํฌ๋ ์ดํธ ์ด๋ฆ์ ๋ณ๊ฒฝํ๊ธฐ ์ํ ์ธ๋ถ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ๋ ๊ฒ์ ๋ถ๋ถ์ ์ผ๋ก extern crate
์ ๊ถ๊ทน์ ์ธ ์ฌ์ฉ ์ค๋จ์ ์ํด ๋๊ธฐ๊ฐ ๋ถ์ฌ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ํ ์ ์๊ณ ์์ง ๊ฒ์ดํธ ๋ค์ํ ์ธก๋ฉด ๊ฐ๋ณ์ ์ผ๋ก (๊ทธ๋ฆฌ๊ณ ๊ฐ๋ฅ์ฑ์ด ๋ค๋ฅธ ๊ตฌ๋ฌธ์ ์๋ํ๋ ์ผ๋ถ ์ค๋ณต ๊ฒ์ดํธ๋ฅผํด์ผํฉ๋๋ค)ํ์ง๋ง, ์ ์ฒด์ ์ธ ๋์์ธ ๋ฐ ์์ ํ์ ๋ํ ๋
ผ์, ๊ทธ๊ฒ์ ์ผ๋์ ๊ธ๋ก๋ฒ ์ผ๊ด์ฑ์ ์ ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
ํฌ๋ ์ดํธ์ ์ด๋ฆ์ ๋ฐ๊พธ๋ ์ธ๋ถ ๋ฉ์ปค๋์ฆ์ ๊ฐ๋ ๊ฒ์ ์ด๋ฏธ ๋ช ๋
๋์ ์ํ๊ณ ํ์ํ๋ ๊ฒ์
๋๋ค(https://github.com/rust-lang/cargo/issues/1311). extern crate
์ฃฝ์ด๊ธฐ๋ฅผ ์ง์ํ๋ ํฐ์
์ฐ๋ฆฌ๋ ๊ณผ๊ฑฐ์ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๋ํด ๋ณ๋์ RFC๋ฅผ ๊ฐ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์์ง๋ง( repr(align(N))
๋ฐ repr(packed(N))
๋ํ RFC๊ฐ ๋ ์ค๋ฆ), ์ง๊ธ์ foo/mod.rs
์์ foo.rs
๋ extern::
๋ฐ crate::
์ ๋งค์ฐ ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์์ผ๋ฏ๋ก ๋์ผํ RFC์ ์์ด์ผ ํ๊ณ ๋์ผํ ์ถ์ ๋ฌธ์ ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น?
ํด๊ฒฐ๋์ง ์์ ๊ตฌ๋ฌธ์ ์๋์ ์ผ๋ก ๋ฏธ๋ฌํ ์ธก๋ฉด์ด๊ธฐ ๋๋ฌธ์ ์ด ์์ ์ด ๊ณ์ ์ ์ง๋๋๋ก ํ์ญ์์ค. crate
๋ฅผ ๊ฐ์์ฑ ์์ ์ ๋ฐ ๊ฒฝ๋ก ์ ๋์ฌ๋ก ์ฌ์ฉํ๋ฉด crate ::absolute::path
์ crate::relative::path
. ์ปจํ
์คํธ ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ผํ ๋ชจํธ์ฑ์ด ๋ฐ์ํ๋ฉฐ ๊ฐ์์ฑ ์์ ์๋ก ์ค์ ๋ก ์๋ฏธ๊ฐ ์๋ ๋ค๋ฅธ ์์ฝ๋ ํค์๋๋ ์์ต๋๋ค.
๋ฐ๋ผ์ (์ ์ด๋) crate
๊ฐ์์ฑ ์์ ์๋ฅผ ์๋ตํ๊ณ ๊ธฐ์กด pub(crate)
๊ณ ์ํ๋ ์คํ์ ํ๊ณ ์ถ์ต๋๋ค.
foo.rs
/ foo/mod.rs
ํฌ์ธํธ๋ฅผ ๋ณ๋์ ์ถ์ ๋ฌธ์ ๋ก ๋ถํ ํ๋ ๊ฒ์ ๋ง์์ ๋ค์ง ์์ต๋๋ค. ๊ฒฝ๋ก ๋ฐ ๊ฐ์์ฑ ์์ ์ ๋ณ๊ฒฝ ์ฌํญ๊ณผ ์ค์ ๋ก ๋
๋ฆฝ์ ์ผ๋ก ๋ณด์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
์ธ๋ถ ์์ ์ด๋ฆ ๋ณ๊ฒฝ์ ๊ดํด์ ๋ ... ์ด๋ฏธ ๋ณ๋์ ๋ฌธ์ ๊ฐ ์์ต๋๊น? ๋๋ ๊ทธ๊ฒ์ ๋ฒ๊ธ์ด ํ๋์ ์ผ๋ถ๊ฐ๋๋๋ฟ๋ง ์๋๋ผ ์๊ฐ ์๋๋ก ๊ฒฝ๋ก ๋ณ๊ฒฝ์ ์ํด ๋งค์ฐ ์ค์ํ๋ค.
๋ช ์ฃผ ์ ์ ๊ฐ์์ฑ ์์ ์(๊ฒฝ๋ก ์ ๋์ด ์๋)๋ก 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๋ฅผ ๋ฃจํธ ๋ค์์คํ์ด์ค๋ก ์๋์ผ๋ก ๊ฐ์ ธ์ค๊ณ ๋ ์ผ์นํ๋ ๊ฒฝ๋ก ํํ์ ๋ง๋ญ๋๋ค.
์
src
|--lib.rs
|--foo.rs
|--ํธ
|----|--bar.rs
๋ค์๊ณผ ๊ฐ์ด Cargo.toml์์ ์ข
์์ฑ์ ๊ตฌ์ฑํฉ๋๋ค.
[dependencies]
serde = "3.0.0"
mod bar
๋ฅผ mod foo
์ ์ถ๊ฐํ๊ณ mod foo
๋ฅผ lib.rs์ ์ถ๊ฐํ๊ณ ,
lib.rs์์ finlib
ํจ์๋ฅผ ์ ์ํ๊ณ foo.rs์์ finfoo
ํจ์๋ฅผ ์ ์ํ๊ณ bar.rs์์ finbar
ํจ์๋ฅผ ์ ์ํฉ๋๋ค.
extern ํฌ๋ ์ดํธ์ ์ค์ฝํ๋ฅผ ํฌ๋ ์ดํธ์ ์ต์์ ๋ชจ๋๋ก ๋ง๋ค๋ฉด ์ด๋์์๋ ์ด์ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์์ ํ/์ ๊ฒฉ ๊ฒฝ๋ก
::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๋ฅผ ๊ณ ์ํ ์ ์์ต๋๊น?
๊ธฐ๋ณธ์ ์ผ๋ก ๋์ํฉ๋๋ค. ์ง๊ธ ๋น์ฅ์ ํฐ ํ ๋ก ์ ์ฐธ์ฌํ๊ณ ์ถ์ง ์์ต๋๋ค. ๊ฒฐ๊ตญ ์ํ ๊ธฐ๊ฐ์
๋๋ค! -- ํ์ง๋ง ์ ๋ @
์์ด๋์ด๋ฅผ ๋ฐฐ๊ฒฝ์์ ๋์ด์ค๋ฅด๊ฒ ํ๊ณ ์ถ์์ต๋๋ค. ๋ถ๋ถ์ ์ผ๋ก๋ ์ ๊ฐ ๊ฑด๋ง์ฆ์ด ์๋ ๊ฒฝํฅ์ด ์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋กํ๋ ๊ฒ์ด ๋์ค์ ๊ธฐ์ตํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ ๋๋์ ์ด ์์ ์์ ํด์ผ ํ ์ณ์ ์ผ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
::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
.
@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 ํ์ฌ ๋ฒ ํ ๋ฒ์ ์ ๋ฌธ์ ์ถ์ ์ ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์. ์ฌ๋๋ค์ด ๋๊ธ์ ์์ผ ํ์๊ฐ ์๋๋ก ์๋ ๋๊ธ์ ์ต์ ์ ๋ณด๋ก ์ ๋ฐ์ดํธํ์๊ฒ ์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ค์์ ๊ฐ์์ฑ ์์ ์์ ๊ฒฝ๋ก ๋ชจ๋์์
crate
ํค์๋๋ฅผ ๊ฒฐํฉํ ๋ ๋ค๋ฅธ ์ธ์คํด์ค์ ๋๋ค. ์ด๋crate use crate...
์ธ์คํด์ค๋ณด๋ค ํจ์ฌ ๋ ๊ฐ๋ฅ์ฑ์ด ๋์ ๋ณด์ ๋๋ค.ํ์ฌ์:
์ด ์ถ์ ๋ฌธ์ ์ ๋ณ๊ฒฝ ์ฌํญ:
์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์๋ก์ด ๊ฒ์ด ํ์ฌ ๋ฐฉ์๋ณด๋ค ๋ ํผ๋์ค๋ฝ๋ค๊ณ ์๊ฐํฉ๋๋ค.