The backend's list ends at a whole-program compiler, not a dev one
This commit is contained in:
parent
c291cb7715
commit
d9bc9e4190
32
NEXT.md
32
NEXT.md
@ -28,6 +28,38 @@ spelled out and it is the one place it is not.
|
|||||||
The fix is a function in `runtime/` — that directory was held by another lane when this landed, which
|
The fix is a function in `runtime/` — that directory was held by another lane when this landed, which
|
||||||
is the whole reason it was left. Say what the caller promised and what was passed.
|
is the whole reason it was left. Say what the caller promised and what was passed.
|
||||||
|
|
||||||
|
## The step after the backend's list, and it is the one the backend exists for
|
||||||
|
|
||||||
|
**Named here because it is not on the list below and would otherwise be discovered late.**
|
||||||
|
|
||||||
|
Finishing items 1-6 below gives a second **whole-program** compiler. `--x86` is refused with `--dev`
|
||||||
|
today, deliberately, and `DISCUSS.md` item 16 says it has no cells. So at the end of that list the
|
||||||
|
backend can build `sand.flan` and cannot serve a single `C-c C-c`.
|
||||||
|
|
||||||
|
What the backend was for is `DISCUSS.md` item 13's measurement: `llc` and `ld` are **about 21ms of a
|
||||||
|
35ms redefinition**, and removing them is the only thing that touches that number. Collecting it means
|
||||||
|
emitting a **redefinition module** — one function, compiled and installed into a running process
|
||||||
|
through an indirection cell — which is what `Build.shared` does on the LLVM path.
|
||||||
|
|
||||||
|
Concretely, and none of it is scoped yet:
|
||||||
|
|
||||||
|
- **`Fnval`'s indirection cell.** Item 4 below. `FnAddr (Fnval n)` emits the symbol, which is right
|
||||||
|
for a whole-program build and wrong the instant anything is redefined into it. This is the
|
||||||
|
prerequisite and it is already on the list; what follows is not.
|
||||||
|
- **A module rather than a program.** `Build.shared` compiles one function to a `.so` that
|
||||||
|
`flan_dev.c` loads. The x86 path writes an assembly file for a whole program; emitting a relocatable
|
||||||
|
object for one function, with the right symbols exported and the cells left external, is different
|
||||||
|
work.
|
||||||
|
- **The dev registry.** A run-time-new name needs `flan_dev_cell`. `Emit.redefinition` already
|
||||||
|
declares 256 siblings for an imported package and that cost was measured at +3.6ms per eval; the
|
||||||
|
x86 path has no equivalent.
|
||||||
|
- **DWARF.** `flan dev --debug` exists and `--x86` refuses `--debug`. A dev backend that cannot be
|
||||||
|
debugged is a narrower tool than the one it replaces.
|
||||||
|
- **Then measure, because the whole case rests on it.** If a hand-written backend does not actually
|
||||||
|
beat 35ms end to end, the argument for it was wrong and that is worth knowing. `DISCUSS.md` item 13
|
||||||
|
says the backend is decided at step 4 on a measurement taken at step 3, and this is that
|
||||||
|
measurement finally being takeable.
|
||||||
|
|
||||||
## The backend, in the order that finishes it
|
## The backend, in the order that finishes it
|
||||||
|
|
||||||
`DISCUSS.md` item 16 is the report and its verdict is the sequencing: *"the wiring is done and it was
|
`DISCUSS.md` item 16 is the report and its verdict is the sequencing: *"the wiring is done and it was
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user