В конце прошлой недели на конференции JSConf US Last Call (Флорида, США) мы анонсировали, что откроем исходный код ключевых компонентов нашего JavaScript-движка Chakra, используемого в Microsoft Edge, в виде проекта ChakraCore. Исходный код будет доступен на GitHub под MIT лицензией в следующем месяце.


Gaurav Seth на сцене JSConf US Last Call анонсирует ChakraCore. Слайды доступны на GitHub.

Chakra – один с лучших движков JavaScript с самым большим покрытием возможностей ES2015 и предсказуемыми производительностью, надежностью и масштабируемостью. Мы предполагаем, что ChakraCore может использоваться в тех сценариях, где эти факторы играют большую роль: от облачных сервисов и до интернета вещей и в других средах.

Сегодня мы вкладываемся в улучшение Chakra больше, чем когда-либо, и мы рады возможности развития сотрудничества с сообществом для внедрения дальнейших улучшений. Несколько организаций уже рассказали о своем интересе вносить вклад в Chakra, включая Intel, AMD и NodeSource – мы смотрим с оптимизмом на нашу будущую совместную работу.

Chakra: современный движок JavaScript




В 2008 году мы с нуля создали новый движок JavaScript, названный кодовым именем Chakra. Один из фундаментальных принципов разработки заключался в том, чтобы быть уверенными, что Chakra будет обеспечивать уровень производительности, необходимый для современного веба, и сможет легко адаптироваться под новые сценарии в широком спектре используемого аппаратного обеспечения. Проще говоря, это означало, что Chakra должна была быстро стартовать, быстро работать, поддерживать отличный пользовательский опыт, реализуя при этом в полной мере потенциал используемого железа. Мы достигаем этих целей через уникальную многоступенчатую цепочку исполнения, включающую интерпретатор, многоуровневый фоновый JIT-компилятор и сборщик мусора, который может осуществлять параллельные и частичные очистки памяти.


Многоступенчатая схема исполнения кода в Chakra и ChakraCore

С момента появления Chakra JavaScript вырос от языка, работающего преимущественного внутри веб-браузера, в технологию, позволяющую создавать приложения для магазинов, серверные приложения, облачные сервисы, NoSQL базы данных, игровые движки, инструменты для разработки и, — свежее веяние, — интернет вещей. Со временем Chakra эволюционировала, чтобы отображать многие из этих новых контекстов и была оптимизирована соответствующим образом. Это означает, что помимо исполнения кода, Chakra должна была поддерживать нативную переносимость, быть масштабируемой и уметь управлять потреблением ресурсов для выполнения кода в ограниченных условиях. Интерпретатор Chakra сыграл ключевую роль в легкости переноса технологии между разными платформенными архитектурами.

Сегодня помимо браузера Microsoft Edge движок Chakra также работает в универсальных Windows-приложениях во всех форм-факторах, которые поддерживает Windows – будь это Xbox, смартфон или традиционный ПК. Он лежит в основе таких сервисов, как Azure DocumentDB, Cortana и Outlook.com, используется в связке с (и оптимизирован для) TypeScript. А в рамках Windows 10 мы также сделали возможным запуск Node.js поверх Chakra, чтобы принести широкие возможности экосистемы Node.js на новую IoT-платформу: Windows 10 IoT Core.

С релизом Windows 10 летом этого года Chakra не только стала еще более быстрой для веба, но и более чем удвоила свои результаты в некоторых ключевых тестах измерения скорости JavaScript-движков, разработанных другими производителями браузеров.


Производительность Chakra в тестах скорости JavaScript – Octane и Jetstream (Системная информация: 64-битные браузеры на Intel Core i5-34755 @ 2.90Ghz с 4.0GB RAM под Windows 10)

В дополнение, Chakra поддерживает большую часть возможностей ECMAScript 2015 (aka ES6) и некоторые возможности из будущей версии ECMAScript, например, Async Functions и SIMD. Мы добавили поддержку asm.js и также участвуем в разработке WebAssembly и связанной инфраструктуры.


