-
Notifications
You must be signed in to change notification settings - Fork 535
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Release for Scala Native 0.5.x #4076
Comments
The discussion about 0.5 is covered in governance discussions The latest update was published in dev channel on discord: @djspiewak: We're going to bury the hatchet on IOLocal propagation and PollingSystem. The latter will land mostly as-is, the former will get a check: Poller => Boolean function to fast-path cancelation and otherwise land as-is. TLDR - CE will have to wait for a bit longer, and when it comes, it will likely be multi-threaded |
What's the latest on this? Is the plan still to release 3.6 with polling system changes and 3.7 with SN0.5 + (hopefully) multithreading? Personally, I'd rather get SN0.5 without multithreading than wait months more :) edit: I see this was confirmed on discord 4 days ago |
Yes. The polling system work already requires non-trivial changes downstream. I don't want to pile the SN 0.5 changes onto that. I'm sorry that we didn't get the polling system work out (years) earlier, it's been mostly ready.
We plan to make some breaking changes to support multi-threading. We really have only one chance to do that, when we bump to SN 0.5. |
Fair enough. Anything I can do to help speed things up? |
Nevermind Cats Effect, Cats itself is still limping on SN 0.5, and it doesn't even do any multi-threading. Figuring out whatever is wrong there and fixing it will almost certainly help with migrating the rest of the ecosystem. We're bound to hit that bug again somewhere else in the stack. |
Oh, another way to help would be to get "replace Specs2 with MUnit" work over the line (started in #3787). I like Specs2 a lot, but it's clearly not the mainstream answer anymore, and particularly with stuff like this I would rather bound our set of variables. Note that this can (and should) be done entirely independently of any SN work. |
FWIW, I've recently run into not-so-pleasant UPD. That issue was investigated, and redis4cats was patched profunktor/redis4cats#955. All credit to @kubukoz. Ultimately, this doesn't appear to be a Cats-Effect issue itself. |
Wait, did cats-core break bincompat? Or did it get resolved downward (to 2.11.0)? The solution to the problem you're describing should be to always resolve forward to the latest version (i.e. your project should depend on cats-core 2.12.0). If that doesn't work then it suggests that we broke compatibility and that's very much a Cats problem that needs to be fixed. |
@djspiewak I'm getting the cats-core 2.9.0, as per https://github.com/typelevel/cats-effect/blob/v3.5.7/build.sbt#L300
|
I genuinely don't understand why cats-core is being evicted backwards like that. Question for @eed3si9n maybe. The solution is pretty simple: explicitly specify the cats-core dependency in your own build.sbt (I recommend just depending on the absolute latest). In general, the Typelevel ecosystem guarantees:
Backward compatibility means that code compiled with a version which is older than the one on the classpath will link and run with proper semantics (except for a few weird and unfortunate exceptions involving bugs) on a more recent version. Forward compatibility means that code compiled with a version which is newer than the one on the classpath will link and run with proper semantics (again, except for bugs mostly) on an older version. So backward means code can be compiled against Cats 2.9.0 and run with Cats 2.12.0, while forward means that code compiled against Cats 2.9.3 can be run with Cats 2.9.1. In your case, Coursier is making the assumption that Cats Core supports forward compatibility across minor versions (it doesn't) and thus it is safe to evict to the older version, despite the fact that Redis4Cats was compiled against the newer version. This just doesn't work, but the inverse would have worked fine. So I think it's less a matter of ecosystem coordination and more a matter of somehow making sure Coursier doesn't do weird things. And, in the event that it does do weird things (as it did here), you can always override it to fix the problem. The guarantees sum up such that it is effectively always safe to depend on the absolute latest version of everything unless there's something in your own code which causes incompatibility. |
Hmmm, it's likely not Coursier, as disabling it changed nothing (
I was also mistaken in assuming that Redis4Cats explicitly defines a dependency on Cats-Core — it does not. This has left me a bit confused. However, adding an explicit dependency on Cats-Core 2.11.0 or 2.12.0 resolves the issue. |
Spooky. Edit: not spooky at all, actually - |
Wow, what luck to catch the Redis4Cats contributor (or maintainer?)! But let’s discuss this in the appropriate place. |
good/bad news, I haven't contributed in years 😂 |
the issue reported by @danicheg turned out to have been a problem with redis4cats itself (using an |
@kubukoz yeah but, at the end of the story, having such binary compatibility issues on the end-user side is still weird since the major Cats-Core version was consistent across all the dependencies. The original issue can be reproduced even if the Cats-Core v2.9.0 is explicitly set in the dependencies. Also, the Cats-Core v2.10.0 release notes request that libraries be recompiled and republished to use 'new allocation-free syntax' but not to fix binary compatibility issues. So, haven't we overlooked something crucial? On the other hand, my concern about having the Cats-Core up-to-date among the central ecosystem building blocks is still valid. |
I don't think so.
Yes, I wrote that. It's a recommendation, not a request. The problem is that the allocation was happening inside of library/user code, not inside of Cats. This is why we can't remove the allocation on their behalf, they must recompile. However, Cats v2.10.0 is still binary-compatible with all previous versions through 1.0, and it still supports the old, allocation-based syntax too, for libraries that didn't recompile.
I want to help, but let's discuss this anywhere besides right here :) can you open an issue somewhere else and tag me? Thanks! |
Now cats has been updated, I'm wondering if there are still blockers left?
The text was updated successfully, but these errors were encountered: