Add full Boost.Asio project coverage - #121
Conversation
Make invalid bound argument combinations fail through call operator constraints instead of instantiating the call body and producing hard errors. This is the small standard-compatible behavior Asio needs for invocability probes, without adding machinery to the bind representation.
Provide the bidirectional stream base, unitbuf flag, and protected set_rdbuf hook used by Asio socket streams. Instantiate basic_iostream only after both stream bases are available. This keeps the headers self-contained without making istream or ostream pull in the other header, and avoids a recipe-level forced include.
Capture a copy of the supplied exception through the existing exception_ptr ABI instead of returning an empty stub. The throw-and-capture implementation is compact and reuses the runtime reference counting already required by current_exception. It preserves the empty fallback when exceptions are disabled.
Build Asio’s complete upstream test target with Boost.Build and run it in a dedicated nightly job with its OpenSSL dependency. Keep the unused project-wide Boost.Regex requirement out of this recipe because no Asio test source uses it and supporting Regex would require substantial locale facets. Boost.Context and Boost.Chrono remain enabled.
Compile-time performance diffCompiler: Repetitions: 5 per configuration. psychicstd compile time, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 3 within noise). 🟡 3 benchmark(s) within noise
Reproduce this on your machine: |
rdfind build-time diff (configure / compile / run tests)Compiler: Repetitions: 5 per configuration. rdfind build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 3 within noise). 🟡 3 benchmark(s) within noise
Reproduce this on your machine: |
flatbuffers build-time diff (configure / compile / run tests)Compiler: Repetitions: 1 per configuration. flatbuffers build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 3 within noise). 🟡 3 benchmark(s) within noise
Reproduce this on your machine: |
eigen build-time diff (compile / run tests)Compiler: Repetitions: 2 per configuration. eigen build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 2 within noise). 🟡 2 benchmark(s) within noise
Reproduce this on your machine: |
simdutf build-time diff (compile / run tests)Compiler: Repetitions: 1 per configuration. simdutf build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 2 within noise). 🟡 2 benchmark(s) within noise
Reproduce this on your machine: |
fmt build-time diff (compile / run tests)Compiler: Repetitions: 2 per configuration. fmt build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 2 within noise). 🟡 2 benchmark(s) within noise
Reproduce this on your machine: |
catch2 build-time diff (compile / run tests)Compiler: Repetitions: 3 per configuration. catch2 build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 2 within noise). 🟡 2 benchmark(s) within noise
Reproduce this on your machine: |
Compliance diff🟢 2 header(s) improved.
70 header(s) unchanged
Reproduce this on your machine: |
Sanitizer diff (ASan/UBSan)🟢 2 header(s) improved.
70 header(s) unchanged
Reproduce this on your machine: |
cppcheck build-time diff (compile)Compiler: Repetitions: 2 per configuration. cppcheck build time with psychicstd, main vs this PR (same runner). 🟢 faster · 🔴 slower · 🟡 within noise. A change is colored only when its bootstrap 95% CI excludes 0 and it clears ±5% / 3ms. No significant changes (🟡 1 within noise). 🟡 1 benchmark(s) within noise
Reproduce this on your machine: |
Summary
std::bindcall operators, including nested bind expressionsbasic_iostream, functionalunitbuf, andset_rdbufsupportmake_exception_ptrusing the existing exception runtime ABIValidation
boost-asio-full: passed with GCC 14 and Clang 21git diff --checkCompile-time performance
Uncached GCC 14 comparisons against
origin/mainfound no significant regressions in fmt, Catch2, or rdfind. The focused iostream workload increased from 45.4 ms to 50.6 ms due to the newly providedbasic_iostreamsurface; it remains 3.4x faster than libstdc++.