RReverser

31 августа 2015, Луцк-Киев-Лондон

# Понедельник 291 твит

London is the capital of Great Britain, ой, то есть привет! С вами @RReverser и я буду занудствовать о JS с точки зрения девтулзов :)

2:48

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

2:48

Тема довольно специфическая по сравнению с Реактами и прочими, но надеюсь развеять страхи/мифы и успеть ответить на любые ваши вопросы :)

2:48

Сам занимаюсь этим как хобби уже около 2 лет, и месяц - наконец-то в качестве основной работы.

2:48

Начнем издалека - рискую повториться, но с каких языков вы пришли в JavaScript и, собственно - зачем?)

2:49

И на этой же ноте, так как я абсолютно недисциплинированная сова, живу в UTC+1 и завтра еще и выходной - сразу же прощаюсь. До утра!

2:50

Интересно, оказывается, намного больше пришли в JS как первый язык / из верстки чем из других (хотя есть C++, Python, AS3, PHP, VB(!)).

9:47

Вот что смущает (хотя и не сюрприз) - что в JS приходят больше не по любви, а "по залету" (пришлось потому что тренд, модно, молодежно).

9:49

Соответственно, когда приходят в язык и встречают вот это все "безобразие", что отличается от других языков, наступают на те же грабли.

9:52
@jsunderhood Язык то отвратительный. И на старте совсем не было батареек. После питона была боль. Потом нода и нпм немного починили.

Вот, кстати, как раз подтверждение моих слов.

@jsunderhood Язык то отвратительный. И на старте совсем не было батареек. После питона была боль. Потом нода и нпм немного починили.

9:52
@jsunderhood Есть даже фронтенд-разработчики, которые «не любят» JS :-/

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

@jsunderhood Есть даже фронтенд-разработчики, которые «не любят» JS :-/

9:53

А расскажите, какие фичи вас наиболее смущали, когда вы впервые серьезно взялись за язык? Помогли ли вам CoffeeScript / ES6?

9:54

И остались ли какие-то вещи, которые вас пугают даже в новом стандарте?

9:54
@jsunderhood ES6 — да, очень. Кофескрипт вспоминаю как страшный сон :-) Но на самом деле не только ES6, но и новые апи в браузерах.
9:55
@jsunderhood люди не любят когда есть простор для творчества. Они любят когда им указали путь в светлое будущее. Хорошо или плохо это - хз

Но разве не то же самое, например, в Ruby? И все же его хвалили, одновременно порицая JS. В чем же разница?

@jsunderhood люди не любят когда есть простор для творчества. Они любят когда им указали путь в светлое будущее. Хорошо или плохо это - хз

9:56
@jsunderhood Есть даже фронтенд-разработчики, которые «не любят» JS :-/

К сожалению, правда. Хочется разобраться в этой печальной традиции.

@jsunderhood Есть даже фронтенд-разработчики, которые «не любят» JS :-/

9:57
@jsunderhood А как ты пришел в js?

У меня путь был довольно странным. Программируемые советские калькуляторы -> asm -> Delphi -> PHP -> JS.

@jsunderhood А как ты пришел в js?

9:59
@jsunderhood Начальная сложность освоения инструментария для разработки на ES6 под современные браузеры, например.

А в чем сложность, если не секрет?

@jsunderhood Начальная сложность освоения инструментария для разработки на ES6 под современные браузеры, например.

10:01

И мне как раз язык понравился своей гибкостью и в то же время минимализмом - язык который можно было легко "выучить весь" это ж мечта.

10:01
@jsunderhood лапша из коллбэков пугала.

Я так подозреваю, пришел сразу в Node.js, не клиентский?

@jsunderhood лапша из коллбэков пугала.

10:02
@jsunderhood все и везде по ссылке и этим никак нельзя нормально управлять, пока не появился immutable

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

@jsunderhood все и везде по ссылке и этим никак нельзя нормально управлять, пока не появился immutable

10:03
@jsunderhood Потому что начинать с JS—это жёстко. После ruby у меня был шок от несогласованности в сообществе => кол-ва всего.

Верстальщики не согласятся. Хотя, надо их спросить. Ребята, были ли у вас сложности с JS как первым языком?

@jsunderhood Потому что начинать с JS—это жёстко. После ruby у меня был шок от несогласованности в сообществе => кол-ва всего.

10:04
@jsunderhood Смущало всплытие переменных и странная конвертация типов.

О да, конвертация типов - всегда весело в динамически типизируемых языках :) Но ведь для этого у нас и есть гайды.

@jsunderhood Смущало всплытие переменных и странная конвертация типов.

10:05

По типу == vs === и все такое.

10:06
@jsunderhood Я не так знаком с Руби, но разве там тоже всё настолько hackable как в js?

Да я и сам не рубист, но да, насколько пробовал вникнуть - тоже по несколько способов сделать одно и то же.

@jsunderhood Я не так знаком с Руби, но разве там тоже всё настолько hackable как в js?

10:06

Но может здесь есть рубисты, которые меня поправят / поделятся своим опытом?

10:07
@jsunderhood пугает обратная совместимость с es5\es3, нужно аккуратно убивать старые неудачные решения

А вот это уже и правда интересно. Почему обратная совместимость может смущать? Я думал скорее наоборот.

@jsunderhood пугает обратная совместимость с es5\es3, нужно аккуратно убивать старые неудачные решения

10:07
@jsunderhood первое время о меняющийся this все время спотыкался.

Так он же не меняется, пока сам не вызовешь call/apply. Или глобальный, или на обьекте (если мы про ES5).

@jsunderhood первое время о меняющийся this все время спотыкался.

10:09
@jsunderhood Настроить всё так, чтобы работало, вкрутить в существующий проект, и понять, какие вообще инструменты надо использовать.

Ну, сейчас с этим попроще. Проект начинается как

babel src --out-dir dist --watch

и поехали :)

@jsunderhood Настроить всё так, чтобы работало, вкрутить в существующий проект, и понять, какие вообще инструменты надо использовать.

10:09
@jsunderhood иногда все еще хочется статической типизации, но не в стиле Java, а в стиле Rust/Go

Согласен, Rust не может не радовать идеями - предотвращает много ошибок. Но вот Go... нет, спасибо.

@jsunderhood иногда все еще хочется статической типизации, но не в стиле Java, а в стиле Rust/Go

10:10
@jsunderhood ого, один в один мой путь, начинал с геофизики, паял котроллеры, писал на асме и дельфи.

Геофизика - это сильно :) Ну и не 1-в-1 же. Паять так и не учился, хотя отец пробовал научить. Как-то не зацепило.

@jsunderhood ого, один в один мой путь, начинал с геофизики, паял котроллеры, писал на асме и дельфи.

10:12
@jsunderhood ключевое слово "нормально управлять" :)

Хорошо. Что же скрывается под словом "нормально"? Какие критерии?

@jsunderhood ключевое слово "нормально управлять" :)

10:12
@ALF_er @jsunderhood в Руби больше свободы, можно любой класс переопределить, операторы и т. д.
10:13
@jsunderhood Мне Руби всегда казался каким-то странным и непонятным (почти как Перл). Только месяц назад, на новой работе, стал изучать его.
10:13
@jsunderhood Калькуляторы! А какой у тебя был?

А мы вроде уже списывались об этом в предыдущих разработчиков в комментах :) МК-52 и МК-54.

@jsunderhood Калькуляторы! А какой у тебя был?

10:14
@jsunderhood да, там все на столько hackable, ты можешь переопределить любой метод + куча метопрограммирования

Вот и скажите, что это не пугает больше чем JS.

@jsunderhood да, там все на столько hackable, ты можешь переопределить любой метод + куча метопрограммирования

10:15
@jsunderhood да всегда ощущаю путаницу со scope'ами
10:17
@jsunderhood единственная сложность, что если некому тебя проверить, то ты не узнаешь всё ли ты верно делаешь, потому что может работать>>

Но почему? Особенно в ES5 - там же язык был довольно маленький что по синтаксису что по фичах.

@jsunderhood единственная сложность, что если некому тебя проверить, то ты не узнаешь всё ли ты верно делаешь, потому что может работать>>

10:19
@jsunderhood если вызвать в setTimeout метод объекта из другого метода этого объекта — тут типичный нежданчик. Пока bind() не было особенно.

Ну это как раз первый кейс - анонимная функция всегда в глобальном обьекте. Все просто ведь :) (да, до .bind)

@jsunderhood если вызвать в setTimeout метод объекта из другого метода этого объекта — тут типичный нежданчик. Пока bind() не было особенно.

10:20
@jsunderhood это синтаксический сахар, как питонист:
Должен существовать один - и, желательно, только один - очевидный способ сделать это.
10:20
@jsunderhood Не, в Ruby, как правило, есть признанный путь/гем, решающий конкретную задачу. У JS всё наоборот. На старте это демотиватор.

Интересная концепция. Получается, все сводится к определенному набору правил, а не возможностям самого языка?

@jsunderhood Не, в Ruby, как правило, есть признанный путь/гем, решающий конкретную задачу. У JS всё наоборот. На старте это демотиватор.

10:21
@jsunderhood Коффе это пример как не надо делать. С es6 писать приятнее и не надо на каждый чих _. Плюс async/await это офигенно.
10:21
@jsunderhood нет, сперва в клиентский. И окунулся в лапшу jquery :)

Разве в jQuery была такая же лапша с коллбеков? В основном ивенты вроде.

@jsunderhood нет, сперва в клиентский. И окунулся в лапшу jquery :)

10:23
@jsunderhood ты ведёшь коллективный аккаунт, надо подавлять иррациональную вкусовщину вида «Go не нужен»

Суть же как раз в том, что каждую неделю различные взгляды от различных людей.

@jsunderhood ты ведёшь коллективный аккаунт, надо подавлять иррациональную вкусовщину вида «Go не нужен»

10:24
@jsunderhood я как раз про то, что при присвоении метода объекту или передаче в каллбек без bind он изменяется.

Здесь просто другой подход - вместо привязки контекста к ф-ции, надо смотреть на место вызова. Дальше все по маслу.

@jsunderhood я как раз про то, что при присвоении метода объекту или передаче в каллбек без bind он изменяется.

10:25
@jsunderhood область видимости, предварительное объявление всех переменных как полей объекта функции.

Вторую часть, честно говоря, не понял. Полей какого обьекта?

@jsunderhood область видимости, предварительное объявление всех переменных как полей объекта функции.

10:26
@jsunderhood ОК. в C есть указатели, в PHP есть ссылки, в Python есть нативный copy, в руби я к сожалению не спец. Что есть в js?

Не-не, ты не ответил на вопрос про "нормально" :) В JS - тоже ссылки же.

@jsunderhood ОК. в C есть указатели, в PHP есть ссылки, в Python есть нативный copy, в руби я к сожалению не спец. Что есть в js?

10:28
@jsunderhood а потом появляются всякие Angular
10:28
@jsunderhood @sapegin ну js и правда странный. Куча костылей, неочевидностей, со своими фишками наследования. Есть за что ненавидеть его.

"Свои фишки" - не причина ненавидеть, будь то язык или человек. Познакомиться, изучить ближе - да, но ненавидеть?)

@jsunderhood @sapegin ну js и правда странный. Куча костылей, неочевидностей, со своими фишками наследования. Есть за что ненавидеть его.

10:29
@jsunderhood всё просто, когда поймёшь все эти изменения контекста. А при входе JS это ну очень сильно сбивает с толку.

А вот, кстати пропустил - Вы пришли с других языков или же это первый? Хочу понять, когда возникает неочевидность.

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

10:30
@freiksenet_ru @jsunderhood А мне, как любителю Ruby, Coffee пришелся очень по-душе.

С этим, пожалуй, соглашусь. Диалекты (Coffee-, TypeScript) удобны как раз для тех, кто приходит с похожих языков.

@freiksenet_ru @jsunderhood А мне, как любителю Ruby, Coffee пришелся очень по-душе.

10:31
@jsunderhood Я бы сказал, что всё сводится к набору правил в начале изучения — и это удобно. Потом начинаешь сам копать в возможности языка.
10:31
@reklatsmasters @jsunderhood я вот не понимаю жалобы на колбеки, при чем тут js? При том что асинхронный? Так это его главное достоинство
10:31
@jsunderhood @andrepolischuk ты перепрыгнул нормальные скриптовые языки как python, Ruby. Тогда js еще норм, после раннего php то

Ну как раннего. PHP5.

@jsunderhood @andrepolischuk ты перепрыгнул нормальные скриптовые языки как python, Ruby. Тогда js еще норм, после раннего php то

10:32
@jsunderhood меня смущал не сам язык, а инфраструктура:зоопарк либ, в каждой из которых решались одни и те же задачи по своему + DOM ужасен

Как сейчас ситуация? Улучшилась? Или все еще

'use strict';
'use jquery';

?

@jsunderhood меня смущал не сам язык, а инфраструктура:зоопарк либ, в каждой из которых решались одни и те же задачи по своему + DOM ужасен

10:33
@_h4_ @SelenIT2 @jsunderhood На входе ещё не используют this. А если используют, то не грех изучить матчасть, благо ничего заумного.
10:33
@raxpost @jsunderhood согласен. Но у моих знакомых-бэкэндеров вызывает сложности код, работающий "не по порядку".

Да, на беке в других языках с этим гораздо проще - хотя и поэтому же проигрывают в производительности, простаивая.

@raxpost @jsunderhood согласен. Но у моих знакомых-бэкэндеров вызывает сложности код, работающий "не по порядку".

10:35
@jsunderhood нормально-значит когда нужно передавать ссылку, когда нет - копию. Чтобы скопировать объект js до сих пор приходится изощряться

Насколько же часто надо передавать копию? Если это не immutable-like реализация, то копирование недешевая вещь.

@jsunderhood нормально-значит когда нужно передавать ссылку, когда нет - копию. Чтобы скопировать объект js до сих пор приходится изощряться

10:36
@jsunderhood Остался ли этот минимализм после ES6?

К сожалению, нет :( Но, с другой стороны, появилось много недоступных ранее удобств, так что оно того стоило.

@jsunderhood Остался ли этот минимализм после ES6?

10:38
@jsunderhood окей, как самому себе делать код ревью?

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

@jsunderhood окей, как самому себе делать код ревью?

10:39
@raxpost @jsunderhood @reklatsmasters когда слышу про колбеки вспоминаю промисы, использовать одно без другого нелогично, в группе колбеков.

Естественно, но будем честными - промисы относительно недавнее явление, и, например, ивенты полностью не заменяют.

@raxpost @jsunderhood @reklatsmasters когда слышу про колбеки вспоминаю промисы, использовать одно без другого нелогично, в группе колбеков.

10:40
@jsunderhood как минимум классы появились, все стараются под них обновиться
10:40
@jsunderhood Ага. В том же C++ передавать объекты по ссылке приходится гораздо чаще, чем в JS копировать их.
10:44
@jsunderhood immutable.js тоже не особо дешевый :)

Значительно дешевше копирования за счет сохранения диффов даже на больших обьектах.

@jsunderhood immutable.js тоже не особо дешевый :)

10:46
@jsunderhood результат выполнения-то ясен. А вот насколько оптимально написан код для получения этого результата - непонятно.

Это да. Об этом уже вещал @mraleph, когда вел аккаунт, но можем поговорить на неделе и об этом тоже.

@jsunderhood результат выполнения-то ясен. А вот насколько оптимально написан код для получения этого результата - непонятно.

10:47
@jsunderhood нет уж, давайте про ревью. действительно, как?

Как самому себе провести ревью? Как не кодить по ночам? Читайте в моей новой книге "Никак".

@jsunderhood нет уж, давайте про ревью. действительно, как?

10:48
@jsunderhood понятно что дешевле копирования. Просто не настолько, чтобы слепо переходить целиком на него

Естественно. Слепо следовать тренду вообще опасно, но и изучать для понимания плюсов и кейсов стоит.

@jsunderhood понятно что дешевле копирования. Просто не настолько, чтобы слепо переходить целиком на него

10:51
@Sigiller @jsunderhood уанвей, писать бенчмарки

Бенчмарки тоже надо уметь писать. Слишком уж часто судят о производительности, проверяя некорректный микробенчмарк.

@Sigiller @jsunderhood уанвей, писать бенчмарки

10:51

Насчет этого все у того же @mraleph есть замечательные статьи

mrale.ph/blog/2013/04/2…

mrale.ph/blog/2014/02/2…

10:54
@jsunderhood как ты относишься к забвению такого замечательного языка, как vbscript?

Рыдаю по ночам в подушку ;(

@jsunderhood как ты относишься к забвению такого замечательного языка, как vbscript?

10:55
@jsunderhood кстати, сейчас уже не хватает пакетов и пространсв имен (раз модули есть). import {func} form '../../../../lib/some.js' - адок

С одной стороны да, с другой сейчас все же есть гарантии на неконфликт имён. С неймспейсами это сложнее.

@jsunderhood кстати, сейчас уже не хватает пакетов и пространсв имен (раз модули есть). import {func} form '../../../../lib/some.js' - адок

10:56
@jsunderhood неправильно выразился. Я о том, что объявленная внутри функции переменная уже существует в момент начала исполнения.

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

@jsunderhood неправильно выразился. Я о том, что объявленная внутри функции переменная уже существует в момент начала исполнения.

10:56
@jsunderhood были скорее проблемы не с языком а с тем чтобы научиться программировать и понять базовые принципы.
10:57
@jsunderhood и такие конструкции неправильны if (smth) {var a =1;} else {var a=2;}

Ну почему же - работают, значит правильные. Хотя да, места для граблей хватает.

@jsunderhood и такие конструкции неправильны if (smth) {var a =1;} else {var a=2;}

10:58
@jsunderhood а можешь посоветовать для изучения что-нибудь современное человеку на пенсии, который всю жизнь работал с VB и FoxPro

Сложно конечно, особенно если по большей части сам и не читал ничего кроме чужого кода... Может кто-то подсказать?

@jsunderhood а можешь посоветовать для изучения что-нибудь современное человеку на пенсии, который всю жизнь работал с VB и FoxPro

11:01
@amel_true @jsunderhood Если пользоватся линтерами как компиляторами то все ок.

Хороший совет, кстати.

@amel_true @jsunderhood Если пользоватся линтерами как компиляторами то все ок.

11:07

Как-то так. pic.twitter.com/gLkuj4bG3x

11:08
@freiksenet_ru @jsunderhood async/await можно сказать тоже внутри Кофе был проверен — IcedCoffeeScript

Ну проверен он был много где. В частности, C#.

@freiksenet_ru @jsunderhood async/await можно сказать тоже внутри Кофе был проверен — IcedCoffeeScript

11:09
@gxoptg_ @jsunderhood ну то есть вы парни считаете, что нативный clone в js нафиг не нужен, будем дальше юзать lodash и самопальные фунции?

Ну как-то и lodash для такого не приходилось использовать. Как впрочем и клонирование в целом, не считая defaults.

@gxoptg_ @jsunderhood ну то есть вы парни считаете, что нативный clone в js нафиг не нужен, будем дальше юзать lodash и самопальные фунции?

11:11
@freiksenet_ru @jsunderhood придуман там, но в C# всё таки много отличий внутри, нужно получить фидбэк работы со JS API

Ну вот писал с async/await на C# тоже. Отличий сильно не заметил, только там Task, а там Promise.

@freiksenet_ru @jsunderhood придуман там, но в C# всё таки много отличий внутри, нужно получить фидбэк работы со JS API

11:15
@freiksenet_ru @jsunderhood я просто это отметил, так как текущее хейтерство к Кофе способно убить развитие языка

Это плохо? Он и так отживает свое понемногу, стандарты побеждают.

@freiksenet_ru @jsunderhood я просто это отметил, так как текущее хейтерство к Кофе способно убить развитие языка

11:15
@jsunderhood Помню, мне потребовалось около 3 часов, чтобы додуматься до "трюка" `var that = this`. В статьях тогда не было написано явно.

Да, были времена...

@jsunderhood Помню, мне потребовалось около 3 часов, чтобы додуматься до "трюка" `var that = this`. В статьях тогда не было написано явно.

11:16
@dmitrytrigonis @jsunderhood для того, чтобы юзать гемы, нужен простой и понятный Gemfile. В JS: package.json, gulpfile, webpack.config etc.

В JS тоже достаточно package.json. Все остальное не связано и <s>от лукавого</s> для удобства билдов.

@dmitrytrigonis @jsunderhood для того, чтобы юзать гемы, нужен простой и понятный Gemfile. В JS: package.json, gulpfile, webpack.config etc.

11:17
@andrey_sitnik @jsunderhood Mы просто не хотим чтобы плохие фичи появились в JS. Достаточно проблем с синтаксисом с опциональными ;

Проблемы с синтаксисом? Нет, не слышал. Насчет ; - да, лично я соглашусь, но есть люди, для которых это фича.

@andrey_sitnik @jsunderhood Mы просто не хотим чтобы плохие фичи появились в JS. Достаточно проблем с синтаксисом с опциональными ;

11:19
@freiksenet_ru @jsunderhood например, из-за хейтерства к Кофе забыли про очень удобный оператор obj?.func?()

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

@freiksenet_ru @jsunderhood например, из-за хейтерства к Кофе забыли про очень удобный оператор obj?.func?()

11:20
@andrey_sitnik @jsunderhood а если есть истории про то как хейтеры кофе писали угрожающие письма, то рассказывай, было бы весело послушать)
11:22
@iamstarkov @jsunderhood @freiksenet_ru в Babel пока только спеки. Вот Elm был крутым экспериментом

Ну вот нет. Тот же f::g() - даже не proposal, просто эксперимент. Не говоря о JSX.

@iamstarkov @jsunderhood @freiksenet_ru в Babel пока только спеки. Вот Elm был крутым экспериментом

11:25
@jsunderhood @freiksenet_ru кулуары одной группы — это плохой пример развития. Представь если бы CSS только в W3C развивали

es-discuss - не "одна группа", даже не организация. Просто mailing list, где любой (!) может взять участие.

@jsunderhood @freiksenet_ru кулуары одной группы — это плохой пример развития. Представь если бы CSS только в W3C развивали

11:27
@freiksenet_ru @iamstarkov @jsunderhood вот для CSS-in-JS или CSS Modules спек нет, так как надо получить фидбэк прежде спеки

Нельза получить фидбек без конкретного описанного синтаксиса/поведения. Та же ситуация с :: в ES.

@freiksenet_ru @iamstarkov @jsunderhood вот для CSS-in-JS или CSS Modules спек нет, так как надо получить фидбэк прежде спеки

11:28
@jsunderhood список проведенных, встроенных идей — это не настоящая свобода, когда любой может проверить и попробовать

Sweet.js?

@jsunderhood список проведенных, встроенных идей — это не настоящая свобода, когда любой может проверить и попробовать

11:31
@jsunderhood @freiksenet_ru @iamstarkov наличие одного мейллиста — это уже ограничивает подход к вопросу, все в одном контексте

Ну уж нет. Это организованное место, где можно обсудить все что хочешь, заходи на esdiscuss.org

@jsunderhood @freiksenet_ru @iamstarkov наличие одного мейллиста — это уже ограничивает подход к вопросу, все в одном контексте

11:32
@jsunderhood @freiksenet_ru @iamstarkov ну вот оператор obj?.func?() действительно удобен. Его сразу не перенести из-за ?, но это решается

Именно, это решаемо, но требует обсуждения - опять-таки смотри @esdiscuss esdiscuss.org/topic/existent…

@jsunderhood @freiksenet_ru @iamstarkov ну вот оператор obj?.func?() действительно удобен. Его сразу не перенести из-за ?, но это решается

11:38
На этой неделе (уже) интересные @jsunderhood и @cssunderhood.
11:39
Всё таки слабоватые у дизайнеров в @iamspacegray холивары, конечно, «Скетч или фотошоп». Почитайте сейчас @jsunderhood, вот у кого жара
11:40
@andrey_sitnik @jsunderhood @iamstarkov Надоело потому что. Сколько можно защищать коффе? Иногда кажется у тебя во всем заслуга коффе.

Вот да, я ценю кофе как промежуточное решение проблемы, но слишком частое заблуждение что JS "перенял фичи" из него.

@andrey_sitnik @jsunderhood @iamstarkov Надоело потому что. Сколько можно защищать коффе? Иногда кажется у тебя во всем заслуга коффе.

11:41

Брендан Ейк насчет этого тоже не раз отвечал, насколько это далеко от реальности - фичи обсуждались еще в ES4, а кофе их перенял.

11:43

Да, ES4 не выстрелил, было много неорганизованности, но авторство многих фич и в кофе, и в TS и собственно ES6 идет как раз оттуда.

11:44
@jsunderhood поэтому и не выстрелил.

? Не выстрелил из-на неорганизованности между компаниями на тот момент, каждая тянула веревку в свою сторону.

@jsunderhood поэтому и не выстрелил.

11:49

Раз мы уже к этому так или иначе перешли - как изменилась ситуация в ES6? Пропали ли все грабли, на которые вы наступали раньше?

11:57

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

11:57

И, конечно, самое интересное - что бы вы хотели видеть в следующей версии? (как из уже предложенных фич, так и собственные предложения)

12:02
@jsunderhood я жду новый надязык, который исправит обратно-несовместимые проблемы — как минимум === и ;

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

@jsunderhood я жду новый надязык, который исправит обратно-несовместимые проблемы — как минимум === и ;

12:06
@jsunderhood например, любители CoffeeScript вряд ли корректно скажут, во что преобразуется этот мета-код pic.twitter.com/6QhltQ5Afa
12:07
@jsunderhood невозможность допустить ошибок всегда лучше отдельной проверки. Лучший интерфейс — отсутствие интерфейса по ТРИЗу.

Чем именно будет отличаться новый язык от презета с линтером? Стоит ли оно фрагментации и отдельной поддержки?

@jsunderhood невозможность допустить ошибок всегда лучше отдельной проверки. Лучший интерфейс — отсутствие интерфейса по ТРИЗу.

12:11
@freiksenet_ru @andrey_sitnik @jsunderhood @iamstarkov babel появился намноооооооооооооооооооооого позже, чем кофе. Ну не надо городить-то

До этого был Traceur, да, и эксперименты проводились в нем (ну и сразу в браузерах). Что это доказывает?

@freiksenet_ru @andrey_sitnik @jsunderhood @iamstarkov babel появился намноооооооооооооооооооооого позже, чем кофе. Ну не надо городить-то

12:15
@jsunderhood если новый язык будет секси, то перепишут также быстро как с ангуляра на реакт

Перепишут что? Весь веб? Все существующие приложения, которые работают и не ломаются с самых начал времен?

@jsunderhood если новый язык будет секси, то перепишут также быстро как с ангуляра на реакт

12:16
@andrey_sitnik @jsunderhood Их же придумывали — тот же Дарт, например. Ничего так и не вышло.
12:17
@jsunderhood Хочу async/await, очень не хочу оператор «::» (или хочу, но в другом виде)

Странно, первый отзыв против :: - а что с ним не так?

@jsunderhood Хочу async/await, очень не хочу оператор «::» (или хочу, но в другом виде)

12:17
@somerandstring @jsunderhood С ангуляра на реакт переключиться проще, чем внедрить новый язык в движки браузеров.
12:17
@jsunderhood Почти ушла проблема с this, тк даже bind теперь не нужен. async/await oчень улучшил читаемость кода на сервере.
12:21
@jsunderhood С мутабельностью проще и читабельнее со спредами и деструктиронгом.
12:21
@jsunderhood ты постепенно всё больше абстрагируешься от железа. Следующим языком должен быть Scratch :)

Если бы :) Я скорее за то, чтобы JS имел больше доступа до железа - взрослый язык, как-никак.

@jsunderhood ты постепенно всё больше абстрагируешься от железа. Следующим языком должен быть Scratch :)

12:23
@gxoptg_ @jsunderhood @somerandstring давайте разберёмся, зачем вообще переключаться с ангуляра на реакт?

Кто-то пытается начать параллельный холивар :)

@gxoptg_ @jsunderhood @somerandstring давайте разберёмся, зачем вообще переключаться с ангуляра на реакт?

12:23

Вот это наверное обидно было :)) pic.twitter.com/7Lr6E0pIVn

12:24
@gxoptg_ @jsunderhood над ES5 было много надязыков — это было удобно. Но сейчас лучше сделать на Babel, чтобы сразу забирать новинки «ES7»

Да, поэтому я и пытался подвести к тому, что стандарт - это лучше, чем множество форков.

@gxoptg_ @jsunderhood над ES5 было много надязыков — это было удобно. Но сейчас лучше сделать на Babel, чтобы сразу забирать новинки «ES7»

12:25
@freiksenet_ru @jsunderhood я считаю, что сильнее всего читабельность улучшили template strings и computed properties
12:25
@freiksenet_ru @jsunderhood до конца проблему так и не решили, приходится все равно для тех же обработчиков использовать лишнюю =>

Почему лишнюю? Она мешает чем-то? Какие есть лучшие способы? (как я и писал, интересно собрать предложения)

@freiksenet_ru @jsunderhood до конца проблему так и не решили, приходится все равно для тех же обработчиков использовать лишнюю =>

12:26

А пока - лирический отступ на "чем же я занимаюсь и почему вообще вещаю о подобных вопросах".

12:28

Если говорить конкретно о JS, то я ко-мейнтейнер парсера Acorn, один из разработчиков спецификации AST для JS и JSX и член команды Бабеля.

12:30

В частности, виноват в реализации парсинга ES6 (единственной на момент создания Бабеля), и поэтому же интересуюсь новыми предложениями.

12:31

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

12:33

Не обещаю, что реализуем новый синтаксис, но что-то простое - вполне.

12:35
@jsunderhood тем, что в надязыке нельзя будет совершить ошибку. == будет всегда равен ===, например. Или о ; можно будет просто забыть

Что значит "забыть о ;"? Сейчас ты тоже можешь о них забыть :)

@jsunderhood тем, что в надязыке нельзя будет совершить ошибку. == будет всегда равен ===, например. Или о ; можно будет просто забыть

12:37
@andrey_sitnik @jsunderhood Настрой себе редактор! У меня моментально появляются ошибки линтера.

Кстати да - в любом редакторе это давно доступно. Для саблайма - SublimeLinter например, очень рекоммендую.

@andrey_sitnik @jsunderhood Настрой себе редактор! У меня моментально появляются ошибки линтера.

12:38
@jsunderhood Не надо о них забывать, а то как standard style и "no semicolons it's fine" и после него "Never start a line with ( or [ "
12:41
@jsunderhood онлайн туториал через твитер! один тред для автора, второй для коментов!

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

@jsunderhood онлайн туториал через твитер! один тред для автора, второй для коментов!

12:42

Если, конечно, будут желающие :)

12:42
@jsunderhood о кстати о линерах. У меня в саблайме линтеры, в gulp тесты и еще перед коммитами прогоняются. Это оверкил?

Как по мне, хорошо. Может есть другие мнения?

@jsunderhood о кстати о линерах. У меня в саблайме линтеры, в gulp тесты и еще перед коммитами прогоняются. Это оверкил?

12:43
@jsunderhood это и причина недолюбливать js. Некоторые изъяны исправить уже почти невозможно.

Лучше так как в Python2/3 - когда один код работает в одной версии, другой - в другой, и зоопарк надо поддеоживать?

@jsunderhood это и причина недолюбливать js. Некоторые изъяны исправить уже почти невозможно.

12:45
@andrey_sitnik @jsunderhood Я тоже не думаю о ; и ===, я их просто всегда ставлю, как если бы == было ставить нельзя. Это не замечаешь.
12:45
@andrey_sitnik @jsunderhood Это как скобочки в лиспе, они пропадают через месяц его написания.
12:46
@freiksenet_ru @jsunderhood тогда зачем тебе линтер? Очевидно, что проблема есть, если ты его использует — никто не пишет без ошибок

Очень интересная постановка вопроса. Значит ли наличие линтера в проекте то, что непременно есть проблемы?

@freiksenet_ru @jsunderhood тогда зачем тебе линтер? Очевидно, что проблема есть, если ты его использует — никто не пишет без ошибок

12:48
@jsunderhood @freiksenet_ru ну представь себе, что вместо Автопрефиксера был бы линтер, который бы говорил про забытые/лишние префиксы

Это немножно другое имхо. Автопрефиксер он позволяет писать проще и меньше кода, а линтер он предотвращает ошибки.

@jsunderhood @freiksenet_ru ну представь себе, что вместо Автопрефиксера был бы линтер, который бы говорил про забытые/лишние префиксы

12:50
@jsunderhood @cssunderhood я вообще гуманитарий, поэтому мозги скрипели. Но постепенно осваиваю всё больше, и от этого приятно

А как у меня мозги скрипели, когда сидел на потоке с нейробиологией на @AACIMP :) (реклама для студентов, да :)).

@jsunderhood @cssunderhood я вообще гуманитарий, поэтому мозги скрипели. Но постепенно осваиваю всё больше, и от этого приятно

12:52
@jsunderhood @freiksenet_ru если == будет значить === и если мы заменим правила авто-; то линтер для них не нужен будет

Ну останется десяток других причин, где он нужен.

@jsunderhood @freiksenet_ru если == будет значить === и если мы заменим правила авто-; то линтер для них не нужен будет

12:54
@jsunderhood в js зоопарк больше (особенно в инфраструктуре языка).

А это плохо?

@jsunderhood в js зоопарк больше (особенно в инфраструктуре языка).

12:57
@jsunderhood весь ваш современный js лет через 5 будет ужасным легаси.

Да вот как-то 20 лет уже как должен быть легаси, но нет. Много развития, много тулзов - но в целом тот же язык.

@jsunderhood весь ваш современный js лет через 5 будет ужасным легаси.

12:59
@freiksenet_ru @jsunderhood строго говоря все, но, например, в Python-фреймворках изменения минимальные и миграция простая.

В JS тоже миграция довольно простая, есть даже тулзы типа codemod, которые позволяют адаптироваться к новым реалиям.

@freiksenet_ru @jsunderhood строго говоря все, но, например, в Python-фреймворках изменения минимальные и миграция простая.

13:04
@jsunderhood собираю примеры: "проект работал, обновился Х, проект сломался", "проект Х теперь не поддерживается, пришлось делать Y" RT, plz
13:15
@jsunderhood а у тебя есть опыт go и rust?

Go оттолкнул после знакомства с тредами в которых разработчики утверждали, что map/filter/reduce никому не нужны.

@jsunderhood а у тебя есть опыт go и rust?

13:16

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

13:16
@jsunderhood Да, в go либо go-way либо никак. "Тебе это не нужно" - ответ на любой вопрос о фичах типа generics и функционалки.
13:17
@jsunderhood @pstepchenko а можно ссылку на тред? Буду приводить ее в качестве аргумента почему го не нужен

groups.google.com/forum/#!topic/… кажись эта, гугл ее по крайней мере нашел

@jsunderhood @pstepchenko а можно ссылку на тред? Буду приводить ее в качестве аргумента почему го не нужен

13:20
@jsunderhood приватных методов и свойств. Сейчас приходится на символах, не очень красиво.

Вот насчет этого есть пропоузалы, но... мы правда хотим этого в JS? Как же хакабельность?

@jsunderhood приватных методов и свойств. Сейчас приходится на символах, не очень красиво.

13:27
@jsunderhood Я не понимаю в принципе зачем приватные свойства. Это такой джавизм, зачем он в динамических языках?
13:29

Как-то второй раз спросил о собственных предложениях, но опять скатилось к срачу "все плохо и ничего не исправить".

13:44
@jsunderhood в библиотеке любой метод, который сможет дернуть разработчик извне, будет использован против тебя. Иногда нужна защита.

Против кого - тебя? Как автору библиотеки мне глубоко все равно как ее будут использовать, я даю только API.

@jsunderhood в библиотеке любой метод, который сможет дернуть разработчик извне, будет использован против тебя. Иногда нужна защита.

13:45
@jsunderhood Это не совсем реально, но хотелось бы разделения между обьектами и records, сейчас мы обьекты юзаем для обоих целей.

ES6 Map?

@jsunderhood Это не совсем реально, но хотелось бы разделения между обьектами и records, сейчас мы обьекты юзаем для обоих целей.

13:46
@jsunderhood вот именно что тебе нужно дать API и больше ничего. Все остальные-то методы общие куда девать, выносить из класса? :)

Да нет, если человек хочет использовать недокументированный функционал - ок, но он берет ответственность на себя.

@jsunderhood вот именно что тебе нужно дать API и больше ничего. Все остальные-то методы общие куда девать, выносить из класса? :)

13:48
@jsunderhood Типо как Immutable.Record. facebook.github.io/immutable-js/d…

Звучит как Typed Objects, которые дают структуры с четким набором полей и бинарных типов. github.com/coderhaoxin/ty…

@jsunderhood Типо как Immutable.Record. facebook.github.io/immutable-js/d…

13:50
@jsunderhood когда пользователь тебе задает вопросы по методу, который для него вообще не предназначался - это тоже не круто

Конечно, на такие можно просто не отвечать. На свой страх и риск.

@jsunderhood когда пользователь тебе задает вопросы по методу, который для него вообще не предназначался - это тоже не круто

13:55
@jsunderhood for-in, Object.keys(), но хотелось бы нормальных методов для итерации по значениям и работы с ними.

Это предложение на данный момент даже никем не курируется (переходит с рук в руки), так что можно вполне слать PR.

@jsunderhood for-in, Object.keys(), но хотелось бы нормальных методов для итерации по значениям и работы с ними.

13:59
@silentroach @jsunderhood Если он приватный, они будут ругатся в твоих issues требуя его сделать публичным, а так просто заюзают.

Именно. Либо все доступно, либо заканчивается срачами и форками.

@silentroach @jsunderhood Если он приватный, они будут ругатся в твоих issues требуя его сделать публичным, а так просто заюзают.

14:00
@silentroach @jsunderhood Ну все должно быть доступно) Я юзал внутренние модули много раз и очень удобно когда они доступны.
14:03
@silentroach @jsunderhood Не обязательно это поддерживать и документировать, но зачем закрывать если все равно найдут как юзать?
14:03
@silentroach @jsunderhood В Java через reflection приватное вполне себе юзают)
14:03
@jsunderhood @freiksenet_ru или вот - github.com/freiksenet/rea… отличный пример приватного свойства, даже специально помечен подчеркиванием

Да, соглашения в виде подчеркивания имхо лучше чем какие-то синтаксические войны "вы закроете, а мы найдем способ".

@jsunderhood @freiksenet_ru или вот - github.com/freiksenet/rea… отличный пример приватного свойства, даже специально помечен подчеркиванием

14:09
@jsunderhood @freiksenet_ru я хочу чтобы юзер сделал console.log(моя-либа) и увидел только методы API, которое я хочу, а не вот это все

Object.defineProperty, не?

@jsunderhood @freiksenet_ru я хочу чтобы юзер сделал console.log(моя-либа) и увидел только методы API, которое я хочу, а не вот это все

14:10
@jsunderhood и вот такое, да? github.com/freiksenet/rea… пусть себе юзер захочет и положит в кеш что угодно. Я за приватность

Ну вот попадется у него кейс почистить этот кеш или сериализовать/подтянуть, что плохого-то?

@jsunderhood и вот такое, да? github.com/freiksenet/rea… пусть себе юзер захочет и положит в кеш что угодно. Я за приватность

14:12
@freiksenet_ru @jsunderhood но блин юзеру не надо знать про этот метод. Для него библиотека новая, пусть видит только то, что нужно дергать

Юзер вообще по документации должен ориентироваться. А то развели тут CLDD (console-log-driven-development).

@freiksenet_ru @jsunderhood но блин юзеру не надо знать про этот метод. Для него библиотека новая, пусть видит только то, что нужно дергать

14:14
@jsunderhood возьми все тот же babel, там документация не успевает за разработкой. Я за говорящий экспортированный интерфейс, а не помойку.

Не то что не успевает - ею просто никто не занимается. В том числе коммьюнити - пользуется и ок, зачем помогать.

@jsunderhood возьми все тот же babel, там документация не успевает за разработкой. Я за говорящий экспортированный интерфейс, а не помойку.

14:22
@jsunderhood то что он может выстрелить себе в ногу. Я не хочу стрелять себе в ногу, и не хочу чтобы коллеги себе что-то отстрелили.

Приватность здесь вообще не решает. Тот же аргумент, что и за типизацию.

@jsunderhood то что он может выстрелить себе в ногу. Я не хочу стрелять себе в ногу, и не хочу чтобы коллеги себе что-то отстрелили.

14:23

Все равно новые версии выходят и меняют интерфейсы, и уже проскакивают все чаще мнения, что даже semver с этим не помогает.

14:24
@somerandstring @jsunderhood ой! Да кто ж в здравом уме даст денег на переписывается того,что уже работает?Бизнесу пофиг на технологии
14:28
Весь этот фронтенд — какой-то Амстердам. Все укуренные и со своими велосипедами.
14:42
@jsunderhood это уже проблема версионирования, да

Они плотно связаны. Разные причины, один результат - поломка при апдейтах. Так зачем платить больше? :)

@jsunderhood это уже проблема версионирования, да

14:44

Еще спрашивали про новую работу, но не уверен, какие детали интересуют.

14:58
@jsunderhood Кстати, если не секрет, как ты деньги зарабатываешь? Работаешь где-то, кроме опенсорса? Или платят за опенсорс?

К сожалению, нет - за опенсорс не платят, хотя мечтать конечно могу :)

@jsunderhood Кстати, если не секрет, как ты деньги зарабатываешь? Работаешь где-то, кроме опенсорса? Или платят за опенсорс?

15:01

Не работал почти год за счет сбережений и понимания со стороны девушки :) Хотелось найти, где можно будет работать над подобными вещами.

15:03

Это заняло довольно много времени и поиска, так как немного есть компаний, которые что-то пилят связанное с инфраструктурой JS.

15:04

Но собственно нашел - сейчас уже месяц как работаю в CloudFlare в качестве "JavaScript Performance Engineer" (спорный тайтл, да :) ).

15:04

В связи с этим и как раз переехал в Лондон (на что была подсказка в приветствии).

15:05
@jsunderhood ну вот @dan_abramov накраудфаундил :)

Боюсь, у меня нет ни одного личного известного проекта, на котором можно было бы так накраудфандить :)

@jsunderhood ну вот @dan_abramov накраудфаундил :)

15:09

CloudFlare занимается предоставлением CDN с различными плюшками в виде автоматической оптимизации, защиты от атак и скрейпинга, прочее.

15:17

Когда говорю название компании, многие пожимают плечами - "не слышал", хотя это и не удивительно для security компании.

15:18

На данный момент через наши сервера проходит около 5% всего траффика в Интернете (что очень даже неплохо как на стартап имхо).

15:20

Может показаться, что я делаю рекламу сервису, но на самом деле скорее делюсь впечатлениями и причинами выбора работы :)

15:20

Если есть какие-то специфические вопросы - можно задавать тоже.

15:21
@jsunderhood ну вообще на слуху очень даже по-моему

Зависит, как-то по моим кругам общения большинство идет гуглить.

@jsunderhood ну вообще на слуху очень даже по-моему

15:21
@jsunderhood вроде на слуху, но больше не как компания в сфере безопасности, а как стартап "за 5 минут ускоряем ваш сайт в 10 раз", имхо

Да, они сдвигают пиар в эту сторону - вон nodejs.org вчера тоже начал использовать CF для ускорения.

@jsunderhood вроде на слуху, но больше не как компания в сфере безопасности, а как стартап "за 5 минут ускоряем ваш сайт в 10 раз", имхо

15:30

Но все-таки защита от DDoS остается основной заботой и желанием энтерпрайз-клиентов.

15:32

Но у нас твиттер не о том. Плюшка работы для меня лично как раз в обьеме интернета, который он охватывает.

15:38

Имея весь HTML/CSS/JS, которые проходят через твои сервера, можно не только делать защиту/кеш, но и автоматически оптимизировать код.

15:39

Собственно это и круто - представьте возможности, который открываются, когда вместо консольных девтулзов, "прокся" может делать все за вас.

15:40

Именно возможность работать над таким "магической прокси" не могла не захватить моё внимание. Как-то так :)

15:42

Конечно, на лету делать такие трансформации намного сложнее, чем работать над Акорном/Бабелем, где всё статично, но и гораздо интереснее.

15:43

В частности, появляется необходимость работать с различными языками, думать о производительности (чтобы прокся именно ускоряла ответ) и т.д.

15:44

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

15:45

Скажем, клиенту с HTTP2 можно будет отдавать JS-модули отдельными файлами для ускорения, а для старых HTTP1 конкатенировать.

15:46
@jsunderhood сколько лет уже пишешь на JS?)

Если честно, сложно определить как считать. Я писал про свой "путь" но на самом деле JS немного пробовал и до asm.

@jsunderhood сколько лет уже пишешь на JS?)

15:48

Или же другой пример: автопрефиксинг CSS только для браузеров, где это необходимо. @andrey_sitnik ведь круто было бы?)

15:57
@jsunderhood ага, хотя удаление неподдерживаемых свойств даст больше. Так можно заинлайнить и woff и woff2, а прокси ненужное вырежет.

Конечно! Я более к тому, что знание, в какой конкретный браузер попадет код, сильно расширяет возможности.

@jsunderhood ага, хотя удаление неподдерживаемых свойств даст больше. Так можно заинлайнить и woff и woff2, а прокси ненужное вырежет.

16:04

Это по сути та же причина, по которой языки с собственной VM все чаще "удивительно" оказываются быстрее нативных.

16:05

Дело в том, что при комппиляции приложения общего назначения на, допустим, C++, приводит к генерации очень общего x86 кода.

16:06

А вот зная процессор, можно на старте сгенерировать код с микрооптимизациями под конкретную архитектуру, чем JVM/.NET/JS и пользуются.

16:07

То же самое с компиляциями JS/CSS под конкретную машину, разрешение экрана, возможности ОС и прочее.

16:08
@silentroach @jsunderhood у вас неправильно api, если оно построено на классах

Тут началась интересная независимая дискусия на тему классов vs функций как внешнего API.

@silentroach @jsunderhood у вас неправильно api, если оно построено на классах

16:20
@jsunderhood насчет "стартапа" ты гонишь - так и Google с Facebook или Netflix можно в стартапы записать.

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

@jsunderhood насчет "стартапа" ты гонишь - так и Google с Facebook или Netflix можно в стартапы записать.

16:29

Статья из TechCrunch например - "enterprise startup" techcrunch.com/video/cloudfla… @listochkin

16:30
@mistadikay @jsunderhood ага, вполне. Роскомнадзор постарался в пиар-компании.

Интересно, не знал про такие особенносты рынка :) @_h4_ а как именно он "помог" если не секрет?

@mistadikay @jsunderhood ага, вполне. Роскомнадзор постарался в пиар-компании.

16:31
@jsunderhood вот как-то так rkn.gov.ru/news/rsoc/news…

Ну что сказать... Спасибо надзору за пиар!)

@jsunderhood вот как-то так rkn.gov.ru/news/rsoc/news…

16:34

Вообще да, мы получаем очень много жалоб, в том числе из-за цензуры каждый день, но политика компании - не вмешиваться в подобные разборки.

16:37
Посоны, а такое уже придумали как укоротить или ждать es 'next'? a === b || a === c //cc @jsunderhood

[b, c].includes(a) например?

Посоны, а такое уже придумали как укоротить или ждать es 'next'? a === b || a === c //cc @jsunderhood

16:44

Ну или indexOf >= 0 для pre-ES6.

16:45
наконец-то @jsunderhood про javascript! как бальзам на душу.
16:46
@alexeyraspopov @jsunderhood @as_Crazy а кто это определяет что какая-то абстракция - лишняя?

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

@alexeyraspopov @jsunderhood @as_Crazy а кто это определяет что какая-то абстракция - лишняя?

16:47
@jsunderhood @xmbshwll ох, какое спорное утверждение. т.е. компиляторы нативные глупее тех что в потрохах VM?

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

@jsunderhood @xmbshwll ох, какое спорное утверждение. т.е. компиляторы нативные глупее тех что в потрохах VM?

16:51

Собственно в этом и проблема - код компилируется на одном процессоре, а запускать будут совершенно на другом, просто совместимом.

16:52
@jsunderhood @freiksenet_ru Нет никакой проблемы. Надо лишь однажды прочитать и уяснить, что такое «;» и когда срабатывает восстановление.
17:13
@mktoid @ivanenok О, в NGen все не так просто. Это же не чистый AOT, так как он тоже выполняется на целевой машине, но дальше кешируется.

Кстати, по-моему, самый умный подход, слышал (хз), что Safari тоже кеширует сразу прекомпиленный код вместе с .js

@mktoid @ivanenok О, в NGen все не так просто. Это же не чистый AOT, так как он тоже выполняется на целевой машине, но дальше кешируется.

17:17
@webholt @jsunderhood @silentroach если вкратце, то о том, что приватные методы - это хорошо

А тем временем - краткое содержание сериала, который идет уже пару часов и мы все еще не знаем кто отец Эмилио.

@webholt @jsunderhood @silentroach если вкратце, то о том, что приватные методы - это хорошо

17:20
@eden_lane @jsunderhood @silentroach Приватные методы — это хорошо. Они прекрасны. И нахуй не нужны в JS (а в каждой шутке, как известно…)

А точнее - нужны ли нам все-таки приватные методы в JS или нет.

@eden_lane @jsunderhood @silentroach Приватные методы — это хорошо. Они прекрасны. И нахуй не нужны в JS (а в каждой шутке, как известно…)

17:21
@yuritkachenko @jsunderhood автор Backbone считает, что semantic versioning - это чушь. Так что обновления пару раз были болезненны.

Многие сейчас так считают. Поддерживать semver довольно сложно, не создавая тупиковые ветки без важных патчей.

@yuritkachenko @jsunderhood автор Backbone считает, что semantic versioning - это чушь. Так что обновления пару раз были болезненны.

17:22
@silentroach @jsunderhood какая защита когда сорсы в руках?
17:23
@ivanenok @jsunderhood V8 из знаний о машине использует только "какие иструкции поддерживаются" и микрооптимизации для Atom
17:30
@jsunderhood @ivanenok JITы знают, потому что они наблюдают за кодом. вот эти вот все inline cache, type feedback и прочие ключевые слова
17:37
@jsunderhood @ivanenok а статическому компилятору откуда эту информацию взять? он может взять и попробовать вывести. и он, конечно, пробует
17:38
@jsunderhood @ivanenok но только это очень тяжело и затратно. надо делать whole program analysis и все такое, и точность все равно страдает
17:39
@jsunderhood @ivanenok и самое главное статический компилятор просто так не может сделать adaptive optimization

Собственно Вячеслав говорит о том же, но уже в контексте уже рантайм-оптимизаций.

@jsunderhood @ivanenok и самое главное статический компилятор просто так не может сделать adaptive optimization

17:41
@yaroshevich @_h4_ @jsunderhood ой я плохо прочел, он тож говно. Нужно типа a === {a || b}

Синтаксис ради синтаксиса - зло. Поэтому все новые фичи в ES и проходят жесткие дискусии на тему "а зачем?"

@yaroshevich @_h4_ @jsunderhood ой я плохо прочел, он тож говно. Нужно типа a === {a || b}

17:44

И по этой же причине API-шки (Promise, DataView, etc.) оставляются как можно более лаконичными - только необходимые вещи в ядре языка.

17:45
@jsunderhood ну есть же destructing assignment, чем такое хуже?

Он решает проблему: разобрать обьект сразу в переменные. А для сравнения .includes уже ее лаконично решает.

@jsunderhood ну есть же destructing assignment, чем такое хуже?

17:52
@yuritkachenko @_h4_ @jsunderhood `a in [b, c, d, e, f]` работает. Принципиально палки?

Ох, нет, это же вообще не то.

@yuritkachenko @_h4_ @jsunderhood `a in [b, c, d, e, f]` работает. Принципиально палки?

17:53
@jsunderhood возможно :) зазвали @mraleph в чатик, и то польза большая, я считаю.

Да, @mraleph всегда зазвать полезно - каждый раз помогает почувствовать себя вроде "Ничего ты не знаешь, Джон Сноу"

@jsunderhood возможно :) зазвали @mraleph в чатик, и то польза большая, я считаю.

17:56
@jsunderhood давайте менять тему. Предлагаю: "Как договорится с бекендером-профессионалом", по поводу архитектурного решения клиента в SPA?

Хм, а зачем с ним договариваться об архитектуре клиента? // И это уже правда не столько по моей теме :)

@jsunderhood давайте менять тему. Предлагаю: "Как договорится с бекендером-профессионалом", по поводу архитектурного решения клиента в SPA?

17:58
@yuritkachenko @_h4_ @jsunderhood В целом, согласен. Кажется, этот сахар тянет на заявку в es7, как минимум.

Мое имхо - вряд ли - но без проблем, пишите в esdiscuss.org / шлите пулл-реквесты в github.com/tc39/ecma262

@yuritkachenko @_h4_ @jsunderhood В целом, согласен. Кажется, этот сахар тянет на заявку в es7, как минимум.

18:01

И кстати да, сам факт что следить и предлагать фичи ES можно прям на Github - по-моему, очень крутое достижение. github.com/tc39/ecma262

18:03
Хорошая тема для @jsunderhood — расскажи plz что за хрень с символами после ES и как в этом аду разобраться: ES6, ES7, ES2015, ESNext?

А причём тут символы, не совсем понял?

Хорошая тема для @jsunderhood — расскажи plz что за хрень с символами после ES и как в этом аду разобраться: ES6, ES7, ES2015, ESNext?

18:22
@jsunderhood речь об изменениях в нумерации, если я правильно понял @yuritkachenko

А, я думал, речь о символах которые ES6 :)

@jsunderhood речь об изменениях в нумерации, если я правильно понял @yuritkachenko

18:24

Ну в целом здесь все просто: ESNext - название из времён ES4, его использовали по сути для обозначения "нового JS со всеми плюшками".

18:26

ES2015, ES2016, ... - теперь корректные официальные названия из-за годичных выпусков.

18:27

Но как-то поздно - ES6/ES7 уже попало в обиход раньше за сам "закон", поэтому и употребляется. И это просто порядковый номер редакции спеки.

18:28

Вообще по максимуму продвигается идея, что версия ES совершенно не важна и разработчики не должны за ней следить - ну год выпуска, и что.

18:33

Так как уже даже на данный момент у вас нет разделения "этот браузер поддерживает ES5, а этот решил поддержать ES6, а тот вообще ES7".

18:34

Разделение существует только по фичам - и это единственное, что и правда важно - реализована конкретная фича или нет.

18:35

Поэтому версионность и пытаются убить все кто может - и авторы спеки, и тулзы (в т.ч. Бабель), и браузеры.

18:36
@jsunderhood вообще-то разделение есть

Да нет. По версиям (особенно IE) - да. Но все браузеры так или иначе вовсю имплементируют те и иные *фичи*.

@jsunderhood вообще-то разделение есть

18:37

Вон, например, Edge уже реализовал [под флагом] async/await - и что, теперь говорить что он поддерживает ES7? dev.modern.ie/platform/chang…

18:38
@jsunderhood isES6Support = ES6Features.every(browser.isSupport) и никак иначе

Ну вот зачем твоему коду знать, что браузер поддерживает *весь* ES6? (и непонятно когда это случится хоть с одним)

@jsunderhood isES6Support = ES6Features.every(browser.isSupport) и никак иначе

18:40
@jsunderhood с HTML и CSS давно так (хотя «HTML5», «CSS3» и даже «CSS4» вовсю живы в рекламных слоганах)

Именно. Это работает только как рекламные слоганы "да мы! да у нас тут уже HTML6! и ES8! и CSS4! мы всё можем!"

@jsunderhood с HTML и CSS давно так (хотя «HTML5», «CSS3» и даже «CSS4» вовсю живы в рекламных слоганах)

18:42
@jsunderhood это надо знать не моему коду, а мне, чтобы быть уверенным, что данный код отработает в браузере безо всяких бабелов

Опять-таки - нет. 1) Ни один браузер не поддерживает *весь* ES6. 2) Твой код вряд ли использует *весь* ES6.

@jsunderhood это надо знать не моему коду, а мне, чтобы быть уверенным, что данный код отработает в браузере безо всяких бабелов

18:42

Только фича-тесты - вот что важно, а не версии. А их можно получить, например из featuretests.io

18:43

Кстати, там же - в github.com/getify/es-feat… - есть тулза testify которая позволит извлечь список фич, которые нужны именно твоему JS.

18:44

И дальше тебе остаётся сравнить этот список с браузером, под которым собираешься запукать код.

18:45

("запускать" конечно же)

18:45
@jsunderhood мой код не использует ничего из ES6 из-за того, что браузеры его ещё не поддерживают полностью)

А зря, можно до скончания ждать :) Не говоря уже об ожидании, когда пропадёт последний клиент со старым браузером.

@jsunderhood мой код не использует ничего из ES6 из-за того, что браузеры его ещё не поддерживают полностью)

18:47

Транспайлить не так страшно :) Можно даже разделить аудиторию по метрикам сайта и одним отдавать "почти ES6" а другим - скомпиленный ES5.

18:49

Таким образом, у современных браузеров не будет оверхеда на полифиллы/длинный синтаксис, а старые получат все равно работающий сайт.

18:50
Девелопер, помни: существуют браузеры, под которыми можно запукать свой код! twitter.com/jsunderhood/st…

Мы не будем озвучивать названия и версии этого браузера, мы выше этого, правда ведь?)

Девелопер, помни: существуют браузеры, под которыми можно запукать свой код! twitter.com/jsunderhood/st…

18:52
@jsunderhood видимо, в частности, и поэтому таки пришли к WebAssembly )

WebAssembly - тема, конечно, интересная и достойна обсуждения, но причём тут он в контексте ES6?

@jsunderhood видимо, в частности, и поэтому таки пришли к WebAssembly )

19:01
@elephantum можно спросить у @jsunderhood "Твиттер, а что ты думаешь про TypeScript? Стоит ли на него смотреть?"

Интересно было бы послушать мнения других, прежде чем отвечать самому.

