Rust: 두 판 사이의 차이

securewiki>관리자
새 문서: Rust는, 2007년 7월 7일, 세상에 처음으로 공개된, 프로그래밍 언어이다. Rust는 Mozilla의 직원인 Graydon Hoare의 사이드 프로젝트로 시작되었다.<ref>https://www.talentopia.com/news/the-rust-programming-language-its-history-and-why/</ref>
 
Gaon12 (토론 / 기여)
문법 내용, 역사 등 추가
 
(다른 사용자 한 명의 중간 판 하나는 보이지 않습니다)
1번째 줄: 1번째 줄:
Rust는, 2007년 7월 7일, 세상에 처음으로 공개된, 프로그래밍 언어이다. Rust는 Mozilla의 직원인 Graydon Hoare의 사이드 프로젝트로 시작되었다.<ref>https://www.talentopia.com/news/the-rust-programming-language-its-history-and-why/</ref>
== 개요 ==
 
'''Rust'''(러스트)는 [[Mozilla]]에서 개발한 시스템 프로그래밍 언어로, '''메모리 안전성'''과 '''성능'''을 동시에 추구하는 것이 특징이다. C/C++의 성능을 유지하면서도 메모리 관련 오류를 컴파일 타임에 방지할 수 있도록 설계되었다.
 
언어 이름인 'Rust'는 '''곰팡이'''를 뜻하는 영어 단어에서 따온 것으로, 개발자들이 '''견고하고 내구성이 강한''' 언어를 만들고자 하는 의도를 담고 있다. ~~녹이 아니다~~
 
== 역사 ==
 
=== 초기 개발 (2010-2015) ===
 
Rust는 '''2010년'''에 Mozilla 직원이었던 '''Graydon Hoare'''에 의해 개시된 개인 프로젝트에서 시작되었다. Mozilla는 이 프로젝트에 관심을 보이며 2010년부터 공식적으로 후원하기 시작했다.
 
* '''2010년''' - Graydon Hoare가 개인 프로젝트로 시작
* '''2011년''' - 첫 번째 컴파일된 "Hello, world!" 프로그램 실행 성공
* '''2012년''' - 첫 번째 프리알파 릴리스 (0.1)
* '''2013년''' - 첫 번째 알파 릴리스 (0.6)
* '''2014년''' - 베타 릴리스 (0.9-0.12)
* '''2015년 5월 15일''' - '''Rust 1.0''' 출시
 
=== 안정화 이후 (2015-현재) ===
 
1.0 출시 이후 Rust는 '''6주마다''' 새로운 버전을 출시하는 정기 릴리스 사이클을 유지하고 있다. 이는 [[Firefox]]의 릴리스 사이클과 유사하다.
 
주요 마일스톤:
* '''2016년''' - Rust 1.12에서 [[MIR]](Mid-level Intermediate Representation) 도입
* '''2018년''' - '''Rust 2018 Edition''' 출시, 언어의 새로운 에디션 시스템 도입
* '''2019년''' - '''async/await''' 문법 안정화
* '''2021년''' - '''Rust 2021 Edition''' 출시
* '''2024년''' - '''const generics''' 완전 안정화
 
== 특징 ==
 
=== 메모리 안전성 ===
 
Rust의 가장 큰 특징은 '''가비지 컬렉터 없이도 메모리 안전성을 보장'''한다는 것이다. 이는 '''소유권(Ownership)''' 시스템을 통해 달성된다.
 
==== 소유권 시스템 ====
 
Rust의 소유권 시스템은 다음 세 가지 규칙을 기반으로 한다:
 
# '''각각의 값은 소유자(owner)가 있다'''
# '''한 번에 오직 하나의 소유자만 있을 수 있다'''
# '''소유자가 스코프 밖으로 벗어나면, 값이 버려진다(dropped)'''
 
<syntaxhighlight lang="rust">
fn main() {
    let s1 = String::from("hello");
    let s2 = s1; // s1의 소유권이 s2로 이동(move)
    // println!("{}", s1); // 컴파일 에러! s1은 더 이상 유효하지 않음
    println!("{}", s2); // 정상 작동
}
</syntaxhighlight>
 
==== 빌림(Borrowing) ====
 
소유권을 이전하지 않고 값을 '''참조'''할 수 있는 시스템이다.
 
* '''불변 참조(&T)''': 여러 개 동시 존재 가능
* '''가변 참조(&mut T)''': 한 번에 하나만 존재 가능
 
