Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    Alexandru Nedelcu
    @alexandru
    In other words, there are really few instances where a stack is needed for dealing with Concat.
    Alexandru Nedelcu
    @alexandru

    As an update, I just went through all the implementations in internals, and we've got these remaining to be fixed:

    1. IterantFromReactivePublisher
    2. IterantToReactivePublisher
    3. IterantInterleave
    4. IterantZipMap

    Also, we've got these implementations that I haven't refactored to use Visitor yet:

    1. IterantIntersperse
    2. IterantZipWithIndex
    So we are getting close.
    Alexandru Nedelcu
    @alexandru
    Another update — I might change the encoding of Scope, exploring possibilities.
    Alexandru Nedelcu
    @alexandru

    I just discovered that my usage of ArrayStack in all folds is incorrect and that we should use the "monadic stack", as @oleg-py suggested.

    This is because in the case of a scope, it pushes the finalizer at the end, which is incorrect.

    Alexandru Nedelcu
    @alexandru
    M'kay, I finally figured it out — tough problem. Usage of stacks is fine, the problem was in Scope's runFold.
    Btw, I changed Scope to Resource and modified it to have the exact signature of Cats-Effect's Bracket.
    It's not awful and the dependence on Ref was bothering me.
    Made fixes across the board. Had to fix attempt and onErrorHandleWith as well, as we were no treating errors in acquire / release well.
    We're really close to finalizing this.
    Alexandru Nedelcu
    @alexandru
    I fixed the implementation for Iterant.zip, zipMap, parZip, parZipMap
    Piotr Gawryś
    @Avasil
    Awesome! Unfortunately I'm trying to focus on exams now so I can't contribute anything this/next week :(
    Alexandru Nedelcu
    @alexandru
    @Avasil no worries dude, good luck on your exams
    Oleg Pyzhcov
    @oleg-py
    @alexandru what is left to do currently?
    Alexandru Nedelcu
    @alexandru
    @oleg-py interleave, toReactivePublisher, fromReactivePublisher, cleanups (e.g. making the classes of the ADT private, updating ScalaDoc)
    I'm also tired of working on it, so I'm also considering dropping whatever is unfinished 🙂
    Alexandru Nedelcu
    @alexandru
    I fixed interleave. The old implementation was based on zipMap and so it was wrong, because it should not have the same behavior in regards to waiting for pairs.
    Alexandru Nedelcu
    @alexandru
    I almost fixed toReactivePublisher as well, but it has a bug and will have to postpone for tonight.
    Alexandru Nedelcu
    @alexandru

    As a status update I'm rebuilding toReactivePublisher from scratch, because the previous approach is all wrong in the new encoding. I might have to do it for fromReactivePublisher as well, but haven't looked at that yet.

    That said I intend to release 3.0.0-RC2 this weekend, so whatever doesn't make it will get dropped.

    I hope to fix them both though, but it's challenging.
    Piotr Gawryś
    @Avasil
    If you manage to fix them then we have everything?
    Alexandru Nedelcu
    @alexandru
    Yes
    Well, we still have changes to do for the unreleased Cats-Effect 1.0.0 — the behavior of Task's bracket has to change and this involves its internals unfortunately, but that has to be coordinated with Cats-Effect anyway and it's for the final 1.0.0 / Monix 3.0.0 respectively.
    So for 3.0.0-RC2 we have everything.
    Piotr Gawryś
    @Avasil
    How is it going? I'm almost free and I'd love to get back on track. :)
    Alexandru Nedelcu
    @alexandru
    Iterant is ready, unfortunately we have a problem in Cats-Effect with the laws of Bracket.
    typelevel/cats-effect#277
    Those 3 laws fail for Iterant and it's not Iterant's fault.
    Piotr Gawryś
    @Avasil
    I guess I'll wait with taking a look at finishing Observable.bracket until it settles down a bit. :P
    Let me know if there is something that I could help with regardless if it's Monix or Cats-Effect
    Alexandru Nedelcu
    @alexandru

    Also realized that Resource is broken for streams 😼

    typelevel/cats-effect#278

    Oleg Pyzhcov
    @oleg-py
    Meanwhile, I tried making start auto-fork, and there are problems with laws stated in terms of runSyncUnsafe with auto-cancelable run-loops enabled, and I cannot quite get down to the bottom of it :disappointed:
    Alexandru Nedelcu
    @alexandru

    @oleg-py the laws via runSyncUnsafe are very problematic indeed. You have to remember that they block the underlying thread and for example tests testing for non-termination (e.g. Async.never) will not work.

    Those laws are disabled via the passed in Parameters, however you never know if we haven't missed anything in Cats-Effect.

    Thanks for working on it. You have to @deprecate fork as well.
    Oleg Pyzhcov
    @oleg-py
    I did
    I'm a bit burned out for coding activities now, so I opened a WIP PR for now and will be taking a break probably until the end of this week
    Alexandru Nedelcu
    @alexandru
    :)
    OK
    No problem, I've been burned out too, it's good to take breaks.
    I'm actually thinking of dropping those tests completely. Too hard to maintain.
    Alexandru Nedelcu
    @alexandru
    @oleg-py unfortunately you discovered a problem with Cats-Effect's laws dude :(
    typelevel/cats-effect#281
    TL;DR — F.start(F.bracket(acquire)(use)(release)).flatMap(f => f.cancel *> f.join) ... in this case you have no guarantee that release gets evaluated and the laws assume it.
    And in Monix we now have an auto-cancelable task pushed in Arbitrary[Task]. Along with an auto-forking start, made the behavior visible. And non-deterministic since it's basically a race condition.
    Alexandru Nedelcu
    @alexandru
    I am working on fixing it btw.
    The behavior of fromEffect has been a mistake.
    I'm splitting it in fromAsync and fromConcurrent.
    Have to do it in Observable as well.
    Piotr Gawryś
    @Avasil
    Do we have any changes planned for asyncBoundary, executeOn, executeAsync etc.? executeOn has a lot of information in ScalaDoc but it could definitely use description in monix.io documentation so I'd like to do that
    Well, actually there is one but probably outdated :D