@elephantum можно спросить у @jsunderhood "Твиттер, а что ты думаешь про TypeScript? Стоит ли на него смотреть?"

19:09
@Borovikov @elephantum @jsunderhood А когда в прокат выходит? И какой рейтинг IMDB?
19:11
@jsunderhood существует мнение, что такой код более отказоустойчив и быстрее "прогревается". лично я склонен верить
19:18
@jsunderhood тайпскрипт хорошо, но хуже flow системой типов, сильно, но flow не готов для продакшна еще (например не запускается на винде)
19:28
@jsunderhood кроме того, в отличие от того же CoffeeScript, у TypeScript есть спецификация, соответствующая стандартам ECMAScript

Вот с этим как раз не совсем так. Стандарт есть, но с ES6 уже не совместим.

@jsunderhood кроме того, в отличие от того же CoffeeScript, у TypeScript есть спецификация, соответствующая стандартам ECMAScript

19:29
@sevaisnotcow @jsunderhood Не видел лет 5 девелоперов на винде. Либо мак либо линукс.

Что ж, привет, вот он я :)

@sevaisnotcow @jsunderhood Не видел лет 5 девелоперов на винде. Либо мак либо линукс.

19:30
@jsunderhood а еще он дал начало интересным экспериментам вроде research.microsoft.com/apps/pubs/?id=… и как следствие SoundScript

Да, эти эксперименты очень даже интересны.

@jsunderhood а еще он дал начало интересным экспериментам вроде research.microsoft.com/apps/pubs/?id=… и как следствие SoundScript

19:31
@jsunderhood нет, это понятно, что TS — это надмножество JS, но спека на писана с использованием тех же грамматик и тд

Был надмножеством, сейчас просто пересекаются, и это доставляет немного боли :)

@jsunderhood нет, это понятно, что TS — это надмножество JS, но спека на писана с использованием тех же грамматик и тд

19:32
@jsunderhood поделись стеком? чо как используешь? а то меня на работе заставляют сидеть под виндой, я страдаю:(

Если кратко:

ConEmu - крутой терминал
Chocolatey - типа Brew
Putty - SSH
Sublime - тут всё как везде

@jsunderhood поделись стеком? чо как используешь? а то меня на работе заставляют сидеть под виндой, я страдаю:(

19:36
@jsunderhood нет, ты не прав. TS на оборот ТОЛЬКО становится надмножество js, до версии 1.5 (а я на 1.6 dev) — сильно лучше, к ES6 близко

Близко по синтаксису, но разная семантика. Сравни например результат

function f() {
return () => arguments;
}

@jsunderhood нет, ты не прав. TS на оборот ТОЛЬКО становится надмножество js, до версии 1.5 (а я на 1.6 dev) — сильно лучше, к ES6 близко

19:38
@jsunderhood вопервых зачем использовать arguments если можно не использовать?

Семантика важна. Мы говорим сейчас не о том, что ты используешь в своём коде, а о совместимости языков.

@jsunderhood вопервых зачем использовать arguments если можно не использовать?

19:40
@jsunderhood О, еще кто-то кроме меня юзает Chocolatey! Крутая штука, на работе 90% софта с неё ставил.
19:41
@jsunderhood я не уверен что function() {return function() {arguments} } не является ошибкой компилятора, а во вторых это выглядит как

Неа. Тайпскрипт напрямую отказался в своих issues менять, так как обратная совместимость уже не позволяет.

@jsunderhood я не уверен что function() {return function() {arguments} } не является ошибкой компилятора, а во вторых это выглядит как

19:42
@jsunderhood conemu ничего не может по сравнению с нормальными терминалами в других ОС. Или его можно допилить как-то?

Чего ж тебе не хватает-то?) Вообще наверное лучше привлечь сюда @ConEmuMaximus5 (он наш).

@jsunderhood conemu ничего не может по сравнению с нормальными терминалами в других ОС. Или его можно допилить как-то?

19:44
@sevaisnotcow @jsunderhood это точно не баг TS, а их обдуманное решение?

Ага. Там еще такие были, сходу не вспомню, надо искать. Может решат поламать совместимость ради ES6 в 2.0, хз.

@sevaisnotcow @jsunderhood это точно не баг TS, а их обдуманное решение?

19:46
@Kreozot @jsunderhood Вас таких двое. Если на работе заставляют использовать винду — нужно использовать виртуалку.

Меня "заставляют" использовать на работе мак, если на то пошло :)

@Kreozot @jsunderhood Вас таких двое. Если на работе заставляют использовать винду — нужно использовать виртуалку.

19:47

Ещё раз - холиварить не буду, и так за прошлую неделю как-то много было этого) Интересуют конкретные вопросы (вот как стэк) - рад ответить.

19:48
@jsunderhood @Semenov @Kreozot Реально заставляют? Не дали выбор какой комп?

Ну дали на выбор разные MacBook. Некоторые внутренние тулзы завязаны. Ну ок, работать-то могу.

@jsunderhood @Semenov @Kreozot Реально заставляют? Не дали выбор какой комп?

19:51
@jsunderhood проблем с компиляцией всяких модулей не бывает?

Года полтора назад было, и то уже не помню с чем ) Если речь о npm-модулях.

@jsunderhood проблем с компиляцией всяких модулей не бывает?

19:52

А нет - вспомнил - это был node-ffi, довольно специфическая вещь, хотя и крутая.

19:52
@jsunderhood @ConEmuMaximus5 в общем у меня скорее претензии к винде после долгого опыта с linux/macos :)

Советую почитать например developer.rackspace.com/blog/powershel…, неплохой обзор "PowerShell from Linux guy"

@jsunderhood @ConEmuMaximus5 в общем у меня скорее претензии к винде после долгого опыта с linux/macos :)

19:55
@jsunderhood @webholt Ты свалил с макоси и линукса на винду?

Да, времена меняются, не стоит ограничивать себя стереотипами 5-/10-летней давности. Еще недавно и IE отставал ;)

@jsunderhood @webholt Ты свалил с макоси и линукса на винду?

19:57

Вдруг интересно - вот где-то так выглядит мой терминал. Все современные прелести на месте, вылазит в Quake-style. pic.twitter.com/blXcWtnB3m

19:58

Вкладки, подсветка синтаксиса в realtime, гит-бранчи, копипасты - всё прекрасно себе работает.

20:00
@jsunderhood я имел в виду IE

А, пропустил. Ну рабочие для основных вещей, а для шалостей можно подключить github.com/Microsoft/IEDi…

@jsunderhood я имел в виду IE

20:03
А, пропустил. Ну рабочие для основных вещей, а для шалостей можно подключить github.com/Microsoft/IEDi… twitter.com/_asci/status/6…

Эта штука оффициальный (!) адаптер от Microsoft для использования Chrome DevTools + Edge.

А, пропустил. Ну рабочие для основных вещей, а для шалостей можно подключить github.com/Microsoft/IEDi… twitter.com/_asci/status/6…

20:04
@jsunderhood Это ещё Опера на Престо делала.

Круто, не знал - пишут, что в старой Опере тоже происходило кеширование прекомпилированного JS.

@jsunderhood Это ещё Опера на Престо делала.

20:12
@jsunderhood годный аккаунт, постоянно что-то новое узнаю. Спасибо вам.

Так и живём :)

@jsunderhood годный аккаунт, постоянно что-то новое узнаю. Спасибо вам.

20:14
@freiksenet_ru @sevaisnotcow @jsunderhood привет. w7 на работе, w10 на личном ноуте.
20:20
We use a JavaScript to prevent people from downloading images. pic.twitter.com/dmpuASdC3g

Спокойной ночи и до встречи завтра в немного менее активном режиме.

We use a JavaScript to prevent people from downloading images. pic.twitter.com/dmpuASdC3g

21:25
@jsunderhood 10 лайков и ни одного ретвита. никто не хочет рассказать о работающем вин дев-стеке =(
21:34

Рано я видимо попрощался - страсти про "зачем винда" не утихают. Ребята, будьте выше этого. Есть технологии, они развиваются.

21:49

Кому как не нам знать, с какой скоростью меняется мир технологий? И при этом судить по стереотипам нескольколетней давности - странно.

21:50

Никаких обид и т.д., но мне в одной компании прям на собеседовании сказали, что "раз юзаю винду, значит не дорос ещё до них".

21:53

Вот скажите, вы правда считаете, что это может служить критерием для оценки девелопера?)

21:53

Давайте быть обьективными к технологиям, а не разводить постоянные холивары, которым место на форумах 10-летней давности.

21:55
@jsunderhood да нет холиваров,интересно мнение профессионала, коим вы являетесь. Все же что не так у них и что так у них. Были же критерии

Мне пересчитать сколько раз было "там же всё плохо", "ненормально" и т.д. от людей, которые на винде и не сидят?)

@jsunderhood да нет холиваров,интересно мнение профессионала, коим вы являетесь. Все же что не так у них и что так у них. Были же критерии

21:59

Об этом и говорю - конструктивные вопросы - ок, попытки разобраться - ок, оценки по опыту N-летней давности (или вообще без него) - не ок.

22:00
@jsunderhood я уже говорил утром, что сообществу пора выработать этикет, который блокировал бы эмоциональной хейтерство
22:05
@jsunderhood А что там у винды? Теперь все хорошо стало?

Сорри, но без комментариев, после нескольких-то часов обсуждений. Спокойной ночи всем!

@jsunderhood А что там у винды? Теперь все хорошо стало?

22:08

# Вторник 108 твитов

Ох. А я так посмотрю, страсти вокруг винды всю ночь не утихали. Видимо, зацепило даже больнее за "что не нравится в JS". С добрым утром!)

10:30
@jsunderhood когда сидел на винде, вместе с установкой git ставились unix utilities и ssh работал из любой comand line, без putty

Ну да, так тоже работает. У меня в Putty просто много профилей осталось сохраненных, дело привычки.

@jsunderhood когда сидел на винде, вместе с установкой git ставились unix utilities и ssh работал из любой comand line, без putty

10:32
@jsunderhood может у них стек такой сильно никсовый и для них это важно

Фронтенд. Понимаешь, обычный фронтенд, Карл!

@jsunderhood может у них стек такой сильно никсовый и для них это важно

10:33
@mista_k @jsunderhood согласен, слишком мощный поток информации, граничащий с надоедливостью.

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

@mista_k @jsunderhood согласен, слишком мощный поток информации, граничащий с надоедливостью.

10:34
@jsunderhood я бы _очень_ настороженно присмотрелся к такому человеку — для меня это очень сильный маркер (правда выводы могут быть разными)

Есть еще люди, считающие, что разработчик на винде - это подозрительно. Оок.

@jsunderhood я бы _очень_ настороженно присмотрелся к такому человеку — для меня это очень сильный маркер (правда выводы могут быть разными)

10:37
@YevhenBoyarsky @jsunderhood Работа комнадная, логично выбирать в команду людей со сходной жизненной позицией. Даже если она про выбор оси.

Думаю наоборот - интересно собрать людей с различными мнениями. Тогда и появляется креативность.

@YevhenBoyarsky @jsunderhood Работа комнадная, логично выбирать в команду людей со сходной жизненной позицией. Даже если она про выбор оси.

10:38
@toivonens @jsunderhood у нас один разработчик был уволен из-за того, что отказался использовать мак.
10:39
@jsunderhood То, что сейчас es5 - станет байткодом. Фичи будут поддерживаться компилятором, а не в браузером и вопрос вообще отпадёт )

Наконец хоть кто-то про JS. Нет, такого не будет. Цель WebAssembly - не замена JS, а дополнение.

@jsunderhood То, что сейчас es5 - станет байткодом. Фичи будут поддерживаться компилятором, а не в браузером и вопрос вообще отпадёт )

10:42
@freiksenet_ru @jsunderhood да не, я почти уверен, что будет быстрее. Предлагаю спор: я за то, что через 2 года будут реализации )

Делаем ставки. Будет ли за 2 года JS компилироваться в WebAssembly?

@freiksenet_ru @jsunderhood да не, я почти уверен, что будет быстрее. Предлагаю спор: я за то, что через 2 года будут реализации )

10:44
@jsunderhood тебе похоже удалось разжечь тлеющий огонь этого чятика извечным спором про Windows vs *NIX

И я теперь не знаю как его погасить :( Чуваки, JS! WebAssembly! Табы или пробелы! Что угодно!)

@jsunderhood тебе похоже удалось разжечь тлеющий огонь этого чятика извечным спором про Windows vs *NIX

10:55

Просят рассказать про WebAssembly. Что ж, это уже получше.

11:00

Суть WebAssembly - не замена JS. Об этом говорят и сами разработчики WA, но почему-то девелоперы их не особо желают слушать.

11:01

WebAssembly - это следующий шаг в развитии таких штук как asm.js. На данный момент он и *есть* 1-в-1 отображением фич asm.js.

11:02

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

11:03

Вместо этого, используется бинарное представление синтаксического дерева (AST).

11:04

Таким образом, достигается выигрыш в скорости парсинга до 20 раз. (Слишком многие, кстати, путают это со скоростью выполнения кода)

11:05

Последнее совершенно неверно. Так как сами правила выполнения остаются те же от asm.js, а в случае V8 - даже виртуальная машина та же.

11:06

Ну а причины выигрыша по скорости самого asm.js те же - ручное управление памятью, чистая математика с определенными типами. Никакой магии.

11:08

Надеюсь, понятно, что пытаться туда же засунуть бизнес-логику и манипуляции с DOM бессмысленно. Вы не получите никакого профита.

11:11
Сильно удивлен, почему, вроде взрослым, людям не пофигу, кто какими инструментами пользуется. /Cс: @jsunderhood
11:46
@jsunderhood Кстати, о типах. Там Int64 не намечается? В «не-веб-» асме можно флаг переноса использовать, но в джаваскрипте-то его нет

Кстати интересный вопрос. Скорее да чем нет. Вот твит Брендана например год назад: twitter.com/brendaneich/st…

@jsunderhood Кстати, о типах. Там Int64 не намечается? В «не-веб-» асме можно флаг переноса использовать, но в джаваскрипте-то его нет

12:01
@jsunderhood ещё видел его общение с индутным, который тоже очень хочет инт64

Кто ж не хочет. Но я так подозреваю, что придется-таки Брендану жевать свою шляпу...

@jsunderhood ещё видел его общение с индутным, который тоже очень хочет инт64

12:04

В ES7 (2016) очень мало попадет, в отличии от ES6, большинство фич переносится. А для (u)int64 сначала надо запилить Value Objects.

12:05

Вдруг что, Value Objects - это такая новая штука которая позволит определять кастомные типы примитивов с собственным поведением.

12:06

Вот Int64/Uint64, нативные Immutable Map/Set и многие другие вещи можно будет реализовать просто на этой основе.

12:06

Кстати, из интереса - кто вообще игрался с asm.js? (компилировал ну или там пробовал писать вручную или хотя бы вникал в спеки)

12:51
@jsunderhood не попробовал. это ведь только для webgl полезно будет, нет?

Да нет, почему же. Как раз для WebGL asm.js не особо-то нужен - там и так есть шейдеры на своем C-подобном языке.

@jsunderhood не попробовал. это ведь только для webgl полезно будет, нет?

13:08

Причем шейдеры сразу же красиво распаралеливаются, чего не скажешь о JS (даже asm.js).

13:10
@jsunderhood пробовал писать вручную ради забавы. не проникся. только совсем суровые люди это выдержат)
13:11

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

13:16
@jsunderhood Слышали, но, видимо, для моих простых задач пока не нужно.

Вы вибираете инструменты под свои задачи а не придумываете задачи под интересные технологии? Это же так.. правильно.

@jsunderhood Слышали, но, видимо, для моих простых задач пока не нужно.

13:26
@jsunderhood ты вчера вещал про CloudFlare,какие там интерсные штуки.Скажи,ты помимо JS,смотришь по сторонам:бэкенд, архитектура,технологии?

Ну сейчас вот пишу на C и Python, немного приходится копаться в коде на Go, пробую Rust. Смотрю ли по сторонам? Хз..

@jsunderhood ты вчера вещал про CloudFlare,какие там интерсные штуки.Скажи,ты помимо JS,смотришь по сторонам:бэкенд, архитектура,технологии?

13:29
@jsunderhood и вообще, как считаешь,насколько нужно/важно разработчику опр. технологии (e.g JS) расширять кругозор и влезать в др технологии

Конечно важно. Иначе в JS не пришло бы много клевых штук, как с "ООП" так и с ФП (@dan_abramov подтвердит).

@jsunderhood и вообще, как считаешь,насколько нужно/важно разработчику опр. технологии (e.g JS) расширять кругозор и влезать в др технологии

13:33

Их разрабатывают именно люди, которые смотрят по сторонам, замечают интересные концепты и следуют закону Атвуда :)

13:36
@jsunderhood расскажи про свои эксперименты про js + flow -> asm.js
13:42

Собственно для чего крут asm.js:

13:43

Вроде ничего не пропустил?)

13:46

Понятно, что в среднестатической аппликухе, которая позволяет постить и смотреть котиков, отправляя все запросы на бекенд, вычислений мало.

13:56

Но они необходимы во многих более сложных приложениях с разных сфер - e-commerce, работа с графикой, звуком, игры и так далее.

13:57

И если мы хотим, чтобы на JS можно было реализовывать все, что можно в нативщине, нам нужен способ делать эти вычисления быстро.

13:58

С этой целью и был придуман asm.js и на данный момент он оптимизируется всеми современными движками (извини, JavaScriptCore / Safari).

13:59

Идея была довольно простой: создать обратно-совместимое подмножество языка, и писать на нем модули со строго определенными типами.

14:00

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

14:01

А вот в новых движках получаем еще и крутой прирост за счет упрощенной компиляции и знания типов без "прогрева" JIT.

14:03

В общем идея крутая, и привела к возможности кросс-компайлинга кода из других языков -> LLVM -> asm.js с неплохим перфомансом.

14:05

Самый популярный юзкейс: вы компилируете C/C++ с помощью clang в LLVM, а его скармливаете emscripten, получая работающую быструю программу.

14:07

Конечно, код получается довольно монструозным из-за разного рантайма и прослоек, но зато легко портировать существующий код.

14:12

Думаю, все видели разные демки с тканями и т.д., поэтому вот что-то посерьезнее: чуваки портировали FFMpeg на JS. bgrins.github.io/videoconverter…

14:13

Получилось 7 МБ уже gzip-нутого JS-а, что немало, но блин, оно и правда конвертирует ваши видеофайлы прям в браузере! :)

14:14
@jsunderhood и что, быстро это делает?

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

@jsunderhood и что, быстро это делает?

14:17

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

14:22

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

14:25

Вот например набросал модуль для вычисления расстояния между точками. Здесь важны порядок, плюсики, импорты - все. pic.twitter.com/xo5JcZwjt0

14:37

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

14:39

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

14:40

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

14:41

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

14:45

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

14:47

Обратная совместимость - это хорошо, но не тогда когда все вовсю используют TypeScript/Flow/ES6/...

Зачем писать
x|0

Если можно

(x: int)

14:49

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

14:51

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

14:52

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

Пример: pic.twitter.com/n2OhYZ8AsA

14:55

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

14:56

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

14:58

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

14:58
@jsunderhood зачем начальные значения в diffX и diffY?

Одно из правил - таким образом мы указываем, что переменные типа double (именно 0.0 - не 0) asmjs.org/spec/latest/#v…

@jsunderhood зачем начальные значения в diffX и diffY?

15:01

Как и предупреждал - пишу про немножко специфические вещи, но хочу развеять страхи перед ними и показать, что не все так сложно :) @sapegin

15:03

А в идеале, надеюсь и заинтересовать подобными темами - чем больше людей, с которыми можно о них поговорить, тем лучше.

15:03
@jsunderhood а на каких проектах это всё используется?

В основном игровые движки - Unity, Unreal Engine умеют asm.js. Вот зацените игрушку: beta.unity3d.com/jonas/DT2/

@jsunderhood а на каких проектах это всё используется?

15:15

Но, кроме них, есть и графические редакторы, эмуляторы приставок, либы для сжимания - все что угодно. github.com/kripken/emscri…

15:17
@jsunderhood там unity это ведь сторонний плагин, примерно как флеш. нет?

Попробуй игрушку - вообще без любых плагинов шустро работает (я их на рабочем ноуте не ставил). Почти HL :)

@jsunderhood там unity это ведь сторонний плагин, примерно как флеш. нет?

15:18
@as_Crazy @__fro @freiksenet_ru Для этого надо, чтобы в WebAssembly появился доступ к GC, а этого ждать ~год (слова одного с разработчиков).

У нас тут паралельно идет обсуждение JS -> WebAssembly. И я только что вспомнил, что не все так однозначно.

@as_Crazy @__fro @freiksenet_ru Для этого надо, чтобы в WebAssembly появился доступ к GC, а этого ждать ~год (слова одного с разработчиков).

15:44

Уже два года назад один активист скомпилировал SpiderMonkey в JS: github.com/jterrace/js.js/

Да, JS-engine который работает на JS-engine.

15:47

А учитывая что довольно скоро Emscripten будет уметь WebAssembly, то можно сказать в определенном роде что да, JS можна запускать на WA :)

15:48

Вдогонку - еще один "компилятор" js2js: eleks.github.io/js2js/ Enjoy!)

16:13

И раз уже пошла такая тема - все же видели PC-эмулятор с Linux на борту? bellard.org/jslinux/ - тоже asm.js

16:48

Причем там есть GCC. То есть вы можете компилировать C внутри Linux внутри x86 внутри QEMU внутри JS на телефоне... pic.twitter.com/2H745xaJ7n

16:57
@jsunderhood но нет сети. :(

В JS нет доступа к сокетам, к сожалению. Хотя где-то видел форк с дополнительним расширением к браузеру.

@jsunderhood но нет сети. :(

16:58

Зато можно в этом же эмуляторе поднять HTTP-сервер и из него же curl-ом что-то достать!)

16:59
@jsunderhood а веб-сокет это другое?

Другое. Веб-сокет может общаться только с поддерживающим сервером. У него все равно есть HTTP-заголовки.

@jsunderhood а веб-сокет это другое?

17:03
@jsunderhood ага, продолжай — очень интересно)

Вас вообще не поймешь - один говорит "очень интересно", другой - "скатились, отписываюсь". Определитесь там что ли )

@jsunderhood ага, продолжай — очень интересно)

21:05

В общем, извиняюсь за паузу - я тут переезжал между квартирами. Учитывая, что вопросов по asm.js не появилось, можно двигаться дальше.

21:10

Насколько понимаю из опроса в понедельник, все проблемы разработчиков решились с выходом ES6 и больше ничего не бесит. Как-то не по плану :)

21:13

Ну да ладно, решились так решились, что мы, сами себе проблему не придумаем, когда ее нет.

21:13

Итак, хотите ли Вы поговорить о... нет, не о том, о чем подумали - о парсинге, транспайлинге и метапрограммировании в JS?

21:16

Ладно, все по порядку. Для начала вот @vlkosinov просит рассказать о метапрограммировании. Думаю, для вечера пойдет.

21:48

Для начала возьмем реализацию попроще. Вот судя по понедельнику, очень многие уже работают с ES6. А скажите, что уже пробовал Proxy?

21:50
@jsunderhood когда разбирался в реакт-миксинах, зарылся в аспектно-ориентированое программирование и вспомнил про прокси
22:14
@jsunderhood но потом выяснилось, что оно не транспайлится и я дальше не пробовал

Да, это конечно отталкивает. Хотя 1) поиграться все равно интересно 2) транспайлить-то можно, просто неэффективно.

@jsunderhood но потом выяснилось, что оно не транспайлится и я дальше не пробовал

22:17
@jsunderhood удивительно что нету компилятора es5 в es3, хоть и не эффективного, неужели оно настолько не эффективно?

Есть, но только для кейвордов в пропертях и все такое. А геттеры-сеттеры эмулировать, думаю, дорого и нечасто надо.

@jsunderhood удивительно что нету компилятора es5 в es3, хоть и не эффективного, неужели оно настолько не эффективно?

22:21

Вот issue на этот же вопрос из es5-shim который предлагал использовать VBScript для геттеров-сеттеров в старых IE. github.com/es-shims/es5-s…

22:23

И, оттуда же - целая статья об этом хаке. webreflection.blogspot.co.uk/2011/03/rewind…

22:24

Коротко о Proxy: он позволяет эмулировать любые внутренние операции на обьектах через явно заданные обработчики.

23:01

Это включает в себя всё - обращение к свойствам по имени (чтение/запись), удаление свойств, списки ключей для for-in / Object.keys, всё.

23:02

То есть любые операции, которые до ES6 были только внутренними отображениями синтаксиса, с помощью Proxy можно переопределить динамически.

23:03

Это открывает массу интересных возможностей (адепты других языков сейчас скажут "скучно, у нас давно есть").

23:04

Парочка примеров, которые возможны с Proxy:

1) авто-логгирование
2) цепочка a?.b?.c? из кофискрипта
3) рантайм-проверка типов и структур

23:08

4) как подсказывает @vlkosinov - транзакции БД (но можно и на любых обьектах)
5) доступ к REST API без схем - api.users.rreverser.then(...)

23:10

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

23:11

И да, это уже метапрограммирование - Ваш код переопределяет свои возможности перед движком, а не движок ограничивает его.

23:13

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

23:14

К примеру, на MediterraneaJS я показывал, как можно с помощью Proxy+async/await красиво побороть параллельность в JS: slideshare.net/RReverser/es6c…

23:16

Под "побороть" я имею ввиду прозрачно пробросить API, недоступные веб-воркерам (тот же DOM).

23:17

В результате комбинации этих фич получается вот такой код для паралельности в JS. Прозрачно, не правда ли? pic.twitter.com/hvP10YHqty

23:19

Выглядит почти как синхронный код в главном потоке, но на самом деле все вычисления остаются в отдельном. И это благодаря Proxy.

23:20
@jsunderhood кстати по опыту других языков я так заранее подскажу – не надо этой херней заниматься. Уже съели не одну собаку на косяках.

Как и всегда, зависит для чего и как использовать. Есть хорошие юзкейсы, а есть хайп.

@jsunderhood кстати по опыту других языков я так заранее подскажу – не надо этой херней заниматься. Уже съели не одну собаку на косяках.

23:21
@jsunderhood хотя для этого бы лучше подошли аннотации. В Java это очень красиво сделано

Декораторы в "ES7" тоже есть/будут - даже лучше чем аннотации в этих ваших джавах :P

@jsunderhood хотя для этого бы лучше подошли аннотации. В Java это очень красиво сделано

23:22
@jsunderhood :thumbsup правильно понял, что декоратор по сути это сахар для прокси?

Нет, это разговор о транзакциях БД был. Декораторы к прокси отношения не имеют, они куда проще.

@jsunderhood :thumbsup правильно понял, что декоратор по сути это сахар для прокси?

23:25

# Среда 28 твитов

@jsunderhood а есть gist полной картины того, что получилось в итоге? Не совсем понятно про чейнинг прокси и askMainThread

Пока могу вот так бросить (это реализация "клиента"): gist.github.com/RReverser/81f5…

@jsunderhood а есть gist полной картины того, что получилось в итоге? Не совсем понятно про чейнинг прокси и askMainThread

0:01

На этой ноте, думаю, можно пожелать всем спокойной ночи. До завтра! pic.twitter.com/Ji36GQo5WZ

0:06
@CodeRuleZZZ @cssunderhood @Sigiller @freiksenet_ru @jsunderhood Есть верстальшик, есть js-программист, всё месте - фронтендщик.

Еще один холивар развернулся. Почему JS до сих пор считают частью верстки? Он уже давно не язык для DHTML.

@CodeRuleZZZ @cssunderhood @Sigiller @freiksenet_ru @jsunderhood Есть верстальшик, есть js-программист, всё месте - фронтендщик.

10:39
@jsunderhood частью фронтэнда, как и вёрстку. Но не частью вёрстки.

Да, "опечатался". Вот только он уже давно не часть фронтэнда - фронтэнд только одно из многих применений.

@jsunderhood частью фронтэнда, как и вёрстку. Но не частью вёрстки.

10:42
@jsunderhood если весь JS-блоб для сайта засунуть в WebAssembly, который будет меньше, и не надо парсить, то это должно ускорить загрузку…

Думаю, прирост будет несущественным по сравнению с основными операциями (DOM, загрузка картинок и так дальше).

@jsunderhood если весь JS-блоб для сайта засунуть в WebAssembly, который будет меньше, и не надо парсить, то это должно ускорить загрузку…

10:46
@jsunderhood не очень прозрачно. сначала parallel, потом ещё async и зачем-то await для синхронных операций оО

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

@jsunderhood не очень прозрачно. сначала parallel, потом ещё async и зачем-то await для синхронных операций оО

10:47
@jsunderhood что ты думаешь по поводу jsx? имеет право на жизнь? или лучше использовать что-нибудь более привычное json, hyperscript, jsnox?

По-поему, такого для фронтэнда в JS-е не хватало с самого начала. Да, была попытка E4X, но это не то же самое.

@jsunderhood что ты думаешь по поводу jsx? имеет право на жизнь? или лучше использовать что-нибудь более привычное json, hyperscript, jsnox?

