Repository navigation
Added
- Published benchmark results for 0.1.0, in
docs/benchmarks/0.1.0/, covering the five platforms
with a hosted runner. Every native in the run was a cache hit whose sha256 matches
native/CHECKSUMS.txt, so the numbers describe the released bytes rather than a rebuild.
Windows arm64 is measured for the first time. The export list and/GLchange from ADR-0006
shows up as 10 percent on W2, flat on Linux over the same pair of runs, which is the control
that makes it attributable. W1 improved on Windows too, but improved further on Linux with no
build change, so the page credits that to the runner rather than to the optimisation. linux-musl-arm64. Alpine on arm64 got aDllNotFoundExceptionfor a reason that had nothing
to do with the caller's code. Built by the existingbuild-musl.shon an arm64 runner, and the
consumption test runs in an Alpine container on arm64, so the library is loaded on the platform
it targets rather than assumed to work because it compiled. ADR-0009.SECURITY.mdadded, pointing vulnerability reports at private GitHub security advisories.
Changed
- README rewritten as a short consumer page. Its links are absolute, because the README ships in
the package and relative links were broken on nuget.org. Benchmark detail moved to
docs/performance.md. - Windows natives build without
/GLand/LTCG, so both Windows binaries are byte identical
across runner images andnative/CHECKSUMS.txtgates them again. With them on, MSVC produced
different bytes on different images from identical sources and component versions, and a
release had roughly a coin flip per Windows RID of failing its checksum step for an innocent
reason. Costs 4 to 13 percent onCanParseand 3 to 5 percent on a hard URL.CanParsestays
well ahead ofUri.TryCreate. The generated export list stays. ADR-0011, #45. native/build-windows.ps1takes-Ipo on|off, defaultoff.onexists so the comparison can
be rerun.all-symbolswith/GLis refused up front, since it dies incmake -E __create_def
on IL objects.win-perf-experiment.ymlgains variantc, a pure/GLcomparison, and a RID input so
win-arm64can be measured onwindows-11-arm. Variantamoves exports and/GLtogether,
so #18's 7 percent covers the pair rather than/GLalone.
Fixed
scripts/collate-benchmarks.pyno longer drops a platform without saying so. Its platform list
is hand maintained,win-arm64was added tobench.ymland not to it, and the result was a
green run and a summary that simply had no Windows arm64 column. It now fails when a
benchmark-<rid>artifact arrives for a RID it does not know.scripts/collate-benchmarks.pyno longer labels a measured row as the baseline of its group.
It read the baseline offRatiobeing1.00, which a row that lands within half a percent of
the baseline also prints. Two real Windows x64 rows in this run did exactly that, 158.90 ns
against 158.15 ns.Program.csnow asks BenchmarkDotNet for itsBaselinecolumn, and the
script prefers it, falling back toRatioonly where a single row in the group claims1.00.- The Alpine image was pinned to an amd64 image digest rather than to the multi-architecture
index. On an arm64 host docker either refuses that or runs it under emulation and produces an
x86-64.soin thelinux-musl-arm64directory. The pin is now the 3.20.0 index, which
resolves per host and keeps both musl RIDs on one Alpine release. The amd64 image inside it is
the one the old pin named, solinux-musl-x64is byte for byte unchanged. native/build-musl.shhands ownership of what it built back to the invoking user. The
container runs as root, so everything it wrote into the bind mount was root owned and the
runner user could not delete it. The reproducibility check does exactly that between its two
builds and failed withPermission deniedon every file the first build produced.apkneeds
root, so ownership is handed back on the way out rather than dropped on the way in.native/verify-unix.shchecks the ELF machine type against the RID instead of trusting the
runner. A container built for one platform, or a QEMU binfmt handler doing its job quietly,
produces a library for the wrong architecture that passes exports, hardening and checksums, and
then fails on exactly the machines the RID exists for. ADR-0008 added the PE half of this for
win-arm64.
Install
dotnet add package Ada.Url --version 0.1.1
Verification
- Attached: the package, its symbols, and a CycloneDX SBOM listing the native library.
- The eight native binaries are built from the pinned Ada tag in CI and their SHA-256
checksums are matched againstnative/CHECKSUMS.txtbefore the package is pushed. - Published with NuGet trusted publishing, so no long lived API key exists for this repository.