H2:Tvix 状态 - 2024 年 8 月
- 距离上次 Tvix 更新已约半年,现进行新一轮更新。此博客面向熟悉 Nix 的技术受众。
H3:构建 长期目标是能用 nixpkgs 中的表达式通过 Tvix 构建东西,在多个方面取得进展:
- 在 IO 上驱动构建:Tvix 中想让 IFD 成为一等公民且无显著性能成本,Nix 分评估和构建两阶段,Tvix 只有未完成的推导/构建及其关联存储路径的图,按需构建,以优雅方式处理 IFD。
- 获取器:实现了 Nix 内置的大部分文件下载、NAR 和普通文件的获取功能,除了 git 仓库,通过添加通用
Fetch
类型延迟获取,展示获取进度条,还处理了 nixpkgs 启动时的特殊builtin:fetchurl
推导。 - 更多修复和 Refscan:完成上述工作并修复一些小 bug 后,已能用 Tvix 和基于
runc
的构建器构建一些存储路径,接下来要实现引用扫描。
H3:评估正确性与性能
- 一直在评估
nixpkgs
的部分内容并确保生成相同的推导,已找到并修复一些正确性问题,也在去除一些明显且低风险的性能瓶颈,后续会有详细博客。
H3:追踪/观测性支持 - Tvix 支持追踪,能以兼容 OpenTelemetry 的格式发出跨度,可通过设置工具收集跨度以查看 Tvix 不同组件的内部情况,还能通过 gRPC 和 HTTP 请求传播追踪 ID 并继续追踪,目前默认编译发送追踪到
localhost
,可通过构建或 CLI 禁用,利用了tracing
crate 改进了日志消息和字段,还添加了 Tracy 追踪支持和一些 CLI 进度报告功能,这些仍在完善中。
H3:tvix-castore 摄入泛化 - 花时间重构和泛化 tvix-castore 导入代码,基于特定顺序的“摄入条目”流进行,有各种生成此流的方式,避免了代码重复并可提取辅助代码进行并发块上传。
H3:更多 tvix-[ca]store 后端 - 添加了一些存储后端,如 redb 的
PathInfoService
和DirectoryService
替代之前的sled
默认后端,bigtable 的PathInfoService
和DirectoryService
后端,移除了“simplefs”BlobService
,并对某些后端进行了功能标记。
H3:文档协调 - 之前分散在 Tvix 代码库中的各种文档已整合到
//tvix/docs
的 mdbook 中,计划将其作为网站正式托管,添加更多内容。
H3:nar-bridge
RIIR - 完成了
nar-bridge
的 Rust 重写,使其与 Tvix 的其他部分具有相同的 CLI 体验和存储后端,之前的 golang 实现存在一些限制。
H3:crate2nix
和整体 Rust Nix 改进 - 在
crate2nix
中修复了一些问题,支持构建 WASM,修复了测试目录准备的一些 bug,还在确保各种 Tvix 功能标志构建方面进行了改进,减少了不必要的重建。
H3:存储组合 - 实现了存储组合功能,目前通过
xp-store-composition
功能标志控制,可通过指定 TOML 配置文件组合“存储层次结构”,但在如何以用户友好的格式暴露功能方面仍在探索。
H3:贡献者 - 感谢众多贡献者的努力,包括 Adam Joseph 等多人。
总结:8 月的 Tvix 更新涵盖了构建、评估、追踪、存储等多个方面的进展,包括新的功能实现、代码优化和文档整理等,同时感谢贡献者的付出。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。