Function / FunctionContext / Environment 三个核心抽象之上。解析器产出 AST,解释器按节点类型派发
evaluator;在函数调用处,则交由运行时标准库(Intrinsics)统一处理 async / primarySync 等语义。
执行入口
典型路径:Fluxon.eval(source)→ 解析 →Interpreter.execute(parseResults)Interpreter在执行过程中会维护Environment(变量、函数、扩展函数与上下文目标target)。
编译执行(字节码生成与
RuntimeScriptBase)见 编译执行引擎。函数抽象:Function
Function定义函数名、命名空间、参数个数、async/primarySync标记,以及call(FunctionContext)。- 系统/扩展函数通常以
NativeFunction承载;脚本def/async def/sync def生成的函数也实现Function,因此共享同一套调用语义。
调用上下文:FunctionContext
FunctionContext 封装一次调用所需的信息:
function:当前函数target:上下文调用(::)时的目标对象environment:共享环境arguments:参数与参数数量(解释器会对高频路径做池化与优化,但对文档使用者而言语义不变)
getArgument / getNumber / getString / getFunction 等;类型不匹配时会抛出 ArgumentTypeMismatchError。
async 与 primarySync
函数调用的调度逻辑由Intrinsics.callResolvedFunction(...) 统一处理:
async = true:调用会被提交到运行时线程池,返回Future/CompletableFuture。primarySync = true:调用会被转发到主线程执行器(由宿主通过FluxonRuntime#setPrimaryThreadExecutor提供)。- 其他情况:同步执行并直接返回结果。
await expr 会在 expr 返回 Future/CompletableFuture 时等待其完成,否则直接返回 expr 的值。
全局对象与上下文调用
Environment维护一个target槽位以实现上下文调用:value :: func(...)会临时将target设为value, 并在执行结束后恢复旧值。- 扩展函数的解析与匹配依赖
target的宿主类型(参见 扩展函数 API)。
调试建议
- 当遇到“函数找不到”或“参数类型错误”时,可以直接打印
FunctionContext#toString(),其中包含函数名、目标对象与参数信息。 - 需要追踪异步/主线程调度时:结合
Function#isAsync/Function#isPrimarySync与ThreadPoolManager的观测信息排查。 - 参考:运行时配置与调试 与 故障排查。