Unsafe Powers

unsafe는 권한이 아니라 증명 책임을 좁히는 표시다

컴파일러가 확인하지 못하는 다섯 작업만 허용하고, 나머지 대여 검사와 타입 검사는 계속 적용된다.

1

raw pointer 역참조

주소가 유효하고 정렬되어 있으며 aliasing 규칙을 깨지 않는지 확인한다.

2

unsafe 함수 호출

문서의 safety 계약을 읽고 호출 전 조건을 코드로 보장한다.

3

mutable static

전역 변경 상태가 데이터 경합 없이 접근되는지 동기화 전략을 둔다.

4

unsafe trait 구현

컴파일러가 모르는 불변조건을 타입 구현이 항상 지키도록 만든다.

5

union 필드 접근

현재 들어 있는 필드와 초기화 상태를 추적할 수 있을 때만 읽는다.

BOUNDARY

safe API로 감싸기

위험한 조작은 내부에 두고, 호출자는 안전한 함수와 타입만 사용하게 한다.

INVARIANT

불변조건을 먼저 쓰기

길이, 정렬, 수명, 중복 접근, 스레드 조건을 코드 근처에 명시한다.

AUDIT

작게 유지하고 검증하기

unsafe 블록은 좁게 유지하고 테스트, Miri, 코드 리뷰로 계약을 확인한다.

읽는 법

unsafe는 러스트의 안전 장치를 모두 끄지 않는다. 컴파일러가 증명하지 못하는 특정 작업의 책임만 프로그래머에게 넘긴다.