Привет, Хабр! Мы — Рома, Настя и Карина — бэкенд-разработчики Тинькофф, пишем код на Scala и горим желанием его популяризировать.
Мы собираем и агрегируем новости из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем дополнительные новости и собственные комментарии. Свою мотивацию черпаем из желания развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕ )づ
Релизы
Собрали последние обновления популярных и полезных библиотек — кажется, кто-то все-таки сделал все обещанные дела после майских. Много интересных релизов с новым функционалом и оптимизацией старого, а еще с поломками обратной совместимости. Вот они:
scala-cli v1.0.0 — первый мажорный релиз! Выполнили все требования, чтобы стать официальным scala-runner.
cats-effect v3.5.0, v3.4.11 — ломающие изменения относительно Async и переработка механизма Timer. Обещают около 15—25% выигрыша в производительности!
sbt 1.9.0-RC3 — release notes от Eugene Yokota. Несколько изменений, включая текстовое меню команды sbt new, позволяющей создать темплейт проекта с различными конфигурациями.
zio-kafka v2.3.0, v2.3.1 — оптимизация производительности Consumer.
Tinkoff Scala meetup & open-source
Рубрика для митапов и релизов библиотек и фреймворков, рожденных в недрах scala-комьюнити Тинькофф:
Особенности сред исполнения различных систем эффектов в Scala. Наш коллега Никита Калинский написал статью о том, что творится под капотом у современных фреймворков для написания конкурентного кода в web-приложениях. Рассматриваются модели исполнения, лежащие в основе Cats Effect и ZIO, а также их сильные стороны и недостатки. Если не довелось ни разу заглянуть во внутрянку систем эффектов, в том числе Future, скорее всего, откроете для себя много нового. Рекомендуем к прочтению!
phobos v0.21.0 — обновили версии third-party-зависимостей и добавили поддержку Enum из Scala 3.
Статьи
Собрали свежие статьи, репозитории и исследования, которые показались нам интересными. В отдельный блок вынесли ресурсы, где авторы используют Scala 3. Enjoy:
Scala.js lenses, frontends, and server side rendering with an AWS Lambda Scala backend — подробный рассказ о том, как написать небольшую браузерную игрушку. Фронтенд на Scala.js + serverless и деплой через AWS S3 static-deploy, а бэкенд на классической Scala с развертыванием на AWS Lambda.
Kotlin Coroutines to Cats-Effect — Alexandru Nedelcu написал простую обертку котлиновских корутин в монаду IO.
Beginner’s guide to derivations in Scala — easy-level: деривация как инструмент. Что это такое и зачем это нужно.
Intermediate’s guide to derivations in Scala: Magnolia — middle-level: деривация через magnolia. Препарируем классический тайпкласс Show и реализуем его автовывод.
More than just HelloWorld.json in sttp & uPickle — взгляд на upickle с высоты птичьего полета. Рассказали про пару интересных фич: десереализацию sealed trait и перегоны моделек из snake_case в camelCase и обратно.
Accumulate errors in Scala with typelevel cats — как валидировать данные через parMapN и коллекции. Если вам кажется, что вы уже все встречали где-то статью про Validated, cats-core, валидацию данных и обработку ошибок, то вам не кажется: тык № 1, тык № 2.
One and Done: Embrace single-file JVM apps for speedy development — как изящно запустить и собрать в JAR/Docker-образ приложение без build-тулов. Рассматриваются scala-cli для Scala и jbang для Java.
One and Done part 2: Industry’s adoption of self-contained JVM applications — продолжение туториала выше. Пара секретов-советов, как удобно и просто организовать процесс работы с приложением AWS Labmda через scala-cli и jbang.
Build your vocabulary with Scala affixes — bi-, co-, di-…, или как выучить FP-азбуку.
Статьи по Scala 3
Are you sure your Scala 3 opaque types don’t instantiate? Вдохновившись докладом Magda Stożek’s на конференции Scalar, автор рассматривает под микроскопом opaque-типы и исследует, что с ними происходит на уровне байт-кода, с целью проверить, искуплены ли грехи value-классов, описанные автором ранее.
Видео и доклады
Собрали ссылки как на уже известные и популярные, так и на ноунейм-каналы и видео про Scala:
Scala 3.3 LTS - The Big Deal Release? Пара слов о некоторых фичах, которые собираются завести в Scala 3.3. А также размышления DevInsideYou о стабильных (LTS) версиях.
Introduction to Scala Development using VSCode - Dick Wall. Устали писать код в Intellij IDEA? Появилось желание освоить новые горизонты? Вот вам базовый туториал по VS Code + Metals. Напишите свой первый HelloWorld.scala не в IDEA, соберите и протестируйте его. Выйдите из зоны комфорта!
Scala.js Interoperability with TypeScript/JavaScript | Let’s talk about Scala 3. Пошаговый туториал о том, как на Scala.js написать сайт, который отрисует милую спиральную анимацию со Scala-логотипом.
Proper and Basic Property-Based Testing. Рассказ про property-based-тестирование. Если никогда о таком не слышали, то неплохое вступление.
Rock the JVM. На канале вышло два новых видео, включая туториал по CORS policy на примере http4s. Советуем глянуть, если никогда не приходилось настраивать CORS у себя в проекте, ведь на эти грабли вам еще предстоит когда-нибудь наступить.
Ziverge. Появились первые доклады с прошедшей конференции ZIO World 2023. А еще пара выпусков Zymposium о том, как разрабатывают новые фичи для ZIO-экосистемы и что из себя представляет RC1 zio-http.
Доклады со Scalar 2023. Интересные идеи, инсайты о развитии языка и милые презентации с котами и аниме:
Łukasz Michniewicz BUILDING MULTIPLAYER GAME BACKEND WITH AKKA ON AWS LAMBDA. Сказ о том, как деплоить бэкенд игры, написанный на Scala, на AWS Lambda, не имея в команде ни одного devops-разработчика, но имея огромный энтузиазм и желание превозмогать трудности и обходить все лежащие грабли. Спойлер: добрались даже до GraalVM.
Valentin Kasas PRETTY LITTLE COMPILERS. Valentin Kasas о важности концепции Contract as a First и представления либы skeuomorph, которая генерирует Scala-код по контракту и работает по принципу компилятора, переводя все в байт-код.
Jakub Kozłowski PAIN-FREE APIS WITH SMITHY4S. Jakub Kozłowski c подробным рассказом о smithy-библиотеке, позволяющей описывать спецификации API в формате собственного IDL и генерировать на их основе клиентский и серверный код, что облегчает поддержку различных протоколов взаимодействия.
Jacek Kunicki HAVE WE FOUND THE HOLY ENUM? Enumeration Scala 2 => ADT Scala 2 => Enumeratum Scala 2 => Enum Scala 3 => Java Enum (´・_・`)
Kasper Kondzielski WRITING SCALA OUTSIDE IF INTELLIJ IDEA. Если мем I use Arch btw — это про вас, пополняйте коллекцию собранных с нуля инструментов сборной солянкой neovim + treesitter + metals. Получасовая демонстрация того, на что способен этот зверь.
Gabriel Volpe FUNCTIONAL EVENT-DRIVEN ARCHITECTURE. Автор FEDA кратко о event-driven-архитектуре в функциональном мире Scala.
Daniel Beskin FIXING-UP PRODUCTION WITH PROPERTY-BASED TESTING. Daniel Beskin о преимуществах property-based-тестирования и о том, как с помощью этой методики команда провела расследование и нашла причину бага, потрясшего весь продакшен!
Kamil Kloch CATS EFFECT - DISPATCHER, SUPERVISOR, IOLOCAL. Мейнтейнеры cats-effect прорабатывают секцию с рецептами по интересным сценариям применения библиотеки. В докладе разбор трех из них.
Paweł Marks THE FUTURE OF SCALA. Представитель SIP-комитета рассказывает о том, что из себя представляет релизный процесс Scala 3 и какой путь проходит новый функционал от предложения до слияния со стабильной версией компилятора. Здесь же любопытная демонстрация интеграции новых фич компилятора с IDE.
Tomas Mikula CUSTOM STREAM OPERATORS MADE SAFE AND SIMPLE WITH LIBRETTO. Непростая для восприятия презентация библиотеки libretto, позволяющая конструировать кастомные операторы для работы с потоками данных.
Aleksandar Skrbic FUNCTIONAL PROGRAMMING AND KAFKA: DO THEY MIX? Если никогда не подключали себе Kafka в проект, это выступление будет крайне полезным: в нем объясняются общие термины и концепции работы Apache Kafka, перечисляются существующие библиотеки для интеграции на Scala, приводятся примеры реализации в коде нескольких простых пользовательских сценариев и дается несколько рекомендаций, как избежать подводных камней.
Szymon Rodziewicz MAKING SCALA BATTERIES-INCLUDED WITH SCALA TOOLKIT. Ребята из VirtusLab провели исследование о том, какие когнитивные процессы включаются во время чтения кода и как результаты этого исследования повлияли на формирование Scala Toolkit.
Michał Pawlik TYPESAFE TECHNIQUES FOR BETTER SLEEP AT NIGHT. Известно, что устойчивый к внештатным ситуациям код пишется в атмосфере паранойи и недоверия ко всем компонентам системы. Несколько советов, как сместить потенциальные баги из runtime в compile-time, чтобы спать по ночам спокойнее.
Filip Michalski SCALA FROM B TO F - BACKEND DEVELOPER ON FRONTEND. Как идеологично совместить в одном репозитории JVM-бекенд и JS-фронтенд-код на Scala. Здесь же ответы на вопросы, можно ли из JavaScript вызвать код Scala.js и обратно, а в Scala.js компоненты из React переиспользовать?
Łukasz Żuchowski SMART DATA PIPELINES FOR AI. Скрещиваем Free-монаду и пайплайны data science для обучения модели и предсказания результатов. На выходе получаем удобное в поддержке разделение логики исполнения шагов с их интерпретацией. В качестве бонуса небольшой пример интеграции такого подхода с Apache Spark.
Highlights
В этом блоке не всегда свежие, но зацепившие наш взгляд ресурсы под флагом «Очумелые ручки». Авторы творят что-то интересное, необычное, но не обязательно полезное:
twiddles — небольшая библиотека, предоставляющая приятный синтаксис для работы с протоколами и case class как с коллекциями. Реализована на Scala 2 через гетерогенные списки (привет, HList!), на Scala 3 — через generic tuples.
CEffBanX — салат из большого количества ингредиентов-библиотек. Где вы еще увидите bio из Izumi, Eff-монаду и cats-effect в одном месте? Пример со-использования различных либ и экосистем. Автор честно предупреждает, что проект скорее исследовательский, чем реально готовая шпаргалка к применению в продакшене.
SynapseML v0.11.0 — в SynapseML, фреймворк для анализа данных на основе Apache Spark, добавили много новых фич, включая поддержку интеграции с ChatGPT.
ff4s — yet another library for Scala.js frontend. Используется typelevel-стек, особенно интересно, как cats-effect уживается с однопоточной средой.
sttp-openai — sttp добавили поддержку клиента к OpenAI. Теперь можно интегрировать chatGPT прямо в приложение! (b ᵔ▽ᵔ)b
sealed-monad — горстка синтаксиса в стиле cats-core для работы с эффектами.
Tooling
Кусочек дайджеста, где мы рассказываем о появлении новых и улучшении уже существующих инструментов для разработки:
Sbt Dependency Submission — расширение для Github Action. Позволяет построить граф зависимостей вашего приложения после сборки на sbt и выгрузить его в Dependency submission API. О том, что это такое и зачем нужно, можно почитать в официальной документации.
skan and building your own tools — Chris Kipp с милым постом о том, как он написал мини-kanban для души. А как давно вы писали что-то для себя?
Комьюнити-движ
Раздел курьезных и любопытных событий в мире scala-общества, и мы хотели бы видеть его объемным и живым. Если что-то пропустили или у вас есть предложения, ждем вас в комментариях:
A Splendid Scala Journey — прощальное письмо John A De Goes народу! Главный идейный основатель zio-экосистемы уходит
в Rustна покой.В мае в Москве прошел Scala-митап Яндекс Вертикалей. 1-й доклад и 2-й доклад.
flatmappers. Вышли второй и третий выпуски ૮˶ᵔᵕᵔ˶ა
Lately 03. Если вам, как и нам, нравится читать посты о жизни из блога Chris Kipp, возрадуйтесь! Вышел третий выпуск. О последних путешествиях, участии в Scala Tooling Summit, работе над dotty diagnostic и впечатлениях от советского фильма «Иди и смотри».
В интернете, как всегда, кто-то не прав ヾ(゜-゜)ノ” Хоронят Scala, проливают слезы на тему тяжелой жизни разработчика и ведут жесточайшие холивары:
About current debates about shrinking the Scala user base and the slow adoption of Scala 3 и обсуждение на Reddit с участием Martin Odersky и Daniel Spiewak.
29 июня в Екатеринбурге пройдет IT's Tinkoff Scala Meetup.
Посмотреть план мероприятия, прочитать краткое описание докладов и зарегистрироваться можно на странице митапа.
До встречи через месяц! ♡\( ̄▽ ̄)/♡
Над дайджестом работали @Melkaya_150cm, @Ivoya, @tcarina. Ваши идеи, предложения, обратную связь с удовольствием ждем в комментариях! <( ̄︶ ̄)>