Почему языки с динамическим типом интерпретируются, а языки со статическим типом являются языком времени компиляции?

Я всегда слышал, что языки времени компиляции (Java, C ++ и т. Д.) Являются статически типизированными, а интерпретируемые языки (PHP, Python и т. Д.) Динамически типизированы, но вопрос в том, почему это так, почему язык времени компиляции не может быть динамически типизированным и наоборот. наоборот?


person Hasnain Abid Khanzada    schedule 19.12.2018    source источник
comment
Есть языки с динамической типизацией, которые компилируют код. stackoverflow.com/questions/2555063/   -  person ernest_k    schedule 19.12.2018
comment
Например, Джулия.   -  person user2357112 supports Monica    schedule 19.12.2018
comment
Другими словами, ваша посылка неверна.   -  person martineau    schedule 20.12.2018


Ответы (2)


Это зависит строго от языка, например. В Java есть смешанный режим, в котором код, который выполняется реже, только интерпретируется. Компиляция кода может быть дорогостоящей, поэтому, если скомпилированный код не выполняется много раз после компиляции, затраченные на компиляцию усилия не окупятся.

person Karol Dowbecki    schedule 19.12.2018

Это не совсем так. Байт-коды Java можно интерпретировать, на самом деле они интерпретировались только до версии JDK 1.1.5ish. JavaScript часто компилируется.

Однако интерпретатор динамического языка действительно легко написать. Может, попробуй. Статически типизированные языки немного сложнее, так что вы все равно можете его скомпилировать. С другой стороны, для разумной компиляции динамического языка требуются определенные усилия.

person Tom Hawtin - tackline    schedule 19.12.2018