런타임 시 보장되는 것들

런타임 시 정의되지 않음(undefined) 동작 없음:

  • 배열 접근시 경계 체크.
  • 정수형 타입의 변수에서 오버플로우 발생시 동작이 잘 정의되어있습니다.

키 포인트:

  • 정수형 오버플로우는 overflow-checks 컴파일 타임 플래그를 통해 정의됩니다. 이 플래그가 켜지면, 프로그램은 정수형 오버플로우 발생시 panic (프로그램을 크래시 시키는 잘 정의된 방법) 합니다. 이 플래그가 꺼지면, 오버플로우는 wrap-around 가 됩니다. 기본적으로 디버그 모드(cargo build)에서는 패닉이, 릴리즈 모드(cargo build --release)에서는 wrap-around가 발생합니다.

  • 컴파일 플래그를 사용하여 경계체크를 무력화 할 수 없습니다. unsafe를 사용하더라도 마찬가지입니다. 하지만 unsafe에서 호출 가능한 slice::get_unchecked같은 함수는 경계 검사를 수행하지 않습니다.