Files
endorphin-aster-vm/docs/operations

运行宿主

CLI 提供 VM 引导、源码解析/执行及文件基础信息,Server 提供状态与文件基础信息,二者不连接数据库。Storage 为未来数据库特殊类保留显式连接能力,见 数据库对象。以下构建和运行命令仅供用户指定的远端环境,本地不执行。

CLI

下列 Cargo 构建针对 Rust 实现与宿主;Endor 的设计是由平台自动准备字节码并解释执行,无需使用者自行构建程序。当前已有最小 run/eval 源码执行入口,见 执行与版本模型。

工作区要求 Rust 1.91 或兼容更高版本,镜像固定 rust:1.91.1-bookworm,依赖由 Cargo.lock 锁定。

cargo build --workspace --locked
cargo run -p cli -- bootstrap
cargo run -p cli -- help
cargo run -p cli -- parse crates/frontend/examples/basic.endor
cargo run -p cli -- parse - < crates/frontend/examples/basic.endor
cargo run -p cli -- parse --json crates/frontend/examples/basic.endor
cargo run -p cli -- run crates/compiler/examples/hello.endor
cargo run -p cli -- run --entry main crates/compiler/examples/calls.endor
cargo run -p cli -- eval - < crates/compiler/examples/literal.endor

bootstrap 创建两个 Record,输出 runtime=EndorObject、type_system=disabled、objects_distinct=true 和 heap_objects=2,显式释放后输出 released heap_objects=0。默认无参数执行同一示例。

parse 通过 EndorReader 严格读取 UTF-8 源码文件;parse - 从 stdin 读到 EOF,输入来源为 <stdin>,没有 REPL 提示符或会话求值。默认解析 module 模式,成功时输出 Rust Debug 格式的 AstRoot;--mode 支持 expression/interactive,--json 输出带 schema 的 JSON,见 AST 模型;失败时输出来源、行、列并返回非零退出码;阅读错误在进入 lexer 前返回。输入适配与 URI provider 见 阅读器。该命令只解析语法,不执行源码;语法与当前边界见 源码前端。

run 编译模块、初始化函数并调用无参数入口(默认 main),--entry 可指定名称;eval 执行一个完整表达式。二者支持文件或 - 读取 stdin 到 EOF,输出返回值,失败不输出成功结果。支持范围、命名空间释放及 traceback 精度见 编译链路,真实 Endor 输入见 可执行示例;frontend/basic.endor 含算术,仍仅作为解析样例。

CLI 不读取数据库环境,不创建基础信息数据库表。metadata put/get 通过 host 包写 UTF-8 JSON 文件,metadata import 仅导入缺失记录;示例、配置和协议见 宿主信息。输入与退出码见 cli/src。

HTTP

cargo run -p server
curl --fail http://127.0.0.1:8080/health
curl --fail http://127.0.0.1:8080/bootstrap

Server 创建空 VM 并绑定监听地址,默认 127.0.0.1:8080;通过 host 包写入文件 host.version,不读取数据库 URL、不建表。

端点 行为
GET /health 返回 200 和 status=ok;仅表明 HTTP 宿主存活,不包含数据库后端字段
GET /bootstrap 返回 object_model=EndorObject、type_system=false、heap_objects=0;只读、不分配对象

没有语言执行、对象写入或认证 API。Unix 上 Ctrl-C/SIGTERM 触发 Axum 优雅退出,最后的 Arc 释放时销毁 Vm;没有数据库池需要在此处关闭,也没有执行中脚本的取消协议。

数据库能力的使用位置

当前应用不把数据库作为启动依赖;即使进程带有失效 DATABASE_URL 或 SQLITE_PATH,也不会因此读取它们。特殊类将来需要连接时,宿主适配实现显式传入 DatabaseConfig,详见 配置。

Storage 支持 SQLite 文件/内存和 PostgreSQL,不自带应用 schema 或 key/value 数据模型。旧数据库数据保留原位,发布时只读导入到文件信息;新的普通宿主不会继续写入数据库;数据持久化也不自动保存 VM 堆、句柄或帧。

定位问题

现象 定位
Server 无法绑定地址 ASTER_LISTEN 与端口占用,见 配置
/health 正常但数据库不可用 health 不检测数据库;当前没有使用数据库的语言类
重启后 VM 对象消失 当前未实现 VM 快照,见 生命周期
需要连接或查询数据库 storage 和 数据库对象;先定义实际特殊类接口

容器与预置 PostgreSQL 见 部署,检查范围见 验证。返回 文档索引。