๐ฆRust
๊ณ ํผ์ ๋ํญํ ๊ท์ฌ์์ ํ๋ฆฌ์ค ๋๋ฐ์ ์์ด
Overview : ๊ดํํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ๋ ์ฃผ์ธ์ด ์๋ค๋ฉด ์ด๋จ๊น
์ฐ์ ์ ํ์๋ Rust์ ๋ํ ์๊ฐ๋ฅผ ํ ๋งํ ์๊ฒฉ์ด ์์์ ์ฐ์ ์๋ฆฐ๋คใ
ํ์ง๋ง ์๋น์๊ฐ C++๋ฅผ ์ด์ฉํ ์๋ฒ ๋๋ ํ๋ก๊ทธ๋๋ฐ์ ์งํํ๋ฉด์ ๋๋ฌด๋๋ ์์ฝ๊ณ ์ด๋ ค์ ๋ ๋ฌธ์ ๋ฅผ Rust๋ ํด๊ฒฐํ ์ ์์์ง๋ ๋ชจ๋ฅธ๋ค๋ ์๊ฐ์ผ๋ก ๋ง์ ๊ด์ฌ์ ๊ฐ์ง ๊ฒ์ ์ฌ์ค์ด๋ค. ๋ง์ฝ ๋น์ฅ์ ์จ๋จน์ ์ ์๋๋ผ๋ ๊ผญ ํ๋์ฏค ๊ฐ๊ณ ์ถ์ ํ์ด๊ธฐ๋ฅผ ๋ง๋ ๋ค๋ฉด ๋๋ ๋ฐ๋์ Rust๋ฅผ ํํ ๊ฒ์ด๋ค. ๋ง์ ์ฌ๋๋ค์ด Rustacean
์ด ๋์ด์ ํ์ด๊ธฐ๋ฅผ ์จ๋จน์ ์ ์๋ ์ธ์์ด ์ค๊ธธโฆ
Install
www.rust-lang.org
์ค์น๋ ์์ฃผ ์ฝ๋ค. ์ ์ฌ์ดํธ์์ ๊ฐ ์ด์์ฒด์ ์ ๋ง๊ฒ ๋ค์ด์ ๋ฐ์ ์ค์นํ๋ฉด ๋ฌธ์ ์์ด ๊ฐ๋ฅํ๋ค.
Windows์ ๊ฒฝ์ฐ(Visual Studio๊ฐ ์ค์น๋์ด์์ง ์๋ค๋ฉด) compile์ ์๋์ ๊ฐ์ ์๋ฌ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์,
error: linker
link.exe
not found
note: The system cannot find the file specified. (os error 2)
note: the msvc targets depend on the msvc linker butlink.exe
was not found
note: please ensure that VS 2013, VS 2015 or VS 2017 was installed with the Visual C++ option
error: aborting due to previous error
๊ทธ๋ฐ ๊ฒฝ์ฐ ์๋ ๋งํฌ์์ Visual C++ ๊ฐ๋ฐ๋๊ตฌ๋ฅผ ์ค์นํ๋ฉด ๋ฌธ์ ๊ฐ ์๋ค.
https://visualstudio.microsoft.com/ko/thank-you-downloading-visual-studio/?sku=BuildTools&rel=16
Cargo
rust
๋ฅผ ์ค์นํ๋ฉด cargo
๋ผ๋ Package Manager๊ฐ ๊ฐ์ด ์ค์น๋๋๋ฐ,
ํฐ๋ฏธ๋์์ ์๋ ํค์๋๋ก ์ค์น์ฌ๋ถ๋ฅผ ํ์ธํด๋ณด์.
cargo โversion
Cargo๋ ํ๋ก์ ํธ ๊ด๋ฆฌ, ํจํค์ง ๊ด๋ฆฌ, ๋ฐฐํฌ, ๋ฒ์ ๊ด๋ฆฌ ๋ฑ ์ฌ๋ฌ๊ฐ์ง ๊ธฐ๋ฅ์ ํด์ฃผ๋๋ฐ,
C๋ C++์ฒ๋ผ low level์ ๋ค๋ฃจ๋ ์ธ์ด์ธ๋ฐ๋ ํธ๋ฆฌํ web๊ธฐ์ ๋ง๋ฅ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ด ๊ต์ฅํ ์ธ์์ ์ด์๋ค.
์นด๊ณ ๋ ๋ฌ์คํธ์ ๋น๋ ์์คํ ์ด์ ํจํค์ง ๊ด๋ฆฌ์์ ๋๋ค.
์นด๊ณ ๋ ๋ฌ์คํธ ์ฝ๋์ ๋น๋, ์์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ(dependencies) ๋ค์ด๋ก๋ ๋ฐ ๋น๋ ๋ฑ์ ๋์ ์ํํฉ๋๋ค.Cargo๋ ๊ธฐ๋ณธ์ ์ผ๋ก 4๊ฐ์ง์ ์ผ์ ํ๋ค
- ํ๋ก์ ํธ์ ์ ๋ณด๋ค์ ๋ ๊ฐ์ ๋ฉํ๋ฐ์ดํฐ ํ์ผ๋ก ๋ณผ ์ ์๋ค.
- ํ๋ก์ ํธ ์์กด์ฑ์ ๊ฐ์ ธ์ค๊ณ ๋น๋ํ๋ค.
- ํ๋ก์ ํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ๋น๋ ๋ ์ ์๋๋ก rustcํน์ ๋ค๋ฅธ ์ปดํ์ผ๋ฌ์ ์ธ์๋ฅผ ๋ง์ถฐ ์คํ์์ผ์ค๋ค.
- ๊ท์น์ ๋ํด ์ค๋ช ํด์ฃผ๊ณ ์์ ๊ณต๊ฐ์ ๋ง๋ค์ด Rust project๋ฅผ ๋ ์ฝ๊ฒ ํ ์ ์๋๋ก ํด์ค๋ค
์ถ์ฒ: https://jen6.tistory.com/86
Create Project
๊ทธ๋ผ ๊ฐ๋จํ๊ฒ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด์ Hello World๋ฅผ ๋ง๋ค์ด๋ณด์.
cargo new {Project๋ช
} โbin
ํฐ๋ฏธ๋์์ ์์ ๊ฐ์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ฉด, ํ์ฌ๊ฒฝ๋ก์ ํ๋ก์ ํธ ํด๋๊ฐ ์๊ธด๋ค.
ํ๋ก์ ํธ ํด๋์๋ ๋งค๋ํ์คํธ ํ์ผ์ธ Cargo.toml
, .gitignore
, src ๋๋ ํ ๋ฆฌ
๋ฑ์ด ์์ผ๋ฉฐ,
src์๋ main.rs๋ผ๋ ์์ค์ฝ๋์,
fn main() {
println!("Hello World");
}
ํฌ๋ก์ฐ์๋ ์ฝ๋๊ฐ ์ด๋ฏธ ๊ตฌํ๋์ด ์๋ค.
์ฒซ ์ฝ๋์ด๋ ๊ฐ๋จํ ์ค๋ช
์ ํ์๋ฉด,
println!์ ๋๋ํ๋ ๋งคํฌ๋ก๋ผ๋ ๋ป์ด๋ค. ๋์ค์ ์์๋ณธ๋ค.
intent๋ ํญ์ด ์๋ ์คํ์ด์ค๋ฐ 4๋ฒ์ผ๋ก ๊ท์น์ด ์ ํด์ ธ์์ผ๋ฉฐ,
snake case convention rule
์ ์ฌ์ฉํ๋ค. ์ฆ, ์๋ฌธ์์ ์ธ๋์ค์ฝ์ด๋ฅผ ์กฐํฉํ ๋ฐฉ์์ด๋ค.
์๋ฒ ๋๋๊ฐ์์ ์ซ์ง๋ง ํ์ดํ์ด ํจ์ฌ ์ฝ๊ณ , ํ๊ฒฐ๊ฐ๊ธฐ๋งํ๋ค๋ฉด ์ฌ์ค ์ด๋ค ๋ฐฉ์์ด๋ ์ด์ ๊ฒ ๊ฐ๋ค.
Compile
์ด์ rs ํ์ผ์ ์ปดํ์ผํด๋ณด์. Rust๋ ๋น์ฐํ๊ฒ๋ ์ปดํ์ผ ์ธ์ด์ด๋ค.
rustc .\main.rs
์คํ์ ์ปดํ์ผ์๋ฌ๊ฐ ์๋ค๋ฉด exe ํ์ผ์ด ์์ฑ๋๊ณ (์๋์ฐ์ ๊ฒฝ์ฐ) exe ํ์ผ์ ์คํํ๋ฉด Hello World๊ฐ ์ถ๋ ฅ๋๋ค.
์ด๊ฒ์ rust์ ๊ธฐ๋ณธ ์ปดํ์ผ ๋ฐฉ์์ด๊ณ Cargo
๋ฅผ ํตํด์ ๋ ํธํ๊ฒ ์งํ์ด ๊ฐ๋ฅํ๋ค.
ํ๋ก์ ํธ ํด๋ ๊ฒฝ๋ก์์,
cargo build
๋ฅผ ์งํํ๋ฉด target ํด๋์ ์ฐ์ถ๋ฌผ์ด ๋์ค๊ฒ ๋๋ค.
๊ทธ ์ธ์๋,
cargo check
์ด๊ฒ์ ์ปดํ์ผ์ ํ๋ ์คํํ์ผ์ ์์ฑํ์ง ์๊ธฐ๋๋ฌธ์ ๋น ๋ฅด๋ฉฐ, ์ปดํ์ผ ๊ฐ๋ฅ์ฌ๋ถ๋ง์ ํ์
ํ๊ธฐ์ ์ข๋ค.
cargo run
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ์ด ๋ช
๋ น์ ์ปดํ์ผ ๋ฐ ์คํ์ ๋์์ ์งํํด์ค๋ค.