В Scala / Java (~ на JVM) есть несколько более мелких случаев, когда поведение отличается, например:
/* "Dynamic" cast */
"".getClass.cast("Foo")
//res0: Any = Foo
/* "Static" cast */
classOf[String].cast("Foo")
//res1: String = Foo
/* "Compile time cast" */
"Foo".asInstanceOf[String]
res2: String = Foo
В каких языках разрыв между временем компиляции и запуском время больше, и есть ли причины из точки зрения языкового дизайна, почему это может быть «хорошо»?
Идем в другом направлении: существует ли (статически типизированный) язык без каких-либо различий между компиляцией время и типы времени выполнения?