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