История изменений
Исправление javascript, (текущая версия) :
JIT-компиляцией перед началом выполнения
Взаимоисключающие параграфы. Компиляция перед началом выполнения - это AOT. А JIT это непосредственно во время и по ходу выполнения. JIT компилирует код кусками, не компилирует то, что не используется или используется редко, трассирует часто используемое и перекомпилирует на основе статистики.
Бывает связка AOT + JIT. Но так или иначе стадия компиляции перед началом выполнения - это AOT-компиляция.
P.S. Например, всем известно, что v8 имеет на борту мощный JIT компилятор и использует его во всю. Но мало кто знает, что v8 поддерживает и AOT компиляцию. Именно так устроено кэширование скриптов, v8 кэширует уже скомпилированный инвариант кода, который потом в рантайме может дополнительно оптимизировать JIT’ом. Поэтому на самом деле хромообразные браузеры не переразбирают и неперекомпилируют js при каждом открытии сайтов.
Ровно по такому же принципу очень долго время хранилась и загружалась стандартная библиотека JS, потому как написана она тоже на js (она компилировалась при первом запуске и позднее использовалась ее aot-версия. Сейчас в v8 большая часть стандартной либы, в том числе инициализация хост-объектов (объектов js) вынесено в плюсовый код). Ровно таким же образом хранится стандартная библиотека node.js.
И использовать AOT компилцию в v8 можно самому если нужные API прокинуты в рантайм - в v8 это Snapshot API, и он доступен напрямую из пользовательского кода, например в Node.JS.
При этом можно в любой момент работы скрипта выгрузить snapshot, а потом при следующем старте загрузится в него. При этом будет сохранен весь контекст окружения, который был на момент выгрузки (разумеется со своими ограничениями на разного рода внешние сущности вроде дескрипторов файлов, подключений, шаренной памяти и прочего, что рантаймозависимо - их восстановление должно предусматриваться разработчиком, а снапшоты сохраняют состояния нативных js-объектов, функций, областей видимости и прочего. ну и сам машинный и промежуточный байт-код уже разобранных функций. разумеется снапшоты платформозависимы)
Исправление javascript, :
JIT-компиляцией перед началом выполнения
Взаимоисключающие параграфы. Компиляция перед началом выполнения - это AOT. А JIT это непосредственно во время и по ходу выполнения. JIT компилирует код кусками, не компилирует то, что не используется или используется редко, трассирует часто используемое и перекомпилирует на основе статистики.
Бывает связка AOT + JIT. Но так или иначе стадия компиляции перед началом выполнения - это AOT-компиляция.
P.S. Например, всем известно, что v8 имеет на борту мощный JIT компилятор и использует его во всю. Но мало кто знает, что v8 поддерживает и AOT компиляцию. Именно так устроено кэширование скриптов, v8 кэширует уже скомпилированный инвариант кода, который потом в рантайме может дополнительно оптимизировать JIT’ом. Ровно по такому же принципу очень долго время хранилась и загружалась стандартная библиотека JS, потому как написана она тоже на js (она компилировалась при первом запуске и позднее использовалась ее aot-версия. Сейчас в v8 большая часть стандартной либы, в том числе инициализация хост-объектов (объектов js) вынесено в плюсовый код). Ровно таким же образом хранится стандартная библиотека node.js.
И использовать AOT компилцию в v8 можно самому если нужные API прокинуты в рантайм - в v8 это Snapshot API, и он доступен напрямую из пользовательского кода, например в Node.JS.
При этом можно в любой момент работы скрипта выгрузить snapshot, а потом при следующем старте загрузится в него. При этом будет сохранен весь контекст окружения, который был на момент выгрузки (разумеется со своими ограничениями на разного рода внешние сущности вроде дескрипторов файлов, подключений, шаренной памяти и прочего, что рантаймозависимо - их восстановление должно предусматриваться разработчиком, а снапшоты сохраняют состояния нативных js-объектов, функций, областей видимости и прочего. ну и сам машинный и промежуточный байт-код уже разобранных функций. разумеется снапшоты платформозависимы)
Исправление javascript, :
JIT-компиляцией перед началом выполнения
Взаимоисключающие параграфы. Компиляция перед началом выполнения - это AOT. А JIT это непосредственно во время и по ходу выполнения. JIT компилирует код кусками, не компилирует то, что не используется или используется редко, трассирует часто используемое и перекомпилирует на основе статистики.
Бывает связка AOT + JIT. Но так или иначе стадия компиляции перед началом выполнения - это AOT-компиляция.
P.S. Например, всем известно, что v8 имеет на борту мощный JIT компилятор и использует его во всю. Но мало кто знает, что v8 поддерживает и AOT компиляцию. Именно так устроено кэширование скриптов, v8 кэширует уже скомпилированный инвариант кода, который потом в рантайме может дополнительно оптимизировать JIT’ом. Ровно по такому же принципу очень долго время хранилась и загружалась стандартная библиотека JS, потому как написана она тоже на js. Ровно таким же образом хранится стандартаная библиотека node.js. И использовать AOT компилцию можно самому если нужные API прокинуты в рантайм - в v8 это Snapshot API, и он доступен напрямую из пользовательского кода, например в Node.JS. При этом можно в любой момент работы скрипта выгрузить snapshot, а потом при следующем старте загрузится в него. При этом будет сохранен весь контекст окружения, который был на момент выгрузки (разумеется со своими ограничениями на разного рода внешние сущности ввиде дескрипторов файлов, подключений и прочего - их восстановление должно предусматриваться разработчиком, а снапшоты сохраняют состояния нативных js-объектов, функций, областей видимости и прочего. ну и сам машинный и промжуточный байт-код уже разобранных функций. разумеется снапшоты платформозависимы)
Исходная версия javascript, :
JIT-компиляцией перед началом выполнения
Взаимоисключающие параграфы. Компиляция перед началом выполнения - это AOT. А JIT это непосредственно во время и по ходу выполнения. JIT компилирует код кусками, не компилирует то, что не используется или используется редко, трассирует часто используемое и перекомпилирует на основе статистики.
Бывает связка AOT + JIT. Но так или иначе стадия компиляции перед началом выполнения - это AOT-компиляция.