Scala-дайджест (2 июля – 2 августа)

Functional Typelevel Programming in Scala

Появился более детальный план, как будет реализована поддержка тайплевел-программирования в dotty. Все то, что сейчас делается через кучи имплиситов или с помощью макросов, будет нативно встроено в язык. Такой подход позволит открыть тайплевел-программирование для более широкого круга людей и не потребует изменения восприятия для его понимания. Тип в методах, помеченных новым модификатором transparent, будет восприниматься как конструкция первостепенной важности. Механизм работает на основе частичного выполнения этих методов в момент компиляции. В статье по ссылке вас ждут такие штуки, как erased, implicit match и финты со специализацией.

Отзвуки Scalapeño 2018

John De Goes опять устроил драму. Около двух недель назад в открытый доступ были выложены видео с конференции Scalapeño, включая кейноут Джона. Если это вдруг прошло мимо вас, то вкратце:

  • Сцена 1. По мнению Джона, идея слияния OOP и FP негативно влияет на позиционирование языка. Вместо запиливания новых никем не опробованных инструментов лучше заняться проектами, при наличии которых у пользователей бы не было выбора, кроме как использовать Scala. Заодно он предложил вообще забить на OOP-разработчиков. Пусть идут в другие языки.
  • Сцена 2. Кейноут мало кого оставил равнодушным. Начальный поток одобряющих твитов постепенно перерос в нехилый замес, ибо были задеты чувства не только той части комьюнити, что любит OOP, но и тех, кого устраивает то, как планирует развиваться Scala. Ну и конечно же, это взволновало команду разработчиков компилятора.
  • Cцена 3. На одном из сабреддитов появляется пост с просьбой обьяснить, «зачем вообще нужен IO», который вмиг набирает 100+ комментариев. Присутствует довольно спорный комментарий аж от самого Мартина Одерски: он помнит те бородатые года, кода в Haskell завозили IO, и, по его мнению, для Scalа оно не больно то и надо. В dotty будут новые фичи — implicit function type и разделение эффектов, а для параллелизма вполне зайдет то, что сейчас уже есть в monix, например. Джон опять не разбрасывается шансами и оформляет новый пост.

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

Немного информации можно найти здесь:

Видимо, нас и правда что-то ждет: вот тут и тут обсуждают вещи, похожие на идеи из этих документов.

Дабы развеять панику, прикладываем твит от Rob Norris:

Ответный этому всему от ребят из SoftwareMill — Why Scala?

Кое-кто вне сообщества принимает все эти разборки за смерть языка. По этому поводу есть уже старая статья от Mateusz Kubuszok — Scala FUD FAQ for newbies.

Если ссылкам выше не удалось вернуть вам чувство спокойствия за будущее языка, то есть отличный шанс начать перекатываться в Haskell. На manning в раннем доступне доступна книга Виталия Брагилевского «Haskell in Depth». Периодически бывают скидки 50%, так что можно сэкономить, если следить за твиттером автора.

Наша позиция в том, что переживать не надо. Scala-сообщество отличается от других. У нас всегда всем недовольны, всегда хотят большего. В других сообществах спокойно принимают неверные или недоделанные решения, и никто не жалуется — у нас так не выйдет. Сообщество всё еще молодое и полно пассионариями и спорами, которые в конечном итоге обычно полезны для развития. Ну и конечно, Де Гоис — всегда очень Де Гоис.

300 спартанцев scalaz

Спец репортаж от Ольги Махасоевой

Scalaz во главе с John De Goes недавно запустили кампанию по привлечению контрибьюторов в проект.

300 добровольцев различного уровня подготовки изъявили желание участвовать в разработке более 20 проектов. На очереди новые библиотеки для работы с JDBC, JSON, RPC, TensorFlow и т.д. (полный список на гитхабе scalaz). Кампания только начала обороты, уже созданы шаблоны проектов на гитхабе.

Все они будут написаны в функциональном стиле под менторством Джона и других мейнтейнеров scalaz. Каждый проект будет иметь одного или двух лидеров и саппортеров. Планируется, что от лидеров потребуется уделять примерно 8 часов в неделю, от саппортеров — 5 часов.

Проведены 3 больших митинга с разъяснением ролей и мастер-класс от Джона на митапе Fun(c)tional Programming Group с огромным количеством онлайн-участников (имеется видеозапись). Первых результатов планируется достичь в течении полугода. Пока что большинство проектов занимается подготовкой и пониманием того, как их делать.

«Cross-Platform Language Design»

