# Понедельник 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 а потом появляются всякие Angular10: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
@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
@andrey_sitnik @jsunderhood @iamstarkov esdiscuss.org/topic/the-exis…
Туда же топик.
@andrey_sitnik @jsunderhood @iamstarkov esdiscuss.org/topic/the-exis…
11:39
На этой неделе (уже) интересные @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/6QhltQ5Afa12: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 properties12: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, plz13: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 из знаний о машине использует только "какие иструкции поддерживаются" и микрооптимизации для Atom17: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:26ES2015, 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:01WebAssembly - это следующий шаг в развитии таких штук как 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с: @jsunderhood11: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.js13: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) рантайм-проверка типов и структур
4) как подсказывает @vlkosinov - транзакции БД (но можно и на любых обьектах)
5) доступ к REST API без схем - api.users.rreverser.then(...)
И куча других возможностей, которые только приходят в голову, когда вы не ограничены только свойствами, явно определенными в рантайме.
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
Оффтоп - если вам понравилась вчерашняя вечерняя картинка - вот нашелся ее автор )
Наши картинки расходятся по сети и это радует! :-)
Автор этой картинки @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);
Про более обыденные случаи, в которых и пользователи путаются, типа
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;
20:40
return 1 + yield;
return 1 + (yield);
Под (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-часовой сон, здоровье не казенное @jsunderhood1:04
@mistadikay @jsunderhood сколько в 6 не вставай, а жаворонком не станешь :(
Мудрые слова.
@mistadikay @jsunderhood сколько в 6 не вставай, а жаворонком не станешь :(
10:02
Ладно, отвечу сам:1) произойдет yield из генератора значения +1
2) SyntaxError
3) сумма 1 и полученного значения twitter.com/jsunderhood/st…
Надеюсь, понятно что в таком виде проблемы возникают не только у вас, но еще больше - в разработчиков парсеров.
Ладно, отвечу сам:
1) произойдет yield из генератора значения +1
10:22
2) SyntaxError
3) сумма 1 и полученного значения twitter.com/jsunderhood/st…
А разработчики парсеров - это и те, кто работает в тимках браузеров, и те, кто строит отдельные тулзы.
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 теория о существовании чего-то кроме jQuery12: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:26V8 например сохраняет внутри этого дерева не только синтаксис, а и различную рантайм-информацию - в частности типы данных, определенные 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 не тупит. Как так?20:11@cssunderhood а я уже две недели им пользуюсь и ничего еще не подвисло. что я делаю не так? :)
В общем, попробуем таки реализовать кастомный синтаксис для слайсов - 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:35parseMaybeConditional может сработать, но 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?
@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@jsunderhood очень нужна помощь ретвитом, ищу нормальные тулзы для i18n, чтоб могли текст забрать из кода и построить словарь сообщений19:57
@slonoed не уверен, что то, что ты хочешь, но l20n.org @jsunderhood20: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
- https://github.com/coderhaoxin/typed-objects
- https://github.com/tc39/ecma262
- https://github.com/getify/es-feature-tests
- https://github.com/Microsoft/IEDiagnosticsAdapter
- https://github.com/kripken/emscripten/wiki/Porting-Examples-and-Demos
- https://github.com/jterrace/js.js/
- https://github.com/es-shims/es5-shim/issues/91
- https://github.com/estools/estraverse
- https://github.com/estools/escodegen
- https://github.com/estools/escope
- http://github.com/jDataView/jBinary
- https://github.com/marijnh/acorn/pull/110
- https://github.com/estree/estree
- https://github.com/estree/estree/pull/32
- https://github.com/estree/estree/issues/41
- https://github.com/marijnh/acorn/blob/master/src/expression.js#L79
- https://github.com/asterjs/aster
gist.github.com
- https://gist.github.com/RReverser/81f5003e6ba8fbaaae83
- https://gist.github.com/RReverser/359ae1f7aa901e86156f
- https://gist.github.com/RReverser/359ae1f7aa901e86156f#file-transform-js
- https://gist.github.com/RReverser/359ae1f7aa901e86156f#file-index-js
- https://gist.github.com/RReverser/359ae1f7aa901e86156f/revisions
other
- http://mrale.ph/blog/2013/04/29/performance-tuning-as-weather-forecast.html
- http://mrale.ph/blog/2014/02/23/the-black-cat-of-microbenchmarks.html
- https://esdiscuss.org/
- https://esdiscuss.org/topic/existential-operator-null-propagation-operator
- http://esdiscuss.org/
- https://groups.google.com/forum/#!topic/golang-nuts/RKymTuSCHS0
- http://nodejs.org/
- http://techcrunch.com/video/cloudflare-2015-best-enterprise-startup-winner/518637761/
- http://dev.modern.ie/platform/changelog/10532-pc/
- https://featuretests.io/
- https://developer.rackspace.com/blog/powershell-101-from-a-linux-guy/
- https://bgrins.github.io/videoconverter.js/
- https://video-funhouse.herokuapp.com/
- http://anvaka.github.io/asmalidator/
- https://rreverser.com/started-work-on-es6-asm-js-conversion/
- https://rreverser.com/content/images/2015/Aug/es_spec.svg
- http://asmjs.org/spec/latest/#variable-type-annotations
- http://beta.unity3d.com/jonas/DT2/
- http://eleks.github.io/js2js/
- http://bellard.org/jslinux/
- http://webreflection.blogspot.co.uk/2011/03/rewind-getters-setters-for-all-ie-with.html
- http://www.slideshare.net/RReverser/es6concurrency
- https://www.youtube.com/watch?v=4c2pLtHf7KQ
- https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Parser_API
- http://esprima.org/
- http://marijnhaverbeke.nl/blog/acorn.html
- http://www.graspjs.com/
- http://latentflip.com/loupe/
- https://en.wikipedia.org/wiki/Dangling_else
- https://xkcd.com/927/
- http://l20n.org/
- http://edition.cnn.com/2015/08/07/travel/barcelona-london-commuter/
- http://www.jsnice.org/