데이터 형식
이해
숫자 형식인 isize와 usize의 비트 수는 실행 시스템의 32/64비트 아키텍처에 따라 달라집니다.
debug 모드에서는 정수 오버플로가 발생하면 panic이 일어나지만 release 모드에서는 그렇지 않습니다.
wrapping_* 메서드는 debug 모드에서도 panic이 발생하지 않게 합니다.
checked_* 메서드는 오버플로가 발생하면 None을 반환합니다.
overflowing_* 메서드는 값과 함께 오버플로 여부를 나타내는 boolean을 반환합니다.
saturating_* 메서드는 오버플로 시 값을 최솟값 또는 최댓값으로 제한합니다.
튜플
let tup: (i32, f64, u8) = (500, 6.4, 1);
let tup = (500, 6.4, 1);
let (x, y, z) = tup; // 구조 분해 할당
let x: (i32, f64, u8) = (500, 6.4, 1);
let five_hundred = x.0;
let six_point_four = x.1;
let one = x.2;
배열
let a = [1, 2, 3, 4, 5];
let a: [i32; 5] = [1, 2, 3, 4, 5];
let a = [0; 5]; // 빠른 초기화
let a = [[0, 5]; 20]; // 2차원 배열
출처
스칼라 형식
…
정수 형식
또한 isize와 usize 형식은 프로그램이 실행되는 컴퓨터 종류에 따라 달라집니다. 64비트 아키텍처라면 64비트이고 32비트 아키텍처라면 32비트입니다.
…
정수 오버플로
0부터 255까지의 값을 저장할 수 있는 u8 형식 변수가 있다고 합시다. 이 변수에 256처럼 범위를 벗어난 값을 대입하려 하면 정수 오버플로가 발생합니다. Rust에는 이 동작과 관련된 규칙이 있습니다. debug 모드로 컴파일할 때 Rust는 정수 오버플로 검사를 포함하므로, 이런 동작이 발생하면 실행 중 프로그램이 패닉합니다. Rust에서는 프로그램이 오류와 함께 종료되는 것을 패닉이라고 합니다. 패닉에 대해서는 9장의
“panic!을 사용한 복구할 수 없는 오류”
절에서 더 자세히 설명합니다.
--release 플래그를 사용해 release 모드로 컴파일할 때 Rust는 패닉을 일으키는 정수 오버플로 검사를 포함하지 않습니다. 대신 오버플로가 발생하면 Rust는 2의 보수 래핑을 수행합니다. 간단히 말해 형식이 저장할 수 있는 최댓값보다 큰 값은 해당 형식이 저장할 수 있는 최솟값부터 다시 순환합니다. u8의 경우 256은 0이 되고 257은 1이 되는 식입니다. 프로그램은 패닉하지 않지만 변수의 값이 예상과 다를 수 있습니다. 정수 오버플로의 래핑 동작에 의존하는 것은 오류로 간주됩니다.
오버플로 가능성을 명시적으로 처리하려면 표준 라이브러리가 기본 숫자 형식에 제공하는 다음 메서드군을 사용할 수 있습니다.
wrapping_add와 같은wrapping_*메서드로 모든 모드에서 래핑합니다.checked_*메서드는 오버플로가 있으면None을 반환합니다.overflowing_*메서드는 값과 오버플로 여부를 나타내는 boolean을 반환합니다.saturating_*메서드는 값의 최솟값 또는 최댓값에서 포화시킵니다.