Разработчик Scala.js Sébastien Doeraene защитил свой PhD по теме «Cross-Platform Language Design». По ссылке — подробный 170-страничный документ с разбором проблем переноса кода в JavaScript-райнтайм, описывающий дизайн промежуточного языка и конечно же, бенчмарки.

Развитие сайта scala-lang.org

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

Релизы

  • Dotty 0.9.0-RC1. Завезли поддержку компиляторных плагинов.
  • SBT 1.2.0.
    • Исправлено много мелких проблем;
    • SbtPlugin для разработчиков плагинов sbt;
    • Возможность форкать таски и выполнять их на разных java_home;
    • projectMatrix DSL позволяет удобно описывать кросс-сборки;
    • addPluginSbtFile поможет IntelliJ IDEA безопасно подключать плагины для сборки;
    • внешний сервер sbt и клиент для него сэкономят время сборки (теперь можно запускать sbt с опцией -client);
    • многое другое, читайте release notes.
  • Mill 0.2.5. Добавлена поддержка Scala native и возможность запускать задачи в фоновом процессе.
  • Scalaz-deriving 1.0.0-RC3. Еще один альтернативный вариант для автоматического вывода тайпклассов от Sam Halliday. Осторожно — GNU GPL v3.
  • Finch — 0.22. Обновлен Finagle и добавлена функция трейсинга (какой конкретно эндпоинт был выбран для обработки запроса).
  • sbt-avro. Если вам всегда было лень руками генерировать Scala-классы из Apache Avro-схем, теперь у вас для этого есть sbt-плагин. Он даже работает со Schema Registry.
  • Akka 2.5.14. Минорный релиз с мелкими фиксами и улучшениями. В документации был добавлен важный раздел с ответом на извечный вопрос: когда и зачем же нужен akka-cluster?
  • StringMask 1.3.0. Вышло обновление маленькой, но полезной библиотеки, которая помогает удобно генерировать toString для case-классов. Чтобы случайно не оказалось, что вы пишете пароли пользователей в лог приложения.
  • Kaleidoscope 0.2.1. Релиз библиотечки для описания компайл-тайм паттерн-матчинга для стрингов с использованием регекспов и нормальных идентификаторов для групп.
  • IntelliJ Scala plugin 2018.2. Новая версия Scala plugin вышла с просто БОМБИЧЕСКИМИ фичами: спец хинты используемых имплисит-параметров, генерация паттерн-матчинга (для sealed types, Java Enums и Scala Enumerations), поддержка scalafmt. Детали смотрите в блоге, обновиться стоит.

Статьи и блоги

  • Testing-in-the-wild. Статья от Eric Torreborre в блоге Typelevel, рассказывается про property-based тестирование с использованием spec2 и ScalaCheck на реальном примере.
  • Are Scala Streams really lazy?. Очень короткий ответ на вопрос, ленивы ли стримы в Scala.
  • How We Improved Build Time by 400% at LinkedIn. Как смена системы сборки помогла им получить 400% выигрыш по времени при сборке огромного зоопарка scala-play приложений. Спойлер: победил не sbt. Спойлер 2: есть сомнения в том, что они правильно готовили sbt (то, что авторы дайджеста любят sbt, замнём для ясности).
  • Getting Started with Apache Spark by Analyzing Pwned Passwords. Если вам всегда было интересно потрогать Spark руками, можно это сделать на основе анализа базы данных паролей.
  • How to turn ugly Java APIs into elegant, type-safe Scala APIs. Как обернуть уродское API на примере java-jwt. Спойлер: тайпклассы и shapeless!
  • Supervision & error handling in ZIO, Akka and Monix (part 3) + итоги. Последняя статья серии. Сравнение делается на примере асинхронного разгребания очереди сообщений.
  • Implicits, type classes, and extension methods, part 4: understanding implicits. Серия статей про то, как понимать эти «невменяемые» имплиситы и пользоваться ими.
  • Teaching Evolution With Genetic Algorithms. Короткая статья, объясняющая принципы эволюционных алгоритмов с примером на Scala.
  • Case Study — Solve Crosswords Puzzle. Изучение языка — всегда хорошее время для решения интересных задач. Задачи не обязаны быть всегда практическими — можно, например, решить кроссворд.

Видео

Дайджест готовили

  • Редакция JUG.ru Group:
    • Олег Чирухин – контент, верстка, проверка фактов
      (почта для связи: oleg@jugru.org, Telegram: @olegchir);
  •  Эксперты:
    • Вадим Челышов из подкаста Scalalaz
      (почта для связи: qtankle@gmail.com, Telegram: @dos65);
    • Александр Карпов — вольнонаемный рабочий из лучшей в мире компании SEMrush;
    • Специальный репортаж от Ольги Махасоевой про 300 спартанцев.