AST/JIT & Компиляция/Интерпретация

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

Виды трансляция программного кода

Языки программирования изначально были созданы для упрощения записи различных алгоритмов на определенном человеку понятном языке. Если напрячь память мы можем вспомнить что первым языком который мы можем выделить будет Фортран. Как говорить википедия "Фортра́н (Fortran) — первый язык программирования высокого уровня, имеющий транслятор. Я хочу обратить ваше внимание на слово транслятор так как не каждый язык является компилируемый и понятие транслятор является общей для компиляторов/трансляторов.

В итоге процесс трансляции программы может протекать по двум путям это:

Компиляция

Это трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду. Происходит она единожды и в результате мы имеем бинарный файл или байт-код запускаемые через программу. Давайте вспомним характерных представителей этих языков С/С++, Objective-C, Pascal/Delphi, Java.

Но тут стоит учесть, что выделяют еще два подтипа компиляции:

Примеры языков:

Сейчас некоторые люди возможно спросят про себя, а почему Java? Так только потому что программа на java сначала компилируется компилятором javac а только потом скомпилированный машинных код запускается на JVM (Java Virtual Machine).

Интерпретация

Это анализ кода на входном языке с одновременным выполнением (интерпретацией) кода как правило в виртуальной машине.

Примеры языков:

Можно заметить, что интерпретатор непосредственно выполняет действия, связанные с определением или преобразованием объектов программы, а компилятор - переводит их на другой (не обязательно машинный язык).

Виды способов оптимизации (по среде воздействия)

После того как мы прояснили виды трансляции программного коды мы можем приступит к видам оптимизаций.

Сравнение производительности

С начало я хотел сравнить JAVA (JIT) и C++ (AOT) но сравнение было бы не корректным. Производительность JIT-компиляторов по сравнению с универсальными компиляторами в некоторых искусственных специально подобранных тестах оказалась сравнимой, но на практике если и наблюдается прирост, то не большой. Тема весьма большая и спорная требующая большой обьем тестов но осветить ее постораюсь в следущей статье про JIT.

Плюсы и минусы

Перед тем как сделать свой вывод я бы хотел сначала вспомнить о плюсах и минусах JIT

Плюсы:

Минусы:

А так же остались вещи которые можно отнести как к плюсам, так и к минусам:

Мое мнение относительно JIT

Мое мнение по поводу JIT сейчас сводиться скорее к нейтральному так как под новой модной технологие не лежит фундамента доказывающие превосходную оптимизацию на реально больших приложениях.

Блог работает в alpha режиме. Если Вы заметили ошибку в статье или хотите предложить нововведения, то Вы можете уведомить меня, используя контакты, указанные на странице, или же сделав pull-request в статью

comments powered by Disqus