Привет, Хабр! Мы — Рома, Настя и Карина — бэкенд-разработчики Тинькофф, пишем код на Scala и горим желанием его популяризировать. Мы собираем новости из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем другие интересные моменты и собственные комментарии. Свою мотивацию мы черпаем из желания развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕ )づ Собрали последние обновления популярных и полезных библиотек за пару месяцев: scala-cli v1.0.0-RC1 — первый официальный претендент на замену REPL-утилиты Scala; Scala 3.3.0-RC4; IntelliJ Scala Plugin 2023.1 Is Out!; Metals v0.11.12 Aluminium; mill 0.11.0-M7; iron v2.1.0; tyrian v0.6.2; sttp v3.8.14, v3.8.15; tapir v1.2.12; cats-effect v3.4.9, v3.5.0-RC4; zio-kafka v2.2; zio-config v4.0.0-RC15; zio-http v3.0.0-RC1; zio v2.0.11, v2.0.12, v2.0.13; chimney v0.7.3, v0.7.4. В этом разделе — свежие статьи, репозитории и исследования, которые нам показались интересными. В отдельном блоке собрали ресурсы, где авторы используют Scala 3. Enjoy: ZIO SQL: Type-safe SQL for ZIO applications — обзор новой библиотеки для написания SQL-запросов. Судя по анонсу, совмещает в себе лучшее от двух миров: гибкость в виде raw SQL и преимущество валидации на уровне типов во время компиляции. Приятно видеть, что авторы статьи не поскупились досконально пройтись и разобрать основные фичи, нужные для FRM-библиотек: join-ы, пулы соединений, работа с raw SQL, транзакции и прочие функциональные радости. Integrating Akka with Cats-Effect 3 — Alexandru Nedelcu вышел из зимней спячки и рассказал, как можно зачать здорового ребенка, если маму зовут Akka, а папу Cats Effect скрестить инструменты управления ресурсами Cats Effect с Akka. Lila Scavenger Hunt — заполняем прописи, отвечая на вопросы об устройстве Lichess.org. Но начать советуем со статьи-ретроспективы про устройство сервиса. Telemetry with Scala, part 2: Kamon — туториал по настройке Kamon — фреймворка для мониторинга и трейсинга. Это альтернатива OpenTelemetry. К сожалению, не умеет экспортировать логи, но во всем остальном не уступает. Статья подробная, код сервиса и настройка окружения прилагается. Using Vulcan Codecs with Kafka Java APIs — теперь с Avro в Kafka работать так же просто, как с JSON в Circe. Beginner’s guide to toolkits in Scala — комментарий о том, что значит scala-cli станет Scala runner и что есть суть Scala Toolkit и Typelevel Toolkit. Immutability by Example — Building a Purely Functional Data Validator — практикуясь в написании аналога Validated из cats-core, осваиваем функциональную парадигму обработки ошибок. Functional Error Handling in Scala — работа с ошибками как обычными типами данных. Перефразируя автора статьи: «Семь бед — flatMap ответ» ( °ᴗ°)~ð (/❛o❛) Top 10 pattern matching tips in Scala — советы для самых маленьких: использование паттерн-матчинга. Underrated Scala Features and Hidden Gems in the Standard Library. Go-like channels using project Loom and Scala — Adam Warski продолжает свои жутко увлекательные эксперименты с проектом Loom. Имплементация go-like-каналов, выросшая из статьи о direct-style-библиотеке асинхронного/конкурентного программирования Ox. Не забыл обсудить реализации pull/push- и eager/lazy-моделей работы со стримами. Good practices for schema evolution with Protobuf using ScalaPB and fs2grpc — cheat sheet по всем типам совместимости полей в контракте для protobuf, а также хаки по гибкой настройке генерации case-классов из этих protobuf-файлов. Concurrency with Cats Effect — добротная статья про то, что такое файберы и как ими управлять в Cats Effect. Собрали ссылки как на уже известные и популярные, так и на ноунейм-каналы и видео про Scala: Java Virtual Threads — How Virtual Threads Work, Scheduling, Cooperation and More — все, что вы хотели знать, но боялись спросить о виртуальных потоках в Loom! Ну, или не все. ┐(シ)┌ По крайней мере упомянуты ForkJoin-пулы и семантические блокировки. Здесь же запускаются примеры, иллюстрирующие разницу с обычными потоками JVM. Ziverge — новые выпуски Zymposium: пишем свои примитивы конкурентности для игрушечной модели рантайма ZIO, а также разбираемся с механизмом, стоящим за FiberRef! MUnit + Expecty = 💞 Появились записи докладов с Scalar Conference 2023: Martin Odersky DIRECT STYLE SCALA Scalar Conference 2023 — «здесь должна быть остроумная игра слов про будущее Future». Мartin Odersky — о том, как достичь новых высот конкурентности и асинхронности, скрестив direct-style-код с Future, вводя новые абстракции в виде контекстуальных break-ов (boundary/break). В докладе есть пара симпатичных слайдов о том, как это устроено под капотом и как может облегчить написание реального кода. Adam Warski OXES, TAPIRS AND STTPS SCALAR CONFERENCE 2023 — Adam Warski с обзором на Ox — библиотеки для structured concurrency с интеграцией Loom из jdk19 в Scala. В конце доклада приводится сравнение этого проекта с системами эффектов. Wojciech Mazur THE FUTURE OF WEBASSEMBLY FOR SCALA Scalar Conference 2023 — мейнтейнер Scala Native о WebAssembly — о том, что это и зачем нужно. Разбираются два альтернативных подхода по поддержке этой платформы в Scala, а также возникающие в каждом из них проблемы. Доклад получился информативным, от редакции однозначно лайк (*￣▽￣)b Daniel Ciocîrlan FULL-STACK SCALA 3 WITH TYPELEVEL STACK Scalar Conference 2023 — RockTheJVM засветил лицо в прямом эфире и представил full-stack-приложение на Scala 3, попутно рассказав про архитектуру, выбор библиотек и внутрянку. Вторая половина доклада про UI и небольшой обзор Tyrian — библиотеки для фронтенда на Scala.js. Рекомендуем оценить красоту, получилось действительно круто (ﾉ>ω<)ﾉ :｡･::･ﾟ’★,｡･::･ﾟ’☆ Magda Stożek GET MORE CLARITY WITH OPAQUE TYPES IN SCALA 3 Scalar Conference 2023 — 20-минутная сводка по best practices для работы с opaque types в Scala 3. К сожалению, на текущий момент эта фича не может заменить собой value types/type aliases/newtypes, так как все равно требуется писать бойлерплейтный код, pattern matching не работает, а до api скрываемых внутри типов не достучаться. Тем не менее в этом докладе можно увидеть, как исправить часть этих недостатков. Nicolas Rinaudo THINGS THAT ARE THINGS, BUT NOT OTHER THINGS Scalar Conference 2023 — вас всегда интересовали примеры типов данных, которые могут образовать applicative, но не могут monad? Вы по адресу! Доклад на основе статьи, но смотреть в видеоформате еще приятнее. Ayush Mittal IMPLICITS IN SCALA 3 Scalar Conference 2023 — yet another speech about implicits. Паттерны работы с ними и как изменился их интерфейс в Scala 3. В Москве прошел митап по Scala, организованный компанией «Криптонит»:  А еще на днях прошла конференция ZIO World! Записей докладов пока нет, но ожидаем увидеть их к следующему выпуску дайджеста. В этом блоке не всегда свежие, но зацепившие наш взгляд ресурсы под флагом «очумелые ручки». Авторы творят что-то интересное, необычное, но не обязательно полезное: Scala Native for cross-platform binaries — реализованный на Scala Native аналог утилиты csplit. Интерес вызывает не только сама утилита, но и изложенный подход к написанию подобных cli-приложений с помощью cats-effect и fs2. Caliban — замена всем приевшегося REST-а новомодным GraphQL. Запрашиваем сложноструктурированный набор данных с сервера, не производя лишних вычислений. Основные фичи: встроенный валидатор и оптимизатор обработчиков запросов и генерация клиента на основе scala-моделей. Подробнее о работе с библиотекой — в цикле статей. Signals3 — связующее звено между UI и логикой scalaFX/javaFX/Android-приложения в виде event-streaming-библиотеки, работающей на wire-signals. Добротная интерактивная документация идет в комплекте! Batcher Library — в основе библиотеки лежит довольно интересная идея: оптимизация работы сервера за счет объединения одинаковых запросов в батчи и выполнения их в единой точке. Однако приведенный пример нерепрезентативный: хотелось бы видеть реальный серверный путь. ZIO Redis — экосистема ZIO продолжает свое развитие. На этот раз представляют нативный клиент к Redis, использующий вторую версию zio. Кусочек дайджеста, где мы рассказываем о появлении новых и улучшении существующих инструментов для разработки: New Scala Build Tool — пока Eugene Yokota пишет sbt 2.0, John A De Goes бубнит, что надо не так, надо по-другому рисует радужный мир идеального инструмента сборки для scala-проектов. Впрочем, обещает финансовую и рекламную поддержку стартапу, который удовлетворит его критериям. А еще угрожает перевезти экосистему ZIO на этот волшебный инструмент. Faster Scala.js development with front-end tooling and new tutorials — анонс плагина vite-plugin-scalajs, позволяющего вносить изменения на ваш UI в реальном времени. Все как любят фронтендеры ԅ(≖‿≖ԅ) Туториалы по работе со Scala.js прилагаются. The Secret VS Code Hack for Indentation Guides! — DevInsideYou рассказывает, как использовать в свою пользу настройки VS Code не так, как задумывали разработчики. Это раздел с курьезными и любопытными событиями в мире scala-общества, и мы хотим видеть его объемным и живым. Если что-то пропустили или у вас есть предложения — ждем в комментариях: Scala Tooling Summit Recap — прошел трехдневный Tooling Summit, в котором приняла участие большая часть организаций, ответственных за развитие Scala. Список поднятых тем и промежуточных итогов обсуждения прилагается. Scala Center Activity Report for 2023 Q1 — подробный отчет за первый квартал. Указаны направления работы и соответствующие им pull request-ы. Programming in Scala: Carbon Footprint — пока вы оцениваете качество кода по его скорости выполнения, мы оцениваем его по количеству выделяемого углекислого газа ヽ(ˇヘˇ)ノ Новость о слиянии со стороны VirtusLab Group и со стороны SoftwareMill — VirtusLab Group поглощает SoftwareMill (๑ᵔ⤙ᵔ๑) Twitter’s Recommendation Algorithm — Twitter поделился исходным кодом алгоритма подбора рекомендаций. В сопровождении есть статья с разбором всех этапов, которые проходит твит перед попаданием в вашу новостную ленту. sbt Plugins Community Repository — о сбое, произошедшем 7 апреля, с репозиторием repo.scala-sbt.org. Если кратко, закончился оплаченный на год период работы artifactory-инстанса в JFrog и автоматического обновления не произошло. Работа над ошибками уже ведется. уже можно послушать первые два эпизода.   До встречи через месяц! ♡＼(￣▽￣)／♡ А вот ссылки на предыдущие выпуски: первый, второй и третий. Над дайджестом работали @Melkaya_150cm, @Ivoya, @tcarina. Ваши идеи, предложения, обратную связь с удовольствием ждем в комментариях! <(￣︶￣)>  Scala Backend