<syntaxhighlight lang="rust>
fn main() {
    let mut s = String::from("hello");
    let r1 = &s; // 불변 참조
    let r2 = &s; // 불변 참조 (동시 존재 가능)
    let r3 = &mut s; // 컴파일 에러! 불변 참조와 가변 참조 동시 존재 불가
}
</syntaxhighlight>
 
=== 성능 ===
 
Rust는 '''제로 비용 추상화(Zero-cost abstractions)'''를 목표로 한다. 이는 고수준 기능을 사용하더라도 런타임 오버헤드가 없다는 의미이다.
 
* '''컴파일 타임 최적화''': 대부분의 검사와 최적화가 컴파일 시점에 수행됨
* '''인라인 최적화''': 함수 호출 오버헤드 제거
* '''LLVM 백엔드''': 강력한 코드 최적화
 
벤치마크 결과 C/C++와 '''거의 동일한 성능'''을 보여준다. ~~때로는 더 빠르기도 하다~~
 
=== 동시성(Concurrency) ===
 
Rust는 '''안전한 동시성'''을 위한 다양한 기능을 제공한다.
 
==== 스레드 ====
 
<syntaxhighlight lang="rust">
use std::thread;
 
fn main() {
    let handle = thread::spawn(|| {
        for i in 1..10 {
            println!("스레드에서 숫자 {}!", i);
        }
    });
 
    handle.join().unwrap();
}
</syntaxhighlight>
 
==== async/await ====
 
'''2019년'''부터 안정화된 비동기 프로그래밍 지원이다.
 
<syntaxhighlight lang="rust">
async fn hello_world() {
    println!("Hello, world!");
}
 
#[tokio::main]
async fn main() {
    hello_world().await;
}
</syntaxhighlight>
 
=== 타입 시스템 ===
 
Rust는 '''강력한 정적 타입 시스템'''을 가지고 있다.
 
==== 열거형(Enum) ====
 
다른 언어의 enum보다 '''훨씬 강력'''하다. 각 variant가 데이터를 가질 수 있다.
 
<syntaxhighlight lang="rust">
enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}
</syntaxhighlight>
 
==== Option과 Result ====
 
'''null pointer exception'''을 방지하기 위해 `Option<T>` 타입을 사용한다.
 
<syntaxhighlight lang="rust">
enum Option<T> {
    Some(T),
    None,
}
</syntaxhighlight>
 
에러 처리를 위해서는 `Result<T, E>` 타입을 사용한다.
 
<syntaxhighlight lang="rust">
enum Result<T, E> {
    Ok(T),
    Err(E),
}
</syntaxhighlight>
 
==== 패턴 매칭 ====
 
`match` 표현식을 통한 강력한 패턴 매칭을 지원한다.
 
<syntaxhighlight lang="rust">
match some_option {
    Some(x) => println!("값: {}", x),
    None => println!("값 없음"),
}
</syntaxhighlight>
 
== 도구 체계(Toolchain) ==
 
=== Cargo ===
 
Rust의 '''공식 빌드 도구이자 패키지 매니저'''이다. [[npm]], [[pip]] 같은 역할을 한다.
 
* '''프로젝트 생성''': `cargo new project_name`
* '''빌드''': `cargo build`
* '''실행''': `cargo run`
* '''테스트''': `cargo test`
* '''의존성 관리''': `Cargo.toml` 파일을 통해 관리
 
==== Crates.io ====
 
Rust 패키지 저장소로, '''npm registry'''의 Rust 버전이라고 볼 수 있다. 2025년 현재 '''10만 개 이상'''의 크레이트가 등록되어 있다.
 
=== rustfmt ===
 
Rust 코드 '''자동 포맷팅''' 도구이다. 일관된 코드 스타일을 유지할 수 있게 해준다.
 
=== clippy ===
 
Rust '''린터(linter)'''로, 코드의 품질을 높이고 일반적인 실수를 방지하는 데 도움을 준다.
 
<syntaxhighlight lang="bash">
cargo clippy
</syntaxhighlight>
 
=== rustup ===
 
Rust '''툴체인 관리자'''이다. 여러 버전의 Rust를 설치하고 관리할 수 있다.
 
== 에디션(Edition) ==
 
Rust는 '''하위 호환성'''을 유지하면서도 언어를 발전시키기 위해 '''에디션''' 시스템을 도입했다.
 
=== Rust 2015 ===
 
첫 번째 에디션으로, Rust 1.0이 출시된 2015년의 언어 사양이다.
 
=== Rust 2018 ===
 
* '''모듈 시스템 개선'''
* '''NLL(Non-Lexical Lifetimes)''' 도입
* '''dyn Trait''' 문법 도입
* '''async/await''' 기초 작업
 
