Хабрахабр

По следам русского Scala-движа. Часть 2

В прошлой части расследования Роман Тимушев посоветовал связаться с Владом, что я и сделал. Влад уточнил, что меня интересует, делайны и согласился написать несколько абзацев. На следующее утро я увидел уведомление в Facebook. Это Влад нашел нового свидетеля — Александра Подхалюзина. С 2008 по 2017 он работал как тимлид над Scala plugin в IDEA и лично видел все развитие Scala-движения, но, в основном, не российскую часть.

Обозначили время и записали часовое интервью с Александром. В голове «щелкнуло» — планы меняются, это новая нить в расследовании. Поэтому, предупреждаю — впереди много текста. Информации столько, что вместить его куда либо кроме отдельной части не было вариантов.

Вне программы — комментарий Ильи Сергея. В этой части говорим с Александром Подхалюзиным и Михаилом Муцянко. Scala plugin, первые Scala-мероприятия в России, уход в Kotlin, Native на обоих языках, закат Eclipse и многое другое под катом.

Как Александр попал в Scala, ушел в Kotlin и преподавание

Александр Подхалюзин с 2008 по 2017 разрабатывал в JetBrains Scala plugin в IDEA как тимлид. Позже ушел в Kotlin Tooling сначала для Kotlin/Native, затем и для всего Kotlin в целом.

Кстати, движение началось не в 2010, а на три года раньше. Александр: Задача крупная, все путается за давностью лет. В 2007 я как раз пришел работать в JetBrains и мне повезло с MPS… Ты знаешь, что такое MPS?

Вадим: Я слышал, что это декларативный и визуальный язык.

Это Meta Programming System — генеративное программирование cразу с IDE. Александр: MPS опередило время. Поэтому мне повезло — меня отправили писать Scala plugin. Я устраивался в компанию на MPS, но там уже нашли человека.

Он был популярен и требовал поддержки. В JetBrains начали писать плагин, но бросили, потому что был Groovy. Scala никто не занимался и мне досталось такое наследство. Все, кто занимался Scala plugin, пошли работать над плагином Groovy.

Я ничего не умел, начал копать парсер, фиксил одну багу, вторую, третью — это продолжалось бесконечно долго. В компанию я пришел в начале 2008 года. Так потихоньку поехали разрабатывать. В итоге сел и переписал его.

Я его застал и работал с ним над плагином. До меня над плагином работал Илья Сергей. Но он хотел быть математиком, а я — программистом. Забавно, что я был математиком, а Илья — программистом. А он не понимал меня. Мне понравилось программировать, я готов был этим заниматься и не понимал, почему Илье не нравится. В итоге жизнь все расставила по местам.

Он недавно приезжал, рассказывал, как искать автоматические гонки — это какая-то наука. Илья ушел из JetBrains и занимается Computer Science в Испании, чуть ли не профессором. Сказал, что все супер, все работает. Еще на каком-то соревновании сел и написал на Scala 10 тысяч строк. Он еще ездил на первый Scala Days, кажется в 2009 году.

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

В 2018 году мы проводили работу совместно с Facebook. Доклад, который упомянул Александр, был о статическом анализе для нахождения состояний гонки в Java-приложениях. Правда там весь код на OCaml. По ней написали доклад и еще две статьи. Почти весь код для контеста также написал я на Scala с использованием Scala.js. Соревнования — это ICFP Programming Contest, которые я вел в этом году.

При помощи IntelliJ IDEA и Scala plugin написаны многие прототипы для моих исследовательских проектов: синтез программ с указателями TyGus/suslik, тестирование геометрических алгоритмов. Использую Scala исключительно как пользователь. В университете я читаю курс по многопоточности, где Scala основной язык.

Илья Сергей, профессор Национального Университета Сингапура.

Александр: Я на Scala Days начал ездить с 2011 года. Вот уже три года мы пишем второй фронтенд-компилятор Scala, по сути. Это занимает годы, это нормально. У нас все работало медленно и плохо, но при этом было хоть что-то. С точки зрения редакторов ничего лучше все равно не было. Я не помню, начали ли Eclipse поддерживать на тот момент. Да, кажется его поддерживали параллельно.

