Rust ownership
메모리를 누가 책임지는지 컴파일 때 확정한다
소유권은 런타임 감시가 아니라 값의 주인, 이동, 빌림, 정리 시점을 코드 구조 안에서 고정하는 규칙이다.
검사
컴파일러가 규칙 위반을 거부
비용
실행 중 GC 탐색 없음
효과
해제 누락과 중복 해제를 차단
값의 생애 판단 순서
1
소유자 지정
각 값은 한 시점에 하나의 주인을 가진다.
2
이동 확인
대입이나 함수 전달 뒤 예전 이름은 무효가 된다.
3
빌림 제한
읽기 공유와 쓰기 단독 규칙을 동시에 만족해야 한다.
4
스코프 종료
주인이 사라질 때 값은 한 번만 정리된다.
값을 넘겼는가 이동된 값은 다시 사용할 수 없다. 복사가 필요한 값만 예외적으로 남는다.
참조가 살아있는가 참조가 유효한 동안 원본을 위험하게 바꾸거나 먼저 없앨 수 없다.
해제 책임이 겹치는가 동일 힙 데이터를 둘 이상이 소유하지 못하게 하여 double free를 막는다.
스택 쪽 값
크기가 고정된 값은 빠르게 복사되거나 그대로 스코프와 함께 사라진다.
힙 쪽 값
String처럼 힙을 쓰는 값은 포인터와 해제 책임의 이동을 함께 본다.