Apr. 22nd, 2016

JS fun?

Apr. 22nd, 2016 03:28 am
ermouth: (Default)

Снимок экрана 2016-03-15 в 2.24.12

Ну, да, но я вот почти каждый день пишу JS, и то что происходит, иногда реально makes fun. Но это странный такой fun. JS стал местами выглядеть например вот так (это радует):

Снимок экрана 2016-03-15 в 2.23.09

Но иногда-то вот так (а это не радует):

Снимок экрана 2016-03-15 в 2.29.48

Оба примера потребуют транспайлера для запуска, и оба примера – сами транспайлеры.

Расширение синтаксиса и новые фичи сначала появляются как proposals и полифиллы-транспайлеры из “нового” синтаксиса в обычный ES5/6, а затем – иногда – утверждаются в следующий стандарт.

Вообще, JS-транспайлеры в web-related workflow давно норма, минификаторы кода на сайтах – как раз транспайлеры из JS в JS, ога.

Там полно замечательных разработок – я, например, активно использую AST builder и codegen для разбора и генерации JS, взятые как раз из минификатора кода. Который, замечу, изначально был написан на Lisp, а потом откомпилирован в JS, ога.

Среди JS-транспайлеров есть, конечно, звезда – babel.js. Если коротко, babel транслирует код, написанный практически на любом кандидате в будущие стандарты JS, в “классический” Javascript. К Бэйбелу бывают плагины (первый скриншот – как раз такой плагин) и всякие другие вкусности.

Ещё есть Microsoft-овский Typescript. Это такой JS c типизацией, классами в самом гнусном смысле и подобными прелестями – и транспайлер к нему. Некоторым нравится.

Ну и CoffeeScript (кажется, отходящий к праотцам – наконец-то), JSX, SJS и прочая, и прочая. Их можно сочетать в одном проекте минимумом усилий и они все прекрасно друг с другом уживаются, но…

Не fun

У всех этих прелестей есть и обратная сторона. JS стал с эзотерической точки зрения очень похож на C++. Огромный очень пёстрый и неровный стандарт, необозримое время, необходимое для действительно глубокого погружения в частности, абсолютное доминирование в своей области индустрии и много других таких вот нечётких аналогий.

Это всё очень круто – но это как-то перестаёт быть fun. Вернее, это какой-то неправильный fun.

Скажем, 3 года назад повсеместным стандартом возврата из асинхронного вызова были callback-и, а теперь это чуть не моветон, везде Promis’ы (которые круто дороже и не всегда нужны). Забавно – в 2014 я использовал promisify, чтобы превращать коллбэки в промисы, в 2016 мне стал нужен callbackify, чтобы превращать промисы обратно в коллбэки о_О

Доверие

JS комьюнити изначально основано на глубоком доверии – сам язык такой. Увы, взрывной рост комьюнити не привёл к появлению развитых инструментов, это доверие обеспечивающих. В результате недавно побурлил npmgate, и это только начало.

Если, по одному выражению, в C++ сложно выстрелить в ногу, но если получится, отрывает всю ногу – то в JS сейчас положение таково, что оторвать ногу может многим тысячам фанов сразу. И сделать это очень легко – даже стрелять не надо, достаточно обидеться.

Более того, оторвать ногу может так, что это будет долго незаметно.

Exotic bugs

В JS полно способов создавать весьма экзотические объекты. Например, все известные мне (в тч системный) методы определения, является ли объект array-ем, могут давать неожиданные результаты. Прекрасный баг вот на тему. Вообще в JS определить какой природы объект передан в функцию далеко не всегда тривиальная задача.

На это накладываются слои intermediate рантайм-представлений кода и рантайм же компиляция / bailout туда-сюда.

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

Консерватизм

Я как-то купил за 5(10?) фунтов книжку по JS-тестированию, и если б знал, насколько хороша книжка – дал бы кратно больше. Книжка эта меня просветлила совсем не в плане методик тестирования – я из неё увидел, насколько важен в JS консерватизм.

То-есть, если не использовать в JS нововведения младше двух-трёх лет, не наворачивать транспайлеров для красоты, использовать только хорошо проверенные мэйнстримовые хаки, приёмы и соглашения – глубокие ошибки могут быть только логические.

Я после прочтения этой книжки стал избегать ESnext, тайпскрипта, JSX и тп надстроек, ну и вычесал и в некотором смысле законсервировал набор библиотек. В результате то, что делается, работает всегда, сразу и на всём.

А хайп и яркие рыбки у поверхности – это то, что и в самом деле makes fun и вовсе не только для людей, далёких от JS. Вот ещё бы этот хайп в стандарт не так бойко попадал – и было б совсем славно.

Profile

ermouth: (Default)
ermouth

November 2021

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 7th, 2025 07:56 pm
Powered by Dreamwidth Studios