🔥

Тред (RReverser)


Можно попробовать вот здесь: video-funhouse.herokuapp.com - с вебкамерой или собственной видяшкой. Даже эффекты есть. twitter.com/h4/status/63…

Как на меня, это и правда впещатляюще. Но одна вещь меня все же удручает. Почему мы отдаем такую мощь C-шникам и не пользуемся ею сами?

Ответ прост: asm.js хоть и сабсет JS но у него свои непростые правила, и JS-никам обычно или лень или сложно их выучить. Я их не виню.

Вот например набросал модуль для вычисления расстояния между точками. Здесь важны порядок, плюсики, импорты - все.
notion image

Понятно, что когда видишь warnings на буквально каждой строке обычно валидного JS, желание писать вручную как-то отпадает.

Кстати, в данном случае использовал онлайн-валидатор с редактором - anvaka.github.io/asmalidator/ - но можно проверять конечно и в консоли.

Мало того, что даже простые функции, без использования памяти, разрастаются в непонятно что, так еще и ES6 нельзя :(

Ну и да - поскольку нет GC, вы даже не можете использовать обьекты (в т.ч. классы и массивы), замыкания, ничего динамического.

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

Обратная совместимость - это хорошо, но не тогда когда все вовсю используют TypeScript/Flow/ES6/... Зачем писать x|0 Если можно (x: int)

Так же с другими моментами. Поэтому я и начал работать над конвертором привычного ES6 с типами и модулями в asm.js.

Для этого надо все еще иметь ограниченный сабсет JS, но зато с человеческим лицом и выведением очевидных типов на этапе компиляции.

Список фич, которые на данный момент получилось перевести, можно почитать тут: rreverser.com/started-work-o… Пример:
notion image
notion image

Тестовый компилятор реализован (пока) как плагин к Babel, так что можно уже самому попробовать и поиграться.

Какой профит? Вы можете написать математическую функцию, добавить Flow/TypeScript-аннотации типов и просто export-нуть для других модулей.

Подозреваю, я вам немножко надоел, поэтому приостановлюсь и могу отвечать на вопросы.