누군가에게 사상 주입을 당한 것 같긴 한데, 모든 언어의 시작은 Hello World부터다.
이 장에서는 Rust로 작성한 Hello World에 관해서 설명하겠다.
새로운 패키지를 만들기 위해서 Rust에서는 Cargo 사용을 권장(혹은 추천)한다.
$ cargo new rust_hello
위의 명령어는 "rust_hello"라는 이름의 새로운 패키지를 생성하는 명령어이며,
아래와 같은 디렉터리와 파일이 생긴다.
rust_hello
├── Cargo.toml
└── src
└── main.rs
Cargo.toml 파일은 매니페스트 파일이라고도 불리며, 간단히 말하면 해당 패키지를 위한 메타데이터 파일이다.
파일의 내용은 아래와 같다.
[package]
name = "rust_hello"
version = "0.1.0"
authors = [""]
edition = "2018"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
[package] 섹션은 패키지 자체의 설명이 들어가며, 패키지의 이름, 버전 등의 내용이 들어가게 된다.
하지만, 이 부분은 배포를 목적으로 하지 않는 이상 건드릴 일이 없으므로 설명은 넘기겠다.
[dependencies] 섹션이 가장 많이 쓰일 부분이며, 패키지를 구성하는 의존성 패키지를 여기에 기술할 수 있다.
[dependencies]
time = "0.1.12"
rand = { git = "https://github.com/rust-lang-nursery/rand" }
위와 같이 패키지들을 지정할 수 있으며,
단순히 time = "0.1.12"라고 하면, https://crates.io/ 에서 time이라는 패키지의 0.1.12 버전을 가져오게 되고,
rand처럼 git 주소를 기입하면, 해당 git 주소로부터 rand 패키지를 가져오게 된다.
이 외에도 다양한 방식이 있으나, 위의 두 가지 정도만 알면 된다.
src/main.rs
fn main() {
println!("Hello, world!");
}
위 파일은 cargo new 명령어를 통해 자동으로 생성되었음을 다시 한번 알린다.
우리는 누군가에게 Hello World가 첫 입문이라고 조종당하는 건가 싶다.
러스트 소스 코드 파일은 위와 같이 .rs 라는 확장자를 가진다.
또한, Java나 C 언어처럼 main 함수를 가지며, 함수라는 것을 지칭하기 위해서 fn 이라는 키워드를 사용한다.
출력을 위해서는 println! 이라는 것을 사용한다.
이때 ! (Bang이라고 불린다.) 는 특수한 키워드로 매크로를 호출할 때 사용된다.
즉, println! 는 println 이라는 매크로를 호출하는 것이다.
C 언어는 매크로 함수와 일반함수 사용 방법이 같다.
이 때문에 호출하는 것만으로는 매크로 함수인지, 일반 함수인지 구분할 수 없다.
물론, 매크로 함수의 이름은 대문자로 써라, 일반 함수 이름은 소문자로 써라. 같은 관습으로 구분이 되기도 하지만, 그 관습을 지키고 안 지키고는 사용자의 마음이라 애매한 부분이 있다.
rust에서는 이러한 애매함을 언어적 문법을 통해 해결하고자 한 것이 아닌가 싶다.
해당 패키지를 실행하기 위해서는 아래와 같은 명령어를 사용하면 된다.
$ cargo run
Compiling rust_hello v0.1.0 (/path/to/workspace/rust_hello)
Finished dev [unoptimized + debuginfo] target(s) in 0.38s
Running `target/debug/rust_hello`
Hello, world!
자 우리는 Rust를 이용해 Hello world를 출력하는 방법에 대해 배웠다.
시작이 반이라는 누군가의 명언이 있었으니, 우리는 절반을 해낸 것이다.
'잡학(雜學)' 카테고리의 다른 글
Rust 2장 - 2. 기본 데이터 타입 (0) | 2021.06.17 |
---|---|
Rust 2장 - 1. 변수와 상수 (0) | 2021.06.15 |
억지 기법 (0) | 2021.06.13 |
프로그래밍 언어 (0) | 2021.05.23 |
RabbitMQ (2) | 2021.05.14 |