Skip to content

try fix caching#735

Merged
AlexInLog merged 8 commits into
v2from
try_fix_cache
Feb 15, 2026
Merged

try fix caching#735
AlexInLog merged 8 commits into
v2from
try_fix_cache

Conversation

@AlexInLog

@AlexInLog AlexInLog commented Feb 13, 2026

Copy link
Copy Markdown
Owner

Summary by CodeRabbit

  • Chores
    • CI workflows now use a configurable CONAN_HOME cache location for more consistent caching across environments.
    • Conan cache references consolidated to use the new environment-driven path.
    • Build dependency updated: gRPC bumped to a newer compatible version.
    • Protobuf is referenced in metadata but remains inactive (commented out).
    • A previously enforced libmount requirement has been disabled.

@coderabbitai

coderabbitai Bot commented Feb 13, 2026

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds CONAN_HOME env var to two GitHub Actions workflows and replaces hard-coded Conan cache paths with ${{ env.CONAN_HOME }}; updates conanfile.py to bump grpc from 1.65.01.67.1, leaves protobuf commented (now protobuf/6.32.1), and comments out the libmount/2.39 override.

Changes

Cohort / File(s) Summary
Workflows — Conan cache path
.github/workflows/analyzers.yml, .github/workflows/ci v2.yml
Add CONAN_HOME env var and replace hard-coded Conan cache paths (~/.conan2, /Users/runner/.conan2/) with ${{ env.CONAN_HOME }} in cache steps.
Conan recipe — dependencies
conanfile.py
Under with_grpc: bump grpc from 1.65.01.67.1; protobuf line updated to a commented protobuf/6.32.1; libmount/2.39 override moved to commented (no longer enforced).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 I hopped through YAML and recipe rows,
CONAN_HOME planted where the cache now grows,
grpc leapt up a bit, protobuf hides out,
libmount paused its march without a shout,
I nibbled a carrot and tinkered with prose 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 2
❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'try fix caching' is vague and generic, using non-descriptive language that lacks specificity about what caching issue is being addressed or how it's being fixed. Use a more descriptive title such as 'Replace hard-coded Conan cache paths with CONAN_HOME environment variable' to clearly convey the specific caching fix being implemented.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Merge Conflict Detection ✅ Passed ✅ No merge conflicts detected when merging into v2

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch try_fix_cache

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In @.github/workflows/analyzers.yml:
- Around line 10-12: Replace the Conan 1.x env var CONAN_USER_HOME with the
Conan 2 correct variable CONAN_HOME (i.e., set CONAN_HOME: "${{ github.workspace
}}/release/") so the conan cache restore/save steps target the actual Conan 2
cache, and remove the unused CONAN_USER_HOME_SHORT variable (or rename and wire
it up if intended) to avoid dead config; ensure any workflow steps that
referenced CONAN_USER_HOME now reference CONAN_HOME (and update any cache key
names if they relied on the old variable).

In @.github/workflows/ci v2.yml:
- Around line 19-21: The workflow is setting Conan 1.x variables CONAN_USER_HOME
and CONAN_USER_HOME_SHORT which are ignored by Conan 2; replace those env keys
with CONAN_HOME and remove or stop using CONAN_USER_HOME_SHORT, and update every
reference that reads env.CONAN_USER_HOME (e.g., in the cache steps that
reference env.CONAN_USER_HOME) to use env.CONAN_HOME instead so the cache/config
directory aligns with Conan 2; ensure the env block defines CONAN_HOME: "${{
github.workspace }}/release/" (or equivalent) and update any cache restore/save
keys that previously used CONAN_USER_HOME to use CONAN_HOME.

