Scala Digest. Выпуск 6
Привет, Хабр! Мы — Рома, Настя и Карина — бэкенд-разработчики Тинькофф, пишем код на Scala и горим желанием его популяризировать.
Мы собираем и агрегируем новости из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем другие интересные новости и собственные комментарии. Свою мотивацию мы черпаем из желания развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕)づ
Релизы
Собрали последние обновления популярных и полезных библиотек:
Статьи
В этом разделе свежие статьи, репозитории и исследования, которые нам показались интересными. В отдельный блок вынесли ресурсы, где авторы используют Scala 3. Enjoy:
com.lihaoyi Scala: Executable Pseudocode that«s Easy, Boring, and Fast — обзор экосистемы com.lihaoyi от самого автора. Фундаментальная статья, призванная показать, какая идеология стоит за всем набором инструментов. Fun fact: coursier и scala-cli тоже собираются на mill.
Java Volatiles — несколько заметок о volatile-переменных в Java от Alexandru Nedelcu. Здесь же реализация single-producer-single-consumer очереди сообщений.
If you can understand why this sample is correct, you understand volatile variables
Two types of futures — емкая и короткая статья от Adam Warski. Развеет туман неопределенности в понимании концепций Future, а именно promise-future и thread-future и их имплементаций в разных языках и библиотеках.
Oh, no! Timeout… — «О нет! Очередная статья про таймауты и сетевые проблемы!» —, но не тут-то было! Внезапно про асинхронщину, 202 Accepted и inbox-паттерн.
How to serialize case class to Json in Scala 3 & Scala 2 using Circe — Adam Rybicki продолжает серию про сериализацию объектов в JSON в Scala 2 и Scala 3. На этот раз в фокусе внимания золотая классика — circe. Затронуты нетривиальные вопросы, среди них работа с опциональными значениями в модели.
Getting started with ZIO, part 1 — знакомимся с ZIO на примере построения потокового сервиса со всеми сопутствующими best-practice. Эта статья только первая из трех обещанных. Написано понятным языком, можем рекомендовать для первого введения!
Why we used Quill in RealWorld project? — знакомство с миром FRM на примере Quill.
5 Scala Libraries That Will Make Your Life Easier — пять библиотек, облегчающих жизнь разработчика, которые крайне полезно знать и приятно использовать в своем проекте.
Iron updates: turning opaque types into value objects — Anton Kovalevsky поведал о том, как похорошеет в грядущем релизе iron — библиотека для валидации значений в runtime/compile-time.
Mastering ScalaTest — Exploring Tagging, Retry, Runner and More — advanced-фичи scalatest. Всей редакцией почерпнули для себя что-то новое.
Large Language Models: How to use open source alternatives to ChatGPT for Scala documentation — после всех yet another json lib вопрос «как перевести case class в JSON» стали задавать нейросетям. Сравнили несколько моделей, угадайте: кто победил? ┐(»~`)┌ ChatGPT-4 оказался настолько лучше всех, что в итоге его использовали для дообучения остальных.
Reducing our Scala CI workflow runtime in half without changing any code — несколько способов оптимизировать время исполнения CI-пайплайнов в Github Actions.
Publish a Scala Library using Github Actions in No Time — пять подробных шагов, как через Github Actions опубликовать артефакты своей библиотеки.
Five Books For Expert Scala Programmers — хоть и написано, что книги для экспертов, прочитать рекомендуется каждому уважающему себя Scala-разработчику.
Akka: Enabling the Cloud to Edge Continuum — lightbend держит курс на нативную интеграцию с cloud-платформами.
Faster and Smoother Rolling Updates for Akka Clusters in Kubernetes — выпустили фикс для Akka Clusters после того, как Kubernetes с версии v1.22 изменил политику по умолчанию при релизе.
Active Active — небольшой разбор кода sample-проекта, в котором применяются последние достижения lightbend в области Replicated Event Sourcing.
Adaptive Stream Parallelization for Fun and Throughput — в Akka Streams появился новый метод на стримах: mapAsyncPartitioned, это улучшенная версия ранее известной (нет) mapAsync. Метод способен выжать максимум из параллелизма. Бенчмарки и код-сниппеты прилагаются.
The Easy Button for Durable State Queries — lightbend продолжают улучшать поддержку Akka Persistence.
Статьи по Scala 3
Building a functional, effectful Distributed System from scratch in Scala 3, just to avoid Leetcode (Part 1) — мощная, а точнее, МОЩНАЯ статья по созданию распределенного сервиса подсчета слов в файле. Расписано с этапов формирования требований и построения диаграмм до этапов выбора технического стека и имплементации интерфейсов. Очень приятно читается: повествование не техническое и сухое, а наполненное рефлексией и субъективным мнением относительно мира программной разработки. Отдельно плюс в карму за отсылки к «Архиву Буресвета» Брендона Сандерсона ٩꒰。•◡•。꒱۶
Scala 3 Significant Indentation Woes: Sample — Alexandru Nedelcu ругает Scala 3.3.0. Отступы вместо скобок становятся нормой, и не всем это нравится.
Scala 3 Enums — Alexandru Nedelcu хвалит Scala 3.3.0. Работай с enum-ами правильно! |ʘ‿ʘ)╯
Видео и доклады
Собрали ссылки как на уже известные и популярные, так и на ноунейм-каналы и видео про Scala:
Ziverge — пополняется ряд записей докладов с ZIO World 2023. А еще новые интересности из Zymposium: ZIO HTTP 1.0, фича для подмены сервисов в R-параметре ZIO в рантайме и многое другое.
Learning Smithy/Smithy4s — YouTube series — серия туториалов по smithy4s: от сетапа проекта и разработки smithy-спецификации до подключения сервера и клиента. Напомним, что smithy4s — библиотека, позволяющая описывать спецификации API в формате собственного IDL и генерировать на их основе клиентский и серверный код.
SBT will never be the same!!! — DevInsideYou про sbt 2.0, а конкретнее про новое кэширование. Если коротко: возможно, новый подход позволит избавиться от sbt-shell вообще! Возможно, больше не будет необходимости во вкладочке Intellij IDEA «sbt shell» и это приведет к отмиранию части sbt-плагинов и более нативной интеграции с unix-like командами.
Rock the JVM — Шок! 42 способа авторизации, пошаговый туториал. Делайте это каждый вечер и… Реализация различных видов HTTP-аутентификации и авторизации в http4s.
Highlights
В этом блоке не всегда свежие, но зацепившие наш взгляд ресурсы под флагом «очумелые ручки». Авторы творят что-то интересное, необычное, но необязательно полезное:
matrix-practice — можно ли параметризировать вектор его размером и производить индексацию без исключений, Option или Either? Да! Scala 3, compiletime и tuple-конструкторы в небольшом фан-проекте (ᵔ◡ᵔ)
Magnum: A new Scala 3 Database Client — новоиспеченный клиент к базам данных на Scala 3.3.0. Заявлена поддержка большинства баз данных, для которых есть JDBC-драйвера, loom-ready API и многие другие фичи.
Like in Zoolander (the movie), Magnum represents a «new look» for Database access in Scala
Fx Calculator: A calculator for Android written in Scala 3.3 (and JavaFX) — ребята попробовали свои силы в Scala 3 + JavaFX в рамках создания калькулятора на Android.
zio-maelstrom — если никогда не слышали про набор упражнений в разработке распределенных систем Gossip Glomers, то самое время перейти по ссылочке. Но при чем здесь zio? А при том, что платформа для тестирования решений построена поверх Maelstrom, чьим клиентом и является zio-maestrom.
scala-sbt-codespaces-template — шаблон для Github Codespaces. Из коробки содержит Scala 3, sbt, Metals, Scala Syntax.
new lib: fs2-kafka-mock — небольшая либа для мокирования consumer и producer из fs2-kafka.
Tooling
Кусочек дайджеста, где мы рассказываем о появлении новых и улучшении уже существующих инструментов для разработки:
bleep — brand new build tool. Из обещаний — молниеносный старт работы благодаря тому, что bleep скомпилирован в native image. Основывается на bloop-файлах и coursier. В качестве модели описания build-ов выбран yaml в противовес build as a DSL в sbt и build as a Scala code в mill. Для поддержки кастомных задач вроде Task в sbt используется специальная секция scripts, в которой указываются классы с run-методом. Есть интересная фича автоматического портирования build-файлов из sbt и удобная миграция sbt-плагинов в Scala код в виде специальной структуры, который может быть запущен через scripts-секцию bleep.
The Scala Toolkit — первый релиз Scala Toolkit! В набор вошли upickle и os-lib от com-lihaoyi, sttp и munit. Серия мини-туториалов по использованию инструментов прилагается.
tree-sitter-scala 0.20.0 — небольшая сводка новостей о tree-sitter-scala. Из интересного: добавили smoke-тестирование и рассказали пару историй о том, как нужно учиться на своих ошибках.
tree-sitter-scala 0.20.1 — наш коллега, Василий Морковкин, стал новым мейнтенером. Поздравляем!
Writing a GitHub Action with Scala.js — история о том, как ребята хотели написать кастомные Githib Actions, но столкнулись с дилеммой: использовать можно было либо Docker Container Actions, либо Javascript Action. Однако хитрый разработческий ум вспомнил о существовании Scala.js и о том, насколько легкой становится разработка скриптов с помощью scala-cli.
Комьюнити-движ
Раздел курьезных и любопытных событий в мире scala-общества, и мы хотели бы видеть его объемным и живым. Если что-то пропустили или у вас есть предложения — ждем вас в комментариях:
A New GraalVM Release and New Free License! — JVM-комьюнити делает успехи в поисках своего Грааля! В бесплатную лицензию завезли G1GC, profile-based компиляцию и прочие крутые фичи \(⁀▽⁀)/
SCALAR Conference 2023 summary — краткая выжимка каждого доклада с конференции. Быть может, даже дотягивает до уровня наших комментариев в последних двух выпусках (。•̀ᴗ-)✧
Two More Old Cents on Scala 3 Migration — сколько нужно программистов, чтобы переехать на Scala 3. Довольно личный рассказ про то, к чему может привести R&D-направленность языка и его развитие без оглядки на требования индустрии. Интересный пример сотрудничества с VirtusLab: амбассадоры, включая Wojciech Mazur, оценили миграцию и сделали вспомогательный пулл-реквест.
The Scala 3 compatibility story — VirtusLab успокаивает трепещущее комьюнити тем, что пока не собираются делать Scala 4 и ломать совместимость в Scala 3.
flatmappers — вышел четвертый выпуск, разбитый на две части. Enjoy! ૮˶ᵔᵕᵔ˶ა
Is language «instability» really a reason for the lack of Scala adoption in the industry? — тред с комментариями о том, почему Scala так и не захватила весь ИТ-бизнес.
JetBrains Developer Ecosystem Survey 2023 — заходите и заполняйте опрос об опыте использования продуктов. Ребята умеют заинтриговать с первого вопроса.
До встречи через месяц! ♡\( ̄▽ ̄)/♡
Над дайджестом работали @Melkaya_150cm, @tcarina, @Ivoya. Ваши идеи, предложения, обратную связь с удовольствием ждем в комментариях! <( ̄︶ ̄)>