You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(plan): attribution, the programming-model three-way split, and a falsification target
Revises the design doc. Two of its own judgements were wrong and are corrected
in place rather than appended to, because a design doc whose corrections live
at the bottom is read top-down and gets the retracted version.
* RDC is plugin-side, engine change zero. Rechecked against the attribution
rule this revision adds: it names a vendor (test 1), changes no artifact
property (test 2) and invents no edge kind (test 3). Every primitive it
needs exists -- `action` with the `object` destination is "an external
step's object joins the ordinary link", twice. It therefore does not sit on
the critical path, which changes the staging.
* stdpar is islandable, so calling it mutually exclusive with mcpp's model
was an overclaim. `-stdpar` decomposes into a compile-side island and a
link-side allocator, and the allocator is a whole-image property imposed by
a dependency -- the shape `cxx_runtime` already established. What is lost
is the selling point ("change no source"), not the capability. docs/20's
two-way split should become three-way.
Three gaps added. The first came out of a manifest that reads badly:
[target.'cfg(not(any(accelerator = "cuda", accelerator = "vulkan")))'.build]
`accelerator` is an open vocabulary by design, and `not(any(<enumeration>))`
over an open vocabulary silently changes meaning as the ecosystem grows -- a
fifth backend edits the meaning of every fallback predicate already written.
The general rule is that an open vocabulary needs a "none" that does not
enumerate, and the spelling is already in this manifest: `os = "none"` is bare
metal, so `accelerator = "none"` is no device backend. Preferred over `cpu`,
which would make the axis carry two questions and leave the truth value of
`cfg(accelerator = "cpu")` under `accel = "cuda"` undecided.
The other two are the package-wide barrier a generated header creates
(`source`'s documented semantics: every compile edge of the package waits) and
Fortran, which is recorded as identified and deliberately given no design.
Also: an attribution rule (three ordered tests) so the engine/plugin boundary
is decided rather than argued each time; a note that "island" collides with
branch-island in linker vocabulary and cuts across single-source/separate-
source, with an alignment sentence rather than a rename; and CANN as the
experiment that could falsify the central claim, since all four existing lanes
are in one vendor lineage. Its decisive criterion is `git diff src/` empty.
0 commit comments