=== Rust 2021 ===
 
* '''디스조인트 캡처(Disjoint captures)''' 개선
* '''IntoIterator for arrays''' 추가
* '''Cargo resolver version 2''' 기본값으로 설정
 
== 생태계 ==
 
=== 웹 개발 ===
 
* '''[[Actix]]''': 고성능 웹 프레임워크
* '''[[Rocket]]''': 타입 안전한 웹 프레임워크
* '''[[Axum]]''': 모듈식 웹 프레임워크
* '''[[Warp]]''': 합성 가능한 웹 프레임워크
 
=== 시스템 프로그래밍 ===
 
* '''[[Redox]]''': Rust로 작성된 운영체제
* '''[[Servo]]''': Rust로 작성된 웹 브라우저 엔진
* '''[[Firecracker]]''': [[AWS]]의 마이크로VM 모니터
 
=== 게임 개발 ===
 
* '''[[Bevy]]''': 모던 게임 엔진
* '''[[Macroquad]]''': 간단한 크로스 플랫폼 게임 라이브러리
* '''[[Godot-rust]]''': [[Godot]] 엔진용 Rust 바인딩
 
=== CLI 도구 ===
 
* '''[[ripgrep]]''': grep의 Rust 구현체, '''매우 빠름'''
* '''[[fd]]''': find의 현대적 대안
* '''[[bat]]''': cat의 현대적 대안
* '''[[exa]]''': ls의 현대적 대안
* '''[[tokei]]''': 코드 라인 카운터
 
=== 크로스 컴파일 ===
 
Rust는 '''크로스 컴파일'''을 잘 지원한다. 한 플랫폼에서 다른 플랫폼용 바이너리를 생성할 수 있다.
 
<syntaxhighlight lang="bash">
# Windows용 바이너리를 Linux에서 빌드
cargo build --target x86_64-pc-windows-gnu
</syntaxhighlight>
 
지원하는 플랫폼:
* '''Windows''' (x86, x86_64, ARM64)
* '''macOS''' (x86_64, ARM64)
* '''Linux''' (x86, x86_64, ARM, ARM64)
* '''FreeBSD''', '''OpenBSD''', '''NetBSD'''
* '''Android''', '''iOS'''
* '''WebAssembly'''
 
== WebAssembly ==
 
Rust는 '''WebAssembly(WASM)''' 타겟을 '''일급 시민'''으로 지원한다. 웹 브라우저에서 네이티브 수준의 성능으로 Rust 코드를 실행할 수 있다.
 
<syntaxhighlight lang="bash">
# WASM 타겟 추가
rustup target add wasm32-unknown-unknown
 
# WASM으로 컴파일
cargo build --target wasm32-unknown-unknown
</syntaxhighlight>
 
관련 도구:
* '''wasm-pack''': Rust-generated WebAssembly 패키징 도구
* '''wasm-bindgen''': JavaScript와 Rust 간의 고수준 바인딩
 
== 메모리 모델 ==
 
=== 스택과 힙 ===
 
Rust는 '''스택'''과 '''힙'''을 명확히 구분한다.
 
* '''스택''': 빠른 접근, 자동 정리, 크기 제한
* '''힙''': 동적 할당, 수동 관리 필요, 크기 제한 없음
 
=== Box<T> ===
 
힙에 데이터를 할당하기 위한 '''스마트 포인터'''이다.
 
<syntaxhighlight lang="rust">
let b = Box::new(5);
println!("b = {}", b);
</syntaxhighlight>
 
=== Rc<T>와 Arc<T> ===
 
* '''Rc<T>''': Reference Counted, 단일 스레드용
* '''Arc<T>''': Atomically Reference Counted, 멀티 스레드용
 
<syntaxhighlight lang="rust">
use std::rc::Rc;
 
let rc_examples = Rc::new("참조 카운팅");
let rc1 = Rc::clone(&rc_examples);
let rc2 = Rc::clone(&rc_examples);
</syntaxhighlight>
 
== 매크로 시스템 ==
 
Rust는 '''강력한 매크로 시스템'''을 제공한다.
 
=== 선언적 매크로 ===
 
`macro_rules!`를 사용하여 정의한다.
 
<syntaxhighlight lang="rust">
macro_rules! vec {
    ( $( $x:expr ),* ) => {
        {
            let mut temp_vec = Vec::new();
            $(
                temp_vec.push($x);
            )*
            temp_vec
        }
    };
}
</syntaxhighlight>
 
=== 절차적 매크로 ===
 
