Разработчики проекта Mozilla приступили к созданию нового JIT-компилятора для увеличения скорости выполнения JavaScript в движке SpiderMonkey. Новый JIT-копилятор получил название IonMonkey и пока находится на стадии проектирования архитектуры и формирования начального прототипа. IonMonkey является третьим JIT-компилятором, создаваемым в рамках проекта Mozilla, прошлые варианты были выпущены в 2010 и 2008 годах, каждый раз значительно поднимая производительность Firefox.

Новый JIT-компилятор не станет исключением, в нем ожидается реализация передовых техник оптимизиации JavaScript, некоторые из которых уже представлены в конкурирующем JIT-компиляторе Crankshaft проекта V8. JavaScript является языком с динамической типизацией, с одной стороны это предоставляет большую гибкость для разработчиков (по сути объекты в JavaScript можно рассматривать как хэш-таблицу), но с другой стороны создает трудности при создании JIT-компиляторов. Так как невозможно заранее определить какой тип данных будет содержаться в переменной, невозможно сопоставить данную переменную с определенными фиксированными инструкциями, рассматривающими эту переменную, например, как строку или число. В IonMonkey планируется провести большую работу по обеспечению более организованной работы со структурами данных и более точному учету типов. Из платформ, генерация кода для которых появится в IonMonkey, отмечаются i386, x86_64, и ARM.

В рамках проекта IonMonkey разработчики Mozilla планируют не просто создать новую технику JIT-компиляции, но и учесть ранее созданные наработки, превратив IonMonkey в единую консолидированную платформу, поддерживающую различные техники оптимизации и задействующую каждую из них в зависимости от текущей ситуации. В отличии от системы Crankshaft, разработанной для V8, в IonMonkey ожидается реализация системы вероятностной оценки типов (проект Type Inference), в рамках которой предложен гибридный метод статического и динамического анализа, позволяющий точно сопоставить типы для каждой переменой и свойства JavaScript-программы. Подобный подход даст возможность избавиться от выполнения всех дополнительных проверок в процессе работы JavaScript-программы и реализовать некоторые виды оптимизации, которые при другом подходе оказались бы невозможными.

Источник: http://www.opennet.ru/opennews/art.shtml?num=30442