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
  }
}

변수 iInt로 타이핑된 뒤 불안전한 캐스트 cast i로 변수 s에 할당됩니다. 이는 s를 알려지지 않은 타입, 즉 모노모프로 만들어요. 유니피케이션의 일반 규칙에 따라 이후 그 모노모프는 이 예제의 String처럼 어떤 타입에도 바인딩될 수 있습니다.

이 캐스트들은 무효 캐스트의 런타임 동작이 정의되지 않았기 때문에 "unsafe"라고 불려요. 대부분 dynamic 대상(dynamic targets)에서 동작할 가능성이 높지만, static 대상(static targets)에서는 정의되지 않은 오류가 날 수 있습니다.

불안전한 캐스트는 런타임 오버헤드가 거의 또는 전혀 없어요.

출처: unsafe cast

본문

불안전한 캐스트의 동작

cast expr;은 표현식을 모노모프로 감싸 어떤 타입이든 할당될 수 있게 해요. dynamic 타입을 도입하지 않고, 문맥에 따라 이후 타입이 확정됩니다.

위험성

무효 캐스트의 런타임 동작이 정의되지 않아 "unsafe"예요. static 대상에서 정의되지 않은 오류가 날 수 있습니다. 런타임 오버헤드는 거의 없습니다.

더 알아보기