В чем разница между своевременной компиляцией и динамической компиляцией?

В частности, в википедии говорится, что «JIT-компиляция - это форма динамической компиляции, [...]» [1]. Но разве эти два термина не просто синонимы? Какая разница между двумя?

Есть ли примеры динамической компиляции, которые не являются JIT-компиляцией? Или, если это не удается, есть ли случаи, когда термин динамическая компиляция более уместен, чем JIT-компиляция?

Оба термина, похоже, относятся к выполнению компиляции во время выполнения. Оба термина, похоже, описывают компиляцию из источника, а также компиляцию байт-кода. Оба термина, похоже, охватывают оптимизацию времени выполнения.

Мое собственное впечатление таково, что JIT-компиляция - это термин, который стал популярным, потому что именно так называлась динамическая компиляция в Java VM. Эта концепция приобрела популярность, и другие среды выполнения программ начали ее копировать, называя с тем же именем, JIT-компиляция. Кажется, что термин «динамическая компиляция» предшествует этому развитию и в основном встречается в более старых научных публикациях.


person cib    schedule 01.02.2018    source источник


Ответы (1)


По общему признанию, Википедия сбивает с толку. Сначала говорится:

JIT-компиляция, также известная как динамический перевод ...

Затем он говорит:

JIT-компиляция - это форма динамической компиляции, которая позволяет адаптивную оптимизацию, такую ​​как динамическая перекомпиляция ...

Это также предполагает, что динамический перевод также является формой динамической компиляции, что не имеет особого смысла.

Термин динамическая компиляция использовался как стандартный и единственный термин для обозначения семейства методов компиляции кода во время выполнения до 1995 года. Например, проверьте это статья 1985 года, в которой обсуждается динамическая компиляция для Prolog. Можно легко найти множество работ, выпущенных до 1995 г., в которых использовался этот термин.

Однако язык программирования Java был выпущен примерно в 1995 году, и в документах Java впервые использовались термины JIT-компиляция или JIT-компиляторы. Самый ранний такой документ, который мне удалось найти, - это this, хотя первый компилятор Java JIT был разработан в 1996 году. Я видел много статей, опубликованных за это время, в которых эти два термина используются как взаимозаменяемые.

Я также помню, что в некоторых статьях, которые я читал, JIT-компиляция рассматривается как тип динамической компиляции.

person Hadi Brais    schedule 14.03.2018