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]

역사

초기 설계

Mozilla의 지원과 공개 개발

1.0 안정판

Rust 프로젝트의 독립

Rust Foundation 설립

에디션의 도입

현대 Rust의 발전

언어 설계와 목표

성능과 저수준 제어

메모리 안전성

스레드 안전성과 동시성

제로 비용 추상화

명시성과 예측 가능성

안전한 코드와 unsafe 코드

문법과 기본 구조

소스 파일과 크레이트

변수와 가변성

표현식과 문장

함수

제어 흐름

패턴과 패턴 매칭

모듈과 가시성

매크로

속성과 조건부 컴파일

타입 체계

원시 타입

튜플과 배열

구조체

열거형

OptionResult

타입 별칭과 새 타입 패턴

정적 타입 검사와 타입 추론

대수적 자료형

절대 반환하지 않는 타입

동적 크기 타입

소유권과 차용

소유권

이동과 복사

참조와 차용

가변 참조

차용 검사기

수명

수명 생략 규칙

내부 가변성

스마트 포인터

순환 참조와 약한 참조

자원과 메모리 관리

스택과 힙

RAII

Drop

Box

참조 계수

메모리 배치

할당자

핀 고정

원시 포인터

unsafe Rust

트레이트와 제네릭

제네릭 타입과 함수

트레이트 정의와 구현

트레이트 경계

연관 타입

기본 타입 매개변수

정적 디스패치

트레이트 객체와 동적 디스패치

일관성 규칙

고차 트레이트 경계

제네릭 연관 타입

오류 처리

복구 가능한 오류

Result

? 연산자

오류 변환

패닉

패닉 전파와 중단

사용자 정의 오류 타입

함수형 프로그래밍 요소

클로저

반복자

고차 함수

불변 데이터 처리

지연 평가

함수 포인터

동시성과 병렬 처리

스레드

메시지 전달

공유 상태

SendSync

원자적 연산

잠금과 동기화

데이터 경쟁 방지

병렬 처리 라이브러리

비동기 프로그래밍

Future

asyncawait

비동기 실행기

비동기 입출력

스트림

취소와 구조화된 동시성

비동기 트레이트

매크로와 메타프로그래밍

선언적 매크로

절차적 매크로

파생 매크로

속성 매크로

함수형 매크로

토큰 스트림

코드 생성

표준 라이브러리

core

alloc

std

컬렉션

문자열과 텍스트

입출력

파일 시스템

네트워크

시간

프로세스와 스레드

동기화 기본 요소

모듈과 패키지 구조

패키지

크레이트

모듈

경로와 이름 해석

워크스페이스

기능 플래그

조건부 의존성

버전과 잠금 파일

컴파일과 실행 모델

rustc

컴파일 단계

단형화

중간 표현

LLVM 백엔드

증분 컴파일

링크와 코드 생성

패닉 구현 방식

크로스 컴파일

WebAssembly

외부 언어와의 연동

C ABI

외부 함수 인터페이스

바인딩 생성

C와 Rust의 혼합

C++와 Rust의 혼합

다른 언어에서 Rust 라이브러리 사용

안전한 추상화 계층

개발 도구와 생태계

rustup

Cargo

crates.io

rustfmt

Clippy

rust-analyzer

rustdoc

테스트와 벤치마크

빌드 스크립트

코드 검사와 공급망 관리

표준화와 거버넌스

Rust 프로젝트

프로젝트 팀과 작업 그룹

RFC 절차

안정화 절차

안정판·베타판·나이틀리 채널

하위 호환성

에디션

Rust Foundation

언어 사양과 참조 문서

주요 구현체와 관련 프로젝트

rustc

GCC Rust

Rust-GCC 코드 생성 백엔드

Cranelift 코드 생성 백엔드

Miri

Rust 표준 라이브러리

대체 표준 라이브러리와 런타임

플랫폼 지원

플랫폼 지원 등급

Linux와 BSD

Windows

macOS와 Apple 플랫폼

임베디드 시스템

WebAssembly

운영체제 없는 환경

특수 목적 플랫폼

활용 분야

시스템 소프트웨어

운영체제와 커널

명령줄 프로그램

네트워크 서비스

웹 백엔드

데이터베이스와 저장소

웹 브라우저

게임과 게임 엔진

임베디드 시스템

암호화와 보안 소프트웨어

과학 계산과 고성능 컴퓨팅

WebAssembly 응용 프로그램

다른 프로그래밍 언어와의 관계

C

C++

ML 계열 언어

Haskell

Cyclone

Swift

Go

Zig

Wave (프로그래밍 언어)

다른 언어에 미친 영향

장점과 한계

장점

한계

학습 곡선

컴파일 시간

생태계의 성숙도

unsafe 코드와 외부 라이브러리

영향

메모리 안전한 시스템 프로그래밍

산업계 도입

프로그래밍 언어 설계

오픈소스 개발 문화

기존 C와 C++ 코드의 점진적 대체

관련 문서

  1. Rust 공식 웹사이트: Why Rust?
  2. Rust 소스 저장소: Why Rust?
  3. Rust Blog: Announcing Rust 1.0
  4. The Rust Programming Language: Editions
  5. Rust RFC 0002: RFC Process