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

RPP v2 - Implementation Status #324

Open
victimsnino opened this issue Mar 28, 2023 · 0 comments
Open

RPP v2 - Implementation Status #324

victimsnino opened this issue Mar 28, 2023 · 0 comments
Assignees
Labels
enhancement New feature or request feature

Comments

@victimsnino
Copy link
Owner

victimsnino commented Mar 28, 2023

Current implementation is really good and fast BUT it does a lot of unnecessary heap allocations AND a lot of unnecessary moves/copies while it is not needed. Need to change architecture to eliminate unnecessary copies/moves

  1. use rvalue while possible
  2. subscription -> disposable. Not observer owns subscription and tracks ITS correctness, but observable provides disposable and tracks observable's correctness
  3. observer is not copyable at all
  4. Make RPP v2 as ZERO OVERHEAD library

Implementation status

Fundamentals

  • Observables
    • Specific Observable (was in v1)
    • Dynamic Observable (was in v1)
    • Blocking Observable (was in v1)
    • Connectable Observable (was in v1)
  • Observers
    • Specific Observer (was in v1)
    • Dynamic Observer (was in v1)
  • Disposables
    • Base Disposable
    • Callback Disposable (was in v1)
    • Composite Disposable (was in v1)
    • RefCount Disposable
  • Schedulers
    • Immediate (was in v1)
    • New Thread (was in v1)
    • CurrentThread (was in v1)
    • RunLoop (was in v1)
    • EventLoop

Creating Observables

  • Create (was in v1)
  • Just (was in v1)
    • + memory_model (was in v1)
  • empty/never/error
  • from
    • iterable (was in v1)
    • future
    • callable (was in v1)
    • async
  • defer
  • interval
  • range
  • repeat
  • timer
  • concat

Operators

Transforming

  • map (was in v1)
  • group_by (was in v1)
  • flat_map (was in v1)
  • scan
    • scan with initial seed (was in v1)
    • scan without seed
  • buffer
    • count (was in v1)
      • skip
    • time
    • time_or_count
  • window
    • count (was in v1)
      • skip
    • time
    • time_or_count
    • toggle

Filtering

  • filter (was in v1)
  • take (was in v1)
  • debounce (was in v1)
  • distinct
    • distinct
    • distinct_until_changed (was in v1)
  • element_at
  • first (was in v1)
  • ignore_elements
  • last (was in v1)
  • sample (was in v1)
    • sample (observable)
    • sample_with_time
  • skip (was in v1)
  • skip_last
  • take_last (was in v1)
  • throttle

Conditional

  • take_while (was in v1)
  • all
  • amb
  • contains
  • default_if_empty
  • sequence_equal
  • skip_until
  • skip_while
  • take_until (was in v1)

Combining

  • merge
    • observable of observables (was in v1)
    • merge with (was in v1)
    • merge delay error
  • switch
    • switch_map (was in v1)
    • switch_on_next (was in v1)
    • switch_if_empty
  • with_latest_from (was in v1)
  • start_with (was in v1)
  • combine_latest (was in v1)
  • zip

Aggregate

  • average
  • concat (was in v1)
  • count
  • max
  • min
  • reduce (was in v1)
  • sum

Backpressure

  • backpressure ???

Error handling

  • on_error_resume (was in v1)
  • retry
    • retry_when

Utility

  • observe_on (was in v1)
  • repeat (was in v1)
    • scheduling (by default trampoline ?)
  • subscribe_on (was in v1)
  • delay (was in v1)
  • do/tap (was in v1)
    • tap with observer
    • tap with callbacks
    • do_on_next
    • do_on_error
    • do_on_completed
  • timeout (was in v1)
    • timeout
    • timeout with fallback observable
  • finally

Connectable

  • publish (was in v1)
  • multicast (was in v1)
  • connect (was in v1)
  • ref_count (was in v1)
  • replay

Subjects

  • publish_subject (was in v1)
  • behavior_subject (was in v1)
  • serialized_subject
  • replay_subject
  • async_subject

QT:

  • from_event (was in v1)
  • main_thread_scheduler (was in v1)

ASIO:

  • strand scheduler

GRPC

  • reactive callback-based reactor's
@victimsnino victimsnino self-assigned this Mar 28, 2023
@victimsnino victimsnino added enhancement New feature or request feature labels Mar 28, 2023
@victimsnino victimsnino changed the title Make RPP v2 RPP v2 Apr 29, 2023
@victimsnino victimsnino changed the title RPP v2 RPP v2 - Implementation Status Apr 29, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request feature
Projects
None yet
Development

When branches are created from issues, their pull requests are automatically linked.

1 participant