# Понедельник 11 твитов
Всем привет! Меня зовут Старовойт Андрей @anstarovoyt и я разработчик @WebStormIDE в @jetbrains. На этой неделе рас… twitter.com/i/web/status/1…
9:17Чтобы не возникло недопонимания — я Java-разработчик и знаком с веб-разработкой именно со стороны поддержки в IDE.… twitter.com/i/web/status/1…
9:25А что бы вы хотели услышать от меня на этой неделе? У меня, конечно, есть план, но я могу его не придерживаться, ес… twitter.com/i/web/status/1…
10:19@jsunderhood Были ли моменты, когда хотелось рвать, метать и кричать "Что эти разработчики библиотек себе позволяют… twitter.com/i/web/status/1…11:15
Для начала разберемся с понятиями.
IDE — Integrated Development Environment. Если совсем простым языком, то это тек… twitter.com/i/web/status/1…
WebStorm — “JavaScript IDE by JetBrains”. На самом деле, языком JavaScript дело не ограничивается. Мы пишем поддерж… twitter.com/i/web/status/1…
12:11Практически все IDE от JetBrains выросли из одного продукта Intellij IDEA — и представляют из себя некоторый набор… twitter.com/i/web/status/1…
12:12Архитектурно весь код WebStorm (и других упомянутых выше IDE) можно разделить на базовый (платформенный) и код, отв… twitter.com/i/web/status/1…
15:51Весь платформенный код у нас открыт и лежит на гитхабе как часть IntelliJ IDEA Community Edition github.com/JetBrains/inte… (осторожно, Java!)
15:52Про платформу и задачи, которые там возникают есть несколько очень крутых докладов Алексея Кудрявцева… twitter.com/i/web/status/1…
15:52Многие языковые фичи могут иметь общую часть. Возьмем, например, Postfix Completion.
Есть общая часть, которая лежи… twitter.com/i/web/status/1…
# Вторник 14 твитов
На мой взгляд самое крутое, что почти все IDE (плагины) лежат в одном репозитории, вместе с платформой. Нет никаких… twitter.com/i/web/status/1…
7:39Сегодня хотел бы поговорить про поддержку языков в IDE. Можно выделить два подхода:
Первый это — реализация парсер… twitter.com/i/web/status/1…
Понятно, что существуют еще некоторые промежуточные варианты, но про них я расскажу чуть позже
10:37В WebStorm и других IDE от JetBrains мы обычно реализуем парсер языка. Имея на руках синтаксическое дерево, можно д… twitter.com/i/web/status/1…
10:40Понятно, что только парсером дело не ограничивается. Мы практически пишем в IDE компилятор языка (в плане понимания семантики)
10:54У написания собственного парсера есть свои плюсы и свои минусы (тред)
11:20Раз уж мы начали говорить о поддержке языков, расскажите какая языковая фича JavaScript/TypeScript вас больше всего… twitter.com/i/web/status/1…
19:06@jsunderhood Очень долго привыкал к феномену "оператор запятая"21:17const f = x => (g(x), x)
# Среда 17 твитов
Вторая вещь, которая меня сильно удивила несколько лет назад — это то, что метки можно использовать с любым stateme… twitter.com/i/web/status/1…
8:12@jsunderhood Как попадают в разработку IDE? Это не самая распространенная предметная область
Разработка IDE такая же область, как и любая другая. Можно прислать нам CV и попасть в команду, если у вас достаточ… twitter.com/i/web/status/1…
@jsunderhood Как попадают в разработку IDE? Это не самая распространенная предметная область
8:43
Может у вас истории поинтереснее?
@art_spb, @en_Dal, @alex_zolotov
@jsunderhood @art_spb @alex_zolotov Я учился на матмехе СПбГУ, где преподавал @mshafirov, и многие его ученики прих… twitter.com/i/web/status/1…11:40
@jsunderhood @en_Dal @alex_zolotov Моя ещё скучнее - я хотел в @jetbrains, мне предложили @phpstorm, и я согласился… twitter.com/i/web/status/1…11:40
@jsunderhood @art_spb @en_Dal @alex_zolotov Я до JetBrains особо этим не занимался. Ничем не хуже чем любое другое… twitter.com/i/web/status/1…12:10
Еще немного о поддержке языков. Как я уже писал выше, синтаксического дерева недостаточно для полноценной поддержки… twitter.com/i/web/status/1…
12:21Чтобы обработать эту конструкцию нужно:
12:22В этом плане с TypeScript дело обстоит гораздо лучше, чем с JavaScript. В нем есть более-менее строгие правила разр… twitter.com/i/web/status/1…
12:27В TypeScript вы, конечно, тоже можете написать такой код, но компилятор его не поймет и покажет ошибку в месте обра… twitter.com/i/web/status/1…
12:34Для JavaScript мы по возможности стараемся использовать вывод типов TypeScript (например, если есть файл “.d.ts”).… twitter.com/i/web/status/1…
13:09Для многих языков, помимо парсера и механизма вывода типов, мы еще реализовываем Control Flow граф. Этот граф позво… twitter.com/i/web/status/1…
14:40Интересный факт, что реализация CF графа для TypeScript и JavaScript полностью совпадает. Потому что TypeScript не… twitter.com/i/web/status/1…
14:43CF граф также используется для Type Guard (механизма сужения типов) в TypeScript
14:45Чуть подробнее о том, как строится граф и как используется в TypeScript я рассказывал вот здесь:
youtube.com/watch?v=qddYQL…
Простой пример CF графа pic.twitter.com/WtFD6G9mFH
Возвращаясь к вопросам синтаксиса языков.
В TypeScript довольно развитая система типов. Используете ли вы Mapped t… twitter.com/i/web/status/1…
16:33# Четверг 12 твитов
Сегодня расскажу про команду и то, как мы работаем
10:25Над WebStorm трудятся 16 человек. Помимо разработки и тестирования, есть еще Product Manager, Product Marketing Man… twitter.com/i/web/status/1…
10:35Команда рассредоточена по разным локациям. Есть люди, которые работают в офисах Питера, Мюнхена, Амстердама. Один р… twitter.com/i/web/status/1…
10:37Благодаря такой распределенности мы, на мой взгляд, довольно просто смогли перейти на удаленную работу. Нам ведь и… twitter.com/i/web/status/1…
10:42@theKashey @jsunderhood @anstarovoyt @WebStormIDE @jetbrains Работаем над этим. blog.jetbrains.com/idea/2019/12/i…10:48
В разработке сложились зоны ответственности. Мы их называем подсистемами. Каждой подсистемой, в зависимости от разм… twitter.com/i/web/status/1…
11:44Но, конечно, никто не мешает тебе прийти в другую подсистему и сделать там хорошо (с код ревью)
11:46Так же есть некоторая внутренняя ротация. Если тебе надоело заниматься чем-то одним, можно договориться о смене отв… twitter.com/i/web/status/1…
12:42Для коммуникаций внутри и между командами мы используем в основном Slack.
Некоторые команды уже перешли на Space
О, вспомнил еще один вопрос про синтаксис TypeScript.
Используете ли вы namespace (раньше использовалось слово mod… twitter.com/i/web/status/1…
@jsunderhood Иногда удобно функции для работы с enum'ом положить в namespace с таким же названием. MyEnum.fromSomeApi(valueFromServer)14:13
@jsunderhood Глобальный манки-патчинг. Такие вещи как express или cypress позволяют на лету добавлять свойства в об… twitter.com/i/web/status/1…14:22
# Пятница 26 твитов
О, вспомнил еще один вопрос про синтаксис TypeScript.
Используете ли вы namespace (раньше использовалось слово mod… twitter.com/i/web/status/1…
Из ответов можно сделать вывод, что те, кто использует namespace, делают это для склеивания деклараций
О, вспомнил еще один вопрос про синтаксис TypeScript.
10:08
Используете ли вы namespace (раньше использовалось слово mod… twitter.com/i/web/status/1…
Сегодня продолжаем говорить о том, как мы работаем. В частности, обсудим, откуда мы берем задачи
10:08У нас открытый issue tracker, куда кто-угодно может прийти с жалобой или просьбой добавить новую фичу. В трекере ес… twitter.com/i/web/status/1…
10:16Линк youtrack.jetbrains.com/issues/WEB вдруг кому интересно :)
10:18В трекере
95% задач, над которыми мы работаем, открыты для всех, их можно посмотреть, покомментировать, проголосов… twitter.com/i/web/status/1…
10:48В этом плане все очень близко к тому, как разрабатываются Open Source проекты
10:48В команде есть Product Manager Катя, которая старается следить за новостями в мире JavaScript. Она помогает решить,… twitter.com/i/web/status/1…
11:49Кроме того, у владельцев подсистемы обычно есть глубокое понимание всего, что в ней происходит. Исходя из этого по… twitter.com/i/web/status/1…
11:51Например, люди, которые занимаются поддержкой JavaScript, сами понимают, что нужно следить за предложенными фичами… twitter.com/i/web/status/1…
11:55Еще один источник информации это Developer Advocate’ы, которые часто делятся с нами обратной связью (либо своей, либо от пользователей)
12:11И последнее, и на мой взгляд, очень крутое — это EAP (Early Access Program)
Здесь будет небольшой тред о том, что это
EAP — это версия IDE, которой может воспользоваться любой желающий (там встроена лицензия на один месяц)
12:59В активной стадии разработки мы стараемся выпускать EAP каждую неделю, прямо из девелоперской ветки (с некоторой пр… twitter.com/i/web/status/1…
13:00EAP-программы позволяют быстро протестировать новые фичи на небольшой группе пользователей и получить обратную связ… twitter.com/i/web/status/1…
13:01Кроме тестирования новой функциональности, EAP-версии также помогают быстро узнать о каких-то регрессиях
13:03Благодаря EAP-ам пользователь может непосредственно влиять на то, как будет выглядеть фича в финальной версии
13:04Многие пользователи предпочитают именно EAP-версии. Потому что кроме того, что они бесплатны, они всегда содержат с… twitter.com/i/web/status/1…
13:08Очевидные минусы:
Сами версии ограничены по времени. Даже если у вас есть лицензия, вам придется обновляться через… twitter.com/i/web/status/1…
У VSCode, кстати, что-то подобное называется Insiders
13:21Если говорит про внутренние источник задач, то поскольку команда постоянно работает с продуктом, то у них тоже част… twitter.com/i/web/status/1…
15:05В JetBrains есть несколько frontend-команд, которые пользуются WebStorm и тоже дают обратную связь
15:07Про то, откуда появляются задачи поговорили. Остался вопрос приоритетов.
Основные факторы влияния:
Актуальность и п… twitter.com/i/web/status/1…
Нужно понимать, что у нас в трекере тысячи задач и мы никогда не сможем закрыть их все. И дело не в том, что продук… twitter.com/i/web/status/1…
15:19Поддерживая новую технологию, мы практически сразу получаем фидбек в несколько десятков bugs и feature requests
15:20Иногда их статус неоднозначен: с точки зрения разработчика, он просто не поддержал какую-то функциональность (напри… twitter.com/i/web/status/1…
15:20Почему не делаем какие-то задачи*
Нет уверенности о реальной потребности
Слишком мало пользователей
Противоречие с… twitter.com/i/web/status/1…
# Суббота 23 твита
Сегодня хочу продолжить разговор о поддержке языков, но поговорить об альтернативных способах поддержки и немного о… twitter.com/i/web/status/1…
10:28Тот самый альтернативный способ — это использование некоторого Language Server, например, LSP (но им дело не ограничивается)
10:29Тред про достоинства и недостатки Language Server
10:30Есть еще одна тонкость, связанная с использование LS:
обычно хочется, чтобы подсветка кода в редакторе была момента… twitter.com/i/web/status/1…
Под "подсветкой кода" я имею ввиду подсветку ключевых слов и других синтаксических элементов
11:46Ответ такой: обычно есть какой-то отдельный механизм, отвечающий за синтаксическую подсветку. VSCode, например, исп… twitter.com/i/web/status/1…
14:14@jsunderhood Так же, как в редакторах, которые ничего не знают про LS? :)14:14
Один из примеров использования LS у нас — это Dart.
Протокол взаимодействия WS и Dart Analysis Server был разработ… twitter.com/i/web/status/1…
Но несмотря на то, что в Dart используется LS, там все же реализован парсер языка на стороне IDE, для решения вопро… twitter.com/i/web/status/1…
15:01В поддержке TypeScript мы получаем и показываем в редакторе сообщения об ошибках из TypeScript Language Server, но… twitter.com/i/web/status/1…
15:14Плавно переходим к вопросам поддержки фреймворков, на примере Angular
16:38У Angular есть свой языковой сервис Angular Language Service.
WebStorm какое-то время использовал Angular LS, но… twitter.com/i/web/status/1…
Поддержка состоит из модель проекта и понимания синтаксиса
16:46Модель проекта хранят информацию о модулях, компонентах и связях между ними.
Благодаря этому могут работать такие ф… twitter.com/i/web/status/1…
Для понимания синтаксиса у нас написан специальный парсер шаблонов Angular. Парсер строит обычное HTML дерево, но с… twitter.com/i/web/status/1…
16:52И небольшой опрос в предверии завтрашней темы разговора. Если вы используете Yarn, перешли ли вы на Yarn 2 (berry)
17:16# Воскресенье 42 твита
Сегодня я хотел бы поговорить о том, как менялись web-технологии за последние 5+ лет, в контексте разработки IDE
10:54Логично начать разговор с JavaScript (точнее ECMAScript).
Как вы думаете, что за язык на приложенной картинке? pic.twitter.com/HnD74JwytI
Многие узнают ActionScript 3. Но на самом деле, это еще и ECMAScript 4, спецификация языка, которая так и не была в… twitter.com/i/web/status/1…
11:13В TS и ES6 используется немного другой синтаксис (без ключевого слова function) pic.twitter.com/V35hq2w9CN
Кроме ES4 также была спецификация ES4X, которая предлагала синтаксис работы с XML в JavaScript коде, подобный JSX в… twitter.com/i/web/status/1…
11:19А теперь самое интересное: эти спецификации были написаны в 2003-2004 годах. Получается, что многие идеи, на которы… twitter.com/i/web/status/1…
11:23@jsunderhood E4X. Была реализована в SpiderMonkey и у нас всё ещё жива в древнем XSLT-легаси. Из интересного, там есть свой аналог XPath11:24
А еще все эти скриншоты были сделаны в WebStorm, потому что WS поддерживает ES4 и E4X...
Хорошо, что все это было н… twitter.com/i/web/status/1…
Наличие классов, интерфейсов, XML-выражений в ES4/E4X на начальных этапах помогло быстро добавить поддержку подобны… twitter.com/i/web/status/1…
11:48Ну и для тех, кто не знаком с историей ES4: спецификацию сочли слишком революционной, и вместо нее приняли ES5. Ча… twitter.com/i/web/status/1…
11:52Между ES4 и ES6 прошло больше 10 лет. Все это время разработчики пытались облегчить себе жизнь и самостоятельно сде… twitter.com/i/web/status/1…
12:05Про TypeScript вроде все понятно, а вот про Babel и CoffeeScript хочу написать подробнее
12:06Babel — это головная боль разработчика IDE. Любой может добавить в JavaScript недостающую ему синтаксическую констр… twitter.com/i/web/status/1…
12:10Все поддержать невозможно. Мы стараемся поддерживать самые популярные плагины и драфты спецификации ES, когда они выходят из Stage 1
12:17CoffeeScript для меня язык-загадка. Его синтаксис довольно сильно отличается от JavaScript, но каким-то образом он… twitter.com/i/web/status/1…
12:27Мой любимый пример популярности этого языка — вот этот pull request в Node.js "Use CoffeeScript!":
github.com/nodejs/node-v0…
Понятно, что это шутка, но все же
12:35Кроме того, у CoffeeScript были диалекты, развивающие его идеи:
Coco
LiveScript
IcedCoffeeScript
Этим не каждый язык может похвастаться
12:36Cвою популярность CoffeeScript потерял примерно так же стремительно, как и набрал. Есть предположение, что просто п… twitter.com/i/web/status/1…
12:44В WS есть поддержка CoffeeScript, но до диалектов мы так и не дошли — популярность технологии сошла на нет.
В 2017… twitter.com/i/web/status/1…
@jsunderhood Я однаждый фиксил баги в проекте на RedScript, там даже подсветки синтаксиса не было.12:51Вот список тог… twitter.com/i/web/status/1…
Мы подошли к одной из главных революций в web. В 2015 году вышел ES6 (ECMAScript 2015). Кроме языковых фич был еще… twitter.com/i/web/status/1…
13:29Теперь, язык релизится раз в год, и в него попадают все готовые на данный момент новые фичи
13:30В настройках WS есть опция выбора версии языка (раньше пунктов было гораздо больше).
Этот выбор нужен для того, чт… twitter.com/i/web/status/1…
При новой модели этот список стал менее актуален, потому что реализация фичи (в Babel или в одном из браузеров, или… twitter.com/i/web/status/1…
13:32@jsunderhood Хотелось бы отметить что изначально редактор atom был полностью написан на coffeescript13:32
Поэтому сейчас просто есть разделение “новые фичи ES6+”, ES5 и некоторые специфичные диалекты
13:34С переходом на новую модель релизов появилась некоторая определенность в том, как и куда будет язык развиваться; ка… twitter.com/i/web/status/1…
13:39Теперь небольшой тред про то, как я помню развитие Node.js
14:09Я пришел в команду WS в 2014 из Java Enterprise разработки. Меня очень удивило, что такая экспериментальная техноло… twitter.com/i/web/status/1…
14:09В наши дни, я думаю, даже самые ортодоксальные backend-разработчики знают, что весь веб использует Node.js для решения самых разных задач
14:10У нас в кодовой базе можно проследить повышение популярности Node.js для разработки веба по тому, как постепенно ча… twitter.com/i/web/status/1…
14:11Сейчас Node.js плагин добавляет очень специфичные для Node.js разработки вещи, вроде run-конфигураций и дополнитель… twitter.com/i/web/status/1…
14:12Наверно, один из поворотных моментов в развитии Node.js был кризис, связанный с появлением io.js
14:22В двух словах, для тех, кто не знаком с этой историей: в конце 2014 часть людей из команды Node.js сделала форк из-… twitter.com/i/web/status/1…
14:22Форк просуществовал не очень долго — примерно полгода. Но в результате этого Node.js вышел из версии 0.xx и стал развиваться гораздо быстрее
14:23Нам в свое время пришлось оперативно добавить поддержку io.js, а потом так же быстро выпилить ее.
Но я сегодня пр… twitter.com/i/web/status/1…
14:29Ну а теперь Looking forward to Deno
Расскажите, что вы думаете о Deno?
Пробовали / нет?
Взлетит / нет?
@jsunderhood Мне всегда казалось (могу ошибаться), что популярность CoffeeScript была в первую очередь обусловлена… twitter.com/i/web/status/1…
Возможно, но мне казалось, что этим дело не ограничивается.
Кстати, поддержку CoffeeScript у нас писала команда Ru… twitter.com/i/web/status/1…
@jsunderhood Мне всегда казалось (могу ошибаться), что популярность CoffeeScript была в первую очередь обусловлена… twitter.com/i/web/status/1…
14:46
@jsunderhood Причём все так дико спорили (включая Крофорда, топившего против), что в итоге сильно устали и решили п… twitter.com/i/web/status/1…15:11
Моя трансляция подошла к концу. Спасибо всем, было интересно 🙂
С вами эту неделю был Старовойт Андрей @anstarovoyt… twitter.com/i/web/status/1…
В напутствие, обращаюсь к тем, кто использует наши IDE. По статистике только 20-30% пользователей используют одну и… twitter.com/i/web/status/1…
19:11# Ссылки
other
- https://youtrack.jetbrains.com/issue/WEB-32178
- https://youtrack.jetbrains.com/issue/WEB-29018
- https://youtrack.jetbrains.com/issues/WEB
- https://ru.wikipedia.org/wiki/%D0%A2%D0%BE%D1%87%D0%BA%D0%B0_%D0%BE%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B0
- https://github.com/JetBrains/intellij-community
- https://github.com/JetBrains/Grammar-Kit
- https://github.com/JetBrains/intellij-plugins
- https://github.com/nodejs/node-v0.x-archive/pull/2472
- https://jetbrains.com/ru-ru/space/
- https://www.youtube.com/watch?v=qddYQL5-rZY
- https://www.youtube.com/watch?v=HjdJzNoT_qg
- https://blog.jetbrains.com/idea/2019/12/intellij-platform-roadmap-for-2020/
- https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started.html