Привет, Хабр! Мы — Рома, Настя и Карина — бэкенд-разработчики Тинькофф, пишем код на Scala и горим желанием его популяризировать.
Мы собираем новости из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем другие интересные моменты и собственные комментарии. Свою мотивацию мы черпаем из желания развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕ )づ
Релизы
Собрали последние обновления популярных и полезных библиотек за пару месяцев:
scala-cli v1.0.0-RC1 — первый официальный претендент на замену REPL-утилиты Scala;
Статьи
В этом разделе — свежие статьи, репозитории и исследования, которые нам показались интересными. В отдельном блоке собрали ресурсы, где авторы используют 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.
Статьи по Scala 3
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!
Появились записи докладов с 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! Записей докладов пока нет, но ожидаем увидеть их к следующему выпуску дайджеста.
Highlights
В этом блоке не всегда свежие, но зацепившие наш взгляд ресурсы под флагом «очумелые ручки». Авторы творят что-то интересное, необычное, но не обязательно полезное:
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.
Tooling
Кусочек дайджеста, где мы рассказываем о появлении новых и улучшении существующих инструментов для разработки:
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 и автоматического обновления не произошло. Работа над ошибками уже ведется.
Женя, Гриша и Вадим из scalalaz запустили новый подкаст о функциональном программировании —
уже можно послушать первые два эпизода.
До встречи через месяц! ♡\( ̄▽ ̄)/♡
А вот ссылки на предыдущие выпуски: первый, второй и третий.
Над дайджестом работали @Melkaya_150cm, @Ivoya, @tcarina. Ваши идеи, предложения, обратную связь с удовольствием ждем в комментариях! <( ̄︶ ̄)>