본문 바로가기
컴퓨터/러스트(Rust)

러스트 프로그래밍(Rust programming): 1 안녕하세요! Hello, world!

by All That Guy 2016. 5. 3.

1 러스트(Rust) 시작: 첫 러스트 프로그래밍(first rust programming) “안녕하세요! Hello, world!






리눅스/OSX를 기준으로 설명을 하되, 필요시 윈도우즈 특이 사항도 설명을 곁들인다.



1 Hello, World!


K&R The C Book 이후로 모든 프로그래밍의 시발점인 Hello, world!를 러스트로 프로그래밍 해 보겠다. 만약 K&R Hello, world!에서 간단한 floating point 사칙 연산과 변수 지정 같은 걸 넣었으면 해당 언어 특성을 더 잘 알 수 있었을 텐데라는 아쉬움이 있다.



1.1  안녕하세요! Hello, world! 작성



우선 터미널을 열고 (윈도우에서는 cmd 또는 파워쉘(강력 추천)) 손에 익은 편집기를 실행해서 Hello, World!를 쓰는 방법이 있다. 러스트에서 파일 이름은 helloworld.rs보다는 hello_world.rs처럼 두 단어 이상을 쓸 때에는 밑줄로 두 단어를 잇는 방식을 선호한다. 파일 확장자 rs는 러스트 파일 확장자이다.


fn main() {
    println!("안녕하세요! Hello, world!");
}


편집기에서 이렇게 작성을 하고 hello_world.rs로 저장을 하면 된다. development, rust 등등 디렉토리를 하나 만들어서 거기에 저장을 해서 쓰면 좋다.

위 코드를 보면 무엇인가 C와 비슷하면서도 다른 걸 알 수 있다. 베타 기간 동안 많은 변화를 겪으면서 현재 이 문법으로 정착을 하였다. 간결하고 좋다.



1.1.1  러스트 문법



fn main() {

}



fn main()은 러스트에서 함수를 정의한다. main 함수는 특별한데, 모든 러스트 프로그램을 시작하는 함수이다. 반드시 써야 한다. C에서 main과 같다. 이를 일반적인 말로 풀어보면 “나는 지금 이름이 메인이라는 함수를 어떤 변수 또는 인수는 없고 받는 값 없이 선언한다.”라고 할 수 있다. 만약 변수가 있다면 ()안에 들어갈 것이다. 여기서는 이 함수로부터 아무 것도 되돌려 받지 않기 때문에 회귀 유형(return type)은 통채로 생략하였다.

함수는 {}로 시작과 끝을 감싼다. 모든 함수는 이런 형태를 띈다. 사용자 습관에 따라 다르지만, 함수를 선언한 줄에 한 칸을 띄우고 함수 시작 {을 하면 좋다.

main() 안에는


    println!("안녕하세요! Hello, world!");


가 있다. 이 한 줄은 글자를 화면에 표시하는, 이 작은 프로그램이 하는 모든 일을 다 한다.

여기서 중요한 사항이 있다. 우선 printl!("안녕하세요! Hello, world!");앞에서 네 칸을 띄워서 쓴다. 텝이 아니다.

둘째로 println!()을 러스트에서는 매크로(macro)라고 부르는데, 러스트에서 메타프로그래밍을 처리하는 방법이다. 만약 매크로가 아니라 함수로 부른다면 println()이라고 써야 한다(!이 없다). 매크로에 대한 자세한 얘기는 추후 서술한다. 여기서는 명령어에 '!'붙으면, 이는 일반 함수가 아니라 매크로를 불러 쓴다는 사실이다.

"Hello, world!"는 문자열(string)이다. 의외로 문자열은 시스템 프로그래밍 언어에서 상당히 복잡한 내용이다. 여기서는 정적 할당 문자열(statically allocated string)이라는 점만 알아 두자. 이 문자열을 println!이라는 매크로로 전달을 하면, println!이라는 매크로는 이를 화면에 표시를 한다.

러스트는 표시위주 언어(expression-oriented language)인데, 이는 대부분을 표시문(expression)으로 여기고 진술문(statements)로 여기지 않는다는 뜻이다. ;(세미콜론)으로 끝이 나는 줄은 해당 표시문이 끝났다는 뜻이고 다음 표시문을 시작할 준비를 했다는 뜻이다. 그러므로 거의 대부분 러스트 코드는 ;으로 끝난다.



1.2  편집기



참고로 편집기에는 문법에 따라 글자색을 달리 보여주는 기능이 있는데, 만약 러스트 문법을 지원하지 않는다면, 이 기능을 추가로 설치하여 쓰면 좋다. 러스트 문법 구별 기능은 vim(또는 gvim. 윈도우에서는 gvim 지원), Emacs 등 전통적인 편집기 외에도 Atom, Gedit(Gnome 편집기. 윈도우 미지원), 윈도우즈 메모장 등 여러 편집기에서 추가 기능으로 지원을 한다. 어떤 편집기에서도 작성을 할 수 있고 사용자 손에 가장 익숙한 편집기를 쓰면 좋다. 만약 처음 시작한다면, 상대적으로 가볍고 쓰기 편하며 부가 기능 추가도 쉬운 Atom을 써 보면 좋다.



1.3  컴파일



위에서 작성한 코드를 hello_world.rs로 저장을 하였으면 컴파일을 할 차례다. 컴파일을 하지 않으면 hello_world.rs는 단순한 텍스트 파일일뿐이다.


$ rustc hello_world.rs
$ ./hello_world
Hello, world!


저장한 코드에 오타 등 실수가 없다면 에러없이 위처럼 결과가 나올 것이다. 윈도우즈에서는 컴파일 후 실행파일 이름은 hello_world.exe이고, 리눅스/OSX에서와 달리 ./ 없이 그대로 입력을 하면 실행을 한다.

이제 어떤 파일을 만들었는지 보자.


$ ls
hello_world hello_world.rs



윈도우즈에서는


$ dir
hello_world.exe hello_world.rs



두 파일이 있다. *.rs 파일은 프로그래밍 코드 소스 파일이고, 다른 파일은 실행 파일이다.

이제 러스트 프로그래밍의 가장 기본적인 과정을 마쳤다. 조금 더 들어가 보자.





※ 작성 참고 및 편역 문헌: "The Book," The Rust Programming Language