Scala Digest. Выпуск 15
Привет, Хабр! Мы — Рома, Настя и Карина — бэкенд-разработчики Тинькофф, пишем код на Scala и горим желанием его популяризировать. Мы собираем и агрегируем новости из разных источников, включая Scala Times, блог Petr Zapletal и канал Scala Nishtyaki, добавляем новости и собственные комментарии. Свою мотивацию мы черпаем из желания развиваться и делиться полученными знаниями. Приветствуем любую обратную связь! (づ ◕‿◕ )づ
Релизы
Собрали последние обновления популярных и полезных библиотек за пару месяцев:
scala-cli v1.2.0 — активно пилят фичи и поддерживают новые версии Scala;
slick v3.5.0 — через полтора года после последнего стабильного релиза выпустили новую версию с поддержкой Scala 3;
tree-sitter-scala 0.21.0 — «ни фига себе Василий обошел Йокоту по контрибутам»© Карина;
Intellij IDEA 2023.3.6 и 2024.1-beta;
Статьи
Делимся свежими статьями, репозиториями и исследованиями, которые показались нам интересными. В отдельный блок вынесли ресурсы, где авторы используют Scala 3. Enjoy:
Crossing those hills и A false end. Не зря Mark Hammons в конце каждой своей статьи оставляет фразу «Happy Scala hacking!», ибо некоторые этюды из его постов заставляют удивленно хлопать глазами. Эти части — продолжение приключений о поиске красивого выражения платформозависимых типов на Scala 3. Наивные подходы с типами-объединениями и path-dependent-типами к успеху не привели.
Benchmarking Tapir: Part 2. Продолжение исследования оверхеда, который приносит tapir для различных серверных бэкендов. Завезли анализ затрачиваемых CPU и RAM и флеймграфы. По найденным потенциальным узким местам завели ряд задачек на GitHub, большая часть из которых уже закрыта. Наше уважение за такой конструктивный подход!
SSE vs WebSockets: Comparing Real-Time Communication Protocols. Хорошая статья с обзором технологий Server Side Events и Websocket. Наверное, ветераны клиент-серверных архитектур ничего нового не найдут. Но если не доводилось работать с подобными решениями, это отличный шанс поверхностно посмотреть, как все устроено.
Зачем в Scala трамплины и как их использовать. «Вошли и вышли, приключение на 20 минут». О том, что такое trampolining, как написать свой аналог Eval и зачем все это нужно. Отдельно стоит глянуть комментарий в обсуждении от Seigert: там есть некоторый ответ на вопрос «Почему все так?».
Scala 3.3.2 post-mortem analysis. Разбор postmortem из компилятора Dotty с нарушением обратной совместимости, которое произошло из-за отсутствия тестов.
Deriving the Elm Architecture. Автор Tyrian и Indigo о том, как с помощью простых логических переходов и ряда первоначальных хотелок при проектировании GUI прийти к тому, что называется Elm Architecture.
Flavors of shared state in Cats Effect. Солидненькая статья с введением в Shared States. Начинается с простых изоляций на уровне Ref, а заканчивается более продвинутым реальным примером использования с Middleware и IOLocal.
Jox 0.1: virtual-thread friendly channels for Java. Первый релиз библиотеки для go-like-каналов на виртуальных тредах для Java. Да, это Java-библиотека. API, предоставляемый в Jox, используется уже для реализации scala-библиотеки ox, про которую есть целая серия статей Adam Warski.
Имплиситы и тайпклассы в Scala. Приятное для чтения, хорошо структурированное введение в implicit и паттерн typeclass. Код на Scala 2, впрочем, как и наши с вами проекты ┐(︶▽︶)┌
The holy graal of GitHub Actions. Совсем недавно в Github Actions добавили поддержку Brand New M1 MacOS runner ??. Счастливый Eugene Yokota рассказывает, как теперь в Github Actions можно — раз-раз — и сбилдить себе Native Image при помощи GraalVM под любую поддерживаемую OS.
Improving my Distributed System with Scala 3: Consistency Guarantees & Background Tasks (Part 2). Christian Hollinger написал вторую часть серии постов о том, как запилить собственную распределенную worker-leader-систему. В статье собраны сведения о том, какие изменения Четвертый мост, Каладин и спрены пережили со времен первой части. Написано человеческим языком с рефлексией о собственных действиях, красивыми диаграммками и мемами.
А сюда мы спрятали еще немного интересных статей:
Видео и доклады
Собрали ссылки как на уже известные и популярные, так и на ноунейм-каналы и видео про Scala:
Ziverge Youtube. Подоспели записи вкусных докладов с Functional Scala 2023.
ScalaIO FR — доклады с недавней конференции. Часть докладов на французском, но среди англоязычных спикеров мелькают знакомые в scala-коммьюнити имена.
Если IDEA не работает, можно ли писать на Kotlin в Vim? В scala-мире настолько штиль, что ребята обсуждали только Rust, Kotlin и многострадальные IDE.
Let’s build Snake! Dave Smith помимо статьи по Elm Architecture успел за март выпустить еще и видео о том, как с помощью Indigo написать свою змейку с функциональным подходом и яблочками.
Free Scala FP course. «It took me around 2,5 years to produced this course including 9 months full time». Хорошие открытые курсы по введению в Scala можно пересчитать по пальцам одной руки, так что всегда приятно увидеть пополнение.
Project Leyden: Capturing Lightning in a Bottle. О проекте Leyden, ускоряющем время прогрева JVM-программ. Очень понравилась картинка.
Яндекс Вертикали организовали митап по Scala в Москве, за что им большое спасибо!
Как в Scala переложить JSON: паттерн «codec». О нашем, разрабоческом. Как перекладывать JSON и делать это со вкусом. Функторы, contrmap и автодеривация идут в комплекте.
Иерархия в PostgreSQL. Doobie vs Skunk. Обширное сравнение Doobie и Skunk в задаче по работе с иерархиями сущностей. Просьба впечатлительным отойти от экранов! Презентация получилось что надо (¬‿¬)
Инциденты с авторизацией: уменьшаем радиус поражения. Разбор и разговоры о постмортемах команды, занимающейся сервисом аутентификации для Авто.ру. Ставьте лайк, если ощутили духовное родство с ребятами и вспомнили флешбеки о своих неудачах.
А сюда мы спрятали еще интересные видео и подкаст:
Tooling
Кусочек дайджеста о появлении новых и улучшении уже существующих инструментов для разработки:
The New Terminal (Beta) Is Now in JetBrains IDEs — визуальные улучшения интерфейса терминала.
Secret — библиотека с реализацией переменных с lifetime для различных секретов во избежание утечки информации.
И еще парочка любопытных ресурсов:
Highligts
Byte Pack — совсем небольшая либа для сериализации-десериализации case class в IArray[Byte]. Буквально 150 строк пользы.
Jar Jar Abrams — плагин sbt, который облегчает жизнь библиотекописарям и позволяет скрывать транзитивные зависимости путем их переупаковки и включения как части текущей библиотеки. Сам же Eugene Yokota рекомендует использовать с осторожностью.
Еще парочка интересных хайлайтов:
Комьюнити-движ
Раздел курьезных и любопытных событий в мире scala-общества, и мы хотели бы видеть его объемным и живым.
Scala 3 Roadmap for 2024. Зацените Roadmap для Scala 3. Приятно видеть фокус на стабильность, тулинг и UX.
New SIP: Improve the Syntax of Context Bounds and Givens. Нашумевшее предложение по улучшению синтаксиса работы с typeclass от самого Martin Odersky теперь демократически оформлено в виде SIP.
Zainab Ali joins the Advisory Board of the Scala Center as Community Representative. Консультативный совет Scala Center приветствует нового
вождя Дренорапредставителя коммьюнити Zainab Ali. Помимо продвижения Scala в массы, описанного в посте, беглый поиск в YouTube выдал несколько докладов по Recursion Schemes и участие в конференциях по Haskel.The Functional Programming in Scala Course Is Out! Jetbrains добавили курс по Scala. В статье есть подробная инструкция, как получить доступ из Intellij IDEA. Крутая тема для новичков — курсы, интегрированные в среду разработки.
Beware of fake online Scala courses. Можем ли мы считать, что если появились мошенники с фейковым курсами и обещанием трудоустройства, то это свидетельство некой зрелости языка? (。•̀ᴗ-)✧
СУБД Redis переходит на проприетарную лицензию. Не только Akka может в подобные новости.
Если что-то пропустили или у вас есть предложения — ждем вас в комментариях.
До встречи через месяц! ♡\( ̄▽ ̄)/♡
Предыдущие выпуски:
Над дайджестом работали @Melkaya_150cm, @Ivoya, @tcarina. Ваши идеи, предложения, обратную связь с удовольствием ждем в комментариях! <( ̄︶ ̄)>