Привет, Хабр! Мы, Рома, Настя и Карина, — бэкенд-разработчики Тинькофф, пишем код на Scala и горим желанием его популяризировать. Мы собираем и агрегируем интересное из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем новости и свои комментарии. Мотивацию черпаем из желания развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕ )づ

Релизы

Собрали последние обновления популярных и полезных библиотек:

Tinkoff Scala open-source

Рубрика для релизов библиотек и фреймворков, рожденных в недрах scala-комьюнити Тинькофф:

  • phobos v0.20.0 — исправили ошибку с выбросом исключения при энкодинге xml-невалидных символов. Обновление ломает обратную совместимость.

  • mockingbird 3.5.1 — пофиксили no_body режим запросов.

Статьи

В этом разделе собираем свежие статьи, репозитории и исследования, которые показались нам интересными. В отдельный блок вынесли ресурсы, где авторы используют Scala 3. Enjoy:

  • Case study: The digital transformation of Santa’s logistical nightmare. Part 1-4 — набор юного разработчика экосистемы typelevel: три небольших, но полезных туториала для первоначального знакомства c CE, FS2-Kafka и http4s. 

  • PubSub with Scala — туториал по работе с новым fs2 rest/grpc-клиентом для Google Pub/Sub. Есть небольшая сводка про устройство Pub/Sub, пример конфигурации и кода.

  • How to use a Rust lib inside the Scala app. «Вы связываете Rust и Scala через JNI из исследовательского интереса, мы это делаем, чтобы не архитектурить решение на уровне сервисов. Мы разные». 

  • Alerting and how 50 lines of code changed how we do it — об алертах на основе ElastAlert и их более тонкой конфигурации через код.

Статьи по Scala 3

  • Prototype Loom-based concurrency API for Scala — Adam Warski с прототипом API, который интегрирует Project Loom из JDK 20 в Scala. Основа — интерфейсы ScopedValue и StructuredTaskScope из jdk.incubator.concurrent, вокруг которых плетется изящное кружево scala-структур. Автор подсветил проблему с выбросом исключений, которая перекочевала из Java. Так что проект носит экспериментальный характер, но, возможно, перед нами будущий соперник ZIO и Cats Effect. 

  • Why Learn Contextual Abstractions in Scala 3 First — попытка объяснить основы и сравнить механизм имплиситов в Scala 2 и Scala 3. Пошаговое переписывание простейшего кода в сторону усложнения через дебри абстракций и typeclass. Материал обширный, и видны старания, но уровень кода в примерах не соответствует целевой аудитории статьи: человек, понимающий паттерн typeclass, скорее всего, уже знаком с концепцией имплиситов.

Видео и доклады

Собрали ссылки как на уже известные и популярные, так и на ноунейм-каналы и видео про Scala:

  • The Best Scala Libraries I Use in Every Project — список библиотек от DevInsideYou с коротким пояснением применимости. Можно посмотреть в обеденный перерыв и найти что-то для себя. Например, такие библиотеки, как derevo, iron, chimney.

  • Your allocation rate could be hurting vertical scalabilityматерый разработчик Peter Lawrey с докладом о том, что в JVM выделение памяти под объекты может занимать до 80 раз больше времени, чем чистка этих объектов GC. Приводятся бенчмарки, и есть сопроводительная статья на chronicle.software.

  • ScalaWAW — ребята из ScalaWAW развивают движуху с докладами о Scala и не только. Из последнего: выложили записи ScalaWAW #26, #27. 

  • Rock the JVM — три сюжета об архитектурных решениях: тонкая настройка продюсеров/консьюмеров Apache Kafka, hands-on-туториал по Apache Flink SQL и размышления об интеграции Akka Streams с Akka Actors.

  • Ziverge — выработка пятилетки по контенту за пару месяцев. Добавили с десяток интересных докладов с Functional Scala 2022, также не прекращает биться пульс live-coding-сессий с Zymposium.

Highlights

