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 19 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.
|
✅ Tests 🎉 All green!❄️ No new flaky tests detected 🎯 Code Coverage (details) 🔗 Commit SHA: 3243266 | Docs | Datadog PR Page | Was this helpful? React with 👍/👎 or 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.28% 71.26% -0.02%
==========================================
Files 431 432 +1
Lines 64585 64873 +288
==========================================
+ Hits 46038 46233 +195
- Misses 18547 18640 +93
🚀 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).
Remove #[cfg(feature = "std")] from get_config_from_bytes and its call chain (get_config, get_single_source_config, get_single_source_process_config). These functions only use alloc types, not std I/O or filesystem.
There was a problem hiding this comment.
Pull request overview
This PR makes the libdd-library-config crate (and related FFI crates) compatible with no_std + alloc, introducing a std feature (enabled by default) and updating downstream crates to explicitly enable std where required.
Changes:
- Add
stdfeature gating forlibdd-library-config,libdd-library-config-ffi, andlibdd-common-ffi, withno_stdsupport paths usingcore/alloc. - Update dependent FFI crates to explicitly enable
libdd-common-ffi/std(and config-ffistd) when used. - Add workspace “no-std” Cargo profiles and update lockfile / 3rd-party license inventory for new dependency graph.
Reviewed changes
Copilot reviewed 20 out of 22 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| libdd-telemetry-ffi/Cargo.toml | Forces libdd-common-ffi to build with std for this FFI consumer. |
| libdd-profiling-ffi/Cargo.toml | Ensures feature flags enable std on config-ffi and common-ffi deps. |
| libdd-library-config/src/lib.rs | Converts core logic to no_std + alloc, switches maps to BTreeMap, and gates file I/O behind std. |
| libdd-library-config/Cargo.toml | Introduces std feature (default) and makes several deps optional / std-gated. |
| libdd-library-config-ffi/src/lib.rs | Adds std gating for many FFI entry points and adds optional no-std entry support. |
| libdd-library-config-ffi/Cargo.toml | Adds std feature (default) and a no_std_entry feature for standalone no_std builds. |
| libdd-ddsketch-ffi/Cargo.toml | Forces libdd-common-ffi to build with std. |
| libdd-data-pipeline-ffi/Cargo.toml | Forces libdd-common-ffi to build with std. |
| libdd-crashtracker-ffi/Cargo.toml | Forces libdd-common-ffi to build with std. |
| libdd-common/src/cstr.rs | Switches CStr usage from std to core for broader compatibility. |
| libdd-common-ffi/src/vec.rs | Moves internal std-only APIs behind std feature; uses core/alloc types. |
| libdd-common-ffi/src/slice.rs | Refactors to support no_std; gates serde/error-FFI pieces behind std. |
| libdd-common-ffi/src/lib.rs | Makes crate no_std-capable and gates modules/re-exports that require std. |
| libdd-common-ffi/src/cstr.rs | Migrates C string helpers to core/alloc equivalents. |
| libdd-common-ffi/Cargo.toml | Adds std feature (default) and makes heavy deps optional under it. |
| datadog-sidecar/Cargo.toml | Forces libdd-common-ffi to build with std on Windows target. |
| datadog-sidecar-ffi/Cargo.toml | Forces libdd-common-ffi to build with std. |
| datadog-live-debugger-ffi/Cargo.toml | Forces libdd-common-ffi to build with std. |
| datadog-ffe-ffi/Cargo.toml | Forces libdd-common-ffi to build with std. |
| LICENSE-3rdparty.yml | Updates 3rd-party license inventory for new transitive dependencies. |
| Cargo.toml | Adds no-std-dev / no-std-release profiles with panic = "abort". |
| Cargo.lock | Updates dependency graph for new crates/features (e.g., yaml-peg, dlmalloc). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| fn parse_stable_config_slice(&self, buf: &[u8]) -> LoggedResult<StableConfig, anyhow::Error> { | ||
| let buf = utils::trim_bytes(buf); | ||
| let stable_config = if buf.is_empty() { | ||
| StableConfig::default() | ||
| } else { | ||
| match serde_yaml::from_slice(buf) { | ||
| Ok(config) => config, | ||
| Err(e) => return LoggedResult::Err(e.into()), | ||
| let s = match core::str::from_utf8(buf) { | ||
| Ok(s) => s, | ||
| Err(e) => return LoggedResult::Err(anyhow::Error::msg(e)), | ||
| }; | ||
| match yaml_peg::serde::from_str::<StableConfig>(s) { | ||
| Ok(mut docs) => docs.remove(0), | ||
| Err(e) => return LoggedResult::Err(anyhow::Error::msg(e)), | ||
| } |
There was a problem hiding this comment.
parse_stable_config_slice performs YAML parsing unconditionally via yaml_peg, which means YAML parsing is available in no_std builds. This conflicts with the PR description that says YAML parsing is gated behind the std feature. Either update the PR description to reflect the new behavior, or gate this parsing path behind #[cfg(feature = "std")] (and provide a no-std alternative, e.g., only accept already-parsed configs / return an error).
There was a problem hiding this comment.
And pretty please @pawelchcki do your AI review before you open the PR.
| #[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), | ||
| language, | ||
| fleet_path: None, | ||
| local_path: None, | ||
| process_info: None, | ||
| }) | ||
| } | ||
|
|
||
| #[no_mangle] | ||
| pub extern "C" fn ddog_library_configurator_with_local_path<'a>( | ||
| c: &mut Configurator<'a>, | ||
| local_path: ffi::CStr<'a>, | ||
| ) { | ||
| c.local_path = Some(local_path); | ||
| } | ||
|
|
||
| #[no_mangle] | ||
| pub extern "C" fn ddog_library_configurator_with_fleet_path<'a>( | ||
| c: &mut Configurator<'a>, | ||
| local_path: ffi::CStr<'a>, | ||
| ) { | ||
| c.fleet_path = Some(local_path); | ||
| } | ||
|
|
||
| #[no_mangle] | ||
| pub extern "C" fn ddog_library_configurator_with_process_info<'a>( | ||
| c: &mut Configurator<'a>, | ||
| p: ProcessInfo<'a>, | ||
| ) { | ||
| c.process_info = Some(p.ffi_to_rs()); | ||
| } |
There was a problem hiding this comment.
The PR description says the FFI crate gates all bindings behind the std feature and is effectively empty without std, but ddog_library_configurator_new / *_with_* functions are still exported without #[cfg(feature = "std")]. If the intent is to fully gate the C API on std, these items (and related types) should also be #[cfg(feature = "std")] (or the PR description should be updated to match the actual exported surface).
| Ok(s) => s, | ||
| Err(e) => return LoggedResult::Err(anyhow::Error::msg(e)), | ||
| }; | ||
| match yaml_peg::serde::from_str::<StableConfig>(s) { |
There was a problem hiding this comment.
I don't feel good replacing serde_yaml with a basically unknown yaml parser crate
There was a problem hiding this comment.
yes but, https://github.com/dtolnay/serde-yaml was deprecated 2 years ago and stopped receiving any updates. same https://github.com/sebastienrousseau/serde_yml
yaml_peg is one of recommended alternatives, although with caveat. Generally looks like the state of yaml parsing in Rust is not_great:tm:
bantonsson
left a comment
There was a problem hiding this comment.
I'm not super confident about the changes either. Besides, is there a need for no_std right now, or is it just a nice to have?
| inherits = "dev" | ||
| panic = "abort" | ||
|
|
||
| [profile.no-std-release] |
There was a problem hiding this comment.
Are these two used anywhere? I can't see find it.
There was a problem hiding this comment.
only in my testing - I'll remove them
| Err(e) => return LoggedResult::Err(anyhow::Error::msg(e)), | ||
| }; | ||
| match yaml_peg::serde::from_str::<StableConfig>(s) { | ||
| Ok(mut docs) => docs.remove(0), |
There was a problem hiding this comment.
The call yaml_peg::serde::from_str::<StableConfig>(s) will return an empty Vec for a comment only yaml file, making this panic in Vec.remove. The old code returned StableConfig::default(). Maybe add some tests?
| Ok(mut docs) => docs.remove(0), | |
| Ok(mut docs) => docs.into_iter().next().unwrap_or_default(), |
|
If you're good with the idea of these changes, I'll be happy to add more testing to cover more of the yaml edgecases. Making this a no_std will also help with pushing these changes to other 3 repositories (httpd and maybe even cpp) The difference in artifact size is hundreds of kB vs MB of size - I can also add tests in |
|
I converted back to draft, as it looks liek the consesus leans towards slight ok-go on this issue. Because of it I need to add more tests and push this change through some automated code reviews. |
What does this PR do?
Make
libdd-library-configandlibdd-library-config-ffiusable in no_std environments.get_config_from_bytesis now available without std.Motivation
Enable library config parsing in embedded/no_std contexts (e.g. injected into processes without a full std runtime).
Additional Notes
serde_yamlwithyaml-peg(no_std-compatible),HashMapwithBTreeMapno_std_entryfeature onlibdd-library-config-ffifor standalone staticlib buildsstdfeature to all workspace consumers oflibdd-common-ffiHow to test the change?