3.4 KiB
3.4 KiB
5. Preflight 与 inflight
Endorphin 将执行准备与检查阶段称为 Preflight,将运行阶段称为 inflight。这两个名称表示程序处理职责,不是源码关键字。
代码由平台解释执行,不要求开发者先执行独立构建步骤,也不要求将源码转换成字节码或另一种语言。Preflight 的检查与索引准备不等同于生成编译产物。
5.1 Preflight
Preflight 读取代码视图及其归属上下文,理解声明和引用,并建立关联索引,为程序执行做好准备。索引用于查找相关声明与依赖,减少实际调用时重复的解析和查找工作。
其语言职责包括:
- 按词法和语法规则理解类、函数与表达式。
- 解析 use 指向的 namespace 及允许使用的声明。
- 检查名称、字段、参数与返回类型。
- 依据已定义的规则检查结果类型与组件用法。
- 识别逻辑调用与结果使用之间的依赖。
- 报告可以静态确定的错误。
声明函数不表示在 Preflight 中执行函数体,声明类也不表示读取业务数据。导入 namespace 用于理解依赖,而不是执行其所有逻辑。
5.2 inflight
inflight 使用实际输入执行程序,产生程序可以观察到的结果。
其语言职责包括:
- 按函数定义计算并返回结果。
- 取得调用所请求的数据。
- 向后续表达式提供成功结果。
- 保持代码定义的数据依赖与业务效果。
- 解释执行实际调用,并根据资源或结果类型产生界面等呈现效果。
- 表达执行中出现的失败或其他结果状态。
通信、缓存和执行组织方式可以由系统安排,但必须保持语言定义的值、类型、依赖和效果。
5.3 阶段边界
| 程序内容 | Preflight | inflight |
|---|---|---|
| class 声明 | 理解字段及类型 | 在数据使用中遵守该结构 |
| function 声明 | 检查参数、函数体与返回类型 | 调用发生时执行逻辑 |
| use 声明 | 理解依赖并解析可用声明 | 在调用中使用相应逻辑 |
| 调用表达式 | 检查目标与输入类型 | 使用实际输入并取得结果 |
| 界面结果 | 依据已定义的类型与组件规则检查用法 | 取得可渲染值后呈现内容和排列关系 |
实际业务调用属于 inflight。Preflight 的准备与检查不执行业务调用,也不改变调用发生时应有的语义。代码加载和检查的时机可以由平台安排;对无法提前确定的依赖和结果,执行时仍须遵守相应规则。
5.4 诊断与执行失败
语法错误、未定义名称和可静态判断的类型错误由 Preflight 报告。数据不存在、调用无法完成等执行情况由 inflight 表达。
静态检查通过不保证业务调用一定成功。诊断应能定位相关声明或表达式;错误处理、取消和持续结果的具体写法见规范状态。
5.5 阶段与执行角色
阶段、应用角色和代码归属是不同维度:
- Preflight 与 inflight 表示处理阶段。
- 前端、后端与 Agent 表示应用角色。
- namespace key 表示代码归属与引用位置。
它们不要求一一对应,也不要求位于不同进程或机器。alice:shop.ui 的名称不会自动将其中所有代码限定在某个阶段或某类设备。
上一章:程序结构与导入 · 下一章:词法结构 · 目录