docs: clarify interpreted execution and platform resource versions
Verify databases and deploy Aster VM / verify-and-deploy (push) Successful in 6m46s

This commit is contained in:
2026-10-19 13:23:07 +08:00
parent 483d9d1717
commit 78fc859825
17 changed files with 103 additions and 20 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
# 运行时设计
本目录解释跨越 core 多个模块的运行时契约。文件与函数定位见 [core/src README](../../crates/core/src/README.md),测试定位见 [core/tests README](../../crates/core/tests/README.md)。
本目录解释源码输入、前端及跨越 core 多个模块的运行时契约。文件与函数定位见 [core/src README](../../crates/core/src/README.md),测试定位见 [core/tests README](../../crates/core/tests/README.md)。
| 主题 | 内容 |
| --- | --- |
@@ -13,4 +13,4 @@
| [数据库特殊类](database-objects.md) | 显式连接、调用方数据模型、未来类接入与资源生命周期 |
| [生命周期](lifecycle.md) | 宿主持有 Vm、帧执行根、结果所有权、错误退出和整体销毁 |
文本/环境约束和执行限额集中在 [配置](../operations/configuration.md);组件之间的关系见 [系统架构](../architecture/README.md)。返回 [文档索引](../README.md)。
文本/环境约束和执行限额集中在 [配置](../operations/configuration.md);组件之间的关系见 [系统架构](../architecture/README.md),解释执行与源码/平台版本的设计方向见 [执行与版本模型](../architecture/execution-and-versions.md)。返回 [文档索引](../README.md)。
+1 -1
View File
@@ -119,7 +119,7 @@ fn main() -> Result<(), endor_core::VmError> {
}
```
当前已能通过字节码读取、写入和删除共享 Cell,并创建捕获参数的 Cell。LoadClosure 与 MakeFunction 可以在外围函数运行时创建共享这些 Cell 的嵌套函数,外围帧返回后 Cell 仍由闭包保活。上面的 Python 代码说明闭包语义;独立 frontend 已能解析基础函数,但尚无源码闭包语法或字节码编译器,代码对象仍由宿主准备。
当前已能通过字节码读取、写入和删除共享 Cell,并创建捕获参数的 Cell。LoadClosure 与 MakeFunction 可以在外围函数运行时创建共享这些 Cell 的嵌套函数,外围帧返回后 Cell 仍由闭包保活。上面的 Python 代码说明闭包语义;独立 frontend 已能解析基础函数,但尚无源码闭包语法或 AST 到字节码生成,代码对象仍由宿主准备。
## 字符串与异常的准确含义
+4 -2
View File
@@ -1,6 +1,8 @@
# 小型字节码 VM
当前提供指令与代码对象、内部执行帧、取指执行循环,语言函数已接入执行器。参考 CPython 3.14 的职责划分和栈式执行设计;源码 lexer/parser 由独立 [frontend](frontend.md) 提供,尚无 AST 到字节码编译器;执行器不读取 Python `.pyc`,不承诺 CPython 操作码编号、ABI 或完整语言兼容性。
当前提供指令与代码对象、内部执行帧、取指执行循环,语言函数已接入执行器。参考 CPython 3.14 的职责划分和栈式执行设计;源码 lexer/parser 由独立 [frontend](frontend.md) 提供,尚未接入 AST 到字节码生成;执行器不读取 Python `.pyc`,不承诺 CPython 操作码编号、ABI 或完整语言兼容性。
Endor 是解释型语言,字节码是内部执行表示;从 AST 生成字节码属于自动执行准备,不要求使用者发布编译产物。当前没有字节码持久化缓存或跨版本装载协议;现有不可变代码对象仍可在 VM 内共享复用。平台升级与源码修订的区别见 [执行与版本模型](../architecture/execution-and-versions.md)。
## 与 CPython 的对应
@@ -156,7 +158,7 @@ fn main() -> Result<(), endor_core::VmError> {
运行错误仍返回 `VmError`。`last_traceback()` 另提供从外到内的函数名、文件、代码首行和出错指令偏移;它保存独立元数据,不保活已经清理的帧。首行是代码声明的 first_line,不是由行号表推导出的实际错误源码行。成功的新一次调用会清空旧记录。尚无语言异常对象传播、raise/try/except 或完整源码行号表。
暂未实现:源码编译器、关键字/可变参数、生成器/协程、迭代器专用指令、数值算术、自动方法绑定、指令特化和 JIT。
暂未实现:AST 到字节码生成、关键字/可变参数、生成器/协程、迭代器专用指令、数值算术、自动方法绑定、指令特化和 JIT。
## 验证
+2 -2
View File
@@ -1,6 +1,6 @@
# 源码词法与 PEG 语法前端
frontend 包提供 [Endor 阅读器](reader.md)、手写 Rust lexer 和 rust-peg 生成的 token parser。宿主通过 SourceUnit 调用带来源的词法/语法入口,原有 lex、parse、parse_expression 保留;CLI 提供 parse 文件/stdin 命令;结果是 AST,还没有 AST 到字节码的编译器、类型检查、名称解析或源码执行。Core 不依赖 frontend 或 peg,仍保持零外部依赖。
frontend 包提供 [Endor 阅读器](reader.md)、手写 Rust lexer 和 rust-peg 生成的 token parser。宿主通过 SourceUnit 调用带来源的词法/语法入口,原有 lex、parse、parse_expression 保留;CLI 提供 parse 文件/stdin 命令;结果是 AST,尚未实现 AST 到字节码生成、类型检查、名称解析或源码执行。Core 不依赖 frontend 或 peg,仍保持零外部依赖。
首版以 Endorphin-Language 设计稿的基础词法、表达式与函数章节为起点,语法可以继续修改;设计稿中的未完成部分不作为阻塞前端实现的前置条件,也不被整体视作已经实现的语言能力。这里维护当前解析契约;源码位置见 [frontend](../../crates/frontend/README.md)。
@@ -64,4 +64,4 @@ use、namespace、class、agent、完整类型语法、条件/循环、比较
`cli parse <file>` 与 `cli parse -` 成功时输出 Rust Debug 格式的 AST,失败时在 stderr 输出来源/行/列和诊断并返回非零退出码;`-` 表示从 stdin 读到 EOF,不是 REPL。阅读与来源包装规则见 [阅读器](reader.md)。AST Debug 文本不是稳定的序列化协议。命令不执行源码、不初始化 VM、不连接数据库;具体运行与本地禁测约定见 [运行](../operations/README.md) 和 [验证](../operations/validation.md)。
后续编译器应将 AST 经名称/闭包分析转换为现有字节码,不另设 AST 求值器;解析成功不表示表达式已有运行语义。VM 虽已支持 MakeFunction,但从源码创建函数仍需要编译器接入。解析器也不是不可信代码沙箱,当前没有通用输入大小或解析递归深度限额。
后续需要将 AST 经名称/闭包分析转换为现有字节码,再交给 VM 解释执行。这是解释器内部的编译/执行准备步骤,不要求使用者先构建程序,见 [执行与版本模型](../architecture/execution-and-versions.md)。这条连接尚未实现;解析成功不表示表达式已有运行语义。VM 虽已支持 MakeFunction,但从源码创建函数仍需要字节码生成接入。解析器也不是不可信代码沙箱,当前没有通用输入大小或解析递归深度限额。
+1 -1
View File
@@ -100,6 +100,6 @@ compare 的反向规则是 Lt 对应 Gt、Le 对应 Ge,Eq/Ne 保持不变。
已实现:统一对象结构、稳定地址、代际句柄、身份、显式引用计数、托管属性、原生操作覆盖、比较与哈希、原生调用、资源清理和显式循环回收。
尚未实现:Python type 系统、语言根类、继承和描述符、源码解析与编译器、可变 VM 调用上下文、自动/分代/增量 GC、语言终结器/复活、完整资源限额和 VM 快照;执行器已有帧数和指令数限额。数据库仅为未来特殊类提供按需连接,普通对象或宿主基础信息不自动持久化,详见 [数据库特殊类](database-objects.md)。
尚未实现:Python type 系统、语言根类、继承和描述符、AST 到字节码生成、可变 VM 调用上下文、自动/分代/增量 GC、语言终结器/复活、完整资源限额和 VM 快照;独立 frontend 已提供阅读器、lexer/parser 与 AST,尚未接入源码执行,见 [源码前端](frontend.md);执行器已有帧数和指令数限额。数据库仅为未来特殊类提供按需连接,普通对象或宿主基础信息不自动持久化,详见 [数据库特殊类](database-objects.md)。
验证范围与执行约定见 [验证](../operations/validation.md)。
+2 -2
View File
@@ -34,11 +34,11 @@ Read 阶段的 SourceReadError 与词法/语法 Diagnostic 分开:Io 保留
## 平台 URI 边界
EndorSourceProvider::load(&str) 返回 io::Result<ResolvedEndorSource>。ResolvedEndorSource 包含 bytes 和非空 revision;宿主负责名称解析、权限检查、版本选择与实际存储访问,失败直接返回相应错误。例如权限不足可使用 PermissionDenied,不存在可使用 NotFound。
EndorSourceProvider::load(&str) 返回 io::Result<ResolvedEndorSource>。ResolvedEndorSource 包含 bytes 和非空 revision;宿主负责名称解析、权限检查、版本选择与实际存储访问,失败直接返回相应错误。接口要求 bytes 与 revision 对应同一次选定的读取结果,Reader 无法自行验证这种对应关系。例如权限不足可使用 PermissionDenied,不存在可使用 NotFound。
Reader 只校验 scheme 为不区分大小写的 endor、冒号后非空,且 URI 不含原始空白/控制字符。它不固定 workspace/namespace 的 URI 路径形式,不解码百分号、不实现相对 URI,也不规定修订选择器或 hash 算法。scheme 以外的协议校验由宿主执行,原 URI 不重写。每次读取只调用一次 provider,之后词法和语法处理不再解析 URI。
revision 是宿主返回的原样标签;Reader 只拒绝全空白标签,不验证标签是否为内容 hash、不验证内容与 hash 的对应关系,也不实现资源历史、依赖锁、发布快照或签名。当前没有内置平台 provider、网络客户端、数据库存储或 CLI URI 执行入口。具体版本模型仍需另行设计。
revision 是宿主返回的原样标签;Reader 只拒绝全空白标签,不验证标签是否为内容 hash、不验证内容与 hash 的对应关系,也不实现资源历史、依赖锁、发布快照或签名。当前没有内置平台 provider、网络客户端、数据库存储或 CLI URI 执行入口。资源身份、源码内容 hash、依赖锁与发布快照的区别,以及平台统一升级的方向,见 [解释执行与平台资源版本](../architecture/execution-and-versions.md)。这些机制不由当前标签或 SourceUnit 自动实现;URI 具体形式和持久化模型仍待设计。
## CLI 与交互输入