TGViewer
Big Flatmappa Big Flatmappa @bigflatmappa · 324 subscribers
Post #11 1.38K
Вот и закончилась полугодовая эпопея миграции одной библиотеки на Cats Effect 3, а вдогонку — и на Scala 3. Вчера отправил в Sonatype больше 50 артефактов (160, если считать кросс-билды) и ещё несколько образов на Dockerhub. Спешу поделиться ощущениями, пока они ещё свежи.

Миграция Typelevel экосистемы на CE3 до сих пор буксует. Многие базовые библиотеки типичного CRUD-стэка либо только-только разродились стабильными релизами (http4s), либо находятся на этапе RC и даже майлстоунов (doobie, tapir), либо вообще ещё не имеют полной поддержки (tofu).

Просто напомню, что с момента стабильного релиза CE3 прошло больше 4 месяцев, а RC были доступны задолго до этого.

Я наблюдал за миграцией многих библиотек, и основные проблемы, которые я заметил, были связаны с использованием плохих абстракций (привет ConcurrentEffect) и смешным игнорированием тотала Reader-паттерна. Для многих стало сюрпризом, что теперь нельзя взять и запустить F[A] просто так, без какого-то контекста и рантайма. А когда это всё же удаётся, не всегда получается сделать это правильно (конструктор Dispatcher'а создает его как ресурс, теряющий локальные модификации контекста и отменяющий все запущенные файберы по выходу из use-скоупа). С другой стороны, в официальном около-CE-стэке никогда и не было всех необходимых тайпклассов для полноценной работы с контекстными эффектами.

Очень жаль, что оригинальный (откровенно плохой) дизайн первых Cats Effect сыграл злую шутку с tagless final и сделал для его похорон гораздо больше, чем ZIO. Остается лишь процитировать классика — он оказался чертовски прав. Ещё печальнее, что даже после трёхлетней работы над новым дизайном там остались изъяны, которые теперь уже никогда не будут устранены в угоду обратной совместимости. Неприятно было наблюдать в dev-каналах гиттера и дискорда Typelevel, как неплохие идеи зарубили аргументами о том, что юзеры болезненно воспринимают любые изменения, требующие что-то переписать. К слову, сами авторы надеются, что CE4 никогда не появится (т.е. всё отлито в граните и кардинально уже не изменится). С таким подходом поезд ZIO будет уже не догнать.

Тяжелее всего миграция далась библиотекам, которые имеют кучу интеграций и обязаны их поддерживать на своей стороне. Например, в trace4cats количество блокеров, не включая транзитивных, в начале пути превышало десяток. Просто дождаться от каждого из них хотя бы майлстоуна заняло 3 месяца. Ещё столько же времени ушло на их стабилизацию. Это стало основной мотивацией для распиливания монорепы аж на 20 репозиториев, чтобы иметь возможность релизить их независимо.

Другой пример — tapir. Они всё ещё сидят в монорепе и несколько месяцев не могли сделать первый M-релиз из-за одного единственного блокера — catbird. Им раньше занимался Трэвис, но потом он самоустранился и отдал миграцию в руки Typelevel-сообщества. Бесхозный статус сильно замедлил переход на CE3 и сделал эту библиотеку блокером для tapir'а и (транзитивно) для нас.

Но, несмотря на все сложности, я очень доволен результатом в trace4cats: отрефакторили многие вещи, исправили кучу багов, а фиксы бэкпортировали в CE2-совместимую версию, воплотили новые идеи, реализовать которые под СЕ2 было бы достаточно сложно, а в СЕ3 оказалось возможно и очень интересно.

В общем, теперь всё готово, можно брать и тащить в прод!
  • 👍 1
More from @bigflatmappa
  1. Oct 25, 2021А вот и план по введению forward compatibility. Флаг --scala-target появится уже в 3.1.1!
  2. Oct 21, 2021В Scala 2 никогда не было обратной совместимости между мажорным версиями, а до 2.10 — и ме…
  3. Oct 18, 2021Scala Steward — одна из моих самых любимых утилит в Scala-экосистеме и лучший помощник люб…
  4. Aug 7, 2021Да, в заключение добавлю про Scala 3. Ишшу на добавление кросс-билда trace4cats я завёл ещ…
  5. Jul 13, 2021Хех, покопался в истории чата @tofu_ru — оказывается, мы ещё 2 апреля обсуждали с @odomont…
  6. Jul 12, 2021Для решения проблем из предыдущего поста я пробовал разные подходы в течение нескольких ле…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →