Привет, Хабр! Мы, Рома, Настя и Карина, — бэкенд-разработчики Тинькофф, пишем код на Scala и горим желанием его популяризировать. Мы собираем и агрегируем интересное из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем новости и свои комментарии. Мотивацию черпаем из желания развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕ )づ
Релизы
Собрали последние обновления популярных и полезных библиотек:
Scala 3.2.2, 3.3.0 RC2 и RC3 — в версии 3.2.2 добавили два новых флага, о них писали в новости на scala-lang.org.
Announcing Scala.js 1.13.0 — версии Scala 2.11 и Scala 2.12.1 для Scala.js больше не поддерживаются.
scala-native 0.4.10 — версия Scala 2.11 больше не поддерживается, появилась поддержка версии Scala 3.2.2.
scala-cli 0.2.0 — много изменений, среди мажорных выделим введение флага
--power
для ограниченных фич, экспорт конфигураций проекта, а еще несколько синтаксических изменений.cats-effect v3.4.x и v3.5.0 RC1 и RC2 — поменяли интерфейс async и оптимизировали работу таймеров, выигрыш составляет ~15%.
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. Ваши идеи, предложения, обратную связь с удовольствием ждем в комментариях! <( ̄︶ ̄)>
odisseylm
Ура! Все бежим срочно учим последнюю скалу, а потом упс... а большинство (не точно :-) ) сидят на 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?
Jebediah_Kerman
https://github.com/arainko/ducktape
https://github.com/softwaremill/tapir
odisseylm
За tapir спасибо!
А ducktape - версия 0.1.3, ну такое )))