11:05

Насколько была бы проще жизнь, если бы с самого начала мы могли писать элементы не через императивные createElement, а прям в виде HTML.

11:05
@jsunderhood и очень большой плюс что все данные предаются в JS, не строками. Для многих фреймворков это очень важно
11:25
@jsunderhood Ингвар, а что у тебя на заставке в Твиттере?

Palace of Fine Arts, San Francisco (фоткал пару лет назад)

@jsunderhood Ингвар, а что у тебя на заставке в Твиттере?

11:33
Наши картинки расходятся по сети и это радует! :-)

Автор этой картинки @deep_flegmatic

#radioQA twitter.com/jsunderhood/st…

Оффтоп - если вам понравилась вчерашняя вечерняя картинка - вот нашелся ее автор )

Наши картинки расходятся по сети и это радует! :-)

Автор этой картинки @deep_flegmatic

#radioQA twitter.com/jsunderhood/st…

14:23
. @jsunderhood просто вопрос в студию: а кто-то пользуется успешно grunt или gulp на не-node.js проектах? Что делаете с папкой node_modules?

А зачем с ней что-то делать? Бандлится все с помощью browserify/webpack.

. @jsunderhood просто вопрос в студию: а кто-то пользуется успешно grunt или gulp на не-node.js проектах? Что делаете с папкой node_modules?

15:05

Думаю, время поговорить о синтаксисе и парсинге. С ними в JS с точки зрения разработчиков парсеров не очень, особенно начиная с ES6.

18:22

Сам синтаксис в спеках, конечно, есть, но использовать его в описанном виде непросто. Вот упрощенная диаграмка ES6: rreverser.com/content/images…

18:26

Если вы откроете линку и ничего не увидите - это нормально. Надо уменьшит масштаб либо долго и нудно скроллить (скорее и то и другое).

18:27

Под "упрощенной" диаграмкой имеется ввиду, что некоторые связи между нодами на самом деле не отображены. И так места мало осталось.

18:29
@jsunderhood "упрощённая"

Естественно. А то получилась бы слишком запутанной, большой и непонятной </sarcasm>

@jsunderhood "упрощённая"

18:37
@jsunderhood Эм... На третьем экране по вертикали и на втором по горизонтали уже появляется контент. Без масштабирования.

Как-то не подумал о таком варианте, да.

@jsunderhood Эм... На третьем экране по вертикали и на втором по горизонтали уже появляется контент. Без масштабирования.

18:38

К примеру, не пробуя в консоли, скажите что будет в случаях ниже:

return yield + 1;
return 1 + yield;
return 1 + (yield);

18:52

Про более обыденные случаи, в которых и пользователи путаются, типа

var f = x => { answer: 42 };

вообще молчу.

20:25
@jsunderhood ошибку выдаст, не? типо блок кода, а ежели объект то обернуть в круглые скобки надо

Нет ошибки - это валидный код. Потому что labeled statement с меткой answer, а внутри - числовой литерат.

@jsunderhood ошибку выдаст, не? типо блок кода, а ежели объект то обернуть в круглые скобки надо

20:33
@jsunderhood к слову о генераторах es5 кода.. а почему 'args..' компилируется не в Array.prototype.slice.call(arguments), а в for-цикл?

Чтобы избежать деоптимизаций в V8. Как только arguments куда-то передается, все, вся функция наказана.

@jsunderhood к слову о генераторах es5 кода.. а почему 'args..' компилируется не в Array.prototype.slice.call(arguments), а в for-цикл?

20:35
К примеру, не пробуя в консоли, скажите что будет в случаях ниже:

return yield + 1;
return 1 + yield;
return 1 + (yield);

Ладно, отвечу сам:

1) произойдет yield из генератора значения +1
2) SyntaxError
3) сумма 1 и полученного значения

К примеру, не пробуя в консоли, скажите что будет в случаях ниже:

return yield + 1;
return 1 + yield;
return 1 + (yield);

20:40

Под (1) имеется в виду не сумма, а просто значение "1".

20:41

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

20:42

И если Babel, Firefox, Traceur и другие говорят вам что var yield = 1; делать нельзя - вас обманывают. Просто не реализовали спецификацию.

20:43

Так как само слово не было зарезервированым, а ломать веб никто не хочет. Вот и строят синтаксические костыли поверх старого.

20:44
@jsunderhood ох, дело ещё в большей жопе, чем я думал(
20:44

# Четверг 51 твит

По ночам в @jsunderhood тихо, спокойно и никого в живых. А жаль :) Продолжим наше радио утром!

0:14

.@mistadikay А у кого-то все как всегда... pic.twitter.com/x6yGllPIaJ

0:51
@jsunderhood @mistadikay под это дело можно поговорить о допингах и ритуалах, которые помогают продержаться пару-тройку ночей без сна
1:04
@Spellful не надо никаких допингов — нужен нормальный 8-часовой сон, здоровье не казенное @jsunderhood
1:04
@mistadikay @jsunderhood сколько в 6 не вставай, а жаворонком не станешь :(

Мудрые слова.

@mistadikay @jsunderhood сколько в 6 не вставай, а жаворонком не станешь :(

10:02
Ладно, отвечу сам:

1) произойдет yield из генератора значения +1
2) SyntaxError
3) сумма 1 и полученного значения twitter.com/jsunderhood/st…

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

Ладно, отвечу сам:

1) произойдет yield из генератора значения +1
2) SyntaxError
3) сумма 1 и полученного значения twitter.com/jsunderhood/st…

10:22

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

10:24

Наиболее в данной ситуации, конечно, не повезло TypeScript. Вот мы на днях обсуждали его отклонения от ES6.

10:25

А как не отклониться, если синтаксис перекроили так, чтобы и совместимость (почти) не поламать, и нового как можно больше напихнуть.

10:25

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

10:27

Так что тем кто думал что я на TypeScript пытаюсь как-то "гнать" - это не так. Скорее восхищаюсь работой и сочувствую одновременно.

10:29

Некоторое время назад я даже пытался туда контрибьютить, еще не осознавая, какое месиво получается в результате "мерджа конфликтов" языков.

10:31

Или вот например экспериментировал с форком TypeScript+JSX с автокомплитом когда это еще не было трендом :) youtube.com/watch?v=4c2pLt…

10:32
@jsunderhood Ингвар, у меня вопрос к вам: почему вы используете sublime а не полноценную IDE типа Visual Studio или WebStorm?

Ну на простой вопрос простой ответ - а зачем мне полноценная IDE для JS?

@jsunderhood Ингвар, у меня вопрос к вам: почему вы используете sublime а не полноценную IDE типа Visual Studio или WebStorm?

11:06
@jsunderhood крутая страница, я даже специально акк твиттера восстановил) Как вы считаете, почему так много хейта вокруг javascript?

Спасибо за нее @shuvalov_anton и @iamstarkov! Насчет вопроса - хз, наверное разработчики на других языках завидуют )

@jsunderhood крутая страница, я даже специально акк твиттера восстановил) Как вы считаете, почему так много хейта вокруг javascript?

11:13

Как бы мало кто из джава/дотнет/... программистов ожидал что JS настолько "выстрелит". Можно так и отвечать "Не твое, вот и бесишься".

11:15
@vagrantjs @jsunderhood у языков с низким порогом вхождения всегда есть хейтеры, которые путают язык и говнокодеров. так всегда. :(
11:17
@jsunderhood я просто только 5 мес. назад начал изучать его, и когда гуглил много где писали что типа js худший выбор для первого языка

В целом наверное соглашусь, как на первый язык в нем слишком много отвлекающих и непонятных моментов.

@jsunderhood я просто только 5 мес. назад начал изучать его, и когда гуглил много где писали что типа js худший выбор для первого языка

11:25

Изучать имхо надо на языке с минимумом синтаксического сахара, чтобы фокус был на общих концепциях, алгоритмах и т.д. а не специфике языка.

11:26
@jsunderhood то есть что-то типа C++? А с чего вы начинали, и что бы вы посоветовали изучать?)

Ну конечно, в C++ нет синтаксического сахара от слова вообще, а последних стандартах особенно :)

@jsunderhood то есть что-то типа C++? А с чего вы начинали, и что бы вы посоветовали изучать?)

11:31
@jsunderhood какой для этого больше всего подходит?

Честно - не уверен, не сильно слежу за такими вещами. Для меня первым после МК был Pascal, вполне пойдет и Java.

@jsunderhood какой для этого больше всего подходит?

11:37

Прослеживается тренд, что обучать стоит на функциональных языках - но так как сам обучался не на них, сложно что-то сказать.

11:37
@jsunderhood ассемблер? понимаю что вопрос глупый, просто в интернетах погают что после JS будет трудно на что-то перейти, и я уже волнуюсь)

Вот и я о том же переживаю. Хотя опять-таки JS был не моим первым языком, поэтому сложно оценивать.

@jsunderhood ассемблер? понимаю что вопрос глупый, просто в интернетах погают что после JS будет трудно на что-то перейти, и я уже волнуюсь)

11:48
@andrey_sitnik @jsunderhood с JS вначале, когда ничего не умеешь, бьешь лицом в клавиатуру, получается фигня, но она работает и это видно.

Как-то работает, и можно даже сайты уже пилить, но без пресловутой теории на этом же легко остановиться.

@andrey_sitnik @jsunderhood с JS вначале, когда ничего не умеешь, бьешь лицом в клавиатуру, получается фигня, но она работает и это видно.

12:05
@freiksenet_ru @jsunderhood теория о существовании чего-то кроме jQuery
12:10
@vagrantjs После js очень легко перейти на python и lua. А если ты знаешь три языка, никакой новый тебя уже не напугает @jsunderhood

Они же все сильно похожие, надо разнообразия для понимания различных подходов.

@vagrantjs После js очень легко перейти на python и lua. А если ты знаешь три языка, никакой новый тебя уже не напугает @jsunderhood

12:28
@jsunderhood Насколько гибким остаётся JS с учётом этого? Может случиться такое, что в ES20xx новые фичи станет добавлять слишком дорого?

Их и так уже дорого, поэтому каждая новая фича проходит строгий "фейс-контроль". Просто сахар ради сахара не пускают

@jsunderhood Насколько гибким остаётся JS с учётом этого? Может случиться такое, что в ES20xx новые фичи станет добавлять слишком дорого?

13:26
@subzey @vagrantjs @jsunderhood ну брейнфак это я так упомянул) на самом деле да, надо было упомянуть простейший ассемблер

Ну началось...

@subzey @vagrantjs @jsunderhood ну брейнфак это я так упомянул) на самом деле да, надо было упомянуть простейший ассемблер

13:50

А тем временем что-то опять громко упало (Amazon?), потянув за собой Slack, HipChat и других.

14:16

Кажись вернулись.

14:23

А в статусе EC2 ни слова ни апдейта.

14:23

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

17:25

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

17:26

V8 например сохраняет внутри этого дерева не только синтаксис, а и различную рантайм-информацию - в частности типы данных, определенные JIT.

17:27

Но делиться не спешат, так как заявили что им удобнее держать все внутри и рефакторить в любой момент, поэтому - никаких апишек :(

17:28

С другой стороны, Дэйв Герман из Мозиллы наоборот, несколько лет назад открыл API для расширений ФФ и подробно описал структуры данных.

17:29

Так и появился SpiderMonkey Parser API - developer.mozilla.org/en-US/docs/Moz… - де-факто стандарт AST (синт. дерева) для 90% девтулзов, работающих с JS.

17:31

Понятно, что туда же попали структуры, специфические для Фаерфокса тех времен - типа старого формата let-переменных или E4X (XML in JS).

17:32

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

17:34

И пошло-поехало. Еще один чувак решил "посоревноваться" и сделал свой совместимый парсер, но в 2 раза быстрее. marijnhaverbeke.nl/blog/acorn.html

17:38

(Поправка - в момент написания статьи он еще был в 5 раз быстрее)

17:40

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

17:41

Появились либы для обхода AST github.com/estools/estrav…, генерации кода github.com/estools/escode…, проверки скоупов github.com/estools/escope.

17:43

А имея тулзы, покрывающие весь цикл - парсинг-изменение-генерация JS, уже несложно создавать и полезные вещи для конечного пользователя.

17:45

Например, всеми вами любимый и используемый (ведь всеми? :) ) ESLint появился как раз на их основе.

17:46

Или же чудесный рефакторинг из коммандной строки с учетом синтаксиса - больше никаких регулярок! graspjs.com

17:46

Или же просто красивые визуализации выполнения кода и event loop - latentflip.com/loupe/.

17:48

Даже "новый" компилятор CoffeeScript - CoffeeScriptRedux - тоже решил использовать такой формат и тулзы вместо наколенных решений.

17:52

Так инженер из Мозилла, просто создав вики-страничку с доками для расширений, сам того не подозревая, создал де-факто стандарт для AST.

17:54

В общем, жыли эти тулзы себе, создавались и развивались, но тут им случился ES6... // продолжение следует :)

17:55
@jsunderhood а зачем тогда Reflect добавили? Там же нет ничего, кроме сахара (если верить MDN).

Reflect - важное дополнение к Proxy, все те же методы, только на любых обьектах.

@jsunderhood а зачем тогда Reflect добавили? Там же нет ничего, кроме сахара (если верить MDN).

22:47

# Пятница 30 твитов

В общем с ES6 была только одна простая, но существенная проблема: его никто всерьез не ожидал, особенно после фэйлов ES4.

0:49

Однако стандарт все же начал приобретать очертания. В это же время паралельно фейсбук начал пилить свой до сих пор спорный JSX.

0:52

Для этого они форкнули упомянутую выше Esprima в свой Esprima-FB, и реализовав JSX, решили далеко не ходить и заодно добавить немного ES6.

0:54

Так и получилось, что они первыми добавили новые типы нод для ES6, которых не было в стандарте версии Mozilla. Однако поддержка была слабой.

0:57

В это время я увлекся парсерами для собственных нужд - в основном парсинг бинарных данных в JS - можно смотреть github.com/jDataView/jBin…

0:58

А парсинг кода показался темой похожей, но в то же время мало тронутой, так как новый стандарт уже на пороге, а поддержки ES6 нету.

1:02

Захотелось помочь, попробовал поконтрибьютить в Esprima. Не получилось - мейнтейнеры были заняты другим и противились любым изменениям :(

1:05

Это сейчас Esprima лежит под крылом jQuery на Github, а еще меньше года назад они хостились на Google Code и issues лежали по пару лет.

1:06

В общем, так я и узнал про Acorn - шуструю, упрощенную альтернативу. Вот что из этого получилось: github.com/marijnh/acorn/…

1:08

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

1:09

Теперь, когда уже у нас был ES6 парсер, опять-таки - ситуация для других тулзов упростилась. Так и появился 6to5 (или же Бабель) :)

