Rust: 빈 타입이 바닥 타입은 아닐 때

1 hour ago 2

Rust의 never 타입 ! 을 모든 타입 표기에 허용하는 PR이 2026년 8월 25일 병합됐으며, Rust 1.100에 포함될 예정임 — 사용 범위가 넓어지는 !은 모든 타입의 하위 타입인 바닥 타입보다 빈 타입으로 이해하는 편이 정확함 빈 타입은 값이 없고 제거 연산으로 임의의 타입을 얻는 반면, 바닥 타입은 모든 타입의 하위 타입으로 정의됨 — Rust의 하위 타입 관계는 수명이 있는 타입 사이에만 적용되므로 !에서 bool로의 변환을 설명하지 못함 Rust는 타입이 직접 !인 표현식을 필요한 타입으로 암시적 강제 변환(coercion) 하지만, fn(i32) ->!처럼 다른 타입 안에 들어 있는 !까지 변환하지는 않음 함수 반환값이나 Result<!,!>를 다른 타입으로 바꾸려면 클로저나 패턴 매칭으로 직접 !인 표현식을 얻어야 함 — 다만 임의의 타입 A에서 !를 꺼낼 수 있다는 보장은 없음 Haskell의 지연 평가에서는 Void 자리를 평가하지 않고도 자료구조의 일부를 사용할 수 있음 — 빈 타입의 동작은 평가 방식과도 연결되며, 바닥 타입이 없다는 사실만으로 Rust의 표현력이 더 낮다고 할 수는 없음 !의 안정화와 빈 타입의 의미 Rust는 이전에도 함수 반환 타입으로 !를 허용했지만, 다른 타입 표기에는 사용할 수 없었음 모든 타입 표기에서 허용하는 PR은 2026년 8월 25일 병합됐으며, 작성 시점 기준 Rust 1.100에 포함될 예정임 관련 자료는 I stabilized never type.에서 확인할 수 있음 빈 타입(empty type) 은 값도 생성자도 없는 타입이며, 개념적으로 fn absurd<A>(x: !) -> A라는 함수와 함께 이해할 수 있음 ! 값을 인자로 받아 원하는 타입 A를 얻지만, 실제로는 ! 값을 만들 수 없으므로 이 함수를 호출해 반환값을 받는 상황 자체가 생기지 않음 바닥 타입(bottom type) 도 값과 생성자가 없지만, absurd 대신 모든 타입의 하위 타입이라는 관계를 사용함 A가 B의 하위 타입이면 B가 필요한 위치에 A를 사용할 수 있음 빈 타입은 하위 타입 관계 없이도 정의할 수 있지만, 바닥 타입은 그 관계가 필요함 Rust의 하위 타입 관계는 수명이 있는 타입 사이에만 적용됨 !에서 bool로의 변환에는 수명이 관여하지 않으므로, 이 의미에서 Rust의 !은 바닥 타입이 아님 Scala에서는 함수 타입...

Read Entire Article