Zig:所有包管理功能已从编译器移至构建系统
Zig 的开发理念与 LLM 的角色
- 一些评论者认为 Zig 证明了“软件作为一门手艺”仍然存在,重视经过深思熟虑的人类设计,而不是 LLM 生成的语言。
- LLM 被视为很适合小型 DSL 或局部任务,但不适合面向未来几十年的核心语言/编译器代码。
- 担忧包括:LLM 编写的代码冗长、意图不清,而且在关键系统中审查它很困难。
- 也有人表示在业务代码库中大量且成功地使用了 LLM,尤其是在明确、防御性强、低抽象的风格下,这让 AI 生成的代码更容易审查。
构建系统、WebAssembly 与沙箱化
- 大家对将 Zig 的构建系统迁移到 WebAssembly VM 中、以便对
build.zig进行沙箱化的计划感到兴奋。 - 支持沙箱化的观点:
- 限制不受信任的构建脚本能做的事情,尤其是在编辑器/LSP 自动运行它们时。
- 便于实现细粒度的权限代理,并更容易审计哪些依赖需要额外能力。
- 怀疑的观点:
- 如果构建脚本仍然可以启动任意进程(例如
cmake),那么沙箱化在某种程度上只是“安全表演”。 - 一些人认为,全环境/容器级沙箱化(bwrap、devcontainers、隔离服务器)更合适。
- 如果构建脚本仍然可以启动任意进程(例如
- 反驳:安全并非非黑即白;部分沙箱化仍然会提高门槛并改善可复现性。
包管理与多语言构建的担忧
- 有人遗憾每种语言都在发明自己的包/构建系统;他们更希望有一个优秀的、支持多语言、跨平台的系统。
- Buck 和 Bazel 被提为最接近这一理想的方案,但也被认为受其出身所累。
- 讨论的焦点还包括:构建系统是否也应该充当编译器前端,还是只负责协调多个独立工具链。
C/C++ 包管理与依赖文化
- 对缺乏标准 C++ 包管理器的看法不一:
- 优点:迫使人们谨慎选择依赖并手动更新,避免出现像 cargo 那样有数百个传递性 crate 的树。
- 缺点:导致每个大型 C++ 项目都在重复实现基础组件(JSON、异步等),而且往往做得很差。
- Conan 和 vcpkg 被提及为事实上的解决方案,但并未被普遍接受。
设计错误、演化与 Zig 的包管理迁移
- “油箱里加了散热器冷却液”的类比被用来批评那些后来又撤回早期设计选择的语言(例如将包管理移出编译器)。
- 支持者认为,早期紧耦合是一种务实的交付和迭代方式;在 1.0 之前解耦被视为负责任的演进。
- 一些人担心现代语言忽视历史经验;另一些人强调,语言设计本质上就是迭代性的,而且极其困难。
面向用户的影响(例如 @cImport)
- 一位评论者将包/构建方面的变化与之前移除
@cImport联系起来,认为这是 UX 层面的损失,不过其他人澄清其动机是分开的(LLVM/libclang 解耦 vs. 包管理重构)。