Rust
Rust는 성능과 메모리 안전성, 동시성을 함께 중시하는 범용 시스템 프로그래밍 언어이다. 가비지 컬렉터에 의존하지 않으면서도 소유권과 차용, 수명 검사로 메모리의 유효성과 자원 해제 시점을 컴파일 단계에서 검사하도록 설계되었다. 이를 통해 수동 메모리 관리가 필요한 저수준 프로그래밍...
| 분류 | 범용 프로그래밍 언어, 시스템 프로그래밍 언어 |
|---|---|
| 패러다임 | 명령형 프로그래밍, 구조적 프로그래밍, 함수형 프로그래밍, 동시성 프로그래밍 |
| 설계자 | 그레이던 호어 |
| 초기 개발 | Mozilla Research |
| 현재 개발 | Rust 프로젝트 |
| 최초 공개 | 2010년 |
| 안정판 최초 공개 | 2015년 5월 15일 |
| 타입 체계 | 정적 타입, 강한 타입, 타입 추론, 대수적 자료형 |
| 메모리 관리 | 소유권과 차용, RAII |
| 주요 구현체 | rustc |
| 패키지 관리자 | Cargo |
| 주요 에디션 | Rust 2015, Rust 2018, Rust 2021, Rust 2024 |
| 라이선스 | Apache License 2.0 또는 MIT License |
| 파일 확장자 | .rs |
Rust는 성능과 메모리 안전성, 동시성을 함께 중시하는 범용 시스템 프로그래밍 언어이다. 가비지 컬렉터에 의존하지 않으면서도 소유권과 차용, 수명 검사로 메모리의 유효성과 자원 해제 시점을 컴파일 단계에서 검사하도록 설계되었다. 이를 통해 수동 메모리 관리가 필요한 저수준 프로그래밍 영역에서도 널 포인터 역참조, 해제 후 사용, 이중 해제, 데이터 경쟁과 같은 여러 종류의 오류를 줄이는 것을 목표로 한다.[1]
Rust 프로그램에서 값은 기본적으로 하나의 소유자를 가지며, 값의 사용 권한은 이동하거나 참조를 통해 빌릴 수 있다. 컴파일러의 차용 검사기는 참조가 원래 값보다 오래 유지되지 않는지, 변경 가능한 참조가 다른 참조와 충돌하지 않는지 등을 검사한다. 이러한 규칙은 별도의 런타임 메모리 추적 없이 적용되며, 일부 저수준 동작이 필요한 경우에는 안전한 코드와 구분되는 unsafe 영역을 사용할 수 있다.
Rust의 추상화 모델은 구조체와 열거형, 패턴 매칭, 제네릭, 트레이트를 중심으로 구성된다. 트레이트는 여러 타입이 공유하는 동작을 정의하며, 제네릭 코드의 제약과 정적 다형성, 연산자 오버로딩, 타입 변환 등 다양한 기능의 기반으로 사용된다. 상속 중심의 전통적인 객체 지향 모델보다는 데이터 구성과 트레이트 구현을 조합하는 방식을 주로 사용한다.
Rust는 기계어로 컴파일되며 기본적으로 가비지 컬렉터나 필수 가상 머신을 요구하지 않는다. 공식 컴파일러인 rustc는 주로 LLVM을 백엔드로 사용하며, 네이티브 실행 파일과 라이브러리, WebAssembly 등의 대상을 생성할 수 있다. 언어가 제공하는 고수준 추상화는 가능한 경우 실행 시 추가 비용 없이 컴파일되도록 설계되며, 필요할 때는 메모리 배치와 포인터, 외부 함수 인터페이스 등을 직접 제어할 수 있다.
언어와 함께 제공되는 Cargo는 프로젝트 생성, 의존성 관리, 빌드, 테스트, 문서 생성과 패키지 배포를 통합한다. 공개 패키지 저장소인 crates.io에는 Rust 라이브러리와 응용 프로그램이 크레이트 단위로 배포된다. rustfmt, Clippy, rust-analyzer, rustdoc, rustup과 같은 공식 도구도 공통 개발 환경의 일부를 이룬다.[2]
Rust는 운영체제 구성 요소, 명령줄 프로그램, 네트워크 서비스, 데이터베이스, 웹 브라우저, 게임 엔진, 임베디드 시스템, 암호화 소프트웨어와 WebAssembly 응용 프로그램 등에 사용된다. C (프로그래밍 언어)와 C++가 전통적으로 사용되던 영역을 주요 대상으로 삼지만, 일반 응용 프로그램과 서버 소프트웨어를 개발하는 데 필요한 고수준 기능도 함께 제공한다.
Rust는 그레이던 호어가 개인 프로젝트로 설계하기 시작했으며 이후 Mozilla Research의 지원을 받아 공개적으로 개발되었다. 수년간의 공개 개발을 거쳐 2015년 5월 15일 Rust 1.0이 발표되었고, 이후 안정성 보장 아래 약 6주 간격으로 새 안정판을 공개하는 개발 방식을 유지하고 있다.[3]
언어의 점진적인 변화는 에디션으로 묶어 제공된다. Rust 2015, Rust 2018, Rust 2021, Rust 2024 에디션은 같은 컴파일러와 패키지 생태계 안에서 함께 사용될 수 있으며, 크레이트마다 사용할 에디션을 선택할 수 있다. 에디션은 기존 코드를 일괄적으로 폐기하는 새 언어 버전이라기보다, 호환성을 유지하면서 문법과 관용적 작성 방식의 변화를 도입하기 위한 경계로 사용된다.[4]
Rust의 언어와 표준 라이브러리, 컴파일러 변경은 공개 제안서인 RFC와 프로젝트 팀의 검토를 통해 진행된다. Rust 프로젝트는 여러 팀과 작업 그룹으로 구성되며, Rust Foundation은 프로젝트에 필요한 인프라와 상표, 재정적·법적 기반을 지원한다. 언어 자체의 기술적 의사 결정과 오픈소스 개발은 Rust 프로젝트의 거버넌스 구조를 중심으로 이루어진다.[5]