transform-tree 0.0.3__tar.gz → 0.0.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {transform_tree-0.0.3 → transform_tree-0.0.4}/Cargo.toml +6 -6
- {transform_tree-0.0.3 → transform_tree-0.0.4}/PKG-INFO +1 -1
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/Cargo.toml +25 -6
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/README.md +5 -3
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/lib.rs +12 -0
- transform_tree-0.0.4/crates/tf_tree/src/open.rs +1719 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/tree.rs +379 -25
- transform_tree-0.0.4/crates/tf_tree/tests/rendezvous.rs +3037 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/README.md +4 -2
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/check.rs +15 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/README.md +4 -2
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/loom_tests.rs +239 -1
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/participant.rs +120 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/tests.rs +119 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/README.md +4 -2
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_py/Cargo.lock +6 -6
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_py/Cargo.toml +4 -4
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_py/src/errors.rs +8 -5
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_py/src/offline.rs +1 -1
- {transform_tree-0.0.3 → transform_tree-0.0.4}/pyproject.toml +1 -1
- transform_tree-0.0.3/crates/tf_tree/src/open.rs +0 -799
- transform_tree-0.0.3/crates/tf_tree/tests/rendezvous.rs +0 -1421
- {transform_tree-0.0.3 → transform_tree-0.0.4}/LICENSE-APACHE +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/LICENSE-MIT +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/NOTICE +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/README.md +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/LICENSE-APACHE +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/LICENSE-MIT +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/NOTICE +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/bin/rendezvous_child.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/cache.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/cbor.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/frozen.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/src/unstable.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/await_frames.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/batch.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/behavior.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/common/mod.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/construction.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/counters.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/derivatives.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/enumeration.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/feature_gates.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/frozen.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/lookup.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/math_reexports.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/owned_writer.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/plan_cache_identity.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree/tests/tsan.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/Cargo.toml +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/LICENSE-APACHE +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/LICENSE-MIT +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/NOTICE +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/frozen.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/header.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/heap.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/layout.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/lib.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/src/mapped.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_arena/tests/heap_alignment.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/Cargo.toml +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/LICENSE-APACHE +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/LICENSE-MIT +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/NOTICE +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/arena_view.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/bench_probe.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/buffer.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/counters.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/edge.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/error.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/frame.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/layout.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/lib.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/plan.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/sample.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/sync.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_core/src/topology.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/Cargo.toml +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/LICENSE-APACHE +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/LICENSE-MIT +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/NOTICE +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/bin/ipc_child.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/client.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/error.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/fork.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/identity.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/lib.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/lockfile.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/ofd.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/open.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/procstat.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/rendezvous.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/runtime_dir.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/server.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/src/wire.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_ipc/tests/multiprocess.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/Cargo.toml +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/LICENSE-APACHE +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/LICENSE-MIT +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/NOTICE +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/README.md +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/dualquat.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/interp.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/iso3.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/lib.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/quat.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/reference.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/src/twist.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/tests/proptests.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_math/tests/slerp_public.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_py/src/lib.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/crates/tf_tree_py/src/tree.rs +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/python/tf_tree/__init__.py +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/python/tf_tree/_core.pyi +0 -0
- {transform_tree-0.0.3 → transform_tree-0.0.4}/python/tf_tree/py.typed +0 -0
|
@@ -45,7 +45,7 @@ exclude = [
|
|
|
45
45
|
# an MSRV raise reaches nobody who did not opt into it by editing a manifest.
|
|
46
46
|
# The rule comes back into force at 0.1.0, where a minor slot exists again.
|
|
47
47
|
# `SUPPORT.md`'s MSRV section carries the same statement in its own voice.
|
|
48
|
-
version = "0.0.
|
|
48
|
+
version = "0.0.4"
|
|
49
49
|
edition = "2021"
|
|
50
50
|
# **1.87, and each step was forced by a dependency rather than chosen.**
|
|
51
51
|
#
|
|
@@ -122,8 +122,8 @@ unexpected_cfgs = { level = "warn", check-cfg = ['cfg(loom)'] }
|
|
|
122
122
|
[workspace.dependencies]
|
|
123
123
|
# Intra-workspace crates (version pinned so publishable crates carry a real
|
|
124
124
|
# requirement, not a path wildcard).
|
|
125
|
-
tf_tree_math = { path = "crates/tf_tree_math", version = "0.0.
|
|
126
|
-
tf_tree_arena = { path = "crates/tf_tree_arena", version = "0.0.
|
|
125
|
+
tf_tree_math = { path = "crates/tf_tree_math", version = "0.0.4" }
|
|
126
|
+
tf_tree_arena = { path = "crates/tf_tree_arena", version = "0.0.4" }
|
|
127
127
|
# Phase 2 shared memory (see docs/PHASE2.md §2). Linux-only, opt-in via the
|
|
128
128
|
# `shm` feature; `linux_raw` backend so there is no libc crate and no C build.
|
|
129
129
|
# Only `tf_tree_ipc`, and only for `fcntl(F_OFD_*)`: rustix has no OFD locking
|
|
@@ -138,9 +138,9 @@ rustix = { version = "1.1", default-features = false, features = ["mm", "fs", "s
|
|
|
138
138
|
# measurement — the "counters off" row was measuring the counters-on engine.
|
|
139
139
|
# Every crate that wants them re-enables them through its own `counters`
|
|
140
140
|
# feature, which is what makes the switch actually switch.
|
|
141
|
-
tf_tree_core = { path = "crates/tf_tree_core", version = "0.0.
|
|
142
|
-
tf_tree_ipc = { path = "crates/tf_tree_ipc", version = "0.0.
|
|
143
|
-
tf_tree = { path = "crates/tf_tree", version = "0.0.
|
|
141
|
+
tf_tree_core = { path = "crates/tf_tree_core", version = "0.0.4", default-features = false }
|
|
142
|
+
tf_tree_ipc = { path = "crates/tf_tree_ipc", version = "0.0.4" }
|
|
143
|
+
tf_tree = { path = "crates/tf_tree", version = "0.0.4", default-features = false }
|
|
144
144
|
# publish = false crates, wired by path only (no version requirement published).
|
|
145
145
|
# **`default-features = false` for the same load-bearing reason as `tf_tree`
|
|
146
146
|
# above, and it is easy to miss here.** `tf_tree_bench` has its own
|
|
@@ -75,12 +75,31 @@ shm = ["tf_tree_arena/shm", "dep:tf_tree_ipc"]
|
|
|
75
75
|
# rustdoc — but it is no longer the only thing standing between this feature
|
|
76
76
|
# split and a compile error nobody sees.
|
|
77
77
|
unstable = []
|
|
78
|
-
#
|
|
79
|
-
#
|
|
80
|
-
#
|
|
81
|
-
#
|
|
82
|
-
#
|
|
83
|
-
#
|
|
78
|
+
# **Two seams a test cannot otherwise stand in.** Off by default and absent from
|
|
79
|
+
# the API entirely unless enabled; both are `#[doc(hidden)]`.
|
|
80
|
+
#
|
|
81
|
+
# 1. `CLAIM_WINDOW_HOOK` — a single injection point inside `Tree::claim`,
|
|
82
|
+
# between the arena CAS and the lease `SETLK` (`docs/decisions/0005` §5). The
|
|
83
|
+
# window it exposes is one syscall wide and there is no other way to place a
|
|
84
|
+
# reaper inside it deterministically, but a published hook that runs
|
|
85
|
+
# arbitrary code mid-claim is not something a shipped build should carry.
|
|
86
|
+
# 2. `reclamation_verdict_for_test` — `docs/decisions/0028` plan step 2's
|
|
87
|
+
# reclamation predicate, which is private and whose two production callers
|
|
88
|
+
# both act on a verdict without reporting one: the owner's slot assigner
|
|
89
|
+
# (that record's step 3) stops at the first grantable slot, and
|
|
90
|
+
# `Tree::reap_participants` (step 5) reports a slot count — so `Live` and
|
|
91
|
+
# `Unknown`, the two verdicts that collect nothing for opposite reasons, are
|
|
92
|
+
# indistinguishable through either. The five multiprocess tests around it
|
|
93
|
+
# turn on facts
|
|
94
|
+
# only the kernel produces (a `SIGSTOP`ped process keeps its lock byte, a
|
|
95
|
+
# `SIGKILL`ed one loses it, a read-only joiner holds one and writes no arena
|
|
96
|
+
# record), so they cannot be unit tests inside the crate, and nothing outside
|
|
97
|
+
# it can name a private function. The same feature adds the probe counter the
|
|
98
|
+
# seam reports, which is the only part of the predicate's read order a
|
|
99
|
+
# multiprocess test can observe.
|
|
100
|
+
#
|
|
101
|
+
# Enabled by `just shm-rendezvous`, and linted by `just shm-check`'s
|
|
102
|
+
# `--features shm,test-hooks,unstable` clippy pass.
|
|
84
103
|
test-hooks = []
|
|
85
104
|
|
|
86
105
|
[dependencies]
|
|
@@ -115,11 +115,13 @@ exception — it is a private read-only mapping and a child inherits it intact.
|
|
|
115
115
|
|
|
116
116
|
## Version
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
**`0.0.x` promises nothing.** Cargo treats every `0.0.x` release as
|
|
119
119
|
incompatible with every other — `tf_tree = "0.0.1"` means `^0.0.1`, which
|
|
120
120
|
matches `0.0.1` and nothing else — so a later release reaches no existing
|
|
121
|
-
dependant through `cargo update`. That is the intended signal
|
|
122
|
-
|
|
121
|
+
dependant through `cargo update`. That is the intended signal: pin exactly, and
|
|
122
|
+
expect a later release to break. The current number is deliberately not repeated
|
|
123
|
+
here — this line said `0.0.1` for three releases, because nothing gates a
|
|
124
|
+
version in prose. The reasoning is
|
|
123
125
|
written out in the repository's
|
|
124
126
|
[`Cargo.toml`](https://github.com/NoeFontana/tf_tree/blob/main/Cargo.toml) under
|
|
125
127
|
`[workspace.package] version`, and the release notes are in
|
|
@@ -315,6 +315,18 @@ mod open;
|
|
|
315
315
|
#[cfg(all(feature = "shm", target_os = "linux"))]
|
|
316
316
|
pub use open::{open, CreatePolicy, Open, OpenError};
|
|
317
317
|
|
|
318
|
+
/// Test scaffolding for `docs/decisions/0028` plan step 2's reclamation
|
|
319
|
+
/// predicate, which is private. Its two production callers are the owner's
|
|
320
|
+
/// slot assigner (that record's step 3) and [`Tree::reap_participants`] (step
|
|
321
|
+
/// 5); both act on the verdict without reporting one — the assigner stops at
|
|
322
|
+
/// the first grantable slot, the sweep reports a count — and neither a grant
|
|
323
|
+
/// nor a count can separate the two verdicts that collect nothing. Absent
|
|
324
|
+
/// unless `--features test-hooks`; see
|
|
325
|
+
/// [`open::reclamation_verdict_for_test`].
|
|
326
|
+
#[cfg(all(feature = "test-hooks", feature = "shm", target_os = "linux"))]
|
|
327
|
+
#[doc(hidden)]
|
|
328
|
+
pub use open::reclamation_verdict_for_test;
|
|
329
|
+
|
|
318
330
|
/// **The unstable tier — `docs/API.md` §2.6.** Enabling the `unstable` feature
|
|
319
331
|
/// is the waiver; read the module's own documentation for what it waives.
|
|
320
332
|
#[cfg(feature = "unstable")]
|