Подтвердить что ты не робот

ECMAScript: компилятор Harmony/ES6 для JavaScript

После прочтения статьи Peter на JavaScript я заметил

Брендан Эйх заявил, что цели для Harmony должны стать лучшей мишенью для компиляторов JavaScript.

В настоящее время существуют два популярных компилятора с неопределенным соблюдением ES: Harmony:

Несмотря на то, что у CoffeeScript есть некоторое соответствие, он не предназначен для компилятора ES: Harmony, поэтому он не подходит для этой цели.

Tracuer, похоже, более строго придерживается спецификации ES: Harmony, но я не знаю, намерен ли он стать полноценным компилятором ES: Harmony.

Поскольку цель состоит в том, чтобы скомпилировать ES6 до ES3, ему также необходимо будет поддерживать функции ES5 (и, вероятно, включить ли компиляцию ES5 в ES3 или ES6 на ES3).

  • Существуют ли в настоящее время какие-либо другие проекты, направленные на создание полного ES: компилятора Harmony для ES3?
  • Разумно ли начинать писать такой компилятор, зная, что стандарт является молодым/неустойчивым/в потоке.
  • Есть ли в настоящее время какие-либо компиляторы ES5 → ES3?

Я оставил вопрос в рассылке Traceur.

Цель такого компилятора - обратная совместимость с ES3. Не полная эмуляция ES5 и ES6 в ES3.

4b9b3361

Ответ 1

Continuum реализовал большинство соответствующих функций и должен работать в браузерах es3 (например, более старые IE).

Ответ 2

(бесстыдный, но соответствующий подключаемый модуль ниже)

Caja перерабатывает свою поддержку ES5 через ES5/3 и будет делать то же самое для гармонии ES. Таким образом, наша структура будет реализована как слой Harmony для ES3, который можно пропустить для реальных реализаций гармонии, а затем разделительный загрузчик, который сохраняет свойства безопасности, относящиеся к caja.

Как и Traceur, члены команды Caja являются частью TC39 (комитет, определяющий ES Harmony).

Я не знаю о планах Coffeescript, но это было упомянуто во время обсуждений модулей Harmony. загрузчики модулей, вероятно, будут иметь возможность перехватывать загруженный исходный код (через eval hooks) и переписать его перед инициализацией модуля, поэтому, если модуль написан в CoffeeScript, во время инициализации может быть вызван перезаписываемый сценарий CoffeeScript. Это позволит приложениям быть составленными из модулей, написанных на нескольких языках, которые скомпилируются до Harmony во время загрузки.

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

Ответ 3

Отъезд TypeScript, новый язык Microsoft, основанный на ES6.

Ответ 4

Mascara - это, вероятно, то, что вы ищете.

Ответ 5

На момент ввода мы теперь имеем Babel. Он интегрируется со многими различными инструментами/системами сборки и будет передавать ES6 + для поддержки устаревших браузеров (он не указывает, на какую версию он нацелен, но он говорит, что он нацелен на IE9 +).

Чтобы установить его, введите npm install babel -g.

Обратите внимание, что у него довольно много зависимостей, а при установке - ~ 23,4 МБ (2888 файлов).

Ответ 6

Google Closure Compiler (Github) является отличный инструмент для компиляции ES6. Это простая Java-банка, которая используется из командной строки. Существуют и другие варианты, такие как службы API и графические интерфейсы, но я считаю, что лучше всего настроить автоматическую систему сборки, подключающуюся к Java JAR. Он может преобразовать ваш код ES6 в код, совместимый с ES5. Я начал использовать его для сжатия и обфускации кода, но он также может выполнять проверку ошибок и трансляцию в ES6, как я уже упоминал.

Обратите внимание, что функции ES6 отмечены как экспериментальные. Но я планирую использовать их в производстве в ближайшее время, так как мои тесты были твердыми.

Ответ 7

Там также https://github.com/matthewrobb/six

Six - это языковой супер-набор JavaScript, который позволяет использовать новые синтаксические функции из 6-го издания ECMAScript через транспилятор в ваших сценариях сегодня.

ПРЕДУПРЕЖДЕНИЕ: все еще в очень раннем состоянии, будьте осторожны.

Ответ 8

Я не уверен в том, что компиляция экземпляра на ES3 была бы ценной, в отличие от ES5, потому что изменения в реализации ограничены функциями вспомогательных объектов массива и объектов и Поддержка ES5 настолько распространена.

Итак, для полноты, еще один ES6-ES5-компилятор - это проект esnext от Square. Это набор из нескольких модулей, предназначенных для polyfill различных функций ES6, предоставляемых в одном пакете. Вот список включенных модулей списка: https://github.com/square/esnext#available