V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fawdlstty
V2EX  ›  Rust

推荐一款我写的动态配置语言: Faml

  •  1
     
  •   fawdlstty · 19 小时 2 分钟前 · 517 次点击

    GitHub 仓库地址:https://github.com/fawdlstty/faml

    什么是 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();  // 自动更新连接字符串
    
    9 条回复    2025-11-10 15:19:14 +08:00
    CEBBCAT
        1
    CEBBCAT  
       18 小时 9 分钟前
    之前只了解过 jsonnet ,也许楼主可以在自己的介绍页添加和它的对比?这样我想对于新朋友了解它,或者迁移到它会有所帮助
    pingdog
        2
    pingdog  
       15 小时 40 分钟前 via iPhone
    运行时修改,项目概念不错,但鲁棒性如何
    吾… 破坏了格式也照样载入新内容并赋值么?例如错手删除”未发觉就保存
    lisxour
        3
    lisxour  
       9 小时 21 分钟前
    不想打击你,但你这唯一的优点不觉得很危险嘛?
    fawdlstty
        4
    fawdlstty  
    OP
       4 小时 45 分钟前
    @pingdog 不带保存功能噢。只加载一次,后续就在读取的示例上进行修改。因此不存在破坏数据的问题
    fawdlstty
        5
    fawdlstty  
    OP
       4 小时 41 分钟前
    @lisxour 为什么危险?如果你指的是 faml 里带恶意代码,那设计上是安全的,faml 里只能计算,不能执行恶意指令(比如加载文件、写文件或联网啥的);如果你指的是 faml 源码里很多 unsafe ,那只能说抱歉了,我设想的需求不用 unsafe 写不出来,不过这个点不一定说明它危险,得利用 unsafe 造成的漏洞才算;再者如果你指的是一个数据修改导致其他数据发生非预期变化,这个点上危险,那我就不知道说啥了,毕竟这是用户自己写的代码,写了啥那就执行了啥
    fawdlstty
        6
    fawdlstty  
    OP
       4 小时 39 分钟前
    @CEBBCAT 感谢建议,我研究研究
    lisxour
        7
    lisxour  
       4 小时 1 分钟前
    @fawdlstty #5 运行中直接热重载配置,万一配置不小心写错了什么东西,是不是意味着只要一按 ctrl+s ,线上立马报错
    fawdlstty
        8
    fawdlstty  
    OP
       3 小时 52 分钟前
    @lisxour 没有热重载这回事呀。程序生命周期只加载一次配置。关于“万一配置不小心写错了什么东西”,这个问题有点像编程里“万一写错了一行代码”,或者 yaml 配置里“万一配错了值”。用户写的逻辑,该怎样就怎样呗,有啥语言能自动处理这种问题嘛?
    lisxour
        9
    lisxour  
       3 小时 44 分钟前
    @fawdlstty #8 好吧,我理解错你说的“运行时动态修改”特性了
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3298 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:04 · PVG 19:04 · LAX 03:04 · JFK 06:04
    ♥ Do have faith in what you're doing.