文档同步双可执行架构: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:
+21
-15
@@ -271,13 +271,13 @@ RET
|
||||
|
||||
## 10. 目录
|
||||
|
||||
仓库布局见根目录 `README.md`。实现时按四个 CMake 目标拆,样例不放仓库根:
|
||||
仓库布局见根目录 `README.md`。实现时按模块拆 CMake 目标(三个库 + 两个可执行),样例不放仓库根:
|
||||
|
||||
```text
|
||||
isa/ # 指令编码、映像头、定宽类型(compiler 与 vm 的合同)
|
||||
compiler/ # lexer parser symbols checker codegen linker
|
||||
vm/ # 扫描周期、寄存器、映像、FB
|
||||
host/ # 喂 I、收 Q、Δt、回放
|
||||
compiler/ # lexer parser symbols checker codegen linker;STCompiler 入口在 src/main.cpp
|
||||
vm/ # 扫描周期、寄存器、映像、FB(库)
|
||||
executor/ # BytecodeExecutor:加载 .stb + sidecar,喂 I、收 Q、Δt、回放
|
||||
examples/line1/ # 第 11 节最小样例(给人看)
|
||||
tests/ # 冻规则用的正例 / 负例
|
||||
```
|
||||
@@ -327,13 +327,13 @@ END_PROGRAM
|
||||
|
||||
原则:**先冻合同,再解析,再链接,最后写 VM**。`compiler` 与 `vm` 不互链,合同只进 `isa`。每一阶段先有可运行的测试,再进入下一阶段。一人约 4~8 周做到第 11 节 `line1`。
|
||||
|
||||
第一版不做:图染色、SSA、WHILE 有界证明、异常表、闭包、优化、`REAL`、独立 `stc.exe`。
|
||||
第一版不做:图染色、SSA、WHILE 有界证明、异常表、闭包、优化、`REAL`。
|
||||
|
||||
---
|
||||
|
||||
### 12.0 骨架(约 1 天)
|
||||
|
||||
CMake 四个目标能空编译:`isa`、`compiler`、`vm`、`host`。`host` 先打印版本即可。
|
||||
CMake 三个库能空编译:`isa`、`compiler`、`vm`;两个可执行 `STCompiler`、`BytecodeExecutor` 先打印版本即可。
|
||||
|
||||
- 落下 `examples/line1/`:第 3 节 toml + 第 11 节三个 `.st`。
|
||||
- `tests/` 接上 CTest,先放一个必过的空测试。
|
||||
@@ -524,16 +524,22 @@ CMake 四个目标能空编译:`isa`、`compiler`、`vm`、`host`。`host` 先
|
||||
|
||||
---
|
||||
|
||||
### 12.10 host(约 2~3 天)
|
||||
### 12.10 双可执行:STCompiler 与 BytecodeExecutor(约 2~3 天)
|
||||
|
||||
一条命令:读 toml → `compiler` → `vm` 跑 N 个周期。不拆第二个可执行文件。
|
||||
编译与执行拆成两个可执行,映像 `.stb` 是中间产物:
|
||||
|
||||
- 按 `[[io.*]]` 从宿主缓冲采样 / 写回,不创造变量。
|
||||
- 把 `dt_ms` 每周期传给 VM。
|
||||
- 最小可观测:打印本周期 I/Q,或把寄存器/映像 dump 出来。
|
||||
```text
|
||||
STCompiler <project.toml> -o <name>.stb # 编译:读 toml + .st → 映像 + sidecar
|
||||
BytecodeExecutor <name>.stb [--cycles N] # 执行:加载 .stb + sidecar,跑 N 周期
|
||||
```
|
||||
|
||||
- `STCompiler` 链 `compiler` + `isa`;`BytecodeExecutor` 链 `vm` + `isa`,**不链 `compiler`**。
|
||||
- 产物两个文件:`<name>.stb`(映像,魔数 `STSC`)+ `<name>.runtime.toml`(sidecar:I/O 绑定 var → 槽号 → channel/bit)。`[[io.*]]` 不进映像,sidecar 由 STCompiler 生成,不创造变量。
|
||||
- `dt_ms` / `cycle_limit` 从映像头取,sidecar 不重复配置。
|
||||
- 最小可观测:BytecodeExecutor 打印本周期 I/Q,或把寄存器/映像 dump 出来。
|
||||
- 回放:读预先录制的 I 序列(文本即可),不接真实硬件。
|
||||
|
||||
完成:`host examples/line1/project.toml` 能编译并跑若干周期。
|
||||
完成:`STCompiler examples/line1/project.toml -o line1.stb` 产出两个文件;`BytecodeExecutor line1.stb` 能跑若干周期。
|
||||
|
||||
---
|
||||
|
||||
@@ -556,7 +562,7 @@ CMake 四个目标能空编译:`isa`、`compiler`、`vm`、`host`。`host` 先
|
||||
| 2 | 12.5:AST,能 parse `line1`,拒绝多余特性 |
|
||||
| 3 | 12.6~12.7:链接、定址、类型、io 校验 |
|
||||
| 4 | 12.8 前半 + 12.9 前半:赋值/短路/IF 出映像,VM 能跑 |
|
||||
| 5 | 12.8 后半 + 12.10:CALL、FB、host 跑起来 |
|
||||
| 5 | 12.8 后半 + 12.10:CALL、FB、两个可执行跑起来 |
|
||||
| 6 | 定时器/计数器、io、Δt、`line1` 语义 |
|
||||
| 7~8 | 20 用例、回放、单步、补漏 |
|
||||
|
||||
@@ -567,8 +573,8 @@ CMake 四个目标能空编译:`isa`、`compiler`、`vm`、`host`。`host` 先
|
||||
### 12.13 依赖方向(全程遵守)
|
||||
|
||||
```text
|
||||
host → compiler → isa
|
||||
host → vm → isa
|
||||
STCompiler → compiler → isa
|
||||
BytecodeExecutor → vm → isa
|
||||
```
|
||||
|
||||
- 指令或映像布局有变:先改 `isa` 和编解码测试,再改两端。
|
||||
|
||||
Reference in New Issue
Block a user