Rust의 쓰레기 수집기

Nilesh Katuwal 2022년6월7일
Rust의 쓰레기 수집기

이 기사는 Rust가 가비지 수집기 대신에 무엇을 사용하는지 가르칠 것입니다.

Rust의 가비지 컬렉션

Rust는 범용 프로그래밍 언어입니다. 가비지 수집기 대신 Rust는 정교하지만 복잡한 유형 시스템을 통해 이러한 속성을 달성합니다.

이것은 Rust를 매우 효율적으로 만들지만 상대적으로 배우고 사용하기 어렵습니다.

일반적으로 가비지 수집은 쓰레기 힙이 거의 가득 찼거나 특정 임계값을 초과하는 경우와 같이 주기적으로 또는 필요에 따라 발생합니다. 알고리즘에 따라 사용되지 않는 변수를 검색하고 메모리를 해제합니다.

예를 들어, Rust는 변수가 프로그램의 범위를 벗어나거나 컴파일 시간에 수명이 만료될 때 메모리를 해제하기 위해 해당 LLVM/assembly 명령을 삽입합니다. Rust는 또한 원자 참조 카운팅과 같은 가비지 수집 기술을 지원합니다.

affine 유형 시스템을 사용하여 어떤 변수가 여전히 개체를 잡고 있는지 모니터링하고 해당 변수의 범위가 만료되면 소멸자를 호출합니다. 아핀형 시스템은 아래의 동작에서 관찰할 수 있다.

fn main() {
    let p: String = "Good Morning".into();
    let m = p;
    println!("{}", p);
}

수익률:

<anon>:4:24: 4:25 error: use of moved value: `p` [E0382]
<anon>:4         println!("{}", p);

<anon>:3:13: 3:14 note: `p` moved here because it has type `collections::string::String`, which is moved by default
<anon>:3         let m = p;
                     ^

위의 결과는 소유권이 언어 수준에서 항상 추적된다는 것을 완벽하게 보여줍니다.

Rust는 메모리 소유권의 개념을 통합하는 비교적 새로운 접근 방식을 메모리 관리에 사용합니다. Rust 트랙은 메모리를 읽고 쓸 수 있습니다.

프로그램이 메모리를 사용하는 것을 감지하고 더 이상 필요하지 않을 때 해제합니다. 컴파일 시 메모리 규칙을 적용하여 런타임 시 메모리 버그를 사실상 불가능하게 만듭니다.

메모리를 수동으로 추적할 필요가 없습니다. 대신 컴파일러가 이를 책임집니다.

Rust의 가장 독특한 특성인 소유권은 나머지 언어에 깊은 의미를 갖습니다. 소유권이 어떻게 작동하는지 이해하는 것은 Rust가 가비지 수집기 없이 메모리 안전 보장을 제공할 수 있게 해주기 때문에 필수적입니다.

Rust는 다른 접근 방식을 취합니다. 메모리를 소유한 변수가 범위를 벗어날 때 메모리가 자동으로 반환됩니다.