Skip to content

Stop the arctic backend from dragging std in, and 0.1.5 - #6

Closed
pathscale wants to merge 2 commits into
feat/hydratefrom
feat/no-std-backends
Closed

pathscale wants to merge 2 commits into
feat/hydratefrom
feat/no-std-backends

Conversation

@pathscale

Copy link
Copy Markdown
Owner

Stacked on #5, which is stacked on #4. Merge order is #4, #5, then this one.

The bug this fixes

worktable-vec declares #![no_std]. Enabling the arctic feature enabled arctic's default features, which are std plus an SMR backend, so the crate linked a standard library it says it does not use. Nobody noticed because it was only ever built on a host that has one.

arctic 0.1.11 is the first release where this is fixable at all: until pathscale/arctic-wt#9 landed today, smr-ps-reclaim forced std on by itself, so no_std + reclamation was not a combination that existed.

--features arctic        arctic-wt [smr-ps-reclaim]      ps-reclaim [libc,spin]
--features arctic,std    arctic-wt [smr-ps-reclaim,std]  ps-reclaim [libc,spin,std]

A std feature now exists and forwards; it is off by default, because the core never needed one.

congee and wti gained "std" in their feature lists. Neither crate is no_std upstream — congee-wt has no #![no_std] at all and WorkTablesIndex's concurrent feature pulls parking_lot — so the manifest now says so instead of failing later at link time.

What is actually no_std, precisely

build x86_64-unknown-none
core, no features builds
hydrate builds
arctic no — needs an OS
congee, wti no — std crates upstream

The arctic row is not a defect to fix here. ps-reclaim keeps its participant slot in thread-local storage, and its no_std path is pthread keys, so it needs an operating system. no_std means no standard library, not no operating system, and the distinction is now written down rather than assumed. A bare-metal reclamation backend would need a slot mechanism that does not exist yet; that is a ps-reclaim question, not this crate's.

The verifier

A rule with no check is a comment. CI grows three steps inside the existing job — no new runner:

  • core and hydrate build for x86_64-unknown-none, a target with no std to find, so the claim is checked against a target instead of a host
  • the arctic dependency graph is asserted to carry no std feature

The assertion was run against --features arctic,std first and it failed there, which is the only evidence that it can fail at all.

Checks

cargo test --all-features                    31 passed, 0 failed (+3 ignored disk tests)
cargo test --no-default-features --features arctic   10 passed, 0 failed
cargo clippy --all-features --all-targets    clean
x86_64-unknown-none, core and hydrate        builds

Version 0.1.5, covering #4, #5 and this — one publish for the series rather than three.

meh added 2 commits September 7, 2026 16:53
Enabling `arctic` enabled arctic's default features, which are `std` plus an
SMR backend, so a crate that declares `#![no_std]` quietly linked one anyway.
arctic 0.1.11 is the first release where this is fixable: before it,
`smr-ps-reclaim` forced `std` on by itself.

    --features arctic        arctic-wt [smr-ps-reclaim]      ps-reclaim [libc,spin]
    --features arctic,std    arctic-wt [smr-ps-reclaim,std]  ps-reclaim [libc,spin,std]

`congee` and `wti` now state `std` in the manifest, because neither crate is
no_std upstream and pretending otherwise only moves the failure later.

CI grows three steps in the existing job, no new runner:

  - the core and `hydrate` build for x86_64-unknown-none, which has no `std`
    to find, so the no_std claim is checked against a target rather than a host
  - the arctic graph is asserted to carry no `std` feature; the assertion was
    run against `--features arctic,std` first to prove it can fail

The arctic backend itself cannot target bare metal: ps-reclaim stores its
participant slot in thread-local storage and its no_std path is pthread keys,
so it needs an OS. no_std here means no standard library, not no operating
system, and that distinction is now written down instead of assumed.
@pathscale

Copy link
Copy Markdown
Owner Author

Folded into #4. Same commits, no new branch.

@pathscale pathscale closed this Sep 7, 2026
@pathscale
pathscale deleted the feat/no-std-backends branch September 7, 2026 09:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant