Hasty Briefsbeta

双语

I want a better action graph serialization

a day ago
  • 将'动作图'定义为由配置步骤生成的所有构建步骤的序列化表示,被CMake和Ninja等工具使用。
  • 对比序列化动作图与基于持久服务器的系统(如Bazel和Buck2),指出序列化减少了内存使用和启动时间。
  • 列出序列化格式的设计目标:简单/快速加载,支持复杂依赖边(动态、负向、可选),并最小化重新配置。
  • 批评现有格式:Makefile存在歧义且速度慢;Ninja缺少对校验和、负依赖、文件重命名、可选文件和环境变量的支持。
  • 提出'Magma',一种基于小型Clojure子集的新序列化语言,具有如`ifwritten`/`ifchanged`/`ifcreated`/`ifdeleted`边、动态依赖(`dynout`)、内存中转换和基于文件监视的触发器等特性。
  • 强调Magma的改进:命令以数组形式生成,原生支持重定向/转换,区分组和虚假目标,减少文件I/O以实现快速加载。
  • 指出Magma的限制(无shell命令,无通配符)以及与Starlark的差异,并讨论添加运行器元数据(如Buck2的`RunInfo`)以实现可执行工件。