Skip to content
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

4.1.0 release preparations #607

Closed
akarnokd opened this issue Jun 18, 2018 · 4 comments
Closed

4.1.0 release preparations #607

akarnokd opened this issue Jun 18, 2018 · 4 comments

Comments

@akarnokd
Copy link
Collaborator

akarnokd commented Jun 18, 2018

NuGet: 4.1.0

>PM Install-Package System.Reactive -Version 4.1.0

Version 4.1.0 is an enhancement version over 4.0.0 by keeping the public API and extending it additively as well as having significant internal changes for better performance via less allocation, less indirection and less locking on the existing components. Note that the codebase now always uses the latest C# language features.

API enhancements

  • Pull 486: Add the RetryWhen operator.
  • Pull 497: Add the IConnectableObservable.AutoConnect() operator.
  • Pull 536: Add the RepeatWhen operator.
  • Pull 133: Add a RefCount overload supporting a grace period before disconnecting.
  • Pull 567: Add the Append and Prepend operators.
  • Pull 612: Add the TakeUntil(Func<T, bool>) operator.

Performance enhancements

  • Pull 504: Improve the logic of AsyncLock.
  • Pull 505: Improve and fix CompositeDisposable.
  • Pull 491: Optimize Concat(IObservable<IObservable<T>>).
  • Pull 499: Make TailRecursiveSink lock-free and have less allocations.
  • Pull 506: Improve AutoDetachObserver memory footprint.
  • Pull 508: Replace ObserveOn(IScheduler) internals with a lock-free algorithm.
  • Pull 510: Improve AsyncSubject by using lock-free methods.
  • Pull 511: Improve Subject observer tracking.
  • Pull 512: Improve Amb with lock-free algorithm.
  • Pull 513: Make Never<TResult> singleton.
  • Pull 535: SerialDisposable to use lock free methods.
  • Pull 544: Make plain Empty<T>() a singleton.
  • Pull 545: Dedicated Amb implementation for arrays and enumerables.
  • Pull 550: Rework TakeUntil with lock-free methods.
  • Pull 500: Avoid some closure allocations and enable delegate caching in the System.Reactive.Concurrency namespace.
  • Pull 549: Deanonymize operators.
  • Pull 556: Use the helper methods for IDisposable-fields, avoid repeating code patterns.
  • Pull 551: Rework SkipUntil with lock-free methods.
  • Pull 546: Reimplement Timeout(TimeSpan) with lock-free methods.
  • Pull 566: BasicProducer/Producer: Save the allocation of a closure and allow delegate caching in case scheduling on CurrentThreadScheduler is required.
  • Pull 558: Use Schedule calls with state.
  • Pull 568: Use Disposable helper methods were applicable.
  • Pull 574: Make RefCountDisposable lock-free.
  • Pull 575: Rework subscription in Producer such that all Sinks set the upstream disposable by themselves.
  • Pull 561: Inline disposability into ScheduledItem.
  • Pull 578: Inline StableCompositeDisposable.Create into the Sinks.
  • Pull 580: Inline Disposable.Create.
  • Pull 583: Use the stateful overload of AsyncLock in some places to save allocation of closures and allow delegate caching.
  • Pull 586: Save more allocations of closures and enable more delegate caching.
  • Pull 592: Inline AnonymousObserver use at places.
  • Pull 591: Save even more allocations.
  • Pull 590: Improve blocking First & Last operators.
  • Pull 593: Inline SerialDisposable usages.
  • Pull 599: CurrentThreadScheduler fast path Schedule.
  • Pull : Add dedicated class based implementations for Append and Prepend.
  • Pull 602: An allocation in BasicProducer.SubscribeRaw can be saved in most cases.
  • Pull 603: Align safe observers.
  • Pull 604: Rework SelectMany.
  • Pull 610: Have Timeout(Absolute|Selector) use lock-free methods.
  • Pull 611: Have TakeUntil(time) use lock-free methods.
  • Pull 617: Make Scheduler.Recursive more uniform and allocate less.
  • Pull 619: Save an allocation during inner observer creation in Switch.
  • Pull 620: Improve TailRecursiveSink with less allocations.
  • Pull 632: Save an allocation in ThreadPoolScheduler.PeriodicTimer.
  • Pull 635: Save allocations in Zip.
  • Pull 637: Less allocations in CombineLatest.
  • Pull 638: Review Throttle, save some allocations.
  • Pull 639: Review Merge, save some allocations.
  • Pull 640: Save some more allocations in SelectMany.
  • Pull 641: Save allocations of SingleAssignmentDisposables in Join.
  • Pull 642: Less allocations in SubscribeOnCtxObservable.
  • Pull 643: Save some allocations in ToTaskObserver.
  • Pull 644: Save some allocations in ToObservable.
  • Pull 647: Review JoinObserver.
  • Pull 648: Review GroupJoin.
  • Pull 650: Use UserWorkItem in ThreadPoolScheduler.Windows and save some allocations.
  • Pull 651: Use stateful AnonymousDisposable where appropriate.
  • Pull 653: Review Window operator.
  • Pull 654: Review Buffer operator.
  • Pull 655: Review Delay operator.
  • Pull 656: Review GroupByUntil operator.
  • Pull 657: Save the allocation of a SingleAssignmentDisposable in GetEnumerator.
  • Pull 658: Save some closure allocations and allow delegate caching in Generate.
  • Pull 664: Save allocations of closures and allow delegate caching in Windows code that schedules async work.
  • Pull 665: Improve Buffer via dedicated exact/skip implementations.
  • Pull 674: Improve Generate() internals.
  • Pull 676 : Improve PushPullAdapter+Sink dispose management.
  • Pull 684: Improve the performance of Range().
  • Pull 688: Improve the performance of Repeat().
  • Pull 697: Improve the structure and recursive scheduling of TakeLast().
  • Pull 700: Improve Timer() scheduler handling.
  • Pull 705: Improve the performance of ToObservable().
  • Pull 722: Save some allocations and allow delegate caching in ScheduleAsync.
  • Pull 744: Review QueryLanguage.Creation.
  • Pull 758: Save one static per-generic-class field.
  • Pull 760: Review and improve TaskObservableExtensions.
  • Pull 762: Improve Return/Throw/Append/Prepend overhead with ImmediateScheduler.
  • Pull 763: Reduce N-ary StableCompositeDisposable.Create overhead via dedicated implementation.
  • Pull 764 : Append/Prepend some more optimizations.
  • Pull 767: Use StableCompositeDisposable.Create for two disposables.
  • Pull 770: Inline CancellationDisposable in SelectMany.
  • Pull 774: Improve RefCount() internals.
  • Pull 776: Save allocations in ContinueWith.
  • Pull 777: Save the allocation of a SingleAssignmentDisposable in CombineLatest.
  • Pull 788: Use Array.Empty<T>() to save allocation of an empty array where appropriate.
  • Pull 793: Remove tail recursion from the PriorityQueue
  • Pull 795: Hide List<E> with .Skip(0)
  • Pull 797: Avoid allocation of a SingleAssignmentDisposable in LocalScheduler.WorkItem.

