Какие причины существуют для различий между типами времени компиляции и типами времени выполнения?

В 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

В каких языках разрыв между временем компиляции и запуском время больше, и есть ли причины из точки зрения языкового дизайна, почему это может быть «хорошо»?

Идем в другом направлении: существует ли (статически типизированный) язык без каких-либо различий между компиляцией время и типы времени выполнения?

5
задан soc 26 January 2011 в 10:57
поделиться