Нормальный транслятор ECMA6
Очень хочется уже юзать фичи из ECMA6, тем более уже есть поддержка в IDE (webstorm), но перерыв инет я нашёл не так много трансляторов, а из тех что нашёл только два имхо хоть как то подходят для использования в реальной жизни: six и typescript (т.е. мы не юзаем его специфичные штуки, а только то что будет в ECMA6).
К сожалению представленные выше кандидаты тоже далеки от идеала, т.к. делают весьма скромную поддежку + обладают своими косяками, например six реализует arrow function через бинды (которые оч тормозят в циклах), не умеет делать rest параметры в arrow function и всегда вырезает комменты. TypeScript сложно юзать в роли транслятора, т.к. его статическая структура Сегодня сел писать свой велосипед, но очень не хочется если честно...мб есть у кого похожие решения? Рассмотрел: Traceur - Баженное кривое гавно, Continuum - реализиция VM на JS, увы как я понял не умеет делать статичную трансляцию Harmonizr - баженная шняга Six - писал выше TypeScript - писал выше |
от гугля же вроде был какой то реализующий все кроме проксей (а может уже и их), не?
|
Цитата:
UPD: в общем пока решил заюзать SIX, уповаю на нативную поддержку в браузерах :) |
Цитата:
|
Цитата:
|
Планируем в ближайшее время использовать в качестве препроцессора:
https://github.com/termi/defs |
планирую добавить поддержку ECMA 6 в код модулей UI)
буду парсить код функций на лету) |
kobezzza, дай ссылки почитать, что в es6 нового :)
|
Цитата:
PS: Таки склепал на коленки себе черновой транслятор: https://github.com/kobezzza/NeJS. Поддерживает let и const (defs.js) + arrow function (реализация без bind, а через замену this на переменную замыкания), rest параметры и параметры по умолчанию, наверно добавлю деструкторизацию параметров. От six отказался, т.к. глючит постоянно и вырезает комменты. Юзать: npm install -g nejs nejs -s исходный файл -o куда сохранить новый |
Цитата:
Именованные параметры функций сделай тоже. |
А напишу ка я тоже эту херню ради прикола)) чисто на регулярках)
|
Я вот думаю сделать просто регулярками, или построить синтаксическое дерево и кукарекать от него но строить я их не умею придется опять лвл апать собственным опытом) так что сделаю просто регулярками и реплейсами
|
Судя по новым коммитам defs.js довольно скоро реализует хорошую поддержку ECMA6, уже добавлены тесты для: классов, деструктуризации и параметрам по умолчанию.
|
Как я понял ECMA это только синтаксис и родные обьекты? А кто тогда отвечает за внедрение объектов окружения?
Всяких Object.observe или Object.proxy например, ведь их стандартными средствами не реализовать? Или это не обьект окружения а родной считается, тогда .proxy и .observe должны быть прописаны в ECMA каком-то? |
Пасоны короче строю дерево, там есть такая штука как контекст он содержит список выражений список переменных и список функций объявленных в нем, внимание вопрос) как называются вот эти вот операции разделенные точками с запятой? как назвать их список?
expressions? но там могут быть как выражения так и блоки же или итераторы всякие. по этому не православно называть так. так как быть? может "конструкции"? |
Все понял, сделаю так же как делал с UI я создам классы типа для токенов текстовых функция скобка и.т.п. и соберу массив из этих токенов а потом буду пробегаться оп этому массиву и собирать конструкции, в дерево. То есть надо вначале текст на кубика распарить а потом с ними уже работать, а то я весь мозг сломал как регуляркой функции выдирать) лол
|
![]() Это зашквар же Ты там наверное используешь 20 мерные кубы из матриц таблиц, для ускорения выборки, не? Я слышал так все нормальные масоны делают. Ибо памяти в наше время хоть жопой жри. |
Добавил поддержку именованных параметров функций, исправил кое-какие баги и т.д. Обновил на гитхабе и в npm.
function foo({name, body: lastName}) { name; lastName; } Поддержку значений по умолчанию для именованных параметров не стал делать, т.к. не поддерживается штормом. ЗЫ: запилил ридми на гитхабе |
А я короче пишу минишаблонизатор для конструкций, типа регулярок тока выше уровнем) конструкции состоят из токенов, и я могу указывать какие токены могут идти а какие нет)
например шаблон конструкции "функция" выглядит так 'function \( (word,?)* \) \{ .* \}' то есть как регулярки тока за место слов там названия токенов, некоторые названия , например открывающая скобка, приходится экранировать, а чтобы не экранировать можно было назвать типа открСкобка и шаблон выгладил бы так: 'function открСкобка (word,?)* закрСкобка открФигурнСкобка .* закрФигурнСкобка' Ну короче пишу чо то типа языка для описания конструкций) чтобы потом не ебаца и добавлять разные плюшки в интерпритатор) крута да)? Ну или например описать конструкцию "блок" научить его отсчитывать одинаковое количество открывающих скобочек и закрывающий а в шаблоне функции писать просто 'function \( (word,?)* \) \{ блок \}' Короче есть где разгуляться) kobezzza, короче сяп за вдохновение) |
kobezzza, так ты ничего серьезного не сделаешь, погугли лучше по "esprima escodegen".
UPD: http://sssslide.com/speakerdeck.com/...t-ast-as-an-ir |
Цитата:
|
Цитата:
я про "function ( params ) { CONTEXT }" чтобы он понимал что когда находит конструкцию CONTEXT то должен был входить в рекурсию и парсить что внутр и в нужный момент выйти, и я думаю как сделать так чтобы делать эту конструкцию не встроенной а было API чтобы руками написать его это позволило бы разные языки на этой штуке описывать в будущем а не только сиподобные. А ты берешь и регулярками реплейсишь, жесть) Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 14:16. |