Chakra поддерживает большую часть возможностей ES6 (Kangax ES6 Compatibility Table)

Таким образом, с 2008 года Chakra постепенно эволюционировала, чтобы стать отличным выбором для веба, облачных сервисов и интернета вещей. С сегодняшним анонсом мы делаем следующий шаг, предлагая разработчикам полностью поддерживаемый JavaScript-движок с открытым кодом, который вы можете внедрять в свои проекты, делать что-то поверх него и предлагать свои изменения назад в ChakraCore.

Что такое ChakraCore?


ChakraCore – это полноценная и самодостаточная виртуальная машина JavaScript, которая может быть встроена в производные проекты и поддерживать приложения, требующие использования скриптов, например, NoSQL базы данных, приложения для продуктивности и игровые движки. ChakraCore может использоваться для расширения возможностей JavaScript на сервере с связке с Node.js и облачными сервисами. Он включает все, что необходимо для разбора, интерпретации, компиляции и выполнения JavaScript кода без каких-либо зависимостей от других компонентов Microsoft Edge.

ChakraCore включает тот же набор возможностей, что и Chakra в Microsoft Edge с двумя ключевыми отличиями. Во-первых, он не выставляет приватные API для связывания с браузером или универсальной платформой Windows (UWP), что является весьма специфичным сценарием. И во-вторых, вместо предоставления основанного на COM диагностического API, используемого сейчас в Chakra, ChakraCore будет поддерживать новый набор современных API для диагностики, независящих от платформы, которые, в принципе, могут быть стандартизированы или сделаны совместимыми между различными реализациями в долгосрочной перспективе. По мере реализации этого нового набора API мы также планируем добавить их в Chakra.


Устройство Chakra и ChakraCore

Следующие шаги в развитии ChakraCore


Любой современный движок JavaScript должен рассматриваться в более широком контексте, чем просто браузерные сценарии, включая все: от небольших устройств для IoT-приложений до огромных решений с распараллеленными серверными приложениями, базирующимися на облачных технологиях.

ChakraCore был спроектирован с тем, чтобы подходить под любой стек приложений, требующий быстрого, масштабируемого и легковесного движка. Мы планируем со временем сделать его еще более гибким: как в рамках Windows-экосистемы, так и за ее пределами. Хотя изначальный январский релиз будет нацелен только на Windows, мы можем подтвердить намерение перенести в будущем ChakraCore также и на другие платформы. Мы приглашаем разработчиков помочь нам в реализации этого стремления: вы можете просто дать нам знать, на какой платформе вы бы хотели видеть поддержку ChakraCore, чтобы мы могли приоритизировать свои ресурсы и инвестиции, или даже помочь с портированием на интересующую вас платформу.

Как внести вклад в ChakraCore


Начиная с января, мы откроем наш публичный репозиторий на GitHub для сообщества. К этому времени мы поделимся дополнительными подробностями о наших начальных приоритетах в разработке и руководствами по работе с проектом и внесению изменений. Сообщество – это сердце любого проекта с открытым кодом, поэтому мы будем рады клонам репозитория, исследованиям кода, новым сборкам и вашему вкладу во всем: от новой функциональности до тестов и исправлений ошибок. Мы также будем рады советам о том, как улучшить ChakraCore в конкретных сценариях, критичных для вашего бизнеса.

Мы хотим сделать Microsoft Edge и связанную с ним экосистему примером совместной инновации, совместимости и роста продуктивности в разработке. Это намерение уже привело к созданию нового сайта Microsoft Edge Dev, публичной публикации статуса платформы и использованию User Voice для упрощения диалога между командой Microsoft Edge и сообществом. Открытие кода ChakraCore – это естественное продолжение данных усилий и вдохновлено теми жи принципами открытости и прозрачности.

Данная отсчетная точка наступит уже скоро и мы надеемся, что открытый процесс разработки позволит нам плотнее сотрудничать с разработчиками по всему миру, что в свою очередь позволит создавать еще более качественные продукты для всех. Любые вопросы про Edge вы всегда можете задавать в нашем твиттере @MSEdgeDev. Ждите анонсов после новогодних праздников!