По его версии, тогда все пользовались Eclipse. Вадим: Я разговаривал с Романом Тимушевым и он мне рассказывал про 13 год, как начал писать и проводить митапы в Москве. Это было вполне сносно, он официально поддерживался.

В 2011 году Eclipse был совсем плох, а в 2013 достиг скорости как у нас в 2011. Александр: Да, так и было. Это неудобно и это ключевая проблема. В отличие от Eclipse, мы пишем свой фронтенд, поэтому подсветка ошибок отличалась от компилятора. Eclipse же использует код компилятора. Какие-то ошибки не подсвечиваются, а в компиляторе наоборот.

В Kotlin аналогично при использовании кода компилятора. Использование кода компилятора — это плохая затея, потому что все будет работать медленно. Ситуация не настолько плоха как была в Scala — немножко думали про IDE, но все равно непросто обеспечить хороший перформанс с точки зрения IDE.

Это первая конференция на которую нас позвали, но было странно, что мы туда поехали. В 2011 году Scalathon (фотки) проводили в Филадельфии. До этого никуда не звали со Scala, а когда мы что-то начали делать — заметили. Они обратились в JetBrains, не хотим ли мы посетить мероприятие. На Scalathon я и познакомился с Bill Venners. Пользователей, как и Scala-программистов, было с гулькин нос — около 100 человек на всей конференции.

Вадим: Имя знакомо, но я не помню, кто это.

Это книга, которая написана вместе с Martin Odersky — наша библия! Александр: Автор двух вещей: Scalatest и главной книги «Programming in Scala».

Вадим: Я не читал.

У меня дома лежит эта книга с автографами Bill Venners и Martin Odersky. Александр: Неважно. На званом ужине для всех участников награждали людей, которые сделали вклад в коммьюнити. Они мне ее подарили на одном из Scala Days в 12 или 13 году. Неожиданно позвали меня и я получил книгу за вклад.

Сначала они проходили один раз в год в Европе или в Америке, а позже два раза. Scala Days стали посещать тоже с 2011 года. На прошлогоднюю я подал доклад о сравнении Kotlin/Native и Scala Native. В прошлом году я посетил одну конференцию, а на вторую не поехал. Возможно, из уважения или по другим причинам. Никто в Kotlin-команде не верил, что доклад примут, но его взяли. У Scala-программистов не вызывает интереса все, что содержит слово «Kotlin». На доклад пришло мало слушателей. Так было и есть до сих пор.

Вадим: Я думаю, что и слово «Native» сыграло роль.

Но при этом, технология далека от продакшн. Александр: Нет, на Scala Days все доклады о Scala Native всегда собирают полные залы, например, выступление Дениса Шабалина. Ей не суждено туда попасть еще 10 лет, как минимум.

Я удивился, но есть Richard Whaling, который пишет книгу о Scala Native — материала уже много. Вадим: Почему ты так думаешь? У него и сфера такая, где много данных. Он ходит на подкасты и рассказывает как использует это в продакшн. Он очень рад Native в этих условиях.

На момент выступления над Scala Native трудился один человек. Александр: Посмотри мой доклад о сравнении Scala Native и Kotlin/Native, в котором я объясняю свою точку зрения. Если говорить про одного человека, который где-то применил технологию — может быть. Поэтому ни о каком продукте речи быть не может. Просто это не мейнстрим, будет мало пользователей.

Как раз это создает определенный интерес. У Kotlin/Native есть конкретное применение — шаринг кода между iOS и Android. Scala Native можно использовать для вычислений, когда приходится комбинировать Scala-код и быстрые вычисления типа Tensorflow. У Scala Native этого нет и цепляться не за что. Но Scala Native не означает, что между Scala и Native можно спокойно вызывать друг друга или шарить общий код.

Это адский труд в смысле дизайна, что используешь не POSIX, а какую-то прослоечную библиотеку, которая одинаково работает и в JVM и без нее. В Kotlin мы паримся над тем, чтобы писать и компилировать один и тот же код. Код будет разный в этом месте, а если он разный, то как его поддерживать? Если у тебя такой библиотеки нет — все, кранты. Если копать, то вопросов — бездна. Как деплоить библиотеки, в которых разные эндпоинты — их же надо скомпилировать, деплоить, тут еще билд-система, зависимости? Применение — отдельная история, и об этом можно посмотреть мой доклад. Ответить на все не сможет один человек, который разрабатывает Scala Native.

В 2011 ты съездил на Scala Days, а до 2016 года ты был еще со Scala plugin? Вадим: Хорошо, вернемся обратно.

Александр: До 2017.

Что произошло? Вадим: Потом тебя дернуло в Kotlin.

Можно было продолжать разрабатывать Scala plugin — много фишек, есть что доделывать. Александр: C какой-то точки зрения, я не сделал все, что мог. Как много ты знаешь продуктов, которые захватили 80% рынка? Но, с точки зрения бизнеса, он успешен как проект. 80% Scala-программистов используют IntelliJ IDEA. Таких мало.

Хочется новые цели, новые горизонты, а в рамках Scala plugin это было невозможно. Что делать дальше? Найти местечко под Scala в компании невозможно, поэтому либо я ухожу, либо работаю здесь и дальше. В JetBrains разрабатывается собственный язык программирования и отношение к Scala скептическое. Пришлось принять трудное решение. В энтерпрайз какой-нибудь, или что-то еще.

Первое — я понял, что если ухожу из команды, то вместо меня будет Коля Тропин. В какой-то степени я готовился. Я готовился, и его своеобразно подготовил, понимал, что он может встать вместо меня. Он сейчас возглавляет команду. Мне уже не надо было их программировать. Второе — потихоньку раздавал все подсистемы, отказывался от них.

После выхода я пошел к гендиректору Максиму Шафирову. Апофеозом всего этого стала травма руки, операция и 2 месяца больничного. Был такой триггер, что-то неосознанно готовилось, чтобы можно было это сделать, а эти два месяца позволили решиться. Пришел и сказал: «Дай мне что- нибудь другое». Я говорил «что угодно, только не Kotlin». И Макс предложил. Понятно, я же со Scala-мира, а Scala-мир ненавидит Kotlin.

Это «огрызок» Scala. Вадим: Я не то чтобы ненавижу, просто неприятно, что такой продукт появился. При этом маркетинг активный, захватывается рынок — те люди, кто могли бы перейти на светлую сторону Scala.

Если представить разрыв в знаниях, которые нужно освоить, чтобы эффективно писать на Scala или Haskell, то для Java-разработчика он гигантский. С другой стороны, это же неплохо? Здесь Kotlin — перевалочный пункт, до которого можно довольно безопасно дойти, отсидеться и идти дальше.

Когда не было Kotlin, в Scala приходили люди, которых не устраивала Java — не хватает чего-то, много boilerplate. Александр: Это не совсем так. Kotlin целится исключительно в эту нишу. Scala занимала место того, что называется «Better Java».

Kotlin не зациклился на одном Android, на одной нише, и пошел дальше. С Kotlin случился Android и все вытекающие, а теперь — мультиплатформенность и все.

Сейчас хоть какие-то нормальные JEPы пошли, чтобы Java развивалась. Вадим: Мне кажется это хорошо — Oracle расшевелился.

За 2 года до объявления Google о Kotlin, его было ничтожно мало. Александр: Я думаю, что причина не в Kotlin — это нормальное следствие. Хотя я говорил «только не Kotlin», вариант поддержки Kotlin/Native в IDEA был в этом списке. Когда я решил переходить, Макс Шафиров дал мне список для выбора. На следующий день после того, как я взял на себя обязанность за Kotlin/Native, Андрей Бреслав сказал, что на следующем Google I/O объявят, что Kotlin официально поддерживаемый язык на Android. В итоге, из всего списка я решил попробовать перейти в Kotlin.

Я думал, что позанимаюсь чем-то для условно маргинального языка. Тут мысль: «Опаньки». С выходом Java 8 с лямбдами, это стало еще труднее. Было понятно, что нишу «Better Java» трудно завоевать. Она случайна — случайные люди пришли в Scala с пониманием, что им нужна лучшая Java. У Scala все нормально с этим, она сильна не лямбдами и не тем, что лучше Java.

В Scala и Kotlin ради этого они не пойдут — у них лямбды появились. После Java 8 поток этих людей замедлился. Я присел, задумался и осознал, что масштаб теперь другой. Этого достаточно для начала, а лучшее уже не интересует.

На тот момент там было 100 тысяч пользователей, а у Kotlin — 40 тысяч. В голове я переходил в команду масштабом не сильно больше, чем в Scala plugin. Я понял, что это прикольно, что мне не сказали заранее. Совершенно другой масштаб. Решил пойти в Kotlin потому, что было интересно попробовать, а не ради грандиозных и масштабных целей.

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

Для какой-то простой задачи на Kotlin мне было бы проще собрать команду. Что бы я делал, если бы я был CTO? Я мог бы набрать Scala-программистов дешевле, но получил бы результат хуже, потому что они наворотят что-то страшное в этой Scala. Она была бы дешевле или эффективней. Это с точки зрения начала нового проекта, если там нет каких-то технологических серьезных вещей. Даже если на рынке труда сложно, я начну набирать Java-программистов — Kotlin их обучить будет гораздо проще.

Kotlin их не сможет решить. Для банковской индустрии, например, есть причины, по которым нужно использовать Scala. То же метапрограммирование в Scala гораздо удобнее.

Там те же самые annotation-процессоры. Если крепко задуматься на эту тему, на Scala можно создать крутые инфраструктурные вещи, а в Kotlin невозможно. Когда-нибудь будет возможно, но лишь в перспективе нескольких лет.

Вадим: Почему считаешь, что для банков хороша Scala?

Это система, где есть объекты типа пользователя. Александр: Много boilerplate, который не связан с языком программирования. Чтобы эффективно изменять что-то, нужна хорошая поддержка метапрограммирования. Она требует много дупликации, начиная от базы данных и заканчивая всем. Она нужна везде, но втыкать ее нужно с осторожностью, иначе можно влипнуть.

Мне было лень вести весь курс, и я договорился со Светой Исаковой, которая сейчас developer-адвокат Kotlin. В 11 году меня позвали в Академический университет. Она хотела, наверно, узнать про Scala подробнее. Мы договорились вести курс пополам, но он был о Scala.

Вадим: Универ был топовый на тот момент?

Первые годы конкурс был небольшой. Александр: Да, с магистратурой на 5-6 курсе. Но конкуренция за место повысилась, когда пришли JetBrains, Яндекс и Транзас со спонсорством, приглашением на стажировки и целью выращивать кадры для себя.

Он дал полный карт-бланш — делайте как хочется! Получилось классно: частные деньги и частная инициатива под государственным прикрытием и прикрытием Алферова. Они набрали людей, которые были на острие, понимали, что происходит в индустрии прямо сейчас, а не 10 лет назад непонятно где. Получилось классно, потому что курсы релевантные. Если говорить про обычные университеты, аля «матмех/мехмат», то там разве что Паскаль не проходят — к реальной жизни это не имеет никакого отношения.

Люди понимали, что придя туда, они очень быстро влетят в индустрию. Этим и был силен Академический университет. Это хорошая карьерная ступенька, и конкурс был 10 студентов на место. Выпускников университета с удовольствием набирали в Яндекс и JetBrains. Света на второй год не стала со мной рассказывать о Scala, а я призвал разных помощников, в частности Свету для Kotlin. Я преподавал там 5 лет. В итоге мы переименовались в JVM-languages.

По отзывам студентов, они не понимали, что в курсе делает Clojure, что это за хрень несусветная. В какой то момент мне досталась поддержка Clojure, и я немного разобрался в этом языке. Просто я не был экспертом. Рассказывают про нормальные языки — Scala и Kotlin, и, внезапно, невнятный Clojure. Вот такая история была.

О первых ScalaSPB/ScalaDev

Александр: Потом в Питере появились ивенты типа Scala Days. Прошел первый ScalaDev, а ко второму мероприятию организаторы оригинального Scala Days связались с питерскими и попросили переименоваться.

Вадим: Это какой год?

Ивент делали ребята из питерского аутсорсера e-legion. Александр: Да все там же — 11-13. Они даже писали мобильное приложение на Scala, но сейчас так никто уже не пишет — люди в своем уме. Кажется, они писали приложение Райффайзенбанк.

Говорил, что у них все хорошо, и они этим пользуются. Вадим: Один из гостей подкаста — Матвей Мальков — рассказывал о Scala и Android два года назад. Основной выигрыш у них, что и бэкенд на Scala, и приложения.

