SML Soup Markup Language
{ ❄ } · 声明式数据/配置格式,JSON/YAML 的替代品
是什么
SML(Soup Markup Language,读作 "snow-mell")是 Soup 生态的声明式数据/配置格式,定位为 JSON / YAML 的替代品。Logo 为 { ❄ }:黑花括号表示语法骨架(块的边界),蓝色雪花表示精确的取值点。
与 JSON/YAML 相比
| 改进点 | 说明 |
|---|---|
| 引号可选 | 裸词即字符串(state: NY);含空格才加引号 |
| 块冒号可省 | address { } ≡ address: { }(更接近 Caddyfile) |
| 数组分隔灵活 | [ a b c ]、每行一个、{..}, {..} 逗号可选 |
| 片段继承 | @name { ... } 定义,&name 引用(比 YAML anchor 直观) |
| 环境变量内联 | $env.VAR 在裸词或引号串内均展开 |
| 注释 | # 行注释(JSON 不支持) |
| 类型自识别 | true/false→bool,null→nil,数字→number(1e3/.5 均支持),其余→string |
语法示例
firstName: John
age: 27
isAlive: true
address:
{
streetAddress: "21 2nd Street"
state: NY
}
phoneNumbers:
[
{ type: home, number: "212 555-1234" }
{ type: office, number: "646 555-4567" }
]
children: []
spouse: null
# 片段定义与引用
@base {
region: cn-north-1
zone: a
}
server web {
&base
port: 8080
}
实现与多语言库
SML 已落地为多种语言库,任选其一解析:
| 语言 | 库 | 说明 |
|---|---|---|
| Soup / Lua | lib/sml.soup(分发为 sml.sar) | 原生实现,sml.load() / sml.dump(),零依赖 |
| Soup 构建系统 | soupmake 内嵌解析器 | LanTuFile.sml 声明式构建配置 |
| Rust | sml-rs(规划/孵化) | crate,parse() / to_string() |
| C | libsml.h(规划/孵化) | C-ABI,sml_parse() / sml_dump() |
| JavaScript | sml.js(规划/孵化) | ESM,parse() / stringify() |
在 BamZap 中使用
BamZap 的声明式部署文件 HetuFile.sml 即用 SML 书写:
pool greeter {
source: "./greeter-v2.soup"
register: true
}
remote origin {
backend: "https"
root: $env.SOUPKG_HTTPS_ROOT
}
deploy app {
ref: "greeter"
target: "./deploy/"
mode: "copy"
run_args: "Alice"
}
verify greeter {
chain: true
}
执行:soupx bamzap.sar apply HetuFile.sml
在 soupmake 中使用(LanTuFile.sml)
构建配置也可用 SML 书写(LanTuFile.sml 或 lantu.sml),与 Soupfile 等价:
name: myapp
entry: app.sky
lang: [ c rust soup ]
target "build" {
cmd: "soupack pack . myapp.sar --entry app.sky"
}
target "clean" {
cmd: "del /Q *.sar 2>nul"
}
执行:soupmake build(找不到 Soupfile 时自动尝试 LanTuFile.sml)。
相关链接
- BamZap 包管理器 — SML 的落地应用(HetuFile 声明式部署)