文档同步双可执行架构:STCompiler + BytecodeExecutor。

- 12.10 重写为两条命令:STCompiler 编译出 .stb + sidecar,BytecodeExecutor 加载执行
- 12.0 删独立 stc.exe,12.13 依赖方向改为 STCompiler/BytecodeExecutor
- 指令与映像.md 新增「映像文件(.stb)与 sidecar」节,I/O 绑定不进映像
- host/ 改名 executor/,宿主入口.md 重写为执行器入口.md
- README / tests / examples / isa README 同步
This commit is contained in:
2026-08-19 13:59:50 +08:00
parent 94accd52c3
commit 7c855b1618
11 changed files with 111 additions and 87 deletions
+14 -13
View File
@@ -8,23 +8,23 @@
多个 .st
↑ project.toml 列出
compiler词法 / 语法 → 符号表 → 类型检查 → 寄存器码 → 链接)
STCompilercompiler 库:词法 / 语法 → 符号表 → 类型检查 → 寄存器码 → 链接)
单一映像(函数字节码 + 全局 / FB 数据槽 + 工程哈希)
<name>.stb 映像 + <name>.runtime.toml sidecar
vm 按扫描周期执行;host 喂 I、收 Q、给 Δt、回放
BytecodeExecutorvm 按扫描周期执行;喂 I、收 Q、给 Δt、回放
```
## 目录
```text
.
├── CMakeLists.txt # 顶层工程:加入四个目标,并启用测试
├── CMakeLists.txt # 顶层工程:加入目标,并启用测试
├── cmake/ # CMake 辅助(警告、C++ 标准等),不是业务模块
├── isa/ # 共享契约:指令、映像、定宽类型
├── compiler/ # ST / toml 编译器
├── vm/ # 寄存器虚拟机
├── host/ # 可执行入口:编译并跑扫描周期
├── compiler/ # ST / toml 编译器(库)+ STCompiler 可执行入口
├── vm/ # 寄存器虚拟机(库)
├── executor/ # BytecodeExecutor:加载 .stb + sidecar 并执行
├── examples/ # 样例工程(给人看、跑通最小闭环)
│ └── line1/ # MAIN + Motor FB + I/O
│ ├── project.toml
@@ -40,14 +40,15 @@ vm 按扫描周期执行;host 喂 I、收 Q、给 Δt、回放
## 模块与 CMake 目标
四个链接目标,与目录一一对应。`compiler``vm` 不互相链接,合同放在 `isa`
三个静态库与两个可执行,与目录一一对应。`compiler``vm` 不互相链接,合同放在 `isa`依赖方向:`STCompiler → compiler → isa``BytecodeExecutor → vm → isa`
| 目录 | 目标 | 类型 | 依赖 | 职责 |
|---|---|---|---|---|
| `isa/` | `isa` | `STATIC``INTERFACE` | 无 | 约 20 条指令编码、映像头、工程哈希、`BOOL` / `INT` / `TIME` 宽度 |
| `isa/` | `isa` | `STATIC` | 无 | 约 20 条指令编码、映像头、工程哈希、`BOOL` / `INT` / `TIME` 宽度 |
| `compiler/` | `compiler` | `STATIC` | `isa` | 读 toml、收齐 `.st`、解析、链接、定址、类型检查、编寄存器码、写映像 |
| `vm/` | `vm` | `STATIC` | `isa` | 一台 VM、一个入口、一份映像;扫描周期、寄存器、FB、有界 `CALL` / `RET` |
| `host/` | `host` | `EXECUTABLE` | `compiler``vm` | 读工程、编译、按 toml 的 io 采样 I、执行 `PROGRAM MAIN`、写回 Q、用 Δt 推进定时器 / 计数器、回放 |
| `compiler/` | `STCompiler` | `EXECUTABLE` | `compiler``isa` | `STCompiler <project.toml> -o <name>.stb`:编译并写映像 + sidecar`--disasm` 可反汇编 |
| `executor/` | `BytecodeExecutor` | `EXECUTABLE` | `vm``isa` | `BytecodeExecutor <name>.stb`:加载映像 + sidecar,采样 I、执行 `PROGRAM MAIN`、写回 Q、用 Δt 推进定时器 / 计数器、回放 |
词法、语法、符号表、检查、codegen、链接都留在 `compiler` 一个库里,不再拆 CMake 子库。
@@ -63,9 +64,9 @@ toml **不声明变量**,只列出源文件、指定唯一 GVL、可选地把
每个扫描周期:采样 I → 从 `PROGRAM MAIN``pc=0` 执行到 `RET` → 写回 Q → 用本周期 Δt 推进 `TON` / `TOF` / `CTU`。无 GC、无堆、无线程;变量编译期分配。
### `host`
### `executor`BytecodeExecutor
第一版做成一条命令:编译 + 跑周期。不必再拆独立的编译器可执行文件
第一版两个可执行:`STCompiler` 编译出 `<name>.stb`(映像)+ `<name>.runtime.toml`sidecarI/O 绑定);`BytecodeExecutor` 加载后按扫描周期。不再有"一条命令编译 + 跑"。`dt_ms` / `cycle_limit` 从映像头取
### `examples/` 与 `tests/`
@@ -74,4 +75,4 @@ toml **不声明变量**,只列出源文件、指定唯一 GVL、可选地把
| `examples/line1/` | 计划中的最小样例:全局、`MotorStarter` FB、`PROGRAM MAIN` |
| `tests/` | 冻关键字、指令、符号表、链接错误(重复 `VAR_GLOBAL``io.var` 未声明等) |
`tests/` 通过 `add_test` `host` 或直接链接 `compiler` + `vm`
`tests/` 通过 `add_test``STCompiler` / `BytecodeExecutor`,或直接链接 `compiler` + `vm`。样例工程数据按「一份 toml + 若干 `.st`」分子目录存放,不做成 library