Skip to content

RPP v2 - Implementation Status #324

Description

@AlexInLog

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

Metadata

Metadata

Assignees

Labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions