4.9 KiB
| id | ticket | title | status | created | completed | tags | |||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| PLN-0033 | perf-vm-allocation-and-copy-pressure | Plan - VM Hot Path Ownership and String Copy Pressure | done | 2026-04-20 | 2026-04-20 |
|
Briefing
Implement the runtime-core portion of DEC-0018 by reducing repeated string payload copies and hot-path allocation pressure without changing guest-visible semantics.
Decisions de Origem
DEC-0018- VM Allocation and Copy Pressure Baseline
Alvo
Change the VM core so that hot paths over numeric values and already-materialized values converge toward zero allocation, while preserving the public semantics of string values and GET_GLOBAL.
Escopo
Included
- VM value representation and ownership audit for hot paths.
GET_GLOBALcopy-pressure reduction without semantic drift.- String-producing opcode hot-path changes, especially
ADD. - Unit and focused integration coverage for unchanged semantics.
Excluded
- Public ABI changes.
- Certification or host-facing telemetry policy changes.
- Broad speculative string interning or copy-on-write rollout unless directly required by a concrete implementation step.
Fora de Escopo
- Cartridge language changes.
- Host debugger protocol changes.
- General fault/log path rewrites beyond keeping them isolated from hot-path work.
Plano de Execucao
Step 1 - Audit current hot-path ownership
What: Identify the exact VM operations that still clone or allocate on already-materialized hot paths.
How: Review Value, GET_GLOBAL, ADD, related stack helpers, and any nearby string coercion paths; classify each site as unavoidable first materialization versus avoidable repeated copy.
File(s): crates/console/prometeu-bytecode/src/value.rs, crates/console/prometeu-vm/src/virtual_machine.rs
Step 2 - Rework internal representation/ownership for expensive payloads
What: Introduce the smallest internal representation change needed to avoid repeated payload copies for expensive values.
How: Prefer internal ownership changes that preserve guest-visible semantics. If strings or other expensive payloads need to move behind handles or equivalent internal storage, keep the public value meaning unchanged and constrain the change to runtime-core internals.
File(s): crates/console/prometeu-bytecode/src/value.rs, crates/console/prometeu-vm/src/heap.rs, crates/console/prometeu-vm/src/object.rs, crates/console/prometeu-vm/src/virtual_machine.rs
Step 3 - Fix GET_GLOBAL without semantic change
What: Remove avoidable repeated copy pressure from GET_GLOBAL.
How: Keep the observable contract identical while changing retrieval/storage internals so already-materialized expensive payloads are not recopied on each hot-path access.
File(s): crates/console/prometeu-vm/src/virtual_machine.rs
Step 4 - Optimize string-producing opcode paths
What: Reduce repeated allocation/copy pressure in string-producing operations, starting with ADD.
How: Separate true new-string creation from repeated cloning of existing payloads. Ensure any operation that semantically creates a new string still does so correctly, while avoiding extra transient allocations around existing materialized values.
File(s): crates/console/prometeu-vm/src/virtual_machine.rs, related helper modules if introduced
Step 5 - Preserve semantic coverage
What: Prove semantics did not change while ownership internals did.
How: Add/update tests for constants, dynamic strings, globals, arithmetic/string ADD, and edge cases where strings cross stack/global boundaries.
File(s): crates/console/prometeu-vm/src/virtual_machine.rs, VM test modules
Criterios de Aceite
GET_GLOBALkeeps its public semantics unchanged.- Hot-path access to already-materialized expensive values no longer performs avoidable repeated payload copies.
- Numeric hot paths remain allocation-free.
- String operations that truly create a new string remain correct and deterministic.
- VM tests cover constant-pool strings, runtime-created strings, and globals under the new ownership model.
Tests / Validacao
Unit Tests
- Value/ownership tests for expensive payload movement or referencing.
- VM opcode tests for
GET_GLOBAL,SET_GLOBAL, and stringADD.
Integration Tests
- Small bytecode programs that read globals repeatedly and mix numeric/string paths.
Manual Verification
- Review allocation-sensitive hotspots in the final implementation to confirm repeated copies were removed rather than merely relocated.
Riscos
- Internal representation changes may ripple into GC/root traversal.
- A partial fix may hide copies in helper methods rather than eliminate them.
- Over-optimizing strings could accidentally change guest-visible behavior if semantic boundaries are not defended by tests.
Dependencies
DEC-0018- Existing VM heap/object/root traversal contracts