Skip to content

Add full Boost.Asio project coverage - #121

Merged
pauldreik merged 4 commits into
mainfrom
boost-asio-full
Aug 3, 2026
Merged

Add full Boost.Asio project coverage#121
pauldreik merged 4 commits into
mainfrom
boost-asio-full

Conversation

@pauldreik

Copy link
Copy Markdown
Owner

Summary

  • constrain std::bind call operators, including nested bind expressions
  • add basic_iostream, functional unitbuf, and set_rdbuf support
  • implement make_exception_ptr using the existing exception runtime ABI
  • build and run the complete Boost.Asio test target in a dedicated nightly job

Validation

  • full Clang debug suite: 333 tests passed
  • boost-asio-full: passed with GCC 14 and Clang 21
  • Python lint, Clang formatting, YAML formatting, and git diff --check

Compile-time performance

Uncached GCC 14 comparisons against origin/main found 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 provided basic_iostream surface; it remains 3.4x faster than libstdc++.

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.
@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

Compile-time performance diff

Compiler: g++ (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0.

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. vs system is this PR's speedup over system libstdc++, for context -- a regression is less alarming if psychicstd is still far ahead. Median system-time drift (noise proxy): 1.7%.

No significant changes (🟡 3 within noise).

🟡 3 benchmark(s) within noise
benchmark main PR Δ (95% CI) vs system
all-headers 208.2ms 211.2ms 🟡 +1.5% [-2.6, +3.3] 6.7x
iostream 73.0ms 74.4ms 🟡 +1.9% [-0.9, +6.5] 3.5x
wordcounter 172.1ms 173.3ms 🟡 +0.7% [+0.2, +1.7] 3.3x

Reproduce this on your machine: scripts/compare_compile_time_to_ref.py --reps 5 g++ origin/main

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

rdfind build-time diff (configure / compile / run tests)

Compiler: c++ (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0.

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. vs system is this PR's speedup over system libstdc++, for context -- a regression is less alarming if psychicstd is still far ahead. Median system-time drift (noise proxy): 0.5%.

No significant changes (🟡 3 within noise).

🟡 3 benchmark(s) within noise
benchmark main PR Δ (95% CI) vs system
compile 469.8ms 472.4ms 🟡 +0.6% [-2.5, +1.8] 4.0x
configure 1261.4ms 1262.1ms 🟡 +0.1% [-0.6, +0.3] 1.0x
run tests 1746.6ms 1754.6ms 🟡 +0.5% [-1.5, +1.3] 1.0x

Reproduce this on your machine: scripts/compare_realworld_to_ref.py rdfind --build-type debug --reps 5

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

flatbuffers build-time diff (configure / compile / run tests)

Compiler: c++ (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0.

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. vs system is this PR's speedup over system libstdc++, for context -- a regression is less alarming if psychicstd is still far ahead. Median system-time drift (noise proxy): 74.5%.

No significant changes (🟡 3 within noise).

🟡 3 benchmark(s) within noise
benchmark main PR Δ (95% CI) vs system
compile 27563.9ms 27569.4ms 🟡 +0.0% 2.3x
configure 538.3ms 539.7ms 🟡 +0.3% 1.0x
run tests 111.9ms 112.9ms 🟡 +0.8% 1.2x

Reproduce this on your machine: scripts/compare_realworld_to_ref.py flatbuffers --build-type debug --reps 1

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

eigen build-time diff (compile / run tests)

Compiler: c++ (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0.

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. vs system is this PR's speedup over system libstdc++, for context -- a regression is less alarming if psychicstd is still far ahead. Median system-time drift (noise proxy): 1.5%.

No significant changes (🟡 2 within noise).

🟡 2 benchmark(s) within noise
benchmark main PR Δ (95% CI) vs system
compile 17084.7ms 17172.0ms 🟡 +0.5% [-2.9, +4.0] 1.8x
run tests 32.8ms 32.5ms 🟡 -1.0% [-3.4, +1.5] 1.3x

Reproduce this on your machine: scripts/compare_realworld_to_ref.py eigen --build-type debug --reps 2

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

simdutf build-time diff (compile / run tests)

Compiler: c++ (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0.

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. vs system is this PR's speedup over system libstdc++, for context -- a regression is less alarming if psychicstd is still far ahead. Median system-time drift (noise proxy): 2.3%.

No significant changes (🟡 2 within noise).

🟡 2 benchmark(s) within noise
benchmark main PR Δ (95% CI) vs system
compile 17606.8ms 17273.3ms 🟡 -1.9% 2.2x
run tests 50912.6ms 50405.8ms 🟡 -1.0% 1.0x

Reproduce this on your machine: scripts/compare_realworld_to_ref.py simdutf --build-type debug --reps 1

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

fmt build-time diff (compile / run tests)

Compiler: c++ (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0.

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. vs system is this PR's speedup over system libstdc++, for context -- a regression is less alarming if psychicstd is still far ahead. Median system-time drift (noise proxy): 21.9%.

No significant changes (🟡 2 within noise).

🟡 2 benchmark(s) within noise
benchmark main PR Δ (95% CI) vs system
compile 31553.0ms 31508.7ms 🟡 -0.1% [-0.7, +0.4] 1.6x
run tests 229.0ms 228.5ms 🟡 -0.2% [-3.9, +3.6] 1.7x

Reproduce this on your machine: scripts/compare_realworld_to_ref.py fmt --build-type debug --reps 2

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

catch2 build-time diff (compile / run tests)

Compiler: c++ (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0.

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. vs system is this PR's speedup over system libstdc++, for context -- a regression is less alarming if psychicstd is still far ahead. Median system-time drift (noise proxy): 0.8%.

No significant changes (🟡 2 within noise).

🟡 2 benchmark(s) within noise
benchmark main PR Δ (95% CI) vs system
compile 16265.7ms 16159.3ms 🟡 -0.7% [-2.5, +2.4] 3.7x
run tests 3904.0ms 3867.7ms 🟡 -0.9% [-2.3, -0.6] 1.2x

Reproduce this on your machine: scripts/compare_realworld_to_ref.py catch2 --build-type debug --reps 3

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

Compliance diff

🟢 2 header(s) improved.

header before after Δ
ios 13/40 14/40 🟢 +1
exception 16/21 20/21 🟢 +4
70 header(s) unchanged
header passes/sampled
algorithm 9/40
any 9/18
array 27/40
atomic 17/40
bit 2/15
bitset 9/40
cassert 3/9
cctype 2/5
cerrno 5/29
cfloat 5/29
chrono 1/40
ciso646 5/29
climits 15/40
clocale 5/29
cmath 1/19
compare 5/14
complex 17/40
concepts 2/35
condition_variable 13/26
csetjmp 3/9
csignal 5/29
cstddef 13/21
cstdint 3/5
cstdio 5/29
cstdlib 3/9
cstring 2/5
ctime 5/29
cwchar 5/29
deque 29/40
filesystem 3/40
forward_list 9/40
fstream 14/40
functional 17/40
initializer_list 0/0
iomanip 22/40
iostream 0/2
istream 23/40
iterator 5/40
limits 36/37
list 6/40
locale 9/40
map 13/40
memory 15/40
mutex 15/40
new 19/40
numeric 4/40
optional 11/40
ostream 31/40
random 4/40
ranges 0/40
ratio 13/13
regex 3/40
set 1/40
sstream 7/40
stack 16/36
stdexcept 9/9
streambuf 30/37
string 2/40
string_view 15/40
system_error 30/40
thread 6/40
tuple 10/40
type_traits 21/40
typeinfo 2/5
unordered_map 15/40
unordered_set 12/40
utility 8/40
valarray 1/40
vector 29/40
version 0/40

Reproduce this on your machine: LLVM_ROOT=$PWD/llvm-project cp base_cache.json .compliance_cache.json && tools/compliance.py --recheck

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

Sanitizer diff (ASan/UBSan)

🟢 2 header(s) improved.

header before after Δ
ios 11/25 12/25 🟢 +1
exception 16/21 20/21 🟢 +4
70 header(s) unchanged
header passes/sampled
algorithm 4/25
any 6/18
array 17/25
atomic 13/25
bit 2/15
bitset 3/25
cassert 3/9
cctype 2/5
cerrno 4/25
cfloat 4/25
chrono 0/25
ciso646 4/25
climits 11/25
clocale 4/25
cmath 1/19
compare 5/14
complex 11/25
concepts 2/25
condition_variable 13/25
csetjmp 3/9
csignal 4/25
cstddef 13/21
cstdint 3/5
cstdio 4/25
cstdlib 3/9
cstring 2/5
ctime 4/25
cwchar 4/25
deque 17/25
filesystem 2/25
forward_list 6/25
fstream 8/25
functional 10/25
initializer_list 0/0
iomanip 13/25
iostream 0/2
istream 10/25
iterator 4/25
limits 24/25
list 4/25
locale 6/25
map 7/25
memory 8/25
mutex 13/25
new 6/25
numeric 3/25
optional 8/25
ostream 18/25
random 3/25
ranges 0/25
ratio 13/13
regex 1/25
set 0/25
sstream 5/25
stack 9/25
stdexcept 9/9
streambuf 18/25
string 1/25
string_view 9/25
system_error 20/25
thread 5/25
tuple 7/25
type_traits 14/25
typeinfo 2/5
unordered_map 10/25
unordered_set 7/25
utility 6/25
valarray 0/25
vector 18/25
version 0/25

Reproduce this on your machine: LLVM_ROOT=$PWD/llvm-project cp sanitize_base_cache.json .compliance_cache.sanitize.json && tools/compliance.py --sanitize --recheck

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown

cppcheck build-time diff (compile)

Compiler: c++ (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0.

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. vs system is this PR's speedup over system libstdc++, for context -- a regression is less alarming if psychicstd is still far ahead. Median system-time drift (noise proxy): 1.1%.

No significant changes (🟡 1 within noise).

🟡 1 benchmark(s) within noise
benchmark main PR Δ (95% CI) vs system
compile 49292.5ms 49678.9ms 🟡 +0.8% [-0.2, +1.8] 2.0x

Reproduce this on your machine: scripts/compare_realworld_to_ref.py cppcheck --build-type debug --reps 2

@pauldreik
pauldreik merged commit 1e1321f into main Aug 3, 2026
53 checks passed
@pauldreik
pauldreik deleted the boost-asio-full branch August 3, 2026 15:56
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