# 纯 BT 扩展 ## 功能 纯 BT 扩展使用 BT 源码作为后端入口,适合封装普通脚本逻辑、业务规则和无需外部编译工具的能力。它的 `manifest.kind` 为 `bt`,`manifest.abi` 为 `bts-bt-1`。 ## 语法 纯 BT 扩展的入口通常是 `src/lib.bt`: ```json { "kind": "bt", "abi": "bts-bt-1", "entry": "src/lib.bt" } ``` 加载时,宿主会解析并编译入口源码,但不会执行普通顶层逻辑。入口顶层只允许: ```text fn 声明 class 声明 空语句 大写常量名 = 字面量 ``` 不要在纯 BT 扩展入口顶层写 `include`、普通赋值、循环、I/O 调用、`return` 或 `throw`。 ## 参数 入口函数和公开方法的参数数量必须和 `bindings.json` 一致。参数名由源码自己使用,参数类型由 bindings 声明并由运行时在调用边界检查。 ## 源码示例 ```bt class Calc { value_num: 0 new(value) { this.value_num = value this } pub add(value) { this.value_num += value this } pub value() { this.value_num } pub close() { true } } fn calc(value) { Calc::new(value) } ``` 对应规则: | bindings 声明 | 纯 BT 源码要求 | | ------ | ------ | | `functions[].name = "calc"` | 入口源码中必须有同名 `fn calc(...)`。 | | `objects[].name = "Calc"` | 入口源码中必须有同名 `class Calc`。 | | `methods[].name = "add"` | `Calc` 中必须有同名 `pub add(...)`。 | | 参数数量 | 源码参数数量必须和 bindings 一致。 | ## 返回值 纯 BT 扩展返回原始类型时,运行时会检查实际返回值是否和 bindings 声明一致。返回对象类型时,必须返回普通对象或类实例。 ```bt value = calc(2).add(8).value() // 输出:10 print value ``` ## 注意事项 - 类方法如果要对脚本公开,必须使用 `pub`。 - 返回链式对象的方法通常返回 `this`。 - 返回类型写成对象类型名时,该对象类型必须在 `bindings.objects` 中声明。 - 纯 BT 扩展适合轻量业务逻辑;需要 Rust 生态、WASI 或更独立的状态管理时,应使用 WASM 扩展。