Pull to refresh

Comments 17

Такая реализация требует от кодогенератора создавать state machine, что сильно усложняет весь процесс компиляции.

Не сильнее, чем необходимость использования транспайлеров или обходных маневров усложняет процесс разработки. Тем более, что эта фича много лет как реализована и обкатана в массе других языков программирования — так что это не challenge, а просто объемный кусок работы.
Для TypeScript обычно новые фичи так и реализуются: сначала релиз с поддержкой только ES 6 как цели компиляции, а следующий релиз уже поддерживает перекомпиляцию в ES 5.
«Нормальную» поддержку async/await обещают только в 2.0, к сожалению — а его я бы раньше чем через год не ждал.
Не нужны там никакие стейт машины: гораздо лучше превращать всё в вызовы then. Пример уже есть: github.com/MatAtBread/nodent. Превращать async/await в конечный автомат — знатное извращение, но реализовать это проще если считать, что поддерживать yield всё равно надо (а тут уж без конечного автомата никак), а превращение async/await в yield — тривиальное. Вообщем типичный программёрский приём: сначала возьмём чайник с плиты и выльем воду (сведём задачу к уже решенной), после чего нальём воду обратно, вернём чайник на плиту и закипятим его (применим уже готовое решение).
Ну видимо хотят сделать как в дотнете, для единообразности)
Мне кажется так не получится реализовать сложные случаи — типа try/catch, циклов с break/continue.
Выход из цикла можно сделать через бросание особого исключения. Насчёт сложных try..catch не знаю — не видел таких.
Видел этот коммит по возведению в степень, не думал, что целиком заапрувят, по-моему конструкция num **= 2 — это уже перебор, это уже надругательство над иммутабельностью.

Таким образом для единообразности тогда надо и тригонометрические функции добавить, например, вычисление синуса будет делаться вот так:
num Sin=
Вот тоже не понимаю зачем это в ES внесли.
Потому что уже есть +=, -=, *=, /= и т.д.
Было бы очень актуально также получить ||=, например для присвоения значений по умолчанию.
Я имею ввиду оператор ** вообще, а не **= отдельно.
а при чем тут иммутабельность?
Приятно видеть, что TypeScript тоже не стоит на месте, будем использовать async / await теперь
Скажите, а можно подменять рантайм async/await?
В babel можно async-to-generator, там встроенная функция, а можно в bluebird.coroutine, которая сейчас самая быстрая.
PS вопрос не к aylarov, а в основную ветку.
Как я написал в посте, сейчас async/await реализуется строго через ES6 генераторы. Можно использовать babel для последующей генерации ES5 с нужным рантаймом. Или подождать версии 2.0, где обещают async/await для ES5 — возможно там будет возможность выбора рантайма. А возможно и не будет — трудно предсказывать будущее :)
Не, вы меня не поняли. У async/await в ES6 толжен быть враппер/бэкенд/рантайм, как хотите называйте.
На выходе код выглядит как-то так:
asyncToGenerator(function *() {
  yield something();
});

Вот мой вопрос прост — можно ли подменить функцию asyncToGenerator на нужную мне. Я просто пока не использую TS, не знаю какие возможности настраивать компилятор, но хочу начать, потому спрашиваю.
Sign up to leave a comment.