
- Как устроен JIT-компилятор Javascript, который разработали в Opera Software?
- JIT-компилятор ядра Carakan транслирует все ECMAScript-функции в машинный код. Однако не весь код, а только его пиковые точки — то есть самые часто вызываемые и долго исполняемые функции. Перед тем, как обнаружить эти пиковые точки и активировать JIT-компилятор, Carakan запускает скрипты в кроссплатформенном бинарном движке, а сам в это время анализирует запущенный код, чтобы JIT-компилятор смог собрать его оптимизированную версию.
- Чем Carakan отличается от V8 и Tracemonkey?
JIT-компилятор Tracemonkey в чём-то похож на Carakan: в том, что он генерирует машинный код для обнаруженных пиковых точек, и в том, что использует бинарный интерпретатор для сбора информации, необходимой для JIT. С другой стороны, в Tracemonkey используется совсем другой подход — как для определения тех участков кода, которые должны быть оптимизированы, так и для непосредственной оптимизации. Что касается движка V8, то я не очень хорошо с ним знаком, чтобы авторитетно говорить об отличиях и сходстве.
- Подходит ли Carakan для использования на мобильных устройствах?
- Пока JIT-компилятор поддерживает только процессоры x86, но изначально разрабатывался для портирования на процессоры других архитектур. Например, если генерируемый код независим от кода, созданного для фактически используемого процессора, то применяется распределитель регистров. Для этого нужно только знать основные характеристики, такие как количество доступных регистров.
- Тестировали ли его совместимость с существующими веб-приложениями?
- Да, разумеется. Команда, работающая над Carakan, включала нескольких опытных инженеров, которые работали не только над разработкой тестов на соответствие спецификациям ECMAScript, но и тестированием на совместимость со многими веб-приложениями, а также изучением возможных проблем, выявленных в ходе такого тестирования. Большинство тестов были сделаны с включённым JIT-компилятором. С тех пор это режим тестирования по умолчанию.
