귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!== 개요 == '''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년 소프트웨어]] 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림)