Facebook открыл код JavaScript-движка Hermes

@OpenNet

Компания Facebook открыла исходные тексты легковесного JavaScript-движка Hermes, оптимизированного для выполнения приложений на базе фреймворка React Native на платформе Android. Поддержка Hermes встроена в React Native начиная с сегодняшнего выпуска 0.60.2. Проект признан решить проблемы с большим временем запуска нативных JavaScript-приложений и значительным потреблением ресурсов. Код написан на языке C++ и распространяется под лицензией MIT.

Из достоинств применения Hermes отмечается сокращение времени запуска приложения, снижение потребления памяти и уменьшение размера приложения. Ускорение запуска приложений достигается благодаря применению на этапе сборки предкомпиляции в компактный и эффективный байткод. Для непосредственного выполнения приложения применяется разработанная в рамках проекта виртуальная машина со сборщиком мусора SemiSpace. При применении V8 наиболее длительными являются стадии парсинга исходного кода и его компиляции на лету. Hermes выносит эти стадии на этап сборки и поставляет поставлять приложения в форме оптимизированного байткода.

Обработка JavaScript разделяется на несколько стадий. Вначале осуществляется парсинг исходных текстов и генерация промежуточного представления кода (Hermes IR), основанного на представлении SSA (Static Single Assignment). Далее, промежуточное представление обрабатывается в оптимизаторе, который применяет техники упреждающей статической оптимизиации для преобразования первичного промежуточного кода в более эффективное промежуточное представление, сохраняя при этом оригинальную семантику программы. На последнем этапе генерируется байткод для регистровой виртуальной машины.

В движке поддерживается часть JavaScript-стандарта ECMAScript 2015 (конечной целью является его полная поддержка) и обеспечивается совместимость с большинством существующих приложений React Native. Для включения Hermes в приложении React Native достаточно добавить в проект опцию "enableHermes: true". Также возможна сборка Hermes в режиме CLI-интерфейса, позволяющая выполнить произвольные JavaScript-файлы из командной строки. При этом Facebook не планирует адаптировать Hermes для Node.js и других решений, сосредотачивая внимание только на мобильных приложениях (AOT-компиляция вместо JIT наиболее оптимальна в контексте мобильных приложений на базе React Native).

Анализ
×