1:14

Если что - можно меня остановить, я и правда сильно втянулся в формат "лишь бы писать".

1:19

Пока пойду спать, и оставлю опросник - тут был предложен формат "туториал в твиттере" (можем завтра запилить свой сахар в JS). Что скажете?

1:25
@jsunderhood давай приватные методы :}

Ок, один из вариантов. Есть еще варианты, что хотите запилить? Не стесняйтесь, можно что угодно :)

@jsunderhood давай приватные методы :}

12:20
@jsunderhood разное тело функции для разного количества аргументов, вот здесь например theburningmonk.com/2013/09/clojur…

В принципе, тоже вариант - сделать перегрузку функций на основании количества аргументов. Можно даже по типам :)

@jsunderhood разное тело функции для разного количества аргументов, вот здесь например theburningmonk.com/2013/09/clojur…

13:18
@jsunderhood Подскажите сервисы змуляторов мобильных устройств. Чтоб клавиатура на экране появлялась, возможно поворот экрана и тд

Лучше поставить эмулятор девайса, используемый для общих приложений (такие есть у всех).

@jsunderhood Подскажите сервисы змуляторов мобильных устройств. Чтоб клавиатура на экране появлялась, возможно поворот экрана и тд

14:06
@jsunderhood например mylist[2:5] - возвращает список элементов со второго по 5ый. Можно отрицательные индексы для отсчета с конца

Это вообще простенький вариант, зато выйдет поиграться с парсингом а не только трансформацией.

@jsunderhood например mylist[2:5] - возвращает список элементов со второго по 5ый. Можно отрицательные индексы для отсчета с конца

16:51
Оказывается есть такие, у которых Atom не тупит. Как так?

@cssunderhood а я уже две недели им пользуюсь и ничего еще не подвисло. что я делаю не так? :)

20:11

В общем, попробуем таки реализовать кастомный синтаксис для слайсов - a[2:10] -> a.slice(2, 10). Но наверное завтра, большинство уже спит.

20:14

А пока советую поставить Acorn и взглянуть на ESTree - современное продолжение упомянутого ранее Mozilla Parser API. github.com/estree/estree

20:15

Как уже говорил, новые ноды для ES6 создавались самостоятельно - сначала FB, потом я в Acorn, потом подтянулась Esprima.

20:16

И в определенный момент, конечно, начались конфликты, так как каждый реализовывал по своему видению, еще и сам ES6 менялся-развивался.

20:17

А тут Esprima из-за своего кризиса в развитии (её автор занимается паралельно другими крутыми вещами) как раз перешла под jQuery Foundation.

20:22

И jQuery, чтобы расшевелить дело, начала созвоны со всеми, кто работал на смежных проектах, так или иначе связанных с парсингом.

20:24

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

20:25

Вот так теперь на изначальной вики-страничке Parser API висит deprecation notice, а все развитие перешло в общую ESTree.

20:26

Над ней работали и продолжают работать уже все сообща - Mozilla, Esprima, Acorn, Babel и пару других заинтересованных лиц.

20:27

Понятно, что конфликты сами собой не пропали и бывали обсуждения на сотни комментов по самых глупых вопросах github.com/estree/estree/…

20:29

Но как результат - теперь есть четко прописанная философия, а в комьюнити появился единый стандарт и тулзы, умеющие ES6, JSX, Flow и прочее.

20:30

Завтра продолжим, уже пытаясь добавить собственный нестандартный сахар, упомянутый выше :) Хорошего вечера!

20:31

# Суббота 33 твита

@jsunderhood так а как же быть с пробельными символами и комментариями? CST или типа того…

С ними сложно. Нет общего видения, как это должно быть, поэтому каждый делает по-своему. github.com/estree/estree/…

@jsunderhood так а как же быть с пробельными символами и комментариями? CST или типа того…

12:14
В общем, попробуем таки реализовать кастомный синтаксис для слайсов - a[2:10] -> a.slice(2, 10). Но наверное завтра, большинство уже спит.

Насчет этого - в первую очередь стоит создать папку для проекта и в ней

npm i acorn ast-types escodegen

В общем, попробуем таки реализовать кастомный синтаксис для слайсов - a[2:10] -> a.slice(2, 10). Но наверное завтра, большинство уже спит.

12:21

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

12:23

В первую очередь создадим плагин для синтаксиса. Для этого идем в сорцы и смотрим куда мы хотим добавить свой метод. github.com/marijnh/acorn/…

12:29

(Disclaimer: я плагин для этого синтаксиса еще не писал, всё пишу вместе с вами в риалтайме, поэтому возможны баги :) )

12:30

В первую очередь находим parseExpression. Но он покрывает выражения типа a+b,c+d (с запятыми между ними) как одно целое. Не интересно.

12:31

Он вызывает parseMaybeAssign, который покрывает как раз элементы - если добавим здесь, то a+b:c+d будет читаться как (a+b):(c+d) а не иначе.

12:33

По-моему, такой приоритет нашего оператора вполне интуитивен и лучше чем что-то типа (a)+(b:c)+(d). Поэтому здесь и остановимся.

12:34

А нет, подождите (я же говорил, будут баги :) ). На этом уровне мы также покроем a=b:c как (a=b):(c), что уже не очень логично. Идем ниже.

12:35

parseMaybeConditional может сработать, но a ? b : c : d получается неоднозначным - или же (a ? b : c) : d или a ? (b : c) : d.

12:38

Эта проблема - случай более общей, известной как dangling else и присуща многим языкам. en.wikipedia.org/wiki/Dangling_…

12:39
@jsunderhood и тут становится понятно что весь парсер надо переписать? :)

Нет, мы только выбираем уровень где хотим внедриться :)

@jsunderhood и тут становится понятно что весь парсер надо переписать? :)

12:40

Думаю, на проблему dangling else мы пока можем забить (наверное, так же говорили разработчики C и Pascal) и будем внедряться здесь.

12:42

Код в твиттер писать проблематично и можно только по частям, поэтому лучше gist с комментами. gist.github.com/RReverser/359a…

12:58

Подозреваю, несмотря на комментарии, некоторые моменты без документации (да-да, знаю :( ) могут быть непонятными. Задавайте вопросы сейчас.

12:58

Сам код и правда не сложный, там больше места заняли комменты. Проверить, что парсинг работает, можно в консоли. pic.twitter.com/s2J8Ut2s9g

13:04

Здесь мы видим структуру ESTree - типы нод, их свойства, позиции начала-конца и - да - ноду, созданную нашими собственными руками.

13:06
@jsunderhood так может всё-таки сделать новый не совместимый стандарт, который будет покрывать и AST и CST?

xkcd.com/927/

@jsunderhood так может всё-таки сделать новый не совместимый стандарт, который будет покрывать и AST и CST?

13:09

Жду фидбека, что у кого-то получилось прежде чем продолжать :)

13:15

Переходим к трансформеру. Для этого и используем ast-types, хотя можно было бы и любой другой аналог типа esrecurse / estraverse.

15:01

Просто в ast-types есть удобные "фабрики" нод вместо того чтобы писать обьекты вручную в виде { type: "QuestionNode", answer: 42 }.

15:01

Вот собственно написал скрипт для транспайлинга дерева - опять-таки, не стесняйтесь задавать вопросы: gist.github.com/RReverser/359a…

15:39

Принцип простой: 1) регистрируем наш нестандартный тип, чтобы его можно было распознать; 2) ищем его ноды в дереве; 3) заменяем на вызовы.

15:40

Всё что остаётся - набросать какой-нибудь CLI, который будет читать файлы, парсить строку, трансформировать AST и генерировать код.

15:43

К примеру как-то так: gist.github.com/RReverser/359a…

Понятно, что можно развивать, добавить сорс-мапы и т.д., но в целом наш транспайлер готов.

15:46

Надеюсь, было более-менее понятно и интересно, но я ещё буду здесь для любых вопросов :)

15:46

Ну и да, собственно как проверить транспайлер. Создайте файл test.js, в нём "var a = [1,2,3,4]; var b = a[1:3];". И запустите скрипт :)

15:51

В test.out.js должен появиться

var a = [1,2,3,4];
var b = a.slice(1, 3);

15:52
@jsunderhood очень нужна помощь ретвитом, ищу нормальные тулзы для i18n, чтоб могли текст забрать из кода и построить словарь сообщений
19:57
@slonoed не уверен, что то, что ты хочешь, но l20n.org @jsunderhood
20:02
"хомяки" ))) это pet? ох уж этот сленг twitter.com/SilentImp/stat…

Это что-то новенькое. Теперь буду знать, как называть pet projects.

"хомяки" ))) это pet? ох уж этот сленг twitter.com/SilentImp/stat…

20:35
@jsunderhood А я теперь буду знать, как называть хомяков. Всегда весело называть вещи не своими именами.
20:39
@jsunderhood @cssunderhood @SilentImp @webholt Ну тогда уже можно. Ведь все умные люди знают, что на JS пишут только верстальщики.

Ох уж эти тролли :)

@jsunderhood @cssunderhood @SilentImp @webholt Ну тогда уже можно. Ведь все умные люди знают, что на JS пишут только верстальщики.

21:13

# Воскресенье 25 твитов

Сегодня воскресенье и я с вами последний день, так что можем ещё включить оффтоп, пошарить интересные линки, поговорить про UK и что угодно.

9:07
@jsunderhood насколько тяжелый был переезд в UK в плане документов, поиска жилья и т.д.?

С документами было просто, в этом плане переезжать значительно легче и быстрее (~3 месяца), чем, например в US.

@jsunderhood насколько тяжелый был переезд в UK в плане документов, поиска жилья и т.д.?

9:19

А вот с поиском жилья не так просто - система сильно отличается от нашей. У нас нашёл квартиру, договорились, подписали и всё - живешь.

9:21

Здесь же проверяют кредитную историю, спрашивают предыдущих работодателей и лэндлордов за 3 года, референсы и т.д.

9:22

Понятное дело, что в только приехавших этого всего нет, поэтому много лэндлордов подозрительны и требуют оплату за 3+ месяцев вперёд.

9:23

Учитывая цены на оренду, к этому надо либо быть готовым, либо снимать только комнату, либо дольше искать. Сам сейчас пишу с AirBnb жилья :)

9:25

Был случай, другой коллега тоже искал жилье (чуть раньше приехал), и написал в чат что "его оффер перебили, заплатив на 12 месяцев вперёд".

9:27

И такое бывает, да. Говорят, это в основном родители студентов из HKG/SIN, которые легко могут себе такое позволить.

9:28

Забыл упомянуть - сами квартиры где-то от 1000 фунтов в месяц за "не очень".

9:29

Самое трудное - искать жильё как раз в летне-осенний перид, когда приезжают студенты со всего мира и разбирают всё что можно.

9:31
@jsunderhood а сколько надо в месяц на еду на двоих? :)

Где-то от 400 фунтов если готовить самому и не на широкую ногу. Самому трудно оценивать, пока больше ем по кафешках.

@jsunderhood а сколько надо в месяц на еду на двоих? :)

9:36
@jsunderhood стать человеком, а не "понаехавшим" (получить вид на жительство) насоклько затратно по времени/ресурсам?

Сложно. Недавно минимум проживания изменился с 3х лет до 5, подозреваю, ещё вырастет на фоне кризиса с мигрантами.

@jsunderhood стать человеком, а не "понаехавшим" (получить вид на жительство) насоклько затратно по времени/ресурсам?

9:47
@jsunderhood какие затраты в месяц на одного человека? Квартира, еда, транспорт, мелкие радости.

По квартире-еде уже ответил. Транспорт - от 120 фунтов в месяц за проезной на 1-2 зоны.

@jsunderhood какие затраты в месяц на одного человека? Квартира, еда, транспорт, мелкие радости.

9:52
@jsunderhood @lifeasecond на numbeo.com/cost-of-living… довольно репрезентативные цифры для Лондона, можно пользоваться

Один момент: надо учитывать зону, в которой живешь. А так полезная линка.

@jsunderhood @lifeasecond на numbeo.com/cost-of-living… довольно репрезентативные цифры для Лондона, можно пользоваться

9:53
@mkazantsev @jsunderhood люди так устроены, что смотрят на тех у кого нет гражданства как на низших, пусть ты образован, а он из под забора

Да нет, здесь такого вообще не чувствуется. Половина Лондона - понаехавшие (студенты, работники). Много индусов.

@mkazantsev @jsunderhood люди так устроены, что смотрят на тех у кого нет гражданства как на низших, пусть ты образован, а он из под забора

9:55

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

9:57
@jsunderhood проездной действует на все виды транспорта?

Метро, поезда - по зонам, автобусы - в любой зоне "бесплатно" с любым проездным, речка и т.д. - только скидки.

@jsunderhood проездной действует на все виды транспорта?

9:58
@jsunderhood как в городе с интернетами открытыми и бесплатными?

Хватает по кафешкам и торговым центрам, так чтоб на улице - только от провайдеров (для их же клиентов).

@jsunderhood как в городе с интернетами открытыми и бесплатными?

10:08

С другой стороны, здесь есть тарифы с безлимитным 4G и хорошим покрытием, поэтому не критично.

10:08
@jsunderhood а каким из них ты пользуешь и сколько стоит?

Кстати уже был в местных театрах? Например на призраке оперы?

Пользуюсь Three, только у них такой безлимит. Правда в этом месяце убрали 15-фунтовый тариф, безлим только за 20.

@jsunderhood а каким из них ты пользуешь и сколько стоит?

Кстати уже был в местных театрах? Например на призраке оперы?

10:12

Насчёт театров - не, пока не порешаю с квартирой, не до них :)

10:13
@jsunderhood так а как Вы JS-м на таком высоком уровне овладели?) откуда-то же брали информацию)

Зачем? Нет у меня ни информации, ни каких-то высоких знаний, только (иногда болезненный) опыт :)

@jsunderhood так а как Вы JS-м на таком высоком уровне овладели?) откуда-то же брали информацию)

12:51
@jsunderhood )) Вы троллите меня)) А как Вы тогда набрались опыта без книг или банального чтения документации?)

Да почему же троллю? Самоучек много. Есть рабочие проекты, есть опен-сорс. Ну и про документацию ничего не говорил.

@jsunderhood )) Вы троллите меня)) А как Вы тогда набрались опыта без книг или банального чтения документации?)

13:15

Ну что же... У меня осталось пол-воскресенья, которые я собираюсь провести уже не здесь :)

15:12

Спасибо всем, кто выдержал до конца, был рад поболтать. С вами был @RReverser. Как говорится, до новых встреч!

15:13

github.com

gist.github.com

other


@__fro