别在 YAML 里手写解释器: 把规则写成一门内嵌 DSL

主题演讲
上海
15:50 - 16:30
分会场 E(综合楼 108 报告厅)
  • 陈长 TerraQuanta 后端与基础设施工程师

    OpenTelemetry Collector contributor

    chenchang

摘要

每个系统最后都会长出一堆判定逻辑,而这些逻辑总是在 runtime、在半夜三点出错。这场分享给出另一条路:一门宿主在 Python 之内、类型安全的内嵌 DSL。

详情

每个系统最后都会长出一堆判定逻辑:风控、资格、权限、折扣。一开始只是一个 if。为了不因为改一个阈值就发一次版,你把逻辑挪进 YAML。然后 YAML 长出条件、长出对其他规则的引用,直到某天你发现自己无意中造了一门没有类型的编程语言,而它总在 runtime、在半夜三点出错。

这场分享给出另一条路:一门宿主在 Python 之内、类型安全的内嵌 DSL。原子判定仍是可单测的纯函数,「怎么组合」变成可编排、可序列化的数据。你会得到:不发版就能热替换的逻辑、能把「为什么通过 / 为什么被拒」摊成一棵可读树的决策trace、以及在加载期就暴露而不是到生产才炸的错误。我会现场演示一个真实、能跑的实现,并解释为什么在 Python 里做这件事非常方便。