런타임 시 보장되는 것들
런타임 시 정의되지 않음(undefined) 동작 없음:
- 배열 접근시 경계 체크.
- 정수형 타입의 변수에서 오버플로우 발생시 동작이 잘 정의되어있습니다.
키 포인트:
-
정수형 오버플로우는
overflow-checks
컴파일 타임 플래그를 통해 정의됩니다. 이 플래그가 켜지면, 프로그램은 정수형 오버플로우 발생시 panic (프로그램을 크래시 시키는 잘 정의된 방법) 합니다. 이 플래그가 꺼지면, 오버플로우는 wrap-around 가 됩니다. 기본적으로 디버그 모드(cargo build
)에서는 패닉이, 릴리즈 모드(cargo build --release
)에서는 wrap-around가 발생합니다. -
컴파일 플래그를 사용하여 경계체크를 무력화 할 수 없습니다.
unsafe
를 사용하더라도 마찬가지입니다. 하지만unsafe
에서 호출 가능한slice::get_unchecked
같은 함수는 경계 검사를 수행하지 않습니다.