Files
Endorphin-Document/guide/05-preflight-and-inflight.md
T

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 的名称不会自动将其中所有代码限定在某个阶段或某类设备。

上一章:程序结构与导入 · 下一章:词法结构 · 目录