러스트(Rust) 언어의 특별한 타입인 '네버 타입(!)'이 모든 타입 표기에 사용될 수 있도록 허용하는 변경 사항이 2026년 8월 25일 병합되었으며, 러스트 1.100 버전에 포함될 예정입니다. 이 변화는 !의 활용 범위를 넓히는 동시에, 이 타입을 '모든 타입의 하위 타입'으로 정의되는 바닥 타입(bottom type)이 아닌, '값이 존재하지 않는' 빈 타입(empty type)으로 정확히 이해해야 한다는 점을 강조합니다.
빈 타입은 생성 가능한 값이 없으며, 제거 연산을 통해 임의의 타입을 얻을 수 있습니다. 반면 바닥 타입은 모든 타입의 하위 타입이라는 관계를 통해 정의됩니다. 러스트의 하위 타입 관계는 수명(lifetime)이 있는 타입에만 적용되므로, !에서 불리언(bool)으로의 변환을 설명할 수 없어 !이 바닥 타입이 아님을 시사합니다. 러스트는 타입이 직접 !인 표현식에 대해서만 필요한 타입으로 암시적 강제 변환(coercion)을 허용하며, 함수 포인터(fn(i32) -> !)처럼 다른 타입 내부에 !이 포함된 경우에는 변환하지 않습니다. 스칼라(Scala)의 Nothing처럼 빈 타입이자 바닥 타입인 경우와는 차이가 있습니다.
이러한 명확화는 러스트 개발자들이 타입 시스템을 더 정확하게 이해하고 활용하는 데 도움을 줄 것입니다. 특히, !이 바닥 타입이 아니라는 점은 러스트가 하스켈(Haskell)의 지연 평가(lazy evaluation)와 같은 방식으로 빈 타입을 다루지 않음을 의미합니다. 러스트의 panic!()과 같은 즉시 평가(eager evaluation) 방식은 하스켈의 undefined와는 다르게 동작하며, 이는 언어별로 자료구조의 형태와 활용 방식에 차이를 가져옵니다. 바닥 타입의 부재가 러스트의 표현력을 낮춘다고 단정할 수는 없으며, 각 언어의 설계 철학에 따른 합리적인 선택으로 볼 수 있습니다.