더 복잡한 코드 생성이 가능하다.
 
* '''Derive 매크로''': `#[derive(Debug)]`
* '''Attribute-like 매크로''': `#[route(GET, "/")]`
* '''Function-like 매크로''': `sql!(...)`
 
== 테스트 ==
 
Rust는 '''내장 테스트 프레임워크'''를 제공한다.
 
<syntaxhighlight lang="rust">
#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        let result = 2 + 2;
        assert_eq!(result, 4);
    }
 
    #[test]
    #[should_panic]
    fn another() {
        panic!("이 테스트는 패닉해야 합니다");
    }
}
</syntaxhighlight>
 
=== 문서 테스트 ===
 
'''독특하게도''' 문서 내의 예제 코드도 테스트할 수 있다.
 
<syntaxhighlight lang="rust">
/// 두 수를 더하는 함수
///
/// # Examples
///
/// ```
/// assert_eq!(add(2, 3), 5);
/// ```
fn add(a: i32, b: i32) -> i32 {
    a + b
}
</syntaxhighlight>
 
== 성능 특성 ==
 
=== 벤치마크 결과 ===
 
다양한 벤치마크에서 Rust는 '''C/C++와 비슷한 성능'''을 보여준다.
 
* '''메모리 사용량''': C/C++와 유사
* '''실행 속도''': C/C++의 95-105% 수준
* '''컴파일 속도''': C++보다 빠름, Go보다 느림
 
=== 최적화 ===
 
* '''LTO(Link Time Optimization)''' 지원
* '''PGO(Profile Guided Optimization)''' 지원
* '''SIMD''' 명령어 활용 가능
 
## 커뮤니티와 거버넌스 ==
 
=== Rust Foundation ===
 
'''2020년'''에 설립된 비영리 재단으로, Rust 언어의 발전을 지원한다.
 
창립 멤버:
* '''Mozilla'''
* '''AWS'''
* '''Huawei'''
* '''Google'''
* '''Microsoft'''
 
=== RFC 프로세스 ===
 
Rust는 '''RFC(Request for Comments)''' 프로세스를 통해 언어 변경사항을 결정한다. 누구나 RFC를 제출할 수 있으며, 공개적인 토론을 거쳐 결정된다.
 
=== 행동 강령 ===
 
Rust 커뮤니티는 '''포용적이고 환영하는''' 환경을 조성하기 위해 엄격한 행동 강령을 유지한다.
 
== 학습 자료 ==
 
=== 공식 자료 ===
 
* '''The Rust Programming Language''' (일명 "The Book"): 공식 튜토리얼
* '''Rust by Example''': 예제 중심 학습서
* '''The Cargo Book''': Cargo 가이드
* '''The Rustonomicon''': 고급 및 unsafe Rust 가이드
 
=== 한국어 자료 ===
 
* '''러스트 프로그래밍 공식 가이드''' (한빛미디어)
* '''러스트 프로그래밍''' (인사이트)
* 다양한 온라인 번역본들
 
== 비판과 한계 ==
 
=== 학습 곡선 ===
 
Rust는 '''학습하기 어려운''' 언어로 유명하다. 특히 소유권 시스템은 기존 언어에 익숙한 개발자에게 새로운 개념이다.
 
* '''빌림 검사기(borrow checker)'''와의 싸움: "Fighting the borrow checker"라는 표현이 있을 정도
* '''라이프타임''' 개념의 복잡성
* '''async''' 프로그래밍의 복잡성
 
=== 컴파일 시간 ===
 
복잡한 타입 검사와 최적화로 인해 '''컴파일 시간이 긴''' 편이다. 특히 대형 프로젝트에서는 상당한 시간이 소요된다.
 
=== 생태계 ===
 
비교적 '''새로운 언어'''이기 때문에 일부 영역에서는 라이브러리가 부족할 수 있다. 하지만 빠르게 발전하고 있다.
 
== 미래 전망 ==
 
=== 채택 현황 ===
 
* '''[[Microsoft]]''': Windows 커널 일부를 Rust로 재작성
* '''[[Google]]''': Android 시스템 컴포넌트에 Rust 도입
* '''[[Facebook]]''': Libra(Diem) 블록체인을 Rust로 개발
* '''[[Dropbox]]''': 스토리지 시스템을 Rust로 재작성
* '''[[Cloudflare]]''': 다양한 서비스에 Rust 활용
 
=== 향후 계획 ===
 
* '''GAT(Generic Associated Types)''' 완전 안정화
* '''async''' 생태계 개선
* '''compile time''' 단축
* '''IDE 지원''' 개선
 
