feat(library-config)!: make libdd-library-config no_std compatible#1770
feat(library-config)!: make libdd-library-config no_std compatible#1770pawelchcki wants to merge 54 commits intomainfrom
Conversation
…fig-ffi no_std compatible Add no_std support to both crates with std enabled by default. Core types and the matching engine compile under no_std+alloc, while file I/O, YAML parsing, and FFI bindings are gated behind the std feature flag.
📚 Documentation Check Results📦
|
Clippy Allow Annotation ReportComparing clippy allow annotations between branches:
Summary by Rule
Annotation Counts by File
Annotation Stats by Crate
About This ReportThis report tracks Clippy allow annotations for specific rules, showing how they've changed in this PR. Decreasing the number of these annotations generally improves code quality. |
🔒 Cargo Deny Results📦
|
Add dlmalloc (non-Linux) and rustix-dlmalloc (Linux) as global allocators, a panic handler, and no-std-dev/no-std-release profiles with panic="abort" to support building the FFI crate as staticlib/cdylib without std.
… builds Define minimal #[repr(C)] FFI types (Slice, CharSlice, CStr, AsBytes) locally for no_std, matching libdd-common-ffi layout. This enables ddog_library_configurator_new, with_local_path, with_fleet_path, with_process_info, and drop to compile and link without std.
Add CString and Vec types to the local ffi_types module for no_std, with proper Drop impls using alloc::ffi::CString. Un-gate the LibraryConfig struct while keeping rs_vec_to_ffi and logged_result_to_ffi_with_messages behind std.
🎉 All green!❄️ No new flaky tests detected 🎯 Code Coverage (details) 🔗 Commit SHA: 313092d | Docs | Datadog PR Page | Give us feedback! |
Replace the custom ffi_types::CString and Vec wrappers with a re-export of alloc::ffi::CString. In no_std mode LibraryConfig fields are alloc::ffi::CString (no C header generation happens without std anyway).
Artifact Size Benchmark Reportaarch64-alpine-linux-musl
aarch64-unknown-linux-gnu
libdatadog-x64-windows
libdatadog-x86-windows
x86_64-alpine-linux-musl
x86_64-unknown-linux-gnu
|
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #1770 +/- ##
==========================================
- Coverage 71.98% 71.82% -0.16%
==========================================
Files 434 435 +1
Lines 70450 70530 +80
==========================================
- Hits 50710 50655 -55
- Misses 19740 19875 +135
🚀 New features to boost your workflow:
|
BenchmarksComparisonBenchmark execution time: 2026-03-20 20:49:20 Comparing candidate commit 3243266 in PR branch Found 14 performance improvements and 0 performance regressions! Performance is the same for 45 metrics, 2 unstable metrics.
|
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| benching deserializing traces from msgpack to their internal representation | execution_time | 49.114ms | 49.583ms ± 1.225ms | 49.458ms ± 0.076ms | 49.507ms | 49.631ms | 57.430ms | 62.017ms | 25.39% | 8.308 | 71.149 | 2.46% | 0.087ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| benching deserializing traces from msgpack to their internal representation | execution_time | [49.413ms; 49.753ms] or [-0.342%; +0.342%] | None | None | None |
Group 2
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| concentrator/add_spans_to_concentrator | execution_time | 12.948ms | 12.981ms ± 0.016ms | 12.980ms ± 0.011ms | 12.991ms | 13.006ms | 13.019ms | 13.040ms | 0.46% | 0.411 | 0.176 | 0.12% | 0.001ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| concentrator/add_spans_to_concentrator | execution_time | [12.979ms; 12.983ms] or [-0.017%; +0.017%] | None | None | None |
Group 3
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... | execution_time | 186.083µs | 186.470µs ± 0.200µs | 186.460µs ± 0.157µs | 186.621µs | 186.796µs | 186.897µs | 187.261µs | 0.43% | 0.387 | 0.161 | 0.11% | 0.014µs | 1 | 200 |
| normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... | throughput | 5340139.519op/s | 5362797.113op/s ± 5748.120op/s | 5363076.958op/s ± 4528.355op/s | 5367452.800op/s | 5371467.422op/s | 5373211.201op/s | 5373955.421op/s | 0.20% | -0.381 | 0.144 | 0.11% | 406.453op/s | 1 | 200 |
| normalization/normalize_name/normalize_name/bad-name | execution_time | 17.882µs | 17.956µs ± 0.035µs | 17.954µs ± 0.021µs | 17.974µs | 18.017µs | 18.054µs | 18.073µs | 0.66% | 0.614 | 0.642 | 0.19% | 0.002µs | 1 | 200 |
| normalization/normalize_name/normalize_name/bad-name | throughput | 55332649.192op/s | 55693007.668op/s ± 107863.069op/s | 55697659.997op/s ± 65174.739op/s | 55768691.153op/s | 55851433.879op/s | 55906006.909op/s | 55921000.074op/s | 0.40% | -0.601 | 0.617 | 0.19% | 7627.071op/s | 1 | 200 |
| normalization/normalize_name/normalize_name/good | execution_time | 10.338µs | 10.537µs ± 0.123µs | 10.534µs ± 0.043µs | 10.574µs | 10.631µs | 10.721µs | 11.998µs | 13.90% | 8.298 | 96.366 | 1.17% | 0.009µs | 1 | 200 |
| normalization/normalize_name/normalize_name/good | throughput | 83344224.908op/s | 94915170.699op/s ± 1019481.724op/s | 94928993.899op/s ± 383407.414op/s | 95362493.090op/s | 95958810.295op/s | 96372104.864op/s | 96731501.200op/s | 1.90% | -7.297 | 81.238 | 1.07% | 72088.244op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... | execution_time | [186.442µs; 186.498µs] or [-0.015%; +0.015%] | None | None | None |
| normalization/normalize_name/normalize_name/Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Long-.Too-Lo... | throughput | [5362000.478op/s; 5363593.747op/s] or [-0.015%; +0.015%] | None | None | None |
| normalization/normalize_name/normalize_name/bad-name | execution_time | [17.951µs; 17.960µs] or [-0.027%; +0.027%] | None | None | None |
| normalization/normalize_name/normalize_name/bad-name | throughput | [55678058.884op/s; 55707956.452op/s] or [-0.027%; +0.027%] | None | None | None |
| normalization/normalize_name/normalize_name/good | execution_time | [10.520µs; 10.554µs] or [-0.162%; +0.162%] | None | None | None |
| normalization/normalize_name/normalize_name/good | throughput | [94773880.337op/s; 95056461.061op/s] or [-0.149%; +0.149%] | None | None | None |
Group 4
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| benching string interning on wordpress profile | execution_time | 159.525µs | 160.684µs ± 0.386µs | 160.639µs ± 0.202µs | 160.854µs | 161.367µs | 161.749µs | 162.426µs | 1.11% | 1.014 | 2.668 | 0.24% | 0.027µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| benching string interning on wordpress profile | execution_time | [160.630µs; 160.737µs] or [-0.033%; +0.033%] | None | None | None |
Group 5
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| credit_card/is_card_number/ | execution_time | 3.891µs | 3.913µs ± 0.003µs | 3.912µs ± 0.001µs | 3.914µs | 3.918µs | 3.920µs | 3.921µs | 0.21% | -1.311 | 12.437 | 0.08% | 0.000µs | 1 | 200 |
| credit_card/is_card_number/ | throughput | 255062089.714op/s | 255570178.439op/s ± 195452.472op/s | 255602181.072op/s ± 97781.372op/s | 255684390.472op/s | 255795574.180op/s | 255840982.755op/s | 256984511.382op/s | 0.54% | 1.340 | 12.664 | 0.08% | 13820.577op/s | 1 | 200 |
| credit_card/is_card_number/ 3782-8224-6310-005 | execution_time | 74.611µs | 76.708µs ± 0.874µs | 76.693µs ± 0.628µs | 77.317µs | 78.079µs | 79.230µs | 79.438µs | 3.58% | 0.255 | 0.050 | 1.14% | 0.062µs | 1 | 200 |
| credit_card/is_card_number/ 3782-8224-6310-005 | throughput | 12588500.280op/s | 13038085.647op/s ± 148261.337op/s | 13039046.402op/s ± 105886.017op/s | 13144877.877op/s | 13274049.067op/s | 13331540.374op/s | 13402819.278op/s | 2.79% | -0.189 | -0.040 | 1.13% | 10483.660op/s | 1 | 200 |
| credit_card/is_card_number/ 378282246310005 | execution_time | 68.370µs | 68.568µs ± 0.074µs | 68.561µs ± 0.044µs | 68.613µs | 68.679µs | 68.713µs | 69.055µs | 0.72% | 1.295 | 8.178 | 0.11% | 0.005µs | 1 | 200 |
| credit_card/is_card_number/ 378282246310005 | throughput | 14481164.667op/s | 14584149.457op/s ± 15761.225op/s | 14585454.655op/s ± 9300.720op/s | 14593816.241op/s | 14606389.714op/s | 14618270.167op/s | 14626342.042op/s | 0.28% | -1.267 | 7.986 | 0.11% | 1114.487op/s | 1 | 200 |
| credit_card/is_card_number/37828224631 | execution_time | 3.894µs | 3.914µs ± 0.003µs | 3.914µs ± 0.002µs | 3.915µs | 3.917µs | 3.919µs | 3.920µs | 0.17% | -1.998 | 15.114 | 0.07% | 0.000µs | 1 | 200 |
| credit_card/is_card_number/37828224631 | throughput | 255072891.869op/s | 255519590.296op/s ± 172317.122op/s | 255501951.170op/s ± 107391.353op/s | 255630771.555op/s | 255750170.106op/s | 255820726.352op/s | 256828410.286op/s | 0.52% | 2.025 | 15.348 | 0.07% | 12184.661op/s | 1 | 200 |
| credit_card/is_card_number/378282246310005 | execution_time | 64.612µs | 64.838µs ± 0.156µs | 64.806µs ± 0.089µs | 64.907µs | 65.122µs | 65.381µs | 65.555µs | 1.16% | 1.430 | 3.012 | 0.24% | 0.011µs | 1 | 200 |
| credit_card/is_card_number/378282246310005 | throughput | 15254338.038op/s | 15423109.014op/s ± 36911.446op/s | 15430714.550op/s ± 21231.847op/s | 15449721.970op/s | 15468930.653op/s | 15473065.402op/s | 15477095.446op/s | 0.30% | -1.409 | 2.916 | 0.24% | 2610.033op/s | 1 | 200 |
| credit_card/is_card_number/37828224631000521389798 | execution_time | 45.400µs | 45.686µs ± 0.131µs | 45.695µs ± 0.095µs | 45.776µs | 45.896µs | 45.935µs | 45.963µs | 0.59% | -0.153 | -0.711 | 0.29% | 0.009µs | 1 | 200 |
| credit_card/is_card_number/37828224631000521389798 | throughput | 21756643.302op/s | 21888547.819op/s ± 62631.822op/s | 21884462.109op/s ± 45304.908op/s | 21933555.603op/s | 21999054.708op/s | 22017762.846op/s | 22026405.134op/s | 0.65% | 0.164 | -0.708 | 0.29% | 4428.739op/s | 1 | 200 |
| credit_card/is_card_number/x371413321323331 | execution_time | 6.430µs | 6.436µs ± 0.003µs | 6.436µs ± 0.002µs | 6.438µs | 6.442µs | 6.447µs | 6.449µs | 0.20% | 0.999 | 1.586 | 0.05% | 0.000µs | 1 | 200 |
| credit_card/is_card_number/x371413321323331 | throughput | 155069423.004op/s | 155378556.187op/s ± 83694.159op/s | 155385090.803op/s ± 51513.289op/s | 155440616.634op/s | 155491588.433op/s | 155516760.118op/s | 155522536.206op/s | 0.09% | -0.994 | 1.573 | 0.05% | 5918.071op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/ | execution_time | 3.898µs | 3.913µs ± 0.002µs | 3.913µs ± 0.001µs | 3.914µs | 3.917µs | 3.918µs | 3.919µs | 0.16% | -0.892 | 7.006 | 0.06% | 0.000µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/ | throughput | 255168943.812op/s | 255566246.776op/s ± 155944.121op/s | 255573426.283op/s ± 89853.071op/s | 255663183.419op/s | 255777375.235op/s | 255850615.125op/s | 256557169.473op/s | 0.38% | 0.907 | 7.104 | 0.06% | 11026.915op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 | execution_time | 61.457µs | 62.681µs ± 0.505µs | 62.714µs ± 0.358µs | 63.009µs | 63.470µs | 63.597µs | 63.845µs | 1.80% | -0.200 | -0.421 | 0.80% | 0.036µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 | throughput | 15662866.622op/s | 15954835.016op/s ± 128844.795op/s | 15945455.999op/s ± 91470.929op/s | 16040868.187op/s | 16188204.580op/s | 16262951.172op/s | 16271499.983op/s | 2.04% | 0.237 | -0.397 | 0.81% | 9110.703op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/ 378282246310005 | execution_time | 53.950µs | 54.165µs ± 0.076µs | 54.163µs ± 0.045µs | 54.210µs | 54.295µs | 54.340µs | 54.369µs | 0.38% | 0.011 | 0.245 | 0.14% | 0.005µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/ 378282246310005 | throughput | 18392775.636op/s | 18462268.490op/s ± 25982.182op/s | 18462793.778op/s ± 15292.387op/s | 18476289.379op/s | 18507208.285op/s | 18524449.569op/s | 18535675.615op/s | 0.39% | -0.001 | 0.244 | 0.14% | 1837.218op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/37828224631 | execution_time | 3.897µs | 3.913µs ± 0.002µs | 3.912µs ± 0.001µs | 3.914µs | 3.917µs | 3.919µs | 3.921µs | 0.22% | -0.530 | 8.566 | 0.06% | 0.000µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/37828224631 | throughput | 255036318.728op/s | 255577507.017op/s ± 157555.171op/s | 255597367.349op/s ± 83988.573op/s | 255669490.968op/s | 255759536.405op/s | 255870573.921op/s | 256591057.300op/s | 0.39% | 0.549 | 8.668 | 0.06% | 11140.833op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/378282246310005 | execution_time | 50.313µs | 50.538µs ± 0.106µs | 50.525µs ± 0.059µs | 50.585µs | 50.721µs | 50.872µs | 50.990µs | 0.92% | 1.022 | 1.928 | 0.21% | 0.007µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/378282246310005 | throughput | 19611700.221op/s | 19787263.316op/s ± 41307.198op/s | 19792110.865op/s ± 23113.761op/s | 19814976.655op/s | 19840734.128op/s | 19861670.598op/s | 19875536.978op/s | 0.42% | -1.004 | 1.869 | 0.21% | 2920.860op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/37828224631000521389798 | execution_time | 45.396µs | 45.728µs ± 0.140µs | 45.738µs ± 0.101µs | 45.835µs | 45.936µs | 45.969µs | 45.988µs | 0.55% | -0.279 | -0.735 | 0.30% | 0.010µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/37828224631000521389798 | throughput | 21744567.656op/s | 21868880.636op/s ± 66803.566op/s | 21863575.284op/s ± 48344.984op/s | 21911825.814op/s | 21989595.426op/s | 22005589.151op/s | 22028365.897op/s | 0.75% | 0.290 | -0.727 | 0.30% | 4723.725op/s | 1 | 200 |
| credit_card/is_card_number_no_luhn/x371413321323331 | execution_time | 6.430µs | 6.438µs ± 0.004µs | 6.437µs ± 0.003µs | 6.440µs | 6.445µs | 6.448µs | 6.454µs | 0.26% | 0.641 | 0.886 | 0.06% | 0.000µs | 1 | 200 |
| credit_card/is_card_number_no_luhn/x371413321323331 | throughput | 154949005.425op/s | 155333051.866op/s ± 97351.367op/s | 155344526.474op/s ± 63541.584op/s | 155402793.370op/s | 155478687.787op/s | 155505433.774op/s | 155529307.066op/s | 0.12% | -0.637 | 0.874 | 0.06% | 6883.781op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| credit_card/is_card_number/ | execution_time | [3.912µs; 3.913µs] or [-0.011%; +0.011%] | None | None | None |
| credit_card/is_card_number/ | throughput | [255543090.606op/s; 255597266.272op/s] or [-0.011%; +0.011%] | None | None | None |
| credit_card/is_card_number/ 3782-8224-6310-005 | execution_time | [76.587µs; 76.829µs] or [-0.158%; +0.158%] | None | None | None |
| credit_card/is_card_number/ 3782-8224-6310-005 | throughput | [13017538.052op/s; 13058633.243op/s] or [-0.158%; +0.158%] | None | None | None |
| credit_card/is_card_number/ 378282246310005 | execution_time | [68.557µs; 68.578µs] or [-0.015%; +0.015%] | None | None | None |
| credit_card/is_card_number/ 378282246310005 | throughput | [14581965.103op/s; 14586333.811op/s] or [-0.015%; +0.015%] | None | None | None |
| credit_card/is_card_number/37828224631 | execution_time | [3.913µs; 3.914µs] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number/37828224631 | throughput | [255495708.800op/s; 255543471.791op/s] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number/378282246310005 | execution_time | [64.817µs; 64.860µs] or [-0.033%; +0.033%] | None | None | None |
| credit_card/is_card_number/378282246310005 | throughput | [15417993.443op/s; 15428224.585op/s] or [-0.033%; +0.033%] | None | None | None |
| credit_card/is_card_number/37828224631000521389798 | execution_time | [45.668µs; 45.704µs] or [-0.040%; +0.040%] | None | None | None |
| credit_card/is_card_number/37828224631000521389798 | throughput | [21879867.651op/s; 21897227.987op/s] or [-0.040%; +0.040%] | None | None | None |
| credit_card/is_card_number/x371413321323331 | execution_time | [6.435µs; 6.436µs] or [-0.007%; +0.007%] | None | None | None |
| credit_card/is_card_number/x371413321323331 | throughput | [155366956.982op/s; 155390155.393op/s] or [-0.007%; +0.007%] | None | None | None |
| credit_card/is_card_number_no_luhn/ | execution_time | [3.913µs; 3.913µs] or [-0.008%; +0.008%] | None | None | None |
| credit_card/is_card_number_no_luhn/ | throughput | [255544634.421op/s; 255587859.132op/s] or [-0.008%; +0.008%] | None | None | None |
| credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 | execution_time | [62.611µs; 62.751µs] or [-0.112%; +0.112%] | None | None | None |
| credit_card/is_card_number_no_luhn/ 3782-8224-6310-005 | throughput | [15936978.367op/s; 15972691.666op/s] or [-0.112%; +0.112%] | None | None | None |
| credit_card/is_card_number_no_luhn/ 378282246310005 | execution_time | [54.154µs; 54.175µs] or [-0.020%; +0.020%] | None | None | None |
| credit_card/is_card_number_no_luhn/ 378282246310005 | throughput | [18458667.609op/s; 18465869.370op/s] or [-0.020%; +0.020%] | None | None | None |
| credit_card/is_card_number_no_luhn/37828224631 | execution_time | [3.912µs; 3.913µs] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number_no_luhn/37828224631 | throughput | [255555671.386op/s; 255599342.648op/s] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number_no_luhn/378282246310005 | execution_time | [50.523µs; 50.552µs] or [-0.029%; +0.029%] | None | None | None |
| credit_card/is_card_number_no_luhn/378282246310005 | throughput | [19781538.536op/s; 19792988.097op/s] or [-0.029%; +0.029%] | None | None | None |
| credit_card/is_card_number_no_luhn/37828224631000521389798 | execution_time | [45.708µs; 45.747µs] or [-0.042%; +0.042%] | None | None | None |
| credit_card/is_card_number_no_luhn/37828224631000521389798 | throughput | [21859622.304op/s; 21878138.968op/s] or [-0.042%; +0.042%] | None | None | None |
| credit_card/is_card_number_no_luhn/x371413321323331 | execution_time | [6.437µs; 6.438µs] or [-0.009%; +0.009%] | None | None | None |
| credit_card/is_card_number_no_luhn/x371413321323331 | throughput | [155319559.903op/s; 155346543.829op/s] or [-0.009%; +0.009%] | None | None | None |
Group 6
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | 189.970ns | 192.206ns ± 1.751ns | 192.055ns ± 1.247ns | 193.198ns | 195.589ns | 196.831ns | 200.229ns | 4.26% | 1.045 | 1.610 | 0.91% | 0.124ns | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| single_flag_killswitch/rules-based | execution_time | [191.964ns; 192.449ns] or [-0.126%; +0.126%] | None | None | None |
Group 7
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ip_address/quantize_peer_ip_address_benchmark | execution_time | 5.017µs | 5.075µs ± 0.028µs | 5.070µs ± 0.020µs | 5.092µs | 5.136µs | 5.138µs | 5.144µs | 1.46% | 0.818 | 0.080 | 0.56% | 0.002µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| ip_address/quantize_peer_ip_address_benchmark | execution_time | [5.071µs; 5.079µs] or [-0.077%; +0.077%] | None | None | None |
Group 8
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | 144.066µs | 146.725µs ± 1.713µs | 146.419µs ± 0.592µs | 147.120µs | 148.560µs | 152.883µs | 161.733µs | 10.46% | 4.936 | 34.787 | 1.16% | 0.121µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| sdk_test_data/rules-based | execution_time | [146.488µs; 146.963µs] or [-0.162%; +0.162%] | None | None | None |
Group 9
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| redis/obfuscate_redis_string | execution_time | 34.319µs | 34.772µs ± 0.755µs | 34.433µs ± 0.055µs | 34.523µs | 36.364µs | 36.394µs | 38.026µs | 10.43% | 1.824 | 1.907 | 2.17% | 0.053µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| redis/obfuscate_redis_string | execution_time | [34.668µs; 34.877µs] or [-0.301%; +0.301%] | None | None | None |
Group 10
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| profile_add_sample_frames_x1000 | execution_time | 4.219ms | 4.224ms ± 0.003ms | 4.224ms ± 0.002ms | 4.226ms | 4.228ms | 4.232ms | 4.254ms | 0.72% | 3.861 | 32.638 | 0.08% | 0.000ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| profile_add_sample_frames_x1000 | execution_time | [4.224ms; 4.225ms] or [-0.011%; +0.011%] | None | None | None |
Group 11
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| receiver_entry_point/report/2598 | execution_time | 3.402ms | 3.435ms ± 0.032ms | 3.424ms ± 0.007ms | 3.433ms | 3.520ms | 3.543ms | 3.556ms | 3.86% | 2.182 | 3.872 | 0.93% | 0.002ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| receiver_entry_point/report/2598 | execution_time | [3.430ms; 3.439ms] or [-0.129%; +0.129%] | None | None | None |
Group 12
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| benching serializing traces from their internal representation to msgpack | execution_time | 13.930ms | 13.973ms ± 0.025ms | 13.970ms ± 0.012ms | 13.983ms | 14.016ms | 14.067ms | 14.104ms | 0.96% | 1.815 | 6.138 | 0.18% | 0.002ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| benching serializing traces from their internal representation to msgpack | execution_time | [13.970ms; 13.977ms] or [-0.025%; +0.025%] | None | None | None |
Group 13
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| sql/obfuscate_sql_string | execution_time | 86.368µs | 86.727µs ± 0.133µs | 86.719µs ± 0.053µs | 86.770µs | 86.849µs | 87.037µs | 88.082µs | 1.57% | 5.415 | 53.044 | 0.15% | 0.009µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| sql/obfuscate_sql_string | execution_time | [86.709µs; 86.745µs] or [-0.021%; +0.021%] | None | None | None |
Group 14
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... | execution_time | 495.453µs | 497.119µs ± 1.855µs | 496.327µs ± 0.402µs | 497.004µs | 500.559µs | 503.511µs | 506.162µs | 1.98% | 1.724 | 2.866 | 0.37% | 0.131µs | 1 | 200 |
| normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... | throughput | 1975652.931op/s | 2011619.765op/s ± 7459.876op/s | 2014800.839op/s ± 1632.194op/s | 2016158.107op/s | 2017615.917op/s | 2018271.327op/s | 2018356.504op/s | 0.18% | -1.703 | 2.728 | 0.37% | 527.493op/s | 1 | 200 |
| normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて | execution_time | 377.107µs | 377.948µs ± 0.420µs | 377.940µs ± 0.294µs | 378.210µs | 378.697µs | 379.002µs | 379.275µs | 0.35% | 0.425 | -0.165 | 0.11% | 0.030µs | 1 | 200 |
| normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて | throughput | 2636611.134op/s | 2645871.277op/s ± 2936.437op/s | 2645926.134op/s ± 2063.075op/s | 2648127.091op/s | 2650181.783op/s | 2650969.736op/s | 2651765.742op/s | 0.22% | -0.420 | -0.174 | 0.11% | 207.637op/s | 1 | 200 |
| normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters | execution_time | 168.540µs | 168.878µs ± 0.133µs | 168.866µs ± 0.077µs | 168.961µs | 169.118µs | 169.229µs | 169.283µs | 0.25% | 0.357 | 0.312 | 0.08% | 0.009µs | 1 | 200 |
| normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters | throughput | 5907277.450op/s | 5921433.873op/s ± 4669.255op/s | 5921857.646op/s ± 2683.541op/s | 5924190.817op/s | 5928745.128op/s | 5931178.265op/s | 5933307.144op/s | 0.19% | -0.352 | 0.308 | 0.08% | 330.166op/s | 1 | 200 |
| normalization/normalize_service/normalize_service/[empty string] | execution_time | 36.827µs | 37.034µs ± 0.123µs | 37.067µs ± 0.103µs | 37.138µs | 37.199µs | 37.235µs | 37.247µs | 0.48% | -0.190 | -1.455 | 0.33% | 0.009µs | 1 | 200 |
| normalization/normalize_service/normalize_service/[empty string] | throughput | 26847786.874op/s | 27002749.368op/s ± 89872.594op/s | 26977882.674op/s ± 75057.453op/s | 27099282.655op/s | 27134688.371op/s | 27141319.393op/s | 27153928.466op/s | 0.65% | 0.195 | -1.456 | 0.33% | 6354.952op/s | 1 | 200 |
| normalization/normalize_service/normalize_service/test_ASCII | execution_time | 46.217µs | 46.316µs ± 0.065µs | 46.304µs ± 0.036µs | 46.352µs | 46.422µs | 46.452µs | 46.820µs | 1.11% | 2.710 | 16.959 | 0.14% | 0.005µs | 1 | 200 |
| normalization/normalize_service/normalize_service/test_ASCII | throughput | 21358573.247op/s | 21590865.579op/s ± 29993.568op/s | 21596511.169op/s ± 16688.328op/s | 21611003.159op/s | 21625825.688op/s | 21630327.091op/s | 21637186.203op/s | 0.19% | -2.662 | 16.462 | 0.14% | 2120.866op/s | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... | execution_time | [496.862µs; 497.376µs] or [-0.052%; +0.052%] | None | None | None |
| normalization/normalize_service/normalize_service/A0000000000000000000000000000000000000000000000000... | throughput | [2010585.898op/s; 2012653.632op/s] or [-0.051%; +0.051%] | None | None | None |
| normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて | execution_time | [377.890µs; 378.006µs] or [-0.015%; +0.015%] | None | None | None |
| normalization/normalize_service/normalize_service/Data🐨dog🐶 繋がっ⛰てて | throughput | [2645464.316op/s; 2646278.239op/s] or [-0.015%; +0.015%] | None | None | None |
| normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters | execution_time | [168.860µs; 168.897µs] or [-0.011%; +0.011%] | None | None | None |
| normalization/normalize_service/normalize_service/Test Conversion 0f Weird !@#$%^&**() Characters | throughput | [5920786.760op/s; 5922080.987op/s] or [-0.011%; +0.011%] | None | None | None |
| normalization/normalize_service/normalize_service/[empty string] | execution_time | [37.017µs; 37.051µs] or [-0.046%; +0.046%] | None | None | None |
| normalization/normalize_service/normalize_service/[empty string] | throughput | [26990293.890op/s; 27015204.845op/s] or [-0.046%; +0.046%] | None | None | None |
| normalization/normalize_service/normalize_service/test_ASCII | execution_time | [46.307µs; 46.325µs] or [-0.019%; +0.019%] | None | None | None |
| normalization/normalize_service/normalize_service/test_ASCII | throughput | [21586708.759op/s; 21595022.399op/s] or [-0.019%; +0.019%] | None | None | None |
Group 15
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| tags/replace_trace_tags | execution_time | 2.307µs | 2.353µs ± 0.013µs | 2.352µs ± 0.004µs | 2.359µs | 2.374µs | 2.378µs | 2.380µs | 1.17% | -0.982 | 2.559 | 0.56% | 0.001µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| tags/replace_trace_tags | execution_time | [2.351µs; 2.355µs] or [-0.077%; +0.077%] | None | None | None |
Group 16
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| profile_add_sample_timestamped_x1000 | execution_time | 4.232ms | 4.236ms ± 0.008ms | 4.235ms ± 0.001ms | 4.236ms | 4.240ms | 4.246ms | 4.345ms | 2.60% | 11.941 | 154.706 | 0.19% | 0.001ms | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| profile_add_sample_timestamped_x1000 | execution_time | [4.235ms; 4.237ms] or [-0.027%; +0.027%] | None | None | None |
Group 17
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| profile_add_sample2_frames_x1000 | execution_time | 728.096µs | 729.441µs ± 0.612µs | 729.423µs ± 0.354µs | 729.797µs | 730.541µs | 730.960µs | 732.439µs | 0.41% | 0.754 | 2.186 | 0.08% | 0.043µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| profile_add_sample2_frames_x1000 | execution_time | [729.356µs; 729.526µs] or [-0.012%; +0.012%] | None | None | None |
Group 18
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| normalization/normalize_trace/test_trace | execution_time | 235.877ns | 249.118ns ± 14.979ns | 242.679ns ± 4.069ns | 251.441ns | 283.017ns | 290.129ns | 292.849ns | 20.67% | 1.504 | 0.953 | 6.00% | 1.059ns | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| normalization/normalize_trace/test_trace | execution_time | [247.042ns; 251.194ns] or [-0.833%; +0.833%] | None | None | None |
Group 19
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| write only interface | execution_time | 1.207µs | 3.205µs ± 1.418µs | 2.982µs ± 0.030µs | 3.014µs | 3.684µs | 13.945µs | 14.734µs | 394.17% | 7.332 | 55.007 | 44.14% | 0.100µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| write only interface | execution_time | [3.009µs; 3.402µs] or [-6.132%; +6.132%] | None | None | None |
Group 20
| cpu_model | git_commit_sha | git_commit_date | git_branch |
|---|---|---|---|
| Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz | 3243266 | 1774038746 | pawel/no-std-library-config |
| scenario | metric | min | mean ± sd | median ± mad | p75 | p95 | p99 | max | peak_to_median_ratio | skewness | kurtosis | cv | sem | runs | sample_size |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| two way interface | execution_time | 18.194µs | 26.725µs ± 10.111µs | 18.670µs ± 0.400µs | 35.281µs | 45.520µs | 46.194µs | 70.428µs | 277.22% | 0.925 | 0.612 | 37.74% | 0.715µs | 1 | 200 |
| scenario | metric | 95% CI mean | Shapiro-Wilk pvalue | Ljung-Box pvalue (lag=1) | Dip test pvalue |
|---|---|---|---|---|---|
| two way interface | execution_time | [25.323µs; 28.126µs] or [-5.244%; +5.244%] | None | None | None |
Baseline
Omitted due to size.
cbindgen doesn't evaluate cfg(not(feature = "std")) and picks up the ffi_types module types, causing redefinitions with common.h. Exclude Slice_CChar, CharSlice, CStr, Error, and Vec_U8 from the generated header since they are already provided by common.h. Also simplify ffi_types::CString to a re-export of alloc::ffi::CString.
- Fix import ordering for rustfmt (cfg(not(...)) before cfg(feature)) - Remove ddog_CStr from cbindgen exclude list (not in common.h) - Regenerate LICENSE-3rdparty.yml for new deps
… builds Make the minimum subset of libdd-common-ffi work in no_std+alloc so that libdd-library-config-ffi can use the real FFI types instead of duplicating them in a local ffi_types module (~55 lines removed). - Add std feature to libdd-common-ffi (default on), gating std-only modules - Replace std:: imports with core::/alloc:: equivalents in slice.rs and cstr.rs - Replace std::ffi::CStr with core::ffi::CStr in libdd-common cstr macros - Make libdd-common-ffi a non-optional dependency of libdd-library-config-ffi - Delete the duplicated ffi_types module from libdd-library-config-ffi - Remove cbindgen exclude list (no longer needed without ffi_types)
…wn dep BTreeMap from alloc::collections works in both std and no_std without needing the hashbrown crate. The config maps are small, so O(log n) vs O(1) is negligible, and deterministic iteration order is a bonus.
… YAML parsing yaml-peg supports no_std+alloc, enabling parse_stable_config_slice to work without std. Moved trim_bytes into parse_stable_config_slice so all callers (including get_config_from_bytes) benefit from whitespace trimming. Removed serde_yaml dependency.
…staticlib/cdylib compat The staticlib/cdylib crate types require an unwinding runtime that doesn't exist in no_std. Gate #![no_std] on the new no_std_entry feature so that --no-default-features compiles with implicit std, while true no_std builds use --features no_std_entry with -Zbuild-std panic=abort.
ee51658 to
e77ef42
Compare
…eature to consumers Make vec.rs no_std-compatible (core/alloc imports, gate anyhow impl). Move vec module out of #[cfg(feature = "std")] gate since it only needs alloc. Add features = ["std"] to all workspace crates that depend on libdd-common-ffi with default-features = false, since they all need the std-gated types (Handle, Result, Error, etc).
Mirrors the Phase 1 hoist so each iteration reuses the cached Option<String> instead of re-borrowing stable_config.
Drop the generalized $err_ctor parameter, the no_std macro variant, and the body rewrite. The only caller is itself std-gated, so the macro just needs feature = "std" added to its existing arms.
|
@copilot merge in latest main branch |
Co-authored-by: pawelchcki <[email protected]>
Done in No UI changes in this update. |
There was a problem hiding this comment.
It seems there are two different motivations mentioned in this PR:
- Artifact size. I would claim here that
no_stddoesn't make a big difference (it can shave off some formatting code IIRC for errors and whatnot), at least not per se. Rather the fact thatno_stdbasically implies an API surface that is reduced by 90% is likely to be the main contributor to the size reduction. I personally don't have anything against making the crateno_std, but if size the main motivation, similar results could probably be achieved with aminimalor whatnot feature gate that just hides most symbols (as doesno_std) without much other changes, and thus be a smaller/uncontroversial change? Another variant could be to create more fine-grained features, so that we can enable a bunch of selected modules à la carte. - Actually running in a
no_stdenvironment where some OS-level primitive aren't available. In that caseno_stdis indeed the only solution.
As far as the code goes, mostly LGTM except that maybe we could reduce the #[cfg(..)] clutter with appropriate feature-specific modules.
| /// guard above). WARNING: this symbol is globally visible — this library must not be | ||
| /// linked with other Rust code compiled with `panic = "unwind"`. |
There was a problem hiding this comment.
This sounds like a pretty big footgun in practice. I'm not sure there's a way to enforce that/warn in any way, though...
|
|
||
| impl LibraryConfig { | ||
| fn rs_vec_to_ffi(configs: Vec<lib_config::LibraryConfig>) -> anyhow::Result<ffi::Vec<Self>> { | ||
| fn vec_to_ffi( |
There was a problem hiding this comment.
Nitpick: name change seems unrelated to the no_std business
| }) | ||
| } | ||
|
|
||
| #[cfg(feature = "std")] |
There was a problem hiding this comment.
I wonder if we could reduce the clutter by having a std module (or another name, if that clashes with std) that is cfg-gated once and then pub use it instead of repeating the guard. As we do for platform-specific implementations
There was a problem hiding this comment.
yeah, I need to experiment a alittle with it, but I was worried it would require too many changes and baloon the PR - beyond the functionality I needed
Co-authored-by: Yann Hamdaoui <[email protected]>
- Consolidate std-only items into a single `std_api` submodule, replacing twelve scattered `#[cfg(feature = "std")]` annotations with one gate at the module boundary - Restore `rs_vec_to_ffi` name (rename was unrelated to no_std work) and drop the stale Centos 6 global_asm and FfiConfigurator type-alias comments - Revert the config_id hoists in `get_single_source_config` and `get_single_source_process_config`; the inline `stable_config.config_id .clone()` form from main is more concise - Document why `FfiSafeErrorMessage for SliceConversionError` is std-gated (the trait lives in std-only `libdd-common`)
… getters - Drop the doc-comment on `mod std_api` (already self-evident from the cfg-gated module declaration) and the "defensive cleanup" what-comment on `clear_error` - Collapse the two `*_stable_config_path` getters via a `static_path_cstr!` macro local to `std_api`, so the SAFETY rationale lives once instead of being copy-pasted under each function
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 22 out of 23 changed files in this pull request and generated 4 comments.
Comments suppressed due to low confidence (1)
libdd-library-config-ffi/src/lib.rs:93
- The PR description mentions adding a
ddog_library_configurator_get_from_bytesFFI entry point that works in bothstdandno_std, but there is no such exported function in this crate (repo-wide search forddog_library_configurator_get_from_bytesreturns no matches). Either add the function (and ensure it is available whenstdis disabled) or update the PR description to match the implemented API surface.
#[no_mangle]
pub extern "C" fn ddog_library_configurator_new(
debug_logs: bool,
language: CharSlice,
) -> Box<Configurator> {
Box::new(Configurator {
inner: lib_config::Configurator::new(debug_logs),
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 415115efda
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…ders - StdConfigRead: compare metadata length as u64 before casting to usize so oversized files can't truncate past the check on 32-bit targets, and re-check buf.len() after read_to_end to catch TOCTOU growth between metadata() and the read - get_config_from_reader: downgrade an oversized Ok(bytes) from a custom ConfigRead to ConfigReadError::TooLarge so the configurator's safety-net contract (documented on the trait) is actually enforced - CI: the no_std step now compiles libdd-library-config-ffi with no_std_entry + panic=abort scoped via --config so it actually exercises the no_std code path instead of a std build with --no-default-features
…iles Replace eleven `#[cfg(feature = "std")]` annotations on `pub mod` lines in lib.rs with a single `#![cfg(feature = "std")]` inner attribute at the top of each std-only module file. The mod declarations stay unconditional — when std is off, the file's inner cfg strips the contents, so the module exists but is empty. The cfg now lives next to the std-using code instead of being collected at the crate root.
Apply the same pattern as the previous libdd-common-ffi cleanup to the other std-only file-backed modules in this PR: drop the `#[cfg(feature = "std")]` from `pub mod` declarations and rely on each file's own inner `#![cfg(feature = "std")]` instead. Covers: - libdd-library-config: otel_process_ctx, tracer_metadata - libdd-library-config-ffi: tracer_metadata Also drops the redundant explanatory comments left behind in lib.rs files from the previous pass.
The thiserror derive and the FfiSafeErrorMessage impl each carried their own copy of the three error strings. Funnel both through a private `message()` method that returns the c-str, then derive Display from it (plus an empty `core::error::Error` impl, available since MSRV 1.81). This was thiserror's only use in the crate, so drop the dependency.
Lets static c-string error messages (e.g. those returned by `FfiSafeErrorMessage::as_ffi_str`) be converted into `Error` directly without a manual `to_str().unwrap().to_string()` round-trip. `to_string_lossy` keeps the conversion infallible for callers that don't control the source bytes' UTF-8-ness.
This reverts commit 8279e8d.
- Remove the doc comment on `SliceConversionError::message` — its two call sites within the same impl/file make the role self-evident. - Replace the inline `--config 'profile.dev.panic="abort"'` in the no_std CI step with a named `[profile.no-std-dev]` in the workspace manifest. The CI command becomes `--profile no-std-dev`, the rationale lives next to the profile definition, and the override is greppable.
yannham
left a comment
There was a problem hiding this comment.
Better separation of std/no_std boilerplate now 👍 I don't approve right now because there's the more general question of should we proceed with making some crates no_std and what's the plan here (which isn't only my call), but as far the code goes, LGTM
| #[cfg(feature = "std")] | ||
| use std::env; | ||
| #[cfg(feature = "std")] | ||
| use std::path::Path; |
There was a problem hiding this comment.
| #[cfg(feature = "std")] | |
| use std::env; | |
| #[cfg(feature = "std")] | |
| use std::path::Path; | |
| #[cfg(feature = "std")] | |
| use std::{env, path::Path}; |
| self.parse_stable_config_slice(&buffer) | ||
| } | ||
|
|
||
| #[cfg(feature = "std")] |
There was a problem hiding this comment.
It's a bit less severe for this file, so it's a non-blocking suggestion, but I think the same std-specific-module technique can be used in the pure Rust API (mod no_std_api or mod std_api and then pub use -- especially since in Rust you can put different pieces of impl SomeStruct in different places, including submodules).
| # shellcheck disable=SC2086 | ||
| cargo build $PACKAGES --verbose | ||
| fi | ||
| - name: "[${{ steps.rust-version.outputs.version}}] cargo check no_std (library-config)" |
There was a problem hiding this comment.
I think we currently don't have a good way to test sets of features (ideally we would use cargo hack or something like that). But just to double check if it's the right place/the right move to add a bespoke step for one specific crate and features combination, or if there's a more principled way to do that @ekump ?
What does this PR do?
Make
libdd-library-configandlibdd-library-config-ffiusable inno_stdenvironments.Motivation
Enable library config parsing in contexts without a full std runtime (e.g. injected into processes).
Key changes
serde_yamlwithyaml_serde(no_std-compatible),HashMapwithBTreeMapno_std_entryfeature for standalone staticlib builds (allocator, panic handler)ddog_library_configurator_get_from_bytesFFI function (works in both std and no_std)stdfeature to workspace consumers oflibdd-common-ffiUses a fork of yaml_serde pending upstream no_std support: yaml/yaml-serde#7
How to test