v0.10.0
Kyo v0.10.0
This version introduces new major features and important fixes. Main highlights:
- kyo-tag: Kyo now has a new type
Tag
implementation that provides allocation-free sub-type checking. This new solution addresses safety issues with effect handling in generic scopes and its improved performance unblocks some important new features and fixes. A separate artifactkyo-tag
is produced with no dependency on any other Kyo modules, enabling the use of the newTag
in isolation by other projects. - kyo-zio: The initial implementation of the
ZIOs
effect is included in this new release. It provides a seamless integration between Kyo and ZIO via two methods:ZIOs.get
transforms a ZIO computation into a Kyo one, andZIOs.run
transforms Kyo computations into ZIO. These methods can even be used in a nested fashion, enabling the gradual adoption of Kyo within a ZIO codebase. Feedback is appreciated! - kyo-scheduler-zio: Provides a ZIO
Runtime
instance configured to replaceZExecutor
with Kyo's adaptive scheduler. Initial benchmarking shows promising performance improvements. We're looking for early adopters of this new module. It's also a standalone module without a dependency onkyo-core
. - Java Futures integration: Kyo fibers now integrate with Java futures via
Fibers.fromCompletionStage
andFibers.fromCompletionStageFiber
. Thank you @calvinlfer! - Flat Check Fixes: The
Flat
implicit is essential to guarantee the safe execution of Kyo computations. This mechanism was failing to engage properly in some scenarios; this version fixes those cases. - Exception handling regression: A performance regression was detected by one of the EasyRacer scenarios. The regression was narrowed down to a change in Kyo's exception handling, which has been reverted in this release. The work on this regression also produced a number of other smaller optimizations.
- Scheduler Top: A new command-line utility to observe the execution of Kyo's scheduler is provided as a main class under
kyo.scheduler.util.Top
. The solution works via JMX beans and is designed to be used in production environments as well. Example output:
![image](https://private-user-images.githubusercontent.com/831175/331890365-2d39b398-6108-4d8b-8404-c3574fc0caa1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MTk2ODQ1OTAsIm5iZiI6MTcxOTY4NDI5MCwicGF0aCI6Ii84MzExNzUvMzMxODkwMzY1LTJkMzliMzk4LTYxMDgtNGQ4Yi04NDA0LWMzNTc0ZmMwY2FhMS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjQwNjI5JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI0MDYyOVQxODA0NTBaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT1jNjA4YWEzY2M1MDM0M2E4YTQ2MjlkOTE2YzQ3MTNkYzQyY2ZlYzVjYTFkZDQyMDBmYzU2MDViMTI3ZjA0M2MxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCZhY3Rvcl9pZD0wJmtleV9pZD0wJnJlcG9faWQ9MCJ9.SnFBgTDxsaN43mHiYIH1z_pFyyRo9rIPqL_ijNc4Qzw)
Special thanks to @hearnadam for all the contributions!
What's Changed
- Make HasAborts public again by @johnhungerford in #326
- Update client3:core to 3.9.6 by @scala-steward in #318
- Update zio, zio-concurrent, zio-test, ... to 2.1.0-RC5 by @scala-steward in #319
- Update scala-library to 2.13.14 by @scala-steward in #320
- Update sbt-scoverage to 2.0.12 by @scala-steward in #321
- Update log4cats-core, log4cats-slf4j to 2.7.0 by @scala-steward in #322
- zio integration by @fwbrasil in #303
- FFI for Java's CompletionStage by @calvinlfer in #324
- http client benchmarks by @fwbrasil in #328
- reproduce flat check bug (#327) by @fwbrasil in #334
- scheduler: don't check the availability of a submitter worker by @fwbrasil in #333
- requests: avoid switching to ForkJoinPool by @fwbrasil in #330
- fix Fibers.Interrupted to avoid lock contention in
Throwable::getCause
by @fwbrasil in #331 - Update zio-laws-laws, zio-prelude to 1.0.0-RC25 by @scala-steward in #336
- Update sbt to 1.10.0 by @scala-steward in #338
- Update http4s-dsl, http4s-ember-client to 0.23.27 by @scala-steward in #337
- requests: race 10k requests test by @fwbrasil in #332
- Update zio, zio-concurrent, zio-test, ... to 2.1.0 by @scala-steward in #344
- Update izumi-reflect to 2.3.9 by @scala-steward in #343
- benchs: detect runtime leaks by @fwbrasil in #345
- benchs: registry mechanism by @fwbrasil in #346
- logs: include scope information + convenience methods to log values by @fwbrasil in #341
- flat check fixes by @fwbrasil in #349
- Update zio, zio-concurrent, zio-test, ... to 2.1.1 by @scala-steward in #351
- Update opentelemetry-api, ... to 1.38.0 by @scala-steward in #352
- better support for other effects in Resources by @fwbrasil in #355
- (almost) allocationless tags ⚡ by @fwbrasil in #348
- move effect command from member type to type parameter by @fwbrasil in #356
- move Tag to separate module by @fwbrasil in #357
- Update zio-laws-laws, zio-prelude to 1.0.0-RC26 by @scala-steward in #358
- Tag optimizations by @fwbrasil in #359
- direct macro refactorings by @fwbrasil in #360
- workaround to declare effects as opaque by @fwbrasil in #361
- automatically derive Flat from Tag by @fwbrasil in #366
- kyo-sttp: avoid translating Interrupted exceptions by @fwbrasil in #365
- http client race bench by @fwbrasil in #364
- scheduler: top utility by @fwbrasil in #363
- cache stream handlers by @fwbrasil in #367
- scala-js: add java-time dependency by @hearnadam in #362
- scheduler top improvements by @fwbrasil in #369
- avoid
core.eval
for error handling by @fwbrasil in #373 - avoid
lazy val
to accessKyoSttpMonad
by @fwbrasil in #371 - Reproduce #368: Stream transform test by @hearnadam in #374
- kyo-sttp: ensure backpressure by @fwbrasil in #375
- Update zio-logging, zio-logging-slf4j2 to 2.2.4 by @scala-steward in #370
- kyo-sttp: backend meter by @fwbrasil in #376
- scheduler: ensure workers stop when inactivated by @fwbrasil in #372
- kyo-benchs: migrate TestHttpServer to Vert.x by @fwbrasil in #377
- http race contention bench: use a meter to avoid overloading the http server by @fwbrasil in #381
- kyo-tag: support type unions and intersections by @fwbrasil in #378
- Update zio-http to 3.0.0-RC7 by @scala-steward in #382
- scheduler: minor optimizations by @fwbrasil in #384
- scala 3.4.2 by @fwbrasil in #385
- zios: readme by @fwbrasil in #380
- kyo-scheduler-zio by @fwbrasil in #386
- Enable choosing a
Position
with/without owning scope by @hearnadam in #387 - Update os-lib to 0.10.1 by @scala-steward in #388
New Contributors
- @calvinlfer made their first contribution in #324
Full Changelog: v0.9.3...v0.10.0