Блок ресурсов под флагом «очумелые ручки». Авторы творят что-то интересное, необычное, но не обязательно полезное:

  • Storch — неожиданно появился второй за короткое время scala-аналог PyTorch. Под капотом он основан на LibTorch, использует мощности графического процессора и технологии CUDA для быстрого обучения моделей нейронных сетей. В отличие от scala-torch из прошлого выпуска спроектирован сразу для Scala 3. 

  • Iron v2.0.0 — библиотека, позволяющая накладывать compile-time и runtime ограничения на типы данных (в Scala 3 конкурент refined). В новом мажорном релизе завезли user-friendly api, убрали лишний оверхед в runtime, сделали интерфейсы более безопасными и расширяемыми.

  • Turbolift: Algebraic Effects for Scala 3 — реализованный на Scala 3 духовный наследник Eff монады из Haskell. Монада позволяет работать со всеми эффектами — one monad to rule them all ψ`ー´)ノ. В проекте есть бенчмарки с другими системами эффектов и имплементациями Eff, например kyo. 

  • Announcing Binding.scala 12.2, html.scala 3.0, LatestEvent.scala and ReactToBindingHtml.scala — небольшой подарок для любителей реактивной веб-разработки на Scala 3.

  • otel4s — библиотека для телеметрии в экосистеме cats-effect. 7 февраля состоялся официальный релиз.

  • kinesis4cats — библиотека с набором модулей для интеграции котов с kinesis. 

  • ZIO Elasticsearch — zio-нативный клиент для Elasticsearch. Не является частью экосистемы zio. 

  • ZIO OpenAI — zio-либа, дает API для доступа к новым моделям искусственного интеллекта от компании OpenAI.

  • OpenAI Scala Client — еще один клиент к OpenAI. Из плюсов — статус официальной коммьюнити-библиотеки и приличное описание методов клиента в виде scaladoc, но есть нюанс зависимость от play. 

  • Meta DSL open source using ScalaJS and onsen UI — DSL и его интерпретатор, позволяющий не-разработчикам создавать мобильные приложения с помощью Onsen UI. Под капотом Scala.js.

  • tyrian и indigo — UI библиотека / игровой движок на Scala.js для Scala 3. План на выходные — браузерные танчики на Scala 3! ᕕ( ᐛ )ᕗ

Tooling

Рассказываем о появлении новых и улучшении уже существующих инструментов для разработки:

  • Performance tips for IntelliJ Scala Plugin. Ребята из подразделения scala-plugin Jetbrains устали получать репорты о медленной работе IDE и написали советы по оптимизации работы с Intellije Idea. Рассказывают немного о «внутрянке» — какие операции нагружают CPU, а какие RAM.

  • Introduction to Bazel for Scala developers — о природе Bazel для самых маленьких. Есть пара примеров минимальной сборки для scala-приложения. 

  • cross build anything with Bazel — фишечки по Bazel от Eugene Yokota для самых стареньких (senior+). О том, как можно реализовать cross building в Bazel через local_repository. 

  • Railway Scala support — поддержка Scala в nixpacks. Сборка OCI-совместимых контейнеров из кода приложения с помощью nix packages и docker. 

Комьюнити-движ

Раздел курьезных и любопытных событий в мире scala-общества. Если вам есть что добавить, ждем в комментариях:

  • Scala center roadmap for 2023 and beyond — результаты 2022 года и список целей на 2023. В планах улучшение пользовательского опыта с IDE, разблокировка стандартной библиотеки, а также продолжение работы с комьюнити.

  • Gradle Inc. Acquires Triplequote to Expand Developer Productivity Solutions Footprint. Gradle Inc. купила Triplequote вместе с параллельным компилятором Scala 2 - Hydra, попутно трудоустроив на позицию technical advisory Мартина Odersky. Обещают много приятных плюшек ко второй половине 2023.

  • 10 years for Scala.js — небольшая ретроспектива зарождения Scala.js как проекта.

  • Add new front-end phase for unused entities and add support for unused imports. «Хочешь сделать человеку хорошо? Сделай ему плохо, а потом верни как было» М. Одерски. В Scala 3 вернули семейство флагов Wunused.

  • Announcing Ultraviolet: WebGL shaders in Scala 3 — создатель Indigo, игрового джвижка для Scala.js с новым анонсом /ᐠ。ꞈ。ᐟ\

  • Lately — о нашем, о девичьем разработческом. Chris Kipp, «энтузиаст тулинга», рефлексирует о жизни и работе, попутно рассказывая о контрибьютинге в bloop и neovim, а также разработке своего сайта. 

До встречи через месяц! ♡\( ̄▽ ̄)/♡

Над дайджестом работали @Melkaya_150cm, @Ivoya, @tcarina. Ваши идеи, предложения, обратную связь с удовольствием ждем в комментариях! <( ̄︶ ̄)>

Комментарии (3)


  1. odisseylm
    00.00.0000 00:00

    пишем код на Scala и горим желанием его популяризировать
    Scala 3.2.2 ...

    Ура! Все бежим срочно учим последнюю скалу, а потом упс... а большинство (не точно :-) ) сидят на scala 2.12 (со Спарком)

    chimney, play framework - scala 2.13
    Но всё же
    zio, cats-effects, fs2 - scala 3

    Сорян, описал свои чувства )) Вместо chimney в своем тестовом проекте прикрутил джавовый MapStruct :-) (изучив немного Quotes и написав свой MapStruct AccessorNamingStrategy).
    На этом пока и остановился, так как понял что нет смысла делать ООП на скале, т.к. она не для этого, хотя зачем-то слабые механизмы ООП там оставили и я на это повелся :-( (лучше бы совсем убрали, если это не феншуй)

    Господа, а что же все таки использовать по фен-шую хотя бы как простой HTTP REST server для scala 3?


    1. Jebediah_Kerman
      00.00.0000 00:00

      chimney - scala 2.13

      https://github.com/arainko/ducktape

      Господа, а что же все таки использовать по фен-шую хотя бы как простой HTTP REST server для scala 3?

      https://github.com/softwaremill/tapir


      1. odisseylm
        00.00.0000 00:00

        За tapir спасибо!

        А ducktape - версия 0.1.3, ну такое )))