Comment thread .github/workflows/analyzers.yml Outdated
Comment thread .github/workflows/ci v2.yml Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@conanfile.py`:
- Around line 47-49: The protobuf requirement conflicts with grpc/1.72.0's
transitive protobuf; update the self.requires entry(s) in conanfile.py to
resolve the conflict by either removing the explicit
self.requires("protobuf/6.32.1") line to allow gRPC's transitive
protobuf/5.27.0, changing it to self.requires("protobuf/5.27.0") to match gRPC,
or keep protobuf/6.32.1 but add override=True on that self.requires call to
force the newer protobuf (accepting potential ABI risk); modify the
self.requires("protobuf/6.32.1") statement accordingly.

Comment thread conanfile.py Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@conanfile.py`:
- Around line 46-49: The commented-out dependency lines for protobuf/6.32.1 and
libmount/2.39 in the block gated by self.options.with_grpc should either be
removed or documented: delete the two commented requires lines if you want to
keep the codebase clean (since grpc/1.72.0 from ConanCenter will pull protobuf
transitively and with_libsystemd=False disables libsystemd/libmount needs), or
replace them with a short explanatory comment (e.g., "protobuf is pulled
transitively by grpc; libmount override unnecessary because
with_libsystemd=False") so future maintainers understand why they are omitted;
update the comment near the grpc/1.72.0 requires line accordingly.

Comment thread conanfile.py Outdated
Comment on lines +46 to +49
if self.options.with_grpc:
self.requires("grpc/1.65.0", transitive_libs=True, transitive_headers=True)
# self.requires("protobuf/5.26.1")
self.requires("libmount/2.39", override=True)
self.requires("grpc/1.72.0", transitive_libs=True, transitive_headers=True)
# self.requires("protobuf/6.32.1")
# self.requires("libmount/2.39", override=True)

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, let's see the full context of the conanfile.py, especially around lines 27 and 46-49
fd conanfile.py -x wc -l {}

Repository: victimsnino/ReactivePlusPlus

Length of output: 89


🏁 Script executed:

# Get the relevant sections of conanfile.py
cat -n conanfile.py | sed -n '20,55p'

Repository: victimsnino/ReactivePlusPlus

Length of output: 1586


🌐 Web query:

grpc 1.72.0 conan center index available

💡 Result:

Yes—grpc/1.72.0 is available on ConanCenter (Conan 2). The ConanCenter recipe page lists grpc/1.72.0 and shows install usage via:

[requires]
grpc/1.72.0

It also indicates the recipe revision date as 2025-10-30 and that binaries are available for Linux/Windows/macOS (including Apple Silicon) and Windows ARM64. [1]


Remove or document the commented-out dependency lines.

grpc/1.72.0 is available on ConanCenter. Since with_libsystemd=False disables libsystemd support in grpc (line 27), the libmount/2.39 override is no longer needed and can be safely removed. The commented-out protobuf/6.32.1 line aligns with letting grpc pull protobuf transitively.

Either remove these commented lines entirely or add a brief comment explaining why they're kept (e.g., "/* Protobuf pulled by grpc transitively */") to avoid confusion for future maintainers.

🤖 Prompt for AI Agents
In `@conanfile.py` around lines 46 - 49, The commented-out dependency lines for
protobuf/6.32.1 and libmount/2.39 in the block gated by self.options.with_grpc
should either be removed or documented: delete the two commented requires lines
if you want to keep the codebase clean (since grpc/1.72.0 from ConanCenter will
pull protobuf transitively and with_libsystemd=False disables
libsystemd/libmount needs), or replace them with a short explanatory comment
(e.g., "protobuf is pulled transitively by grpc; libmount override unnecessary
because with_libsystemd=False") so future maintainers understand why they are
omitted; update the comment near the grpc/1.72.0 requires line accordingly.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@conanfile.py`:
- Line 47: Update the grpc dependency declaration in conanfile.py: replace the
non-existent version string used in self.requires("grpc/1.70.0",
transitive_libs=True, transitive_headers=True) with a valid ConanCenter version
(e.g., "grpc/1.72.0" or "grpc/1.71.0"); ensure the new version is referenced
exactly in the same self.requires call so the package resolver finds the
available release.

Comment thread conanfile.py Outdated
@github-actions

Copy link
Copy Markdown
Contributor

BENCHMARK RESULTS (AUTOGENERATED)

ci-ubuntu-gcc

General

name rxcpp rpp prev rpp ratio rpp no optimization
Subscribe empty callbacks to empty observable 303.13 ns 1.87 ns 1.87 ns 1.00 1.87 ns
Subscribe empty callbacks to empty observable via pipe operator 307.78 ns 1.87 ns 1.88 ns 0.99 1.86 ns

Sources

name rxcpp rpp prev rpp ratio rpp no optimization
from array of 1 - create + subscribe + immediate 691.29 ns 0.31 ns 0.31 ns 1.00 0.31 ns
from array of 1 - create + subscribe + current_thread 1058.76 ns 3.73 ns 3.73 ns 1.00 3.73 ns
concat_as_source of just(1 immediate) create + subscribe 2318.65 ns 114.57 ns 115.24 ns 0.99 114.61 ns
defer from array of 1 - defer + create + subscribe + immediate 759.27 ns 0.31 ns 0.31 ns 1.00 0.31 ns
interval - interval + take(3) + subscribe + immediate 2153.35 ns 59.59 ns 59.58 ns 1.00 59.63 ns
interval - interval + take(3) + subscribe + current_thread 3035.60 ns 32.63 ns 32.66 ns 1.00 34.47 ns
from array of 1 - create + as_blocking + subscribe + new_thread 33467.30 ns 33056.17 ns 30281.92 ns 1.09 32524.79 ns
from array of 1000 - create + as_blocking + subscribe + new_thread 44748.70 ns 55185.05 ns 54929.43 ns 1.00 54894.50 ns
concat_as_source of just(1 immediate) and just(1,2 immediate)create + subscribe 3571.52 ns 140.90 ns 137.07 ns 1.03 153.70 ns

Filtering Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+take(1)+subscribe 1108.65 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just+filter(true)+subscribe 843.01 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just(1,2)+skip(1)+subscribe 1008.46 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just(1,1,2)+distinct_until_changed()+subscribe 895.58 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just(1,2)+first()+subscribe 1275.63 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just(1,2)+last()+subscribe 931.44 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just+take_last(1)+subscribe 1152.80 ns 18.64 ns 18.64 ns 1.00 19.57 ns
immediate_just(1,2,3)+element_at(1)+subscribe 859.25 ns 0.31 ns 0.31 ns 1.00 0.31 ns

Schedulers

name rxcpp rpp prev rpp ratio rpp no optimization
immediate scheduler create worker + schedule 284.51 ns 0.47 ns 1.55 ns 0.30 1.55 ns
current_thread scheduler create worker + schedule 372.81 ns 4.35 ns 4.35 ns 1.00 4.66 ns
current_thread scheduler create worker + schedule + recursive schedule 834.46 ns 61.28 ns 60.99 ns 1.00 61.57 ns

Transforming Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+map(v*2)+subscribe 866.00 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just+scan(10, std::plus)+subscribe 906.37 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just+flat_map(immediate_just(v*2))+subscribe 2361.17 ns 124.94 ns 124.16 ns 1.01 210.36 ns
immediate_just+buffer(2)+subscribe 1576.63 ns 13.98 ns 13.99 ns 1.00 17.41 ns
immediate_just+window(2)+subscribe + subscsribe inner 2418.15 ns 1262.66 ns 1292.53 ns 0.98 1408.19 ns

Conditional Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+take_while(false)+subscribe 825.17 ns - - 0.00 -
immediate_just+take_while(true)+subscribe 837.17 ns 0.31 ns 0.31 ns 1.00 0.31 ns

Utility Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just(1)+subscribe_on(immediate)+subscribe 2006.77 ns 0.31 ns 0.31 ns 1.00 0.31 ns

Combining Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 3511.93 ns 157.39 ns 163.08 ns 0.97 216.06 ns
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3785.52 ns 156.39 ns 157.67 ns 0.99 188.25 ns
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 134.10 ns 140.80 ns 0.95 193.46 ns
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 3647.45 ns 367.97 ns 402.64 ns 0.91 386.20 ns
immediate_just(1) + zip(immediate_just(2)) + subscribe 2185.08 ns 222.37 ns 221.90 ns 1.00 210.16 ns
immediate_just(immediate_just(1), immediate_just(1)) + concat() + subscribe 3206.76 ns 233.30 ns 230.11 ns 1.01 269.57 ns

Subjects

name rxcpp rpp prev rpp ratio rpp no optimization
publish_subject with 1 observer - on_next 34.77 ns 14.79 ns 14.79 ns 1.00 14.96 ns
subscribe 100 observers to publish_subject 202553.60 ns 17473.83 ns 19401.95 ns 0.90 18042.19 ns
100 on_next to 100 observers to publish_subject 28005.93 ns 16898.25 ns 26117.59 ns 0.65 16871.10 ns

Scenarios

name rxcpp rpp prev rpp ratio rpp no optimization
basic sample 1400.76 ns 14.01 ns 13.06 ns 1.07 22.36 ns
basic sample with immediate scheduler 1461.90 ns 5.28 ns 5.28 ns 1.00 16.46 ns
mix operators with disposables and without disposables 6389.72 ns 1443.28 ns 1462.94 ns 0.99 1878.72 ns
single disposable and looooooong indentity chain 24893.65 ns 1131.15 ns 927.82 ns 1.22 5255.68 ns

Aggregating Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+reduce(10, std::plus)+subscribe 921.18 ns 0.31 ns 0.31 ns 1.00 0.31 ns

Error Handling Operators

name rxcpp rpp prev rpp ratio rpp no optimization
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 2137.29 ns 1030.03 ns 999.00 ns 1.03 996.97 ns
create(on_error())+retry(1)+subscribe 600.47 ns 108.82 ns 113.84 ns 0.96 122.01 ns

ci-macos

General

name rxcpp rpp prev rpp ratio rpp no optimization
Subscribe empty callbacks to empty observable 388.70 ns 0.53 ns 0.51 ns 1.04 0.54 ns
Subscribe empty callbacks to empty observable via pipe operator 403.17 ns 0.52 ns 0.51 ns 1.02 0.52 ns

Sources

name rxcpp rpp prev rpp ratio rpp no optimization
from array of 1 - create + subscribe + immediate 756.57 ns 0.35 ns 0.34 ns 1.02 0.36 ns
from array of 1 - create + subscribe + current_thread 2122.94 ns 6.07 ns 4.07 ns 1.49 7.27 ns
concat_as_source of just(1 immediate) create + subscribe 2382.73 ns 333.94 ns 182.51 ns 1.83 295.07 ns
defer from array of 1 - defer + create + subscribe + immediate 833.64 ns 0.44 ns 0.34 ns 1.29 0.43 ns
interval - interval + take(3) + subscribe + immediate 2156.11 ns 57.06 ns 56.14 ns 1.02 58.97 ns
interval - interval + take(3) + subscribe + current_thread 2629.52 ns 34.17 ns 34.11 ns 1.00 39.18 ns
from array of 1 - create + as_blocking + subscribe + new_thread 109766.00 ns 54109.38 ns 37261.10 ns 1.45 25253.15 ns
from array of 1000 - create + as_blocking + subscribe + new_thread 57506.92 ns 29348.28 ns 31064.52 ns 0.94 35818.92 ns
concat_as_source of just(1 immediate) and just(1,2 immediate)create + subscribe 6429.28 ns 199.73 ns 195.44 ns 1.02 200.28 ns

Filtering Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+take(1)+subscribe 1223.18 ns 0.51 ns 0.34 ns 1.51 0.40 ns
immediate_just+filter(true)+subscribe 1871.28 ns 0.51 ns 0.34 ns 1.50 0.35 ns
immediate_just(1,2)+skip(1)+subscribe 1253.62 ns 0.84 ns 0.34 ns 2.46 0.35 ns
immediate_just(1,1,2)+distinct_until_changed()+subscribe 922.73 ns 0.35 ns 0.34 ns 1.04 0.37 ns
immediate_just(1,2)+first()+subscribe 2976.11 ns 0.35 ns 0.34 ns 1.03 0.37 ns
immediate_just(1,2)+last()+subscribe 1081.40 ns 1.03 ns 1.01 ns 1.01 1.00 ns
immediate_just+take_last(1)+subscribe 2907.62 ns 0.52 ns 0.34 ns 1.52 0.46 ns
immediate_just(1,2,3)+element_at(1)+subscribe 891.77 ns 0.34 ns 0.35 ns 1.00 0.44 ns

Schedulers

name rxcpp rpp prev rpp ratio rpp no optimization
immediate scheduler create worker + schedule 335.25 ns 0.52 ns 0.51 ns 1.02 0.53 ns
current_thread scheduler create worker + schedule 469.91 ns 4.29 ns 4.11 ns 1.04 5.16 ns
current_thread scheduler create worker + schedule + recursive schedule 1146.03 ns 68.88 ns 64.83 ns 1.06 91.58 ns

Transforming Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+map(v*2)+subscribe 909.31 ns 2.85 ns 4.18 ns 0.68 3.55 ns
immediate_just+scan(10, std::plus)+subscribe 1031.04 ns 0.35 ns 0.34 ns 1.01 0.37 ns
immediate_just+flat_map(immediate_just(v*2))+subscribe 2144.79 ns 225.37 ns 211.32 ns 1.07 204.97 ns
immediate_just+buffer(2)+subscribe 1022.23 ns 15.88 ns 15.78 ns 1.01 16.91 ns
immediate_just+window(2)+subscribe + subscsribe inner 2333.64 ns 1095.26 ns 2084.88 ns 0.53 1087.82 ns

Conditional Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+take_while(false)+subscribe 899.66 ns - - 0.00 -
immediate_just+take_while(true)+subscribe 905.93 ns 0.36 ns 0.34 ns 1.04 0.37 ns

Utility Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just(1)+subscribe_on(immediate)+subscribe 2043.72 ns 1.76 ns 1.95 ns 0.90 2.09 ns

Combining Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 3192.61 ns 381.83 ns 218.18 ns 1.75 267.35 ns
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3624.62 ns 224.25 ns 214.84 ns 1.04 219.01 ns
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 346.42 ns 409.60 ns 0.85 230.60 ns
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 3709.88 ns 577.50 ns 555.09 ns 1.04 650.80 ns
immediate_just(1) + zip(immediate_just(2)) + subscribe 2223.99 ns 377.06 ns 334.62 ns 1.13 381.13 ns
immediate_just(immediate_just(1), immediate_just(1)) + concat() + subscribe 3217.53 ns 357.40 ns 641.70 ns 0.56 394.76 ns

Subjects

name rxcpp rpp prev rpp ratio rpp no optimization
publish_subject with 1 observer - on_next 70.14 ns 23.63 ns 34.52 ns 0.68 23.17 ns
subscribe 100 observers to publish_subject 147208.20 ns 19701.92 ns 18264.12 ns 1.08 18591.46 ns
100 on_next to 100 observers to publish_subject 32651.94 ns 15105.68 ns 11858.68 ns 1.27 11672.08 ns

Scenarios

name rxcpp rpp prev rpp ratio rpp no optimization
basic sample 1326.81 ns 11.52 ns 10.85 ns 1.06 53.73 ns
basic sample with immediate scheduler 1386.16 ns 5.73 ns 7.06 ns 0.81 10.61 ns
mix operators with disposables and without disposables 5973.12 ns 1490.52 ns 1459.24 ns 1.02 1977.17 ns
single disposable and looooooong indentity chain 18153.12 ns 1771.66 ns 2009.99 ns 0.88 4113.79 ns

Aggregating Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+reduce(10, std::plus)+subscribe 2051.56 ns 0.34 ns 0.34 ns 1.01 0.46 ns

Error Handling Operators

name rxcpp rpp prev rpp ratio rpp no optimization
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 6516.59 ns 3019.61 ns 2889.43 ns 1.05 7687.23 ns
create(on_error())+retry(1)+subscribe 828.30 ns 191.00 ns 192.13 ns 0.99 213.71 ns

ci-ubuntu-clang

General

name rxcpp rpp prev rpp ratio rpp no optimization
Subscribe empty callbacks to empty observable 269.11 ns 0.64 ns 1.56 ns 0.41 0.64 ns
Subscribe empty callbacks to empty observable via pipe operator 270.04 ns 0.64 ns 1.55 ns 0.41 0.64 ns

Sources

name rxcpp rpp prev rpp ratio rpp no optimization
from array of 1 - create + subscribe + immediate 558.45 ns 0.31 ns 0.31 ns 1.00 0.31 ns
from array of 1 - create + subscribe + current_thread 794.12 ns 4.05 ns 4.04 ns 1.00 4.04 ns
concat_as_source of just(1 immediate) create + subscribe 2426.70 ns 130.38 ns 131.52 ns 0.99 131.07 ns
defer from array of 1 - defer + create + subscribe + immediate 777.64 ns 0.31 ns 0.31 ns 1.00 0.31 ns
interval - interval + take(3) + subscribe + immediate 2222.80 ns 58.72 ns 58.71 ns 1.00 58.66 ns
interval - interval + take(3) + subscribe + current_thread 3176.89 ns 31.11 ns 31.08 ns 1.00 31.70 ns
from array of 1 - create + as_blocking + subscribe + new_thread 31432.46 ns 31016.05 ns 29707.10 ns 1.04 31522.35 ns
from array of 1000 - create + as_blocking + subscribe + new_thread 39915.21 ns 37201.96 ns 37291.72 ns 1.00 38409.59 ns
concat_as_source of just(1 immediate) and just(1,2 immediate)create + subscribe 3679.11 ns 149.28 ns 150.32 ns 0.99 148.38 ns

Filtering Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+take(1)+subscribe 1176.07 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just+filter(true)+subscribe 841.22 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just(1,2)+skip(1)+subscribe 1082.98 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just(1,1,2)+distinct_until_changed()+subscribe 875.86 ns 0.32 ns 0.33 ns 0.98 0.32 ns
immediate_just(1,2)+first()+subscribe 1378.50 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just(1,2)+last()+subscribe 1028.21 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just+take_last(1)+subscribe 1195.29 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just(1,2,3)+element_at(1)+subscribe 871.33 ns 0.31 ns 0.31 ns 1.00 0.31 ns

Schedulers

name rxcpp rpp prev rpp ratio rpp no optimization
immediate scheduler create worker + schedule 282.12 ns 1.55 ns 0.64 ns 2.44 1.56 ns
current_thread scheduler create worker + schedule 396.24 ns 4.04 ns 4.35 ns 0.93 4.04 ns
current_thread scheduler create worker + schedule + recursive schedule 871.63 ns 55.25 ns 55.29 ns 1.00 55.38 ns

Transforming Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+map(v*2)+subscribe 847.00 ns 0.31 ns 0.31 ns 1.00 0.31 ns
immediate_just+scan(10, std::plus)+subscribe 965.98 ns 0.62 ns 0.62 ns 1.00 0.33 ns
immediate_just+flat_map(immediate_just(v*2))+subscribe 2238.03 ns 138.37 ns 137.71 ns 1.00 134.55 ns
immediate_just+buffer(2)+subscribe 1537.96 ns 13.98 ns 13.99 ns 1.00 14.92 ns
immediate_just+window(2)+subscribe + subscsribe inner 2452.81 ns 906.48 ns 910.87 ns 1.00 912.38 ns

Conditional Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+take_while(false)+subscribe 851.13 ns - - 0.00 -
immediate_just+take_while(true)+subscribe 853.32 ns 0.31 ns 0.31 ns 1.00 0.31 ns

Utility Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just(1)+subscribe_on(immediate)+subscribe 2193.47 ns 0.31 ns 0.31 ns 1.00 0.31 ns

Combining Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 3317.72 ns 160.01 ns 160.12 ns 1.00 154.63 ns
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3773.31 ns 140.18 ns 138.59 ns 1.01 139.21 ns
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 143.07 ns 142.88 ns 1.00 139.02 ns
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 3448.19 ns 379.45 ns 380.46 ns 1.00 379.45 ns
immediate_just(1) + zip(immediate_just(2)) + subscribe 2218.10 ns 198.14 ns 200.78 ns 0.99 200.41 ns
immediate_just(immediate_just(1), immediate_just(1)) + concat() + subscribe 3284.72 ns 224.49 ns 223.42 ns 1.00 228.20 ns

Subjects

name rxcpp rpp prev rpp ratio rpp no optimization
publish_subject with 1 observer - on_next 52.59 ns 19.85 ns 19.75 ns 1.00 20.36 ns
subscribe 100 observers to publish_subject 207393.40 ns 17444.93 ns 17680.07 ns 0.99 18210.19 ns
100 on_next to 100 observers to publish_subject 46109.42 ns 20274.50 ns 20240.20 ns 1.00 20511.80 ns

Scenarios

name rxcpp rpp prev rpp ratio rpp no optimization
basic sample 1331.75 ns 11.50 ns 11.49 ns 1.00 20.81 ns
basic sample with immediate scheduler 1325.72 ns 5.90 ns 5.90 ns 1.00 6.52 ns
mix operators with disposables and without disposables 6517.22 ns 1160.93 ns 1176.31 ns 0.99 1477.36 ns
single disposable and looooooong indentity chain 27916.58 ns 1249.03 ns 1250.16 ns 1.00 4709.30 ns

Aggregating Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+reduce(10, std::plus)+subscribe 1043.21 ns 0.31 ns 0.31 ns 1.00 0.31 ns

Error Handling Operators

name rxcpp rpp prev rpp ratio rpp no optimization
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 2182.24 ns 1170.05 ns 1161.20 ns 1.01 1182.18 ns
create(on_error())+retry(1)+subscribe 661.77 ns 139.35 ns 146.86 ns 0.95 140.39 ns

ci-windows

General

name rxcpp rpp prev rpp ratio rpp no optimization
Subscribe empty callbacks to empty observable 556.07 ns 2.16 ns 2.16 ns 1.00 1.85 ns
Subscribe empty callbacks to empty observable via pipe operator 572.10 ns 2.16 ns 2.16 ns 1.00 1.85 ns

Sources

name rxcpp rpp prev rpp ratio rpp no optimization
from array of 1 - create + subscribe + immediate 1155.57 ns 4.93 ns 4.94 ns 1.00 5.55 ns
from array of 1 - create + subscribe + current_thread 1419.82 ns 15.75 ns 15.74 ns 1.00 15.45 ns
concat_as_source of just(1 immediate) create + subscribe 3696.46 ns 174.60 ns 174.62 ns 1.00 178.05 ns
defer from array of 1 - defer + create + subscribe + immediate 1180.65 ns 5.24 ns 5.24 ns 1.00 5.24 ns
interval - interval + take(3) + subscribe + immediate 3736.36 ns 139.81 ns 139.74 ns 1.00 142.29 ns
interval - interval + take(3) + subscribe + current_thread 3460.30 ns 60.15 ns 59.86 ns 1.00 62.80 ns
from array of 1 - create + as_blocking + subscribe + new_thread 123175.00 ns 118700.00 ns 120400.00 ns 0.99 119788.89 ns
from array of 1000 - create + as_blocking + subscribe + new_thread 132655.56 ns 135675.00 ns 136975.00 ns 0.99 137275.00 ns
concat_as_source of just(1 immediate) and just(1,2 immediate)create + subscribe 5329.67 ns 206.57 ns 201.39 ns 1.03 215.13 ns

Filtering Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+take(1)+subscribe 1818.86 ns 19.42 ns 19.42 ns 1.00 21.36 ns
immediate_just+filter(true)+subscribe 1610.58 ns 18.50 ns 18.51 ns 1.00 21.59 ns
immediate_just(1,2)+skip(1)+subscribe 2008.80 ns 17.89 ns 17.91 ns 1.00 21.60 ns
immediate_just(1,1,2)+distinct_until_changed()+subscribe 1328.95 ns 20.67 ns 20.68 ns 1.00 26.86 ns
immediate_just(1,2)+first()+subscribe 2372.16 ns 18.20 ns 18.21 ns 1.00 19.43 ns
immediate_just(1,2)+last()+subscribe 1464.98 ns 19.13 ns 19.15 ns 1.00 22.84 ns
immediate_just+take_last(1)+subscribe 2023.02 ns 64.85 ns 64.93 ns 1.00 70.17 ns
immediate_just(1,2,3)+element_at(1)+subscribe 1622.12 ns 20.97 ns 20.98 ns 1.00 21.63 ns

Schedulers

name rxcpp rpp prev rpp ratio rpp no optimization
immediate scheduler create worker + schedule 477.39 ns 4.32 ns 4.32 ns 1.00 4.32 ns
current_thread scheduler create worker + schedule 648.68 ns 11.11 ns 11.11 ns 1.00 11.11 ns
current_thread scheduler create worker + schedule + recursive schedule 1079.50 ns 103.96 ns 101.36 ns 1.03 103.12 ns

Transforming Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+map(v*2)+subscribe 1328.23 ns 18.80 ns 18.80 ns 1.00 21.63 ns
immediate_just+scan(10, std::plus)+subscribe 1422.12 ns 20.96 ns 20.96 ns 1.00 23.80 ns
immediate_just+flat_map(immediate_just(v*2))+subscribe 3837.33 ns 186.30 ns 185.11 ns 1.01 223.46 ns
immediate_just+buffer(2)+subscribe 2291.50 ns 64.26 ns 63.51 ns 1.01 72.33 ns
immediate_just+window(2)+subscribe + subscsribe inner 3974.07 ns 1216.92 ns 1192.15 ns 1.02 1226.57 ns

Conditional Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+take_while(false)+subscribe 1305.28 ns 17.57 ns 17.57 ns 1.00 19.13 ns
immediate_just+take_while(true)+subscribe 1329.92 ns 18.50 ns 18.50 ns 1.00 21.60 ns

Utility Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just(1)+subscribe_on(immediate)+subscribe 3205.02 ns 11.10 ns 11.11 ns 1.00 11.11 ns

Combining Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 5054.46 ns 197.43 ns 195.27 ns 1.01 222.13 ns
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 5710.11 ns 186.78 ns 178.89 ns 1.04 204.81 ns
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 195.15 ns 194.65 ns 1.00 199.56 ns
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 6119.16 ns 444.60 ns 443.65 ns 1.00 489.05 ns
immediate_just(1) + zip(immediate_just(2)) + subscribe 3865.37 ns 538.25 ns 519.56 ns 1.04 516.04 ns
immediate_just(immediate_just(1), immediate_just(1)) + concat() + subscribe 4853.97 ns 314.42 ns 314.38 ns 1.00 325.14 ns

Subjects

name rxcpp rpp prev rpp ratio rpp no optimization
publish_subject with 1 observer - on_next 36.72 ns 29.42 ns 29.27 ns 1.01 30.01 ns
subscribe 100 observers to publish_subject 264250.00 ns 25013.33 ns 25450.00 ns 0.98 24830.23 ns
100 on_next to 100 observers to publish_subject 51881.82 ns 35939.39 ns 35922.58 ns 1.00 32997.22 ns

Scenarios

name rxcpp rpp prev rpp ratio rpp no optimization
basic sample 1853.25 ns 96.57 ns 96.80 ns 1.00 112.11 ns
basic sample with immediate scheduler 1857.89 ns 66.73 ns 68.51 ns 0.97 82.35 ns
mix operators with disposables and without disposables 9381.75 ns 1787.22 ns 1797.99 ns 0.99 2439.19 ns
single disposable and looooooong indentity chain 25641.46 ns 1655.18 ns 1630.37 ns 1.02 6267.21 ns

Aggregating Operators

name rxcpp rpp prev rpp ratio rpp no optimization
immediate_just+reduce(10, std::plus)+subscribe 1458.16 ns 19.11 ns 19.11 ns 1.00 22.83 ns

Error Handling Operators

name rxcpp rpp prev rpp ratio rpp no optimization
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 1896.36 ns 357.24 ns 353.06 ns 1.01 380.86 ns
create(on_error())+retry(1)+subscribe 1721.11 ns 138.15 ns 137.92 ns 1.00 139.85 ns

@AlexInLog AlexInLog merged commit de061bc into v2 Feb 15, 2026
66 of 75 checks passed
@AlexInLog AlexInLog deleted the try_fix_cache branch February 15, 2026 11:12
@coderabbitai coderabbitai Bot mentioned this pull request Feb 15, 2026
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

Successfully merging this pull request may close these issues.

1 participant