redox

위의 이미지는 Rust로 개발한 Unix 스타일의 Redox1 운영체제이다. 현재 개발 단계이며 글 쓴 시점에서 버전은 0.6.0이다. 첫 포스팅에 Redox 이미지를 사용한 이유는 Rust 언어의 성격을 잘 표현해주기 때문이다. 참고로 위의 이미지는 개인 노트북의 VirtualBox에서 실행한 모습이다.

「Redox is a Unix-like Operating System written in Rust, aiming to bring the innovations of Rust to a modern microkernel and full set of applications」 - redox-os.org.

Rust는 성능과 안전성, 특히 안전한 동시성을 위해 설계된 범용 프로그램 언어로 완벽한 메모리 관리에 초점을 맞추고 있다. null 포인터 에러가 언어 차원에서 존재할 수 없다.2 이를 위하여 소유권과 수명이라는 개념이 존재한다.3 구문적으로 C++과 유사하고 성능도 비슷한 수준을 목표로 하고 있다.

Rust 설치

윈도우 사용자는 프로그램을 다운로드하여 설치하고, MacOS, Linux에서는 아래의 스크립트로 설치한다. 설치 후에는 rustup(rust관리), cargo(프로젝트관리), rustc(컴파일러)를 사용한다. 소스 확장자는 .rs 이다.

# https://www.rust-lang.org/tools/install 참고
curl https://sh.rustup.rs -sSf | sh
개발환경 구성

Microsoft의 VSCode를 사용하거나 Jetbrains의 무료 개발툴인 IntelliJ Community 버전에 Rust 프러그인을 추가하여 사용한다. 다음은 VSCode Plugins:

기본 프로젝트 구성

프로젝트 디렉터리를 만들고 이 안에서 cargo init를 실행하면 src/main.rs, Cargo.toml 형태로 기본 뼈대가 만들어진다. 프로젝트 디렉터리에서 cargo build, cargo run을 실행하면 컴파일이 되고 결과를 볼 수 있다. 결과는 target/ 디렉터리에 존재한다. 프로젝트명은 디렉터리 이름이다. 또는 임의의 폴더에서 cargo new hello --bin을 실행하면 hello 디렉터리가 만들어지고 이 안에 프로젝트 파일이 생성된다.

Hello World를 볼 수 있고, 여기에 Rust 특징을 맛보기 위해 아래 소스로 수정하여 다시 빌드해 보자.

// fn main() {
//     println!("Hello, world!");
// }

fn main() {
    let item_vec = vec![vec!["홍길동", "10"], vec!["가나닭", "20", "30"]];

    for mut item in item_vec {
        while let Some(info) = item.pop() {
            if let Ok(number) = info.parse::<i32>() {
                println!("The number is: {}", number);
            }
        }
    }
}

Reference

  1. redox-os.org, “Redox”, 2022.02.17
  2. namu.wiki, “Rust, Option<T>”
  3. doc.rust-lang.org, “Understanding Ownership”