Разработчики проекта Mozilla приступили [1] к созданию нового JIT-компилятора для увеличения скорости выполнения JavaScript в движке SpiderMonkey. Новый JIT-копилятор получил название IonMonkey [2] и пока находится на стадии проектирования [3] архитектуры и формирования [4] начального прототипа. IonMonkey является третьим JIT-компилятором, создаваемым в рамках проекта Mozilla, прошлые варианты были выпущены в 2010 [5] и 2008 [6] годах, каждый раз значительно поднимая производительность Firefox.
Новый JIT-компилятор не станет исключением, в нем ожидается реализация передовых техник оптимизиации JavaScript, некоторые из которых уже представлены [7] в конкурирующем JIT-компиляторе Crankshaft проекта V8. JavaScript является языком с динамической типизацией, с одной стороны это предоставляет большую гибкость для разработчиков (по сути объекты в JavaScript можно рассматривать как хэш-таблицу), но с другой стороны создает трудности при создании JIT-компиляторов. Так как невозможно заранее определить какой тип данных будет содержаться в переменной, невозможно сопоставить данную переменную с определенными фиксированными инструкциями, рассматривающими эту переменную, например, как строку или число. В IonMonkey планируется провести большую работу по обеспечению более организованной работы со структурами данных и более точному учету типов. Из платформ, генерация кода для которых появится в IonMonkey, отмечаются i386, x86_64, и ARM.
В рамках проекта IonMonkey разработчики Mozilla планируют не просто создать новую технику JIT-компиляции, но и учесть ранее созданные наработки, превратив IonMonkey в единую консолидированную платформу, поддерживающую различные техники оптимизации и задействующую каждую из них в зависимости от текущей ситуации. В отличии от системы Crankshaft, разработанной для V8, в IonMonkey ожидается реализация системы вероятностной оценки типов (проект Type Inference), в рамках которой предложен гибридный метод статического и динамического анализа, позволяющий точно сопоставить типы для каждой переменой и свойства JavaScript-программы. Подобный подход даст возможность избавиться от выполнения всех дополнительных проверок в процессе работы JavaScript-программы и реализовать некоторые виды оптимизации, которые при другом подходе оказались бы невозможными.
Ссылки:
[1] /out.php?link=http://www.infoq.com/news/2011/05/ionmonkey
[2] /out.php?link=https://wiki.mozilla.org/Platform/Features/IonMonkey
[3] /out.php?link=https://bugzilla.mozilla.org/show_bug.cgi?id=646923
[4] /out.php?link=https://bugzilla.mozilla.org/show_bug.cgi?id=650181
[5] /out.php?link=http://www.opennet.ru/opennews/art.shtml?num=25608
[6] /out.php?link=http://www.opennet.ru/opennews/art.shtml?num=17521
[7] /out.php?link=http://www.opennet.ru/opennews/art.shtml?num=28947