Оказалось, что он ушел из компании и последнее, что сделал — настроил на CI сборку модуля Kotlin из того проекта на Scala, чтобы ребята постепенно на него перекатывались. Недавно написал ему с запросом выступить на конференции, потому что про мобилки никого не найдешь.

Теоретически, Google мог взять и Scala, но не взял. Александр: Еще два года назад про Kotlin ничего не было понятно.

Точнее не на первом, а на втором, который проводили в JetBrains. Мы выступали на первых Scala Days и даже собирали людей. Тогда выступала Света Исакова с интро в Kotlin.

Зал отреагировал очень негативно, закидал вопросами: «Почему это не делается, почему это не так, почему это не то?» Было жутко, какое-то хейтерство. Это было забавно — все Scala-разработчики воспринимали Kotlin как врага номер один.

Мой опыт показал, что это бессмысленно. После Светы я был вторым человеком, который рассказал что-то о Kotlin на Scala-конференции — о Kotlin/Native. Как он устроен внутри, программы позапускать, чему-то порадоваться. Я не ради доклада, мне было интересно посмотреть Scala Native. Я думаю, что сейчас у Kotlin/Native меньше, потому что 10 человек работает над этим. Даже на тот момент я был рад тому, что размер бинарника у Scala Native был меньше, чем у Kotlin.

Вадим: Ох, ну вы так Дениса Шабалина точно задушите.

У нас 10 человек, и этого мало. Александр: Это невозможно, это очень сложная технология. Денис сам по себе крутой, но что он может один? Причем 10 крутых людей, прямо очень крутых, таких попробуй еще собери.

Много людей стремилось создать какой-нибудь фреймворк, скорее всего, никому не нужный, чтобы распиариться и бросить. Довольно интересна история о коммьюнити, как и вся история Scala. Одно из требований — дипломная работа от аспиранто. Образовалось много своеобразных звезд, а некоторым помогал еще и EPFL. В процессе работы у аспирантов повышается цена как программиста, и после окончания они находят крутую работу. Например, Scalameta — работа Жени Бурмако. Потому что они известные, они докладывались на куче конференций и раскрутились. Первую работу с зарплатой больше, чем у людей, которые работают 10 лет.

Смотришь, в Kotlin: здесь собираемся сделать это, здесь то, и в Scala абсолютно также. Вот еще что. Но, так как в Scala все драйвит сообщество, все в полном хаосе. Здесь Tasty, в Kotlin backend IR. Что получится, то получится. Нет никакого централизованного дизайна. Мартину понравилось, одобрение пошло в массы. Человек захотел что-то напедалить, получилось. А в Kotlin все более четко и профессионально, вот что значит индустрия.

Об Eclipse и Jason Zaugg

Александр: В 13 году мы ездили на конференцию. Все в компиляторе программировали на Eclipse. Мы стояли и к нам подходили люди, которые пользовались IDEA. Они были довольны, благодарили. У нас 10% рынка, остальные на Eclipse. Все компиляторщики на нем сидят. Они долго обходили нас стороной, вдруг мы их убедим пользоваться. Но в какой-то момент произошел сдвиг.

В Open Source мире это не странно, но редко появляются люди, которые инвестируют много времени и много кодят. В 11 или 12 году у нас появился контрибьютор Jason Zaugg. Мы даже дали ему права на коммиты. Джейсон пришел, много наконтрибьютил, а сам работал в каком-то банке. Просто сидели, кодили, вместе обсуждали какие-то вещи. Ему даже не надо было показывать ревью на публикацию. Все закончилось тем, что Джейсон устроился работать в Scala-компилятор. На основе нашего фронтэнда он разобрался, как работает Scala. Мне кажется, это неправильная стратегия. Грустно, что мы его не устроили к себе. Больше такого не было. Если на тебя человек бесплатно работает — его надо устраивать к себе, иначе он уйдет в Scala-компилятор.

Он был фанатом IDEA. Джейсон прекрасный человек и классный контрибьютор. Код сложный — dependency-injection (DI), которой, по сути, cake-паттерн. Дело в том, что Scala plugin вис на компиляторном коде. За счет DI в контексте есть ВСЕ, а там все с type-inference, и нужно выводить тип везде — все переплетено. Когда открываешь любой файл, нужно проанализировать весь компилятор. Даже в настройке компилятора как проекта шел еще bootstrap. Анализ одного файла занимал 5 минут. Такие проекты было трудно настроить. Он же должен зависеть сам на себя, это называется bootstrap.

Чтобы можно было делать bootstrap-проекты, программировать в компиляторе, чтобы в этих сложных файлах хотя бы можно было набирать код. Мы с Джейсоном потратили много времени на адаптацию. Мы даже тест сделали, который проверял, что наш фронтенд на компиляторе зеленый или содержит мало ошибок. Сначала все было красное, и я потратил кучу времени, чтобы перевести все в зеленое. И, соответственно, команда компилятора перешла целиком на IDEA.

Вадим Челышов: В этот момент и начался отток с Eclipse?

Первая — IDEA выпустила коммьюнити-версию. Александр: Для оттока есть несколько причин. Мы с самого начала были Open Source и когда начинали, он был проприетарный, с открытыми сорцами. Это значит, что можно поставить Scala-плагин на бесплатную версию пользователя. Для этого и писали Eclipse поддержку, потому что нужен был стандартный инструмент, который можно использовать бесплатно. Но устанавливался он на платную IDE. Поэтому мы тоже стали бесплатными.

Он не умер, это смешно говорить, но финансирование резко оборвалось. Вторая — Eclipse как платформа начал умирать еще в 14 году. Eclipse Foundation стал собирать меньше денег и непонятно, как развивать платформу в таких условиях.

Presentation compiler работал медленно, а если говорить про какой то функционал — это вообще трындец, рефакторинг сделать крайне трудно. Третья причина — у них не получалось сделать быструю IDE. Чтобы найти родительский узел, надо сверху взять файлик, пойти в них и посмотреть — жуткая возня. В компиляторе, с точки зрения оптимизации, деревья строятся однонаправленные, нельзя взять родителя.

Это дерево, которое получается после дешугаризации. Четвертая причина — они работают с отображением в компиляторе. Непонятно как с этим работать и организовать рефакторинги. Редактор написан во front statement, а в presentation compiler вообще непонятно, что за код. Соответственно, фичи появлялись медленно. Как заэкстрактить этот front statement, а не всю эту безумную хрень?

Но, чтобы он был хотя бы таким, пришлось делать жуткие вещи. При этом наш фронтенд был убогий и плохо работал. Потому что оно дешугаризуется, и у тебя implicit-конверсия для Range - 1 to 10, по пути implicit-конверсия для map, implicit-параметры, которые CanBuildFrom. Когда-то метод for println(i) требовал поддержки 80% языка. Как только работает этот пример — надо понимать, что это работает 80% фронтенда. Дальше там еще безумная иерархия коллекций и лямбды, и еще какая-нибудь анонимная лямбда с неизвестным параметром — полная жесть. Поэтому даже убогенький фронтенд означал, что у нас поддерживается невероятное количество функциональности Scala.

Они странные, но разные, и когда все это началось уже никто не помнит. Сейчас в IDEA написано много конвертеров языков. Мы обсуждали, что устанешь точки с запятой убирать и разворачивать типы — надо же как-то переезжать. В 2009 году я ездил на конференцию и там меня стрельнуло — почему бы не сделать конверсию из Java в Scala? Я сел и за вечер написал тысячу строк — простой конвертер одного языка в другой.

Когда я копирую в Java-код, то ожидаю, что сейчас вставлю и буду убирать точки с запятой. Но я пошел дальше и придумал как сделать так, чтобы легко найти эту фичу. Пока она тебе не нужна — ты о ней не знаешь. Это мой любимый случай, когда ты делаешь фичу, которая идеальна по discoverability. Это типа Apple-stylе — просто и понятно. Как только она тебе понадобилась — сразу ее получаешь. Но да, это придумал я, это моя гордость. Соответственно, с тех времен у JetBrains было написано много конвертеров, и рекламная фича, что они на вставке предлагаются.

О компиляторах

К записи подключается Михаил Муцянко — один из текущих разработчиков Scala plugin в JetBrains. В этом выпуске подкаста Михаил и его коллега Андрей Козлов обсуждали плагин подробнее.

Миша, расскажи, как ты появился? Александр: Я тут травлю байки про Scala.

