Transfer completed Go output without copies
This commit is contained in:
@@ -5,6 +5,28 @@ operation and applies the shared environment to its Go commands. It uses
|
||||
`internal/process` for cancellation, the working directory, output, and wrapped
|
||||
errors.
|
||||
|
||||
## Command output ownership
|
||||
|
||||
`Tool.Run` executes a status-only command. It forwards combined stdout and
|
||||
stderr to the optional writer while the child runs, then releases its capture
|
||||
on success. Failures include the captured diagnostic text and preserve the
|
||||
underlying process or forwarding error.
|
||||
|
||||
`Tool.Output` returns combined stdout and stderr for commands whose output is
|
||||
needed by the caller, such as compiler identification. After the child stops,
|
||||
the capture's backing bytes transfer to the caller without a second copy. A
|
||||
failed output command returns both those bytes and an error containing the
|
||||
diagnostic text. The capture remains in memory for the duration of the child;
|
||||
an 8 MiB forwarded capture currently allocates about 8.39 MB per operation,
|
||||
with the returned 8 MiB slice owned by its caller. Failed output also formats
|
||||
diagnostics into the error, so the returned bytes and diagnostic string can
|
||||
coexist. Disk-backed diagnostics could reduce large failure peaks, but add file
|
||||
lifecycle and cleanup work and remain a follow-up option.
|
||||
|
||||
Dependency preparation uses a separate command environment so proxy, private
|
||||
module, checksum, and cache settings remain available. Its completed capture
|
||||
uses the same ownership transfer when formatting a failure.
|
||||
|
||||
## Configuration discovery
|
||||
|
||||
The owner asks the installed `go` command for `GOHOSTOS` and `GOHOSTARCH`, then
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Computational Efficiency Implementation Plan
|
||||
|
||||
**Status:** Stages 1–8 complete; Stages 9–11 pending.
|
||||
**Status:** Stages 1–9 complete; Stages 10–11 pending.
|
||||
|
||||
## Purpose And Baseline
|
||||
|
||||
@@ -498,6 +498,24 @@ forwarded bytes and meaningful error content/cause. Run Go tool, validation,
|
||||
build, preparation, and affected CLI tests. Re-run output benchmarks and update
|
||||
[Go execution mechanics](../internal/gotool.md).
|
||||
|
||||
**Completion:** Complete. `Tool.Run` now returns status only, while `Tool.Output`
|
||||
returns combined stdout/stderr with ownership of the completed capture buffer;
|
||||
the shared private execution path preserves settings and arguments. Status
|
||||
success drops its capture, and both status and output failures retain complete
|
||||
diagnostics and underlying process or output-writer causes. Validation and
|
||||
artifact compilation use `Run`; compiler identification uses `Output`.
|
||||
Preparation retains its network-capable environment and formats diagnostics
|
||||
from the transferred buffer. Go tool fixtures cover forwarded output, large
|
||||
failure output, cancellation, and writer failure. Go tool, validation, build,
|
||||
facade, preparation, and CLI tests passed. The combined-output benchmark now
|
||||
measures 1.0–1.1 µs and 4,176 B/2 allocations for 4 KiB, and 1.51–1.56 ms and
|
||||
8,388,699–8,388,703 B/2 allocations for 8 MiB. The Stage 2 8 MiB result was
|
||||
2.02–2.36 ms and about 16.78 MB/3 allocations, including its capture copy.
|
||||
The returned 8 MiB slice remains caller-owned in memory; failed Output also
|
||||
creates diagnostic text. Disk-backed diagnostics remain a measured follow-up
|
||||
option because avoiding their additional lifecycle and cleanup work has not
|
||||
been justified here.
|
||||
|
||||
## Stage 10: Cache The Runtime Metadata Fallback
|
||||
|
||||
**Owners:** [runtimeinfo/version.go](../../internal/runtimeinfo/version.go) and
|
||||
|
||||
Reference in New Issue
Block a user