Bugfixes

  • Pull 569: Fix PriorityQueue non-first element removal.
  • Pull 579: Fix timed delay hangs with dotCover and the DefaultScheduler.
  • Pull 528: Fix PeriodicTimerSystemClockMonitor concurrency & failure behavior.
  • Pull 560: Fix Delay hanging due to wrong disposable-chain management.
  • Pull 421: EventLoopScheduler set _nextItem to null on Tick to avoid leaks.
  • Pull 514: Fix ActivePlan crashing with self-joins.
  • Pull 529: Have the ControlScheduler do more eager disposed checks.
  • Pull 507: Fix PriorityQueue to not share a item ordering helper index.
  • Pull 505: Fix CompositeDisposable concurrency.
  • Pull 671: ElementAt don't create exception after finding the item.
  • Pull 672: FirstAsync don't create exception after finding the item.
  • Pull 701: ToArray() avoid retention of the list beyond the conversion.
  • Pull 702: ToDictionary() to clear the dictionary reference upon termination.
  • Pull 703: ToList() release reference to the list upon termination.
  • Pull 704: ToLookup() release lookup upon failure/termination.
  • Pull 766: Avoid leaking task continuations.
  • Pull 761: Fix Latest.
  • Pull 765: Fix for TaskObservableExtensions.Subscribe.

Documentation changes

  • Pull 480: Update RxJS reference.
  • Pull 538: Fix CS1711: The type parameter comes from the outer class, where it is already documented. No need to document it here again.
  • Pull 543: Fix XML document spelling errors.
  • Pull 519: Updated links in README.md.
  • Pull 589: Add missing state XML comment to the new AsyncLock methods.

