ECMAScript: компилятор Harmony / ES6 в JavaScript - PullRequest
43 голосов
/ 28 июня 2011

Прочитав статью Питера о JavaScript я заметил

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

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

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

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

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

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

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

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

Ответы [ 8 ]

14 голосов
/ 28 июня 2011

(бесстыдная, но соответствующая заглушка ниже)

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

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

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

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

11 голосов
/ 26 декабря 2012

Проверьте TypeScript , новый язык Microsoft на основе ES6.

8 голосов
/ 15 января 2013

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

4 голосов
/ 02 июля 2015

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

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

4 голосов
/ 01 июля 2011

Тушь для ресниц , вероятно, то, что вы ищете.

3 голосов
/ 13 ноября 2014

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

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

1 голос
/ 24 мая 2013

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

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

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

0 голосов
/ 24 июля 2014

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

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

...