Skip to content

对比矩阵:Fish 与其他主流构建系统

Fish 使用 Rust 2024 打造,专为现代多语言 Monorepo 设计。以下是 Fish 与 Bazel、Turborepo 以及 Buck2 的客观横向对比:

功能 / 维度FishTurborepoBazelBuck2
核心实现语言Rust 2024Go / RustJava / C++Rust
多语言支持原生多语言(11+ 工具链)主打 JS / TS多语言 (Starlark 规则)多语言 (Starlark 规则)
配置模型统一 fish.toml / 自动发现turbo.jsonWORKSPACE + BUILD.bazelBUCK 文件
上手与配置难度较低(零配置自动识别)较低较高(需精细声明规则)较高(需精细声明规则)
哈希引擎Blake3(并行树状哈希)SHA-256SHA-256Blake3 / SHA-256
CAS 压缩与缓存Zstandard (Zstd) + CoWTar.gz / GzipZstd / 自定义Zstd / 自定义
产物落地机制Reflink / 写时复制(支持回退)普通文件复制软链接 / 硬链接Reflink / CoW
内容分块引擎FastCDC(16KB - 256KB 块去重)完整归档文件完整归档文件分块 CAS
VFS 脏文件解析内存快照树磁盘遍历Inotify / Watchman 守护进程Watchman / EdenFS
语义化缓存失效AST 接口签名哈希 (ABI)仅文件哈希仅头文件编译Header / rmeta 编译
AI 智能诊断原生 IPC + 故障根因分析
可视化监控看板原生内置 Web GUI 与 TUIVercel 网页看板第三方工具集成开源命令行终端

架构特性详细对比

Fish 与 Turborepo

  • 多语言支持维度: Turborepo 主要为 JS/TS 生态打造。Fish 原生直接从项目原生清单(Cargo.toml, go.mod, CMakeLists.txt 等)自动发现并协同调度 11+ 种语言工具链。
  • 存储与传输效率: Turborepo 使用标准归档包。Fish 结合 Reflink / CoW 与 FastCDC 内容分块技术,有效降低重复磁盘 I/O 与传输开销。

Fish 与 Bazel

  • 设计定位与权衡: Bazel 专为超大规模代码库设计,提供极其严苛的文件级密封沙箱,但需要为每个目录编写详尽的 BUILD.bazel。Fish 定位为轻量级零配置多语言任务调度器,优先保证开箱即用与开发体验。
  • 运行开销: Bazel 依赖常驻 JVM 守护进程。Fish 为纯 Rust 原生静态二进制,启动迅速且资源占用低。

Fish 与 Buck2

  • 工程复杂度: Buck2 依赖 Starlark 规则与外部文件监控服务。Fish 内置内存 VFS 与 GNU Jobserver 令牌池,无需复杂的构建工程维护成本即可直接投入使用。