5.23.1 불안전한 캐스트(unsafe cast)
5.23.1 불안전한 캐스트(unsafe cast)
불안전한 캐스트는 타입 시스템을 무너뜨리는 데 유용해요. 컴파일러는 expr을 평소처럼 타이핑한 뒤 모노모프(monomorph)로 감싸요. 이는 표현식이 어떤 것에든 할당될 수 있게 합니다.
불안전한 캐스트는 다음 예제가 보여주듯 dynamic 타입을 도입하지 않아요:
class Main {
public static function main() {
var i = 1;
$type(i); // Int
var s = cast i;
$type(s); // Unknown
Std.parseInt(s);
$type(s); // String
}
}
변수 i는 Int로 타이핑된 뒤 불안전한 캐스트 cast i로 변수 s에 할당됩니다. 이는 s를 알려지지 않은 타입, 즉 모노모프로 만들어요. 유니피케이션의 일반 규칙에 따라 이후 그 모노모프는 이 예제의 String처럼 어떤 타입에도 바인딩될 수 있습니다.
이 캐스트들은 무효 캐스트의 런타임 동작이 정의되지 않았기 때문에 "unsafe"라고 불려요. 대부분 dynamic 대상(dynamic targets)에서 동작할 가능성이 높지만, static 대상(static targets)에서는 정의되지 않은 오류가 날 수 있습니다.
불안전한 캐스트는 런타임 오버헤드가 거의 또는 전혀 없어요.
출처: unsafe cast
본문
불안전한 캐스트의 동작
cast expr;은 표현식을 모노모프로 감싸 어떤 타입이든 할당될 수 있게 해요. dynamic 타입을 도입하지 않고, 문맥에 따라 이후 타입이 확정됩니다.
위험성
무효 캐스트의 런타임 동작이 정의되지 않아 "unsafe"예요. static 대상에서 정의되지 않은 오류가 날 수 있습니다. 런타임 오버헤드는 거의 없습니다.