– Gaurav Seth, Principal PM Manager
– Adalberto Foresti, Principal Program Manager

Бонус


Кристиан Хейлманн (Christian Heilmann) записал интерью с Гауравом Сетом (Gaurav Seth) на тему развития JavaScript, Chakra и ChakraCore:

Комментарии (16)


  1. aylarov
    10.12.2015 15:42
    +4

    Это достаточно правильный шаг, будет интересно его посравнивать с V8 и Spidermonkey в ряде дисциплин


  1. alxpy
    10.12.2015 18:56
    -4

    Как-то слабо верится про 90% поддержку ES2015. Это без полифилов?


    1. kichik
      10.12.2015 20:51
      +4

      Это вот этот публичный тест для измерения покрытия kangax.github.io/compat-table/es6
      Да, без полифилов.


      1. alxpy
        11.12.2015 12:19
        +1

        Да, я туда зашел, просто не мог (без поднятия виртуалки) проверить сам.


    1. trikadin
      10.12.2015 21:00
      +6

      Как JS-разработчик говорю — да. У Edge действительно самая большая поддержка текущего стандарта и немножко следующего. Более того — это вызывает у меня сильный интерес в плане того, чтобы опробовать Node.JS на Chakra. Потому что async functions нативно — это безумно круто.


      1. alxpy
        11.12.2015 12:15

        круто)


  1. slonopotamus
    10.12.2015 19:57
    -7

    Какой фундаментальный недостаток уже существовавших на 2008-ой год JS-движков заставил вас делать свой?


    1. kichik
      10.12.2015 20:59
      +7

      А вы про какие движки? V8, только-только появившийся осенью 2008 вместе с Chrome, стратегию которого и, скажем, успех было трудно предсказать. Или SpiredMonkey, JIT-компиляцию JS-кода в котором в то время, насколько я понимаю, тоже только начинали разрабатывать?


  1. ReklatsMasters
    11.12.2015 00:28

    Как будто холодным душем обдали. Это что-то невероятное. Разрыв шаблона прямо.

    Не нашёл инфы про модули (в таблице kangax.github.io/compat-table/es6). Поддерживаются?


    1. trikadin
      11.12.2015 02:10
      +1

      Так стандарта законченного нету про модули — как их тут поддержишь. По сути, то, что есть, в текущий стандарт добавили только для того, чтобы все знали, на что ориентироваться в будущем. А пока нету подробной спецификации, как они должны соотноситься с файловой системой, с загрузкой из по http, какие ошибки должны выкидывать, если модуль не найден или что-нибудь ещё, пока нету спецификации по System (программная загрузка модулей) — единственное, что они могут — служить прослойкой над уже существующими системами модулей типа CommonJS. И ни в коем случае не надо, чтобы их поддержал кто-то из браузеров, запилив свою имплементацию — это наверняка приведёт к жуткому говнищу несовместимости в будущем. Надеюсь, microsoft сделали выводы и не попытаются сделать из edge второго осла.

      Ну а на правах рекламы рекомендую почитать мою статью про модули :)


  1. faiwer
    11.12.2015 09:20

    Планируется ли поддержка *nix?


    1. dordzhiev
      11.12.2015 11:36

      На reddit сотрудники пишут, что как минимум будет поддержка Linux.


    1. Viacheslav01
      11.12.2015 11:38

      MIT делай что хочешь, рано или поздно будет везде.


  1. arestov
    11.12.2015 14:46
    +2

    Уместно вспомнить про github.com/Microsoft/node
    Форк node.js использующий в качестве движка Chakra вместо V8,
    с полифилами для кода, заточенного под V8


  1. NickKolok
    11.12.2015 22:02
    -3

    Помнится, открыть исходники .NET тоже обещали. Напомните, в итоге открыли?


    1. dordzhiev
      11.12.2015 22:13

      Reference Source уже как несколько лет существует. Также есть .NET Core RC1.