This is the fifty-fourth release in the Cats Effect 3.x lineage. It is fully binary compatible with every 3.x release and expected to be fully source-compatible with the eventual 3.6.x lineage. However, we did break binary-compatibility with the previous candidate v3.6.0-RC1.
This release candidate is expected to be very stable, and our main rationale for releasing it as such rather than as a full 3.6.0 is to allow the ecosystem (and adventurous end users!) to try it out and find unforeseen problems prior to full release. If fixing those problems require breaking compatibility prior to 3.6.0 (while maintaining bincompat with 3.x) we will do so, but otherwise you should expect this release to roughly represent the exact API surface area we will ultimately release.
Warning
Please note that Cats Effect 3.6.x is targeting Scala Native 0.4.x, which means it does not at present support native multithreading. This was a very intentional choice meant to give us an opportunity to break binary compatibility only on Scala Native if necessary when upgrading to Scala Native 0.5 and as we discover the impacts of the integrated runtime on the downstream ecosystem. It also reduces risk since Native multithreading in the runtime is a significant lift and we want to make sure we isolate that change from the already significant changes in 3.6.0. This functionality is already under development and we plan to release it in 3.7.0 as soon as possible.
What's Changed
Enhancements
- Add
UUIDGen
inductive materializers for monad transformers by @bio-aeon in #4220 - Add helpers to
Selector
poller by @armanbilge in #4226 - Setup
UncaughtExceptionHandler
forWorkerThread
by @armanbilge in #4233 - Add message to requirements by @Jasper-M in #4259
- Poll on the 0th tick, check external queue on 32nd by @armanbilge in #4270
Bug Fixes
- Report non-fatal
Runnable
failures onMainThread
EC by @armanbilge in #4223 - Always report timers/events when worker unparked by @armanbilge in #4227
- Introduce
PollResult
,PollingSystem#processReadyEvents
by @armanbilge in #4230 - Shutdown the runtime only when unforked by @armanbilge in #4234
- Restore
ArrayBlockingQueue
for worker-to-blocking state transfer by @armanbilge in #4255 - Refactor
WorkerThread
runloop; avoid pathological starvation of pollers by @armanbilge in #4247 - Transfer tick state when replacing a blocked thread by @armanbilge in #4264
WorkStealingPoolMetrics
->WorkStealingThreadPoolMetrics
by @armanbilge in #4271- Run finalizers in
IO#unsafeRunTimed
by @armanbilge in #4279 - Create
UnsafeNonFatal
for use in the fiber runtime by @kapunga in #4263
Documentation
- Fix small typo in docs by @serragnoli in #4257
- Document
Poll
by @arturaz in #4277
Behind the Scenes
- flake.lock: Update by @typelevel-steward in #4219
- Update sbt-typelevel to 0.7.5 in series/3.x by @typelevel-steward in #4218
- Delete .envrc by @armanbilge in #4224
- New year who dis by @djspiewak in #4231
- update
.scalafmt.conf
. enforce new wildcard syntax by @xuwei-k in #4236 - Switch to GHA Linux ARM runners by @armanbilge in #4253
- fix warnings in scalafix rule by @xuwei-k in #4244
New Contributors
- @bio-aeon made their first contribution in #4220
- @serragnoli made their first contribution in #4257
Full Changelog: v3.6.0-RC1...v3.6.0-RC2