API-first scripting

面向封闭系统开放 API,而不是开放系统本身。

LNS 的目标不是成为通用系统脚本,而是在封闭宿主中提供安全、可审计、高效率的用户自动化层。

1. 宿主声明能力

每个能力组用 `api "cap"` 声明,`extern` 只允许在 api 块中出现。

2. 用户 import 使用

用户脚本 import 可信契约模块,调用 `gpio.write`、`sensor.read` 这类受控入口。

3. 库封装简单

底层 API 可以再包一层纯脚本库,用 `export` 提供更稳定、更易用的用户接口。

4. LNB 生成绑定

声明库文件 `.lnb` 自动匹配同名 C 头文件,生成 `api/extern` 契约和 C glue。

为什么 api/extern 是语言级语法?

封闭系统最重要的问题不是“能不能调用函数”,而是“哪些函数可以被用户调用”。把能力契约放进语法,解释器、文档、绑定生成、权限审计都能看到同一份结构化信息。

  • 适合设备脚本
  • 适合游戏 Mod
  • 适合网关规则
  • 适合自动化工具
// trusted/gpio.lns
api "gpio" {
  extern void write(int pin, num value);
  extern num read(int pin);
}

// user.lns
import gpio;

function led_on() {
  gpio.write(2, 1);
}

做库的基本形态

宿主绑定库

只声明签名,实现由宿主注册。

api "timer" {
  extern void after(int ms, function callback);
}

纯脚本库

用 LNS 自己封装业务逻辑。

export function int clamp(int v, int lo, int hi) {
  return v < lo ? lo : v > hi ? hi : v;
}