GitHub 仓库地址:https://github.com/fawdlstty/faml
FAML 是一种扩展自 TOML 的动态配置语言,专为需要运行时配置计算和更新的场景设计。它保留了 TOML 的简洁语法,同时增加了动态表达式、条件配置和运行时可变性等高级特性。
| 特性 | TOML | KCL | PKL | FAML |
|---|---|---|---|---|
| 语法风格 | TOML 风格 | JSON 风格 | 结构体风格 | TOML 风格 |
| 动态表达式 | ❌ | ✅ | ✅ | ✅ |
| 条件配置 | ❌ | ✅ | ✅ | ✅ |
| 运行时修改 | ❌ | ❌ | ❌ | ✅ |
| 特殊数据类型 | ❌ | ✅ | ✅ | ✅ |
[server]
port = 8080
host = "localhost"
[database]
host = "localhost"
port = 5432
connection_string = $"postgresql://{host}:{port}/mydb"
[app]
env = "production"
@if env == "development"
log_level = "debug"
@if env == "production"
log_level = "error"
[cache]
ttl = 5 minutes
max_size = 100 MB
[network]
timeout = 30 seconds
buffer_size = 4 KB
[user]
age = 25
is_adult = age >= 18
welcome_message = is_adult ? $"Welcome, adult user!" : $"Welcome, young user!"
let mut config = FamlExpr::from_str(config_str)?;
config["server"]["port"].set_int(9000); // 动态修改端口
let connection_string = config["database"]["connection_string"].evaluate()?.as_str(); // 自动更新连接字符串
1
CEBBCAT 18 小时 9 分钟前
之前只了解过 jsonnet ,也许楼主可以在自己的介绍页添加和它的对比?这样我想对于新朋友了解它,或者迁移到它会有所帮助
|
2
pingdog 15 小时 40 分钟前 via iPhone
运行时修改,项目概念不错,但鲁棒性如何
吾… 破坏了格式也照样载入新内容并赋值么?例如错手删除”未发觉就保存 |
3
lisxour 9 小时 21 分钟前
不想打击你,但你这唯一的优点不觉得很危险嘛?
|
5
fawdlstty OP @lisxour 为什么危险?如果你指的是 faml 里带恶意代码,那设计上是安全的,faml 里只能计算,不能执行恶意指令(比如加载文件、写文件或联网啥的);如果你指的是 faml 源码里很多 unsafe ,那只能说抱歉了,我设想的需求不用 unsafe 写不出来,不过这个点不一定说明它危险,得利用 unsafe 造成的漏洞才算;再者如果你指的是一个数据修改导致其他数据发生非预期变化,这个点上危险,那我就不知道说啥了,毕竟这是用户自己写的代码,写了啥那就执行了啥
|