== 관련 언어 ==
 
* '''[[C++]]''': Rust가 대체하고자 하는 주요 타겟
* '''[[Go]]''': 동시성 프로그래밍 언어로 자주 비교됨
* '''[[Zig]]''': 비슷한 목표를 가진 시스템 프로그래밍 언어
* '''[[Nim]]''': 성능과 안전성을 추구하는 언어
* '''[[Crystal]]''': Ruby 문법의 컴파일 언어
 
== 여담 ==
 
* Rust의 '''마스코트'''는 '''Ferris the Crab'''(게)이다. 🦀 이모지로도 유명하다.
* '''Rewrite it in Rust'''는 Rust 커뮤니티의 '''유명한 밈'''이다. ~~모든 것을 Rust로 다시 써야 한다~~
* '''rustacean'''은 Rust 개발자를 지칭하는 단어다. crustacean(갑각류)에서 따온 것.
* Rust 1.0 출시일인 '''5월 15일'''은 비공식적으로 "Rust Day"로 불린다.
* '''무어헤드 행성인'''들이 Rust를 개발했다는 농담이 있다. ~~소유권 시스템이 외계 기술인 것 같기 때문~~
 
== 참고 자료 ==
 
* [https://www.rust-lang.org/ 공식 웹사이트]
* [https://doc.rust-lang.org/book/ The Rust Programming Language]
* [https://github.com/rust-lang/rust GitHub 저장소]
* [https://crates.io/ Crates.io]
* [https://forge.rust-lang.org/ Rust Forge]
 
== 분류 ==
 
[[분류:프로그래밍 언어]]
[[분류:시스템 프로그래밍]]
[[분류:Mozilla]]
[[분류:오픈 소스]]
[[분류:2015년 소프트웨어]]

2025년 7월 24일 (목) 16:05 기준 최신판

개요[편집 / 원본 편집]

Rust(러스트)는 Mozilla에서 개발한 시스템 프로그래밍 언어로, 메모리 안전성성능을 동시에 추구하는 것이 특징이다. C/C++의 성능을 유지하면서도 메모리 관련 오류를 컴파일 타임에 방지할 수 있도록 설계되었다.

언어 이름인 'Rust'는 곰팡이를 뜻하는 영어 단어에서 따온 것으로, 개발자들이 견고하고 내구성이 강한 언어를 만들고자 하는 의도를 담고 있다. 녹이 아니다

역사[편집 / 원본 편집]

초기 개발 (2010-2015)[편집 / 원본 편집]

Rust는 2010년에 Mozilla 직원이었던 Graydon Hoare에 의해 개시된 개인 프로젝트에서 시작되었다. Mozilla는 이 프로젝트에 관심을 보이며 2010년부터 공식적으로 후원하기 시작했다.

  • 2010년 - Graydon Hoare가 개인 프로젝트로 시작
  • 2011년 - 첫 번째 컴파일된 "Hello, world!" 프로그램 실행 성공
  • 2012년 - 첫 번째 프리알파 릴리스 (0.1)
  • 2013년 - 첫 번째 알파 릴리스 (0.6)
  • 2014년 - 베타 릴리스 (0.9-0.12)
  • 2015년 5월 15일 - Rust 1.0 출시

안정화 이후 (2015-현재)[편집 / 원본 편집]

1.0 출시 이후 Rust는 6주마다 새로운 버전을 출시하는 정기 릴리스 사이클을 유지하고 있다. 이는 Firefox의 릴리스 사이클과 유사하다.

주요 마일스톤:

  • 2016년 - Rust 1.12에서 MIR(Mid-level Intermediate Representation) 도입
  • 2018년 - Rust 2018 Edition 출시, 언어의 새로운 에디션 시스템 도입
  • 2019년 - async/await 문법 안정화
  • 2021년 - Rust 2021 Edition 출시
  • 2024년 - const generics 완전 안정화

특징[편집 / 원본 편집]

메모리 안전성[편집 / 원본 편집]

Rust의 가장 큰 특징은 가비지 컬렉터 없이도 메모리 안전성을 보장한다는 것이다. 이는 소유권(Ownership) 시스템을 통해 달성된다.

소유권 시스템[편집 / 원본 편집]

Rust의 소유권 시스템은 다음 세 가지 규칙을 기반으로 한다:

  1. 각각의 값은 소유자(owner)가 있다
  2. 한 번에 오직 하나의 소유자만 있을 수 있다
  3. 소유자가 스코프 밖으로 벗어나면, 값이 버려진다(dropped)
fn main() {
    let s1 = String::from("hello");
    let s2 = s1; // s1의 소유권이 s2로 이동(move)
    // println!("{}", s1); // 컴파일 에러! s1은 더 이상 유효하지 않음
    println!("{}", s2); // 정상 작동
}

빌림(Borrowing)[편집 / 원본 편집]

소유권을 이전하지 않고 값을 참조할 수 있는 시스템이다.

  • 불변 참조(&T): 여러 개 동시 존재 가능
  • 가변 참조(&mut T): 한 번에 하나만 존재 가능
fn main() {
    let mut s = String::from("hello");
    let r1 = &s; // 불변 참조
    let r2 = &s; // 불변 참조 (동시 존재 가능)
    let r3 = &mut s; // 컴파일 에러! 불변 참조와 가변 참조 동시 존재 불가
}

성능[편집 / 원본 편집]

Rust는 제로 비용 추상화(Zero-cost abstractions)를 목표로 한다. 이는 고수준 기능을 사용하더라도 런타임 오버헤드가 없다는 의미이다.

  • 컴파일 타임 최적화: 대부분의 검사와 최적화가 컴파일 시점에 수행됨
  • 인라인 최적화: 함수 호출 오버헤드 제거
  • LLVM 백엔드: 강력한 코드 최적화

벤치마크 결과 C/C++와 거의 동일한 성능을 보여준다. 때로는 더 빠르기도 하다

동시성(Concurrency)[편집 / 원본 편집]

Rust는 안전한 동시성을 위한 다양한 기능을 제공한다.

스레드[편집 / 원본 편집]

use std::thread;

fn main() {
    let handle = thread::spawn(|| {
        for i in 1..10 {
            println!("스레드에서 숫자 {}!", i);
        }
    });

    handle.join().unwrap();
}

async/await[편집 / 원본 편집]

2019년부터 안정화된 비동기 프로그래밍 지원이다.

async fn hello_world() {
    println!("Hello, world!");
}

#[tokio::main]
async fn main() {
    hello_world().await;
}

타입 시스템[편집 / 원본 편집]

Rust는 강력한 정적 타입 시스템을 가지고 있다.

열거형(Enum)[편집 / 원본 편집]

다른 언어의 enum보다 훨씬 강력하다. 각 variant가 데이터를 가질 수 있다.

enum Message {
    Quit,
    Move { x: i32, y: i32 },
    Write(String),
    ChangeColor(i32, i32, i32),
}

Option과 Result[편집 / 원본 편집]

null pointer exception을 방지하기 위해 `Option<T>` 타입을 사용한다.

enum Option<T> {
    Some(T),
    None,
}

에러 처리를 위해서는 `Result<T, E>` 타입을 사용한다.

enum Result<T, E> {
    Ok(T),
    Err(E),
}

패턴 매칭[편집 / 원본 편집]

`match` 표현식을 통한 강력한 패턴 매칭을 지원한다.

match some_option {
    Some(x) => println!("값: {}", x),
    None => println!("값 없음"),
}

도구 체계(Toolchain)[편집 / 원본 편집]

Cargo[편집 / 원본 편집]

Rust의 공식 빌드 도구이자 패키지 매니저이다. npm, pip 같은 역할을 한다.

  • 프로젝트 생성: `cargo new project_name`
  • 빌드: `cargo build`
  • 실행: `cargo run`
  • 테스트: `cargo test`
  • 의존성 관리: `Cargo.toml` 파일을 통해 관리

Crates.io[편집 / 원본 편집]

Rust 패키지 저장소로, npm registry의 Rust 버전이라고 볼 수 있다. 2025년 현재 10만 개 이상의 크레이트가 등록되어 있다.

rustfmt[편집 / 원본 편집]

Rust 코드 자동 포맷팅 도구이다. 일관된 코드 스타일을 유지할 수 있게 해준다.

clippy[편집 / 원본 편집]

Rust 린터(linter)로, 코드의 품질을 높이고 일반적인 실수를 방지하는 데 도움을 준다.

cargo clippy

rustup[편집 / 원본 편집]

Rust 툴체인 관리자이다. 여러 버전의 Rust를 설치하고 관리할 수 있다.

에디션(Edition)[편집 / 원본 편집]

Rust는 하위 호환성을 유지하면서도 언어를 발전시키기 위해 에디션 시스템을 도입했다.

Rust 2015[편집 / 원본 편집]

첫 번째 에디션으로, Rust 1.0이 출시된 2015년의 언어 사양이다.

Rust 2018[편집 / 원본 편집]

  • 모듈 시스템 개선
  • NLL(Non-Lexical Lifetimes) 도입
  • dyn Trait 문법 도입
  • async/await 기초 작업

Rust 2021[편집 / 원본 편집]

  • 디스조인트 캡처(Disjoint captures) 개선
  • IntoIterator for arrays 추가
  • Cargo resolver version 2 기본값으로 설정

생태계[편집 / 원본 편집]

웹 개발[편집 / 원본 편집]

  • Actix: 고성능 웹 프레임워크
  • Rocket: 타입 안전한 웹 프레임워크
  • Axum: 모듈식 웹 프레임워크
  • Warp: 합성 가능한 웹 프레임워크

시스템 프로그래밍[편집 / 원본 편집]

  • Redox: Rust로 작성된 운영체제
  • Servo: Rust로 작성된 웹 브라우저 엔진
  • Firecracker: AWS의 마이크로VM 모니터

게임 개발[편집 / 원본 편집]

CLI 도구[편집 / 원본 편집]

  • ripgrep: grep의 Rust 구현체, 매우 빠름
  • fd: find의 현대적 대안
  • bat: cat의 현대적 대안
  • exa: ls의 현대적 대안
  • tokei: 코드 라인 카운터

크로스 컴파일[편집 / 원본 편집]

Rust는 크로스 컴파일을 잘 지원한다. 한 플랫폼에서 다른 플랫폼용 바이너리를 생성할 수 있다.

# Windows용 바이너리를 Linux에서 빌드
cargo build --target x86_64-pc-windows-gnu

지원하는 플랫폼:

  • Windows (x86, x86_64, ARM64)
  • macOS (x86_64, ARM64)
  • Linux (x86, x86_64, ARM, ARM64)
  • FreeBSD, OpenBSD, NetBSD
  • Android, iOS
  • WebAssembly

WebAssembly[편집 / 원본 편집]

Rust는 WebAssembly(WASM) 타겟을 일급 시민으로 지원한다. 웹 브라우저에서 네이티브 수준의 성능으로 Rust 코드를 실행할 수 있다.

# WASM 타겟 추가
rustup target add wasm32-unknown-unknown

# WASM으로 컴파일
cargo build --target wasm32-unknown-unknown

관련 도구:

  • wasm-pack: Rust-generated WebAssembly 패키징 도구
  • wasm-bindgen: JavaScript와 Rust 간의 고수준 바인딩

메모리 모델[편집 / 원본 편집]

스택과 힙[편집 / 원본 편집]

Rust는 스택을 명확히 구분한다.

  • 스택: 빠른 접근, 자동 정리, 크기 제한
  • : 동적 할당, 수동 관리 필요, 크기 제한 없음

Box<T>[편집 / 원본 편집]

힙에 데이터를 할당하기 위한 스마트 포인터이다.

let b = Box::new(5);
println!("b = {}", b);

Rc<T>와 Arc<T>[편집 / 원본 편집]

  • Rc<T>: Reference Counted, 단일 스레드용
  • Arc<T>: Atomically Reference Counted, 멀티 스레드용
use std::rc::Rc;

let rc_examples = Rc::new("참조 카운팅");
let rc1 = Rc::clone(&rc_examples);
let rc2 = Rc::clone(&rc_examples);

매크로 시스템[편집 / 원본 편집]

Rust는 강력한 매크로 시스템을 제공한다.

선언적 매크로[편집 / 원본 편집]

`macro_rules!`를 사용하여 정의한다.

macro_rules! vec {
    ( $( $x:expr ),* ) => {
        {
            let mut temp_vec = Vec::new();
            $(
                temp_vec.push($x);
            )*
            temp_vec
        }
    };
}

절차적 매크로[편집 / 원본 편집]

더 복잡한 코드 생성이 가능하다.

  • Derive 매크로: `#[derive(Debug)]`
  • Attribute-like 매크로: `#[route(GET, "/")]`
  • Function-like 매크로: `sql!(...)`

테스트[편집 / 원본 편집]

Rust는 내장 테스트 프레임워크를 제공한다.

#[cfg(test)]
mod tests {
    #[test]
    fn it_works() {
        let result = 2 + 2;
        assert_eq!(result, 4);
    }

    #[test]
    #[should_panic]
    fn another() {
        panic!("이 테스트는 패닉해야 합니다");
    }
}

문서 테스트[편집 / 원본 편집]

독특하게도 문서 내의 예제 코드도 테스트할 수 있다.

/// 두 수를 더하는 함수
/// 
/// # Examples
/// 
/// ```
/// assert_eq!(add(2, 3), 5);
/// ```
fn add(a: i32, b: i32) -> i32 {
    a + b
}

성능 특성[편집 / 원본 편집]

벤치마크 결과[편집 / 원본 편집]

다양한 벤치마크에서 Rust는 C/C++와 비슷한 성능을 보여준다.

  • 메모리 사용량: C/C++와 유사
  • 실행 속도: C/C++의 95-105% 수준
  • 컴파일 속도: C++보다 빠름, Go보다 느림

최적화[편집 / 원본 편집]

  • LTO(Link Time Optimization) 지원
  • PGO(Profile Guided Optimization) 지원
  • SIMD 명령어 활용 가능
    1. 커뮤니티와 거버넌스 ==

Rust Foundation[편집 / 원본 편집]

2020년에 설립된 비영리 재단으로, Rust 언어의 발전을 지원한다.

창립 멤버:

  • Mozilla
  • AWS
  • Huawei
  • Google
  • Microsoft

RFC 프로세스[편집 / 원본 편집]

Rust는 RFC(Request for Comments) 프로세스를 통해 언어 변경사항을 결정한다. 누구나 RFC를 제출할 수 있으며, 공개적인 토론을 거쳐 결정된다.

행동 강령[편집 / 원본 편집]

Rust 커뮤니티는 포용적이고 환영하는 환경을 조성하기 위해 엄격한 행동 강령을 유지한다.

학습 자료[편집 / 원본 편집]

공식 자료[편집 / 원본 편집]

  • The Rust Programming Language (일명 "The Book"): 공식 튜토리얼
  • Rust by Example: 예제 중심 학습서
  • The Cargo Book: Cargo 가이드
  • The Rustonomicon: 고급 및 unsafe Rust 가이드

한국어 자료[편집 / 원본 편집]

  • 러스트 프로그래밍 공식 가이드 (한빛미디어)
  • 러스트 프로그래밍 (인사이트)
  • 다양한 온라인 번역본들

비판과 한계[편집 / 원본 편집]

학습 곡선[편집 / 원본 편집]

Rust는 학습하기 어려운 언어로 유명하다. 특히 소유권 시스템은 기존 언어에 익숙한 개발자에게 새로운 개념이다.

  • 빌림 검사기(borrow checker)와의 싸움: "Fighting the borrow checker"라는 표현이 있을 정도
  • 라이프타임 개념의 복잡성
  • async 프로그래밍의 복잡성

컴파일 시간[편집 / 원본 편집]

복잡한 타입 검사와 최적화로 인해 컴파일 시간이 긴 편이다. 특히 대형 프로젝트에서는 상당한 시간이 소요된다.

생태계[편집 / 원본 편집]

비교적 새로운 언어이기 때문에 일부 영역에서는 라이브러리가 부족할 수 있다. 하지만 빠르게 발전하고 있다.

미래 전망[편집 / 원본 편집]

채택 현황[편집 / 원본 편집]

  • Microsoft: Windows 커널 일부를 Rust로 재작성
  • Google: Android 시스템 컴포넌트에 Rust 도입
  • Facebook: Libra(Diem) 블록체인을 Rust로 개발
  • Dropbox: 스토리지 시스템을 Rust로 재작성
  • Cloudflare: 다양한 서비스에 Rust 활용

향후 계획[편집 / 원본 편집]

  • GAT(Generic Associated Types) 완전 안정화
  • async 생태계 개선
  • compile time 단축
  • IDE 지원 개선

관련 언어[편집 / 원본 편집]

  • C++: Rust가 대체하고자 하는 주요 타겟
  • Go: 동시성 프로그래밍 언어로 자주 비교됨
  • Zig: 비슷한 목표를 가진 시스템 프로그래밍 언어
  • Nim: 성능과 안전성을 추구하는 언어
  • Crystal: Ruby 문법의 컴파일 언어

여담[편집 / 원본 편집]

  • Rust의 마스코트Ferris the Crab(게)이다. 🦀 이모지로도 유명하다.
  • Rewrite it in Rust는 Rust 커뮤니티의 유명한 밈이다. 모든 것을 Rust로 다시 써야 한다
  • rustacean은 Rust 개발자를 지칭하는 단어다. crustacean(갑각류)에서 따온 것.
  • Rust 1.0 출시일인 5월 15일은 비공식적으로 "Rust Day"로 불린다.
  • 무어헤드 행성인들이 Rust를 개발했다는 농담이 있다. 소유권 시스템이 외계 기술인 것 같기 때문

참고 자료[편집 / 원본 편집]

분류[편집 / 원본 편집]

최근 바뀜

더 보기