Андрей Бреслав делал одну из первых стажировок — курсовик. Михаил: Изначально я появился в Kotlin. Она сейчас называется anko. Я попал на проект генерации котлиновских DSL по байткоду андроидовской UI-библиотеки. В качестве диплома я делал интерпретатор деревьев для Scalameta. Потом я искал какие-нибудь темы для диплома, и он меня направил к Саше.

Миша долго этим и занимался. Александр: Точно, эта та тема, которая Мише досталась в виде диплома — поддержка мета-программирования. Что-то мы сделали в итоге?

Правда потом Scalameta задепрекейтили. Михаил: Да, оно работало. В Scala 3 будет что-то похожее, но с более стандартизированным API.

Александр: Про Dotty я уже ничего совсем не знаю.

Typeable мигрировал. Вадим: Я только сегодня видел то, что Miles Sabin пошарил свой кусочек кода, где он shapeless мигрирует на Dotty c новыми макросами, и вроде как получается.

По сути, забандлят shapeless в компилятор. Михаил: Да, в частности, он один из тех людей, кто раздает указания как нужно делать typechecker в Scala, чтобы Shapeless работал из коробки, без костылей.

Ты шутишь? Александр: Да ну! Скажи еще и Scalaz забандлят?

За ним же не стоит Майлз. Михаил: Ну, как-то не понятно, кто вообще сейчас Scalaz пишет.

Майлз смотрит за shapeless. Вадим: Сейчас все сообщество присматривает за Dotty. Вот уже который раз эти имплиситы поменяли, вкупе с обсуждением, как надо делать тайп-классы от Luka Jacobowitz.

В начале 17 года Scala Center решили собрать инфлюенсеров на коммьюнити для рабочей группы. Александр: Про сообщество. Не дай бог мы заставим программировать на IntelliJ IDEA — опасно. На JetBrains всегда смотрели издалека и осторожно. Пригласили на какое-то обсуждение, но я тогда травмировал руку и не пришел. Когда стало трудно отрицать, что программировать все равно придется на IDEA, нас приняли. Потом ушел из Scala и так ни разу и не появился в рабочей группе.

Был еще конечно Typelevel, но это форк. Еще меня всегда забавляло, что народ говорил: «Зачем нам документировать детали компилятора, все равно не существует второго компилятора?» Это было забавно, потому что Scala plugin всегда был тем самым вторым альтернативным компилятором.

Когда Jason Zaugg появился в компиляторе, это было круто. На нас сильно влияло развитие Scala. Появилась коммуникация. Он начал нам сообщать: «Мы такое сделали, поддержите нас». До Джейсона так и было. Когда компиляторщики смотрят свысока и не пользуются — они нам ничего не рассказывают.

Михаил: Сейчас я периодически попинываю Guillaume Martres, который пилит Tasty, и Fengyun Liu — он пилит макросы.

Подытожим

Вадим: Александр, спасибо большое, давай подытожим. Я вчера говорил с человеком. Он рассказывал, что в Scala ему нравился единый концепт имплисита, на который навешивались разные фичи. Сейчас в Dotty пришли к тем же явным extension-методам, явно все usecase имплиситов задекларировали точными словами. Подсмотрели у Kotlin и Swift, наверное. Как ты к этому относишься? И вообще к Scala 3?

На нем Martin Odersky рассказывал о том, что у Scala столько-то языковых концепций, у Kotlin в три раза больше, у C# еще больше. Александр: В 2018 был последний Scala Days, который я посетил. Но при этом, возможности Scala обширнее.

Я впечатлился, понял, что Мартин понимает, что надо шевелиться. Мы думали что это клево, но это не так. Безграничные возможности языка и создают эту самую нишу. Единственное, что беспокоит, что Scala должна стать своеобразно нишевым языком. Гоняться с Kotlin за лучшую Java уже тяжело, и с каждым годом тяжелее. Это и DSL, которую она умеет делать, и все это круто. Если они эту всю функциональность добавят и не потеряют нишевость — это будет круто. Главное не потерять свою нишевость. Да, Миша? Но если Miles всем этим заправляет, то может и получится.

Если хотите добавить новые грани в историю Scala-движения или поделиться опытом использования — подавайте доклады. В следующих частях расследования о зарождении Scala-движения нас ждут интервью с Владимиром Успенским, Романом Елизаровым и Николаем Татариновым. Call for Papers закрывается через 10 дней.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»