Other notable (internal) changes

  • Pull 527: Refactor Linq operator unit tests into separate files/classes.
  • Pull 523: Fix CombineLatest and Zip code generator templates. (#)
  • Pull 515: Reference System.ValueTuple for further reduction of allocations, use C# 7.1 to use value tuples without the need for explicit tuple component naming.
  • Pull 554: Enhance AsyncLock to support passing state.
  • Pull 493: Strengthen the concept of the Sink class.
  • Pull 482: Add public API approval tests for Rx.NET.
  • Pull 548: Avoid repeating code patterns in the System.Reactive.Disposables-namespace.
  • Pull 518: Add a new extension method for IScheduler that allows to schedule an Action<TState> and pass a corresponding state object.
  • Pull 555: Resolve the source of confusion that is DefaultDisposable.
  • Pull 564: Rename and reorder the signature of the extension for schedule that takes an Action<TState> and a state.
  • Pull 537: Update the HomoIcon tool to reflect new repository structure and manual code changes.
  • Pull 563: Add internal ExceptionHelper & HalfSerializer lock-free tools.
  • Pull 572: Use HalfSerializer extensions.
  • Pull 588: Check for license header and add them if missing.
  • Pull 595: Add reflection-based Argument-Null validation test.
  • Pull 601: Use LastIndexOf instead of IndexOf in LicenseHeaderTest.
  • Pull 597: Capture the concept of a "safe observer".
  • Pull 603: Align safe observers.
  • Pull 605: Remove unused methods.
  • Pull 621: Use new features of IdentitySink in SkipUntil.
  • Pull 623: Simplify Switch, use the features of Sink.
  • Pull 624: Use Sink features in TakeLast.
  • Pull 631: Enable reuse of UserWorkItem class currently nested in DefaultScheduler.
  • Pull 633: Simplify thread pool scheduler timed schedule.
  • Pull 634: Add an AnonymousDisposable that can be given a state object. Add a generic Disposable.Create method.
  • Pull 646: Use IdentitySink.Run where appropriate.
  • Pull 649: Use var where appropriate.
  • Pull 652: Remove redundant qualifiers.
  • Pull 663: Push duplicated code in Delay into a base class.
  • Pull 668: Count() don't init to default zero.
  • Pull 670: DistinctUntilChanged() don't init to default.
  • Pull 673: ForEach() don't init to default values.
  • Pull 677: LongCount() don't init to default zero.
  • Pull 678: Max() don't init to default value.
  • Pull 679: Improve MaxBy cleanup/initialization.
  • Pull 680: Min() don't initialize to default values.
  • Pull 681: Improve MinBy() cleanup/initialization.
  • Pull 683: OfType() use pattern variable instead of double cast.
  • Pull 685: Make non-recursive schedulings explicit.
  • Pull 686: RefCount() don't init to the default values.
  • Pull 687: Add timed non recursive scheduling extensions.
  • Pull 689 : Scan() don't init to default values.
  • Pull 690: Indexed Select() don't init to default value.
  • Pull 691: SequenceEqual() initialization cleanup.
  • Pull 692: SingleAsync() don't init to default values.
  • Pull 693: SingleOrDefaultAsync() don't init to default.
  • Pull 694: SkipUntil() remove unused helper class.
  • Pull 695: SkipWhile() don't init to default value.
  • Pull 696: Sum() don't init to default values.
  • Pull 698: TakeLastBuffer() use base.Run, explicit args.
  • Pull 699: TakeWhile() don't init to default value.
  • Pull 706: Where() don't init to default value.
  • Pull 707: Window() don't init to default value.
  • Pull 708: Zip() no need to keep reference to the parent beyond Run.
  • Pull 710: Add non-recursive extensions for IScheduler allowing to return an IDisposable.
  • Pull 712: Simplify default(X) usages.
  • Pull 716: Fix AppendPrepend disposing the main source on ILongRunningSchedulers.
  • Pull 717: Cleanup unnecessary type arguments/usings.
  • Pull 723: Fix the constructor visibility of some abstract classes.
  • Pull 724: Fix the name of a local variable.
  • Pull 725: Remove redundant field initializers.
  • Pull 726: Clean unnecessary arguments, fix field namings, use patterns, inline out vars.
  • Pull 727: System.Reactive fix field names, type args, usings, operator infrastructure.
  • Pull 728: Mark fields as readonly as suggested by ReSharper.
  • Pull 729: Remove verbatim prefixes as suggested by ReSharper.
  • Pull 731: Enable switching Rx versions for benchmarks.
  • Pull 732: License header check to ignore all \obj\ directories.
  • Pull 736: Remove code redundancies as suggested by ReSharper.
  • Pull 738: Fix long sequence ObserveOn StackOverflowException upon Dispose().
  • Pull 739: Cleanup more redundancies.
  • Pull 740: Remove redundancies in symbol declarations.
  • Pull 742: Upgrade the ObserveOn operator to IdentitySink, fix queue usage.
  • Pull 754: Fix those ugly all-caps names.
  • Pull 755: Private setter for auto properties that are only assigned in the constructor can be omitted.
  • Pull 757: More ReSharper review.
  • Pull 771: Sink.Dispose should only call Dispose(true) once.
@quinmars
Copy link
Contributor

Is there a timeline when version 4.1.0 will be released?

@akarnokd
Copy link
Collaborator Author

Saved the previous version into a Gist just in case.

@clairernovotny
Copy link
Member

Just released a new preview. Will aim for a stable release in the next few weeks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants