编程 Bun 加入 Anthropic 深度拆解:一个 JavaScript 运行时如何改变 AI 编码工具的未来

2026-08-13 23:45:43 +0800 CST views 10

Bun 加入 Anthropic 深度拆解:一个 JavaScript 运行时如何改变 AI 编码工具的未来

写在前面

2025年12月2日,Jarred Sumner 在 Bun 官方博客发布了一篇题为「Bun is joining Anthropic」的文章,宣布这个用 Zig 语言编写、GitHub 星标超过 8 万、月下载量突破 720 万次的 JavaScript 全能工具链,正式加入 Anthropic 麾下。

这不是一次普通的收购。这是一次基础设施层的押注——Anthropic 认定 Bun 将成为 Claude Code、Claude Agent SDK 以及未来所有 AI 编程产品的底层运行时。

本文将从技术视角深入拆解这次收购的前因后果、Bun v1.3.14 的新特性,以及这一事件对整个 JavaScript 生态的深远影响。


一、Bun 的前世今生:为什么它值得关注

1.1 从一个 Minecraft 风格的体素游戏说起

Bun 的故事要从 2020 年底说起。当时 Jarred Sumner 正在用 Next.js 构建一个 Minecraft 风格的浏览器体素游戏,代码库逐渐庞大,每次修改代码后等待 Next.js 热重载的时间长达 45 秒

45 秒——对于一个正在「心流」状态中的开发者来说,这是致命的打断。Sumner 被这个问题彻底分心了。

他开始研究如何加速开发迭代。esbuild 是当时最快的 JavaScript 打包工具,用 Go 语言编写,性能比 swc 快 94 倍,比 Babel 快 197 倍。Sumner 决定把 esbuild 的 JSX 和 TypeScript 转译器从 Go 移植到 Zig——这个当时还非常小众的系统级编程语言。

三周后,他做出了一个能以 3 倍速度超越 esbuild 的 JSX/TypeScript 转译器。

「May 5, 2021: Early benchmark from a new JavaScript bundler. It transpiles JSX files: 3x faster than esbuild, 94x faster than swc, 197x faster than babel.」

这条推文发出后,Bun 的 GitHub 仓库在第一周就收获了 2 万颗星。

1.2 为什么是 Zig?

Zig 是一门系统级编程语言,由 Andrew Kelley 于 2015 年创建。它的核心设计哲学是:给你足够的控制权,但不拿走后期的安全感

选择 Zig 而不是 Go 或 Rust 来编写 Bun,原因是多方面的:

精确的内存控制:Zig 允许你像 C 一样手动管理内存,但它的语法更安全、更简洁。对于一个 JavaScript 运行时来说,内存分配策略直接影响启动时间和 GC 停顿。

与 C 的无缝互操作:Bun 的许多底层组件(JavaScriptCore 引擎的绑定、libarchive、SQLite 等)都是 C 库,Zig 可以直接调用而无需 FFI 开销。

编译时计算( comptime ):Zig 的 comptime 机制允许在编译期执行任意代码,这使得许多元编程任务可以在编译阶段完成,减少运行时开销。

// Zig comptime 示例:编译期计算斐波那契数列
const std = @import("std");

fn fibonacci(comptime n: u32) u64 {
    if (n <= 1) return n;
    return fibonacci(n - 1) + fibonacci(n - 2);
}

pub fn main() void {
    comptime var result = fibonacci(20);
    // result 在编译期就是 6765,不占用运行时
    std.debug.print("fib(20) = {}\n", .{result});
}

1.3 四合一:Runtime + Bundler + Test Runner + Package Manager

Bun 的野心从来不只是做一个「更快的 Node.js」。它要做的是把 JavaScript 开发流程中用到的所有工具——运行时、打包器、测试运行器、包管理器——整合进一个单一可执行文件中。

这在软件工程中是一种经典的「Unix 哲学反叛」:不是做很多小工具通过管道连接,而是做一个全能工具,每个子功能单独拎出来也能用。

$ bun ./index.ts           # 运行脚本(内置 TS/JSX 支持)
$ bun install              # 安装依赖(比 npm 快 30 倍)
$ bun test                 # 运行测试(Jest 兼容 API)
$ bun build ./app.tsx      # 打包浏览器代码
$ bunx cowsay 'hello'      # 直接运行远程包(无需安装)

1.4 惊人的增长曲线

从 2022 年 7 月 v0.1.0 发布至今,Bun 的发展速度令人印象深刻:

时间里程碑
2022年7月v0.1.0 发布,首周 2 万星
2022年$7M 种子轮(Kleiner Perkins)
2023年9月v1.0 发布,开始生产可用
2023年$19M A 轮(Khosla Ventures)
2024年AI 编程工具开始大规模采用 Bun
2025年10月月下载量突破 720 万(+25% MoM)
2025年12月加入 Anthropic

二、收购解析:为什么是 Anthropic?

2.1 Claude Code 为何选择 Bun?

Anthropic 选择 Bun 的直接原因很简单:Claude Code 已经跑在 Bun 上了

Claude Code、FactoryAI 的 Agent、OpenCode 等主流 AI 编程工具,都用 Bun 构建它们的 CLI 工具链。选择 Bun 的核心理由是它的 单文件可执行文件(Single-File Executable) 功能。

# 将任何 JavaScript 项目编译为独立的可执行文件
$ bun build ./cli.ts --compile --target=bun-linux-x64 -o mycli

# 生成的 mycli 是一个独立二进制文件
# 用户无需安装 Bun 或 Node.js,直接运行即可
$ ./mycli "帮我重构这个函数"

这对 AI 编程工具来说意义重大:

  1. 分发成本为零:AI Agent 生成的代码可以直接编译成分发包,用户无需配置环境
  2. 启动速度极快:JavaScriptCore 的冷启动时间约为 V8 的 1/4,AI 工具需要频繁启动子进程
  3. 跨平台一致:一次编译,macOS/Linux/Windows 都能跑

2.2 Anthropic 的战略意图

Sumner 在博客中提到了一个关键细节:「过去几个月里,Bun 仓库中合并 PR 数量最多的 GitHub 用户,是一个 Claude Code 机器人。」

这个 Claude Code 机器人负责自动化修复 Bun 的 bug:它自动打开 PR,PR 的测试在修复前版本失败、在修复后版本通过,并能回复代码审查意见。

这是一个 AI 编程工具在生产级别使用的活生生案例——而它运行在 Bun 上。

Anthropic 的战略意图可以归纳为三点:

1. 基础设施控制:如果 Claude Code 的底层工具链由自己掌控,就不用担心第三方依赖突然断供或变更许可证

2. 深度定制优化:未来可以针对 AI 编码场景专门优化 Bun 的启动时间、内存占用和并发模型

3. 打造生态护城河:Claude Code 越依赖 Bun,Bun 的用户群就越稳固,而 Bun 的改进也会直接反馈到 Claude Code

2.3 开源协议的坚守

值得注意的是,这次收购的条款中明确保证了 Bun 保持 MIT 开源协议,团队成员继续工作,公开 GitHub 开发模式不变。

这一点至关重要。Anthropic 此前在开源领域的声誉并不突出(Claude 模型并非完全开源),因此明确承诺不改变开源策略,是赢得社区信任的必要动作。

Sumner 的表述也很有技巧:「Bun stays open-source & MIT-licensed」——不是「我们承诺保持开源」,而是「Bun 保持开源和 MIT 许可」。这是一种声明事实而非承诺的姿态。


三、Bun v1.3.14 深度拆解:被 AI 加速的新功能

在收购宣布后不久,Bun v1.3.14 于 2026 年 5 月 13 日发布。这个版本包含了几个重磅新特性,其中许多功能明显是为了 AI 编码场景优化的。

3.1 Bun.Image:零依赖的 Server-Side 图片处理

痛点:在 Node.js 中做服务端图片处理,通常需要 sharp 库——这是一个 Node.js 原生 addon,需要 node-gyp 编译,不仅安装慢,还经常在某些环境下编译失败。

Bun 的解决方案:内置一个跨平台一致的图片处理 API,利用 i16 定点 SIMD resize 内核、JPEG IDCT 缩放算法、零拷贝 ArrayBuffer 等底层优化,无需任何原生模块安装

// 基础用法:从文件路径构建图片处理管道
const output = await Bun.file("photo.jpg")
  .image()
  .resize(1024, 1024, { fit: "inside" })
  .rotate(90)
  .webp({ quality: 85 })
  .write("thumb.webp");

// 处理上传文件,直接作为 Response 返回
export default {
  async fetch(request: Request): Promise<Response> {
    const formData = await request.formData();
    const upload = formData.get("image") as File;
    
    // 零配置图片压缩,直接返回 JPEG
    return new Response(
      await new Bun.Image(upload).resize(200, 200).jpeg({ quality: 80 }),
      {
        headers: { "Content-Type": "image/jpeg" }
      }
    );
  }
}

性能对比(Bun vs sharp 0.34.5)

操作Bunsharp加速比
metadata()0.004ms0.28ms70×
1080p PNG→400×400→JPEG28.6ms39.5ms1.38×
4K JPEG→1920×1080→JPEG57.2ms69.9ms1.22×
12MP JPEG→1024×768→WebP138ms165ms1.20×

metadata() 达到 70 倍加速的原因是 Bun 采用了零拷贝策略——对于不需要解码像素数据的元信息查询,直接读取文件头而非解析完整图片。

平台支持矩阵

格式macOSWindowsLinux
JPEG/PNG/WebP/GIF/BMP
HEIC✅ 解码+编码✅ 解码+编码
AVIF✅(Apple Silicon 编码)✅ 解码+编码
TIFF✅ 解码✅ 解码

JPEG、PNG、WebP、GIF、BMP 使用静态链接的编解码器,在所有平台上输出一致。HEIC、AVIF、TIFF 则使用操作系统原生后端(macOS 用 ImageIO+vImage,Windows 用 WIC),延迟加载以实现零启动开销。

3.2 Global Virtual Store:CI 构建速度革命

传统的 node_modules 机制存在一个根本性问题:每个项目都独立存储一份依赖。在一个有 100 个微服务的 monorepo 中,同一个 lodash@4.17.21 可能在磁盘上被复制了 100 次。

pnpm 通过硬链接(hardlink)解决了这个问题,但 Bun 的 Global Virtual Store 走得更远——它将依赖存储在一个全局共享位置,所有项目通过符号链接(symlink)引用。

# bunfig.toml
[install]
globalStore = true

或者通过环境变量:

BUN_INSTALL_GLOBAL_STORE=1 bun install

工作原理

# 全局虚拟存储结构
~/.bun/links/
  └── node_modules/
      ├── react@18.2.0/       ← 全局唯一存储
      └── lodash@4.17.21/

# 项目 A 的 node_modules
project-a/node_modules/.bun/@
  └── react → ~/.bun/links/node_modules/react@18.2.0/

# 项目 B 的 node_modules(相同的依赖版本)
project-b/node_modules/.bun/@
  └── react → ~/.bun/links/node_modules/react@18.2.0/

性能数据

在包含约 1,400 个包的测试项目上,macOS Apple Silicon 环境下:

指标hoist linkerisolated(改造前)isolated+globalStore
耗时823ms841ms115ms
系统调用时间478ms1,256ms94ms
clonefileat() 调用1,3871,3870

改造后的 globalStore 模式在热安装路径(lockfile 存在、缓存存在、node_modules 被清空)上,完全消除了 clonefileat() 系统调用,因为所有操作都是创建符号链接而非复制文件。

为什么这很重要? 在 macOS APFS 文件系统上,clonefileat() 会持有卷级别的内核锁,使得并行化完全失效。Global Store 通过只做一次材料化+多次符号链接,从根本上绕过了这个问题。

安全保证

Global Store 只对「不可变缓存源」(npm registry、git、tarball,且未 patch、无可信生命周期脚本)的包生效。如果一个包需要 patch 或包含可信的 lifecycle scripts,会自动回退到每个项目独立存储。

3.3 HTTP/3(QUIC)支持:下一代 Web 服务

Bun v1.3.14 还引入了实验性的 HTTP/3 支持,基于 QUIC 协议:

Bun.serve({
  port: 443,
  tls: {
    cert: Bun.file("./cert.pem"),
    key: Bun.file("./key.pem"),
  },
  http3: true, // 同时监听 UDP/443 上的 HTTP/3 请求
  fetch(request: Request): Response {
    return new Response("Hello from HTTP/3!");
  }
});

为什么这对 AI 工具重要?

AI 编程工具通常需要建立大量并发的 HTTP 连接(向 LLM API 发请求)。HTTP/3 基于 UDP,在高延迟网络下能显著减少连接建立时间(0-RTT/1-RTT 握手),并且避免了 TCP 的队头阻塞问题。


四、从开发者视角看 Bun 的 AI 原生化

4.1 AI 编程工具对运行时的特殊需求

传统 Node.js 应用和 AI 编程工具对运行时的需求有显著差异:

启动频率:传统应用一个进程运行数天;AI 工具每次用户交互可能启动一个新进程(运行 Agent 生成的代码片段)

并发模型:AI 工具需要同时运行多个独立的代码执行上下文,且需要快速的消息传递

输出确定性:AI Agent 的代码可能产生任何输出,运行时需要尽可能隔离副作用

Bun 的架构天然契合这些需求:

// Bun 的子进程 + WebSocket 通信:AI Agent 的理想执行模型
import { spawn } from "bun";
import { WebSocketServer } from "bun";

const wss = new WebSocketServer(8080);

wss.on("connection", async (ws) => {
  // 接收 AI Agent 生成的代码
  ws.on("message", async (code: string) => {
    // 启动一个隔离的 Bun 进程执行代码
    const child = spawn({
      cmd: ["bun", "-e", code],
      stdout: "pipe",
      stderr: "pipe",
    });
    
    // 实时收集输出
    const output = await child.text();
    ws.send(JSON.stringify({ output, exitCode: child.exitCode }));
  });
});

4.2 Claude Code 的内部自动化

Sumner 透露的细节很有意思:「过去几个月里,Bun 仓库中合并 PR 最多的 GitHub 用户是 Claude Code 机器人。」

这个 Claude Code 机器人不是简单调用 git commit 的自动化脚本。它能够:

  1. 理解 bug 报告:读取 issue 描述和测试失败日志
  2. 定位问题根因:通过分析代码库找到修复方案
  3. 编写测试:创建在修复前失败、修复后通过的测试用例
  4. 提交 PR:遵循项目规范撰写 commit message 和 PR 描述
  5. 回复 review:响应维护者的代码审查意见,进行迭代修改

这意味着 Claude Code 已经具备了一定的自主开发能力,而 Bun 是它运行和验证代码的载体。


五、Bun 加入后的未来猜想

5.1 可能的技术方向

基于已发布的信息和行业趋势,可以合理推测 Bun 未来的技术方向:

1. 更强的 AI 原生 API

Bun 可能会引入专门针对 LLM 调用场景优化的 API,例如流式响应处理、内置 token 计数、prompt 缓存等。这些功能目前在 Node.js 中需要依赖外部库(如 ai SDK 或 langchain)。

// 可能的未来 API(纯推测)
const response = await fetch("https://api.anthropic.com/v1/messages", {
  headers: {
    "x-api-key": Bun.env.ANTHROPIC_API_KEY,
    "anthropic-version": "2023-06-01",
  },
  anthropic: {
    model: "claude-opus-4-5",
    max_tokens: 8192,
    stream: true,
  },
  body: {
    messages: [{ role: "user", content: "解释一下什么是 MoE 架构" }],
  },
});

// 流式响应,自动处理 SSE 解析
for await (const chunk of response.anthropicStream()) {
  process.stdout.write(chunk.delta);
}

2. 针对 Agent 场景优化的沙箱

AI Agent 执行的代码是动态生成的,可能包含各种边界情况。Bun 可能会引入更细粒度的权限控制、资源限制和超时机制。

3. 与 Claude 模型深度集成

如果 Anthropic 选择让 Claude 的某些能力通过 Bun 的 API 直接暴露(例如代码解释、函数调用),Bun 将从「通用的 JavaScript 运行时」进化为「AI 编程专用的执行环境」。

5.2 对 JavaScript 生态的影响

正面影响

  • 竞争压力:Bun 的快速迭代会倒逼 Node.js 加快性能优化步伐,2026 年 Node.js 已经在 v22.x 中引入了实验性的 TypeScript 支持和显著的启动速度改进
  • 标准推进:Bun 是多个 TC39 提案的早期实现者(如 ES decorators),它的采用能加速新特性进入主流
  • 工具链整合趋势:Bun 的「全能工具」模式可能启发更多项目探索类似的整合路径

潜在风险

  • 供应商锁定:如果 Bun 的 AI 特性成为 Claude Code 的独占依赖,整个 AI 编程工具生态可能形成对 Anthropic 的隐性依赖
  • 开源可持续性:Anthropic 的商业目标是卖 API,不是维护开源运行时。长期来看,Bun 的商业可持续性取决于 Anthropic 能从中获得多少战略价值

六、生产环境使用 Bun 的实战建议

6.1 迁移路径

对于现有 Node.js 项目,Bun 提供了零成本的渐进式迁移路径:

# 步骤1:用 Bun 替代 npm/yarn 安装依赖
bun install

# 步骤2:用 Bun 替代 ts-node / tsx 运行脚本
bun run dev

# 步骤3:用 Bun 替代 jest/vitest 运行测试
bun test

# 步骤4:检查 Node.js 兼容性
bun run --bun-check  # 检查 API 兼容性

Bun 官方声称 100% 兼容 Node.js API,实际测试中 99%+ 的 npm 包可以直接运行。

6.2 Bun vs Node.js 决策矩阵

场景推荐 Bun推荐 Node.js
新项目,冷启动性能敏感
AI 编程工具 / CLI 工具
大型企业项目,稳定性优先
需要最新 Node.js 原生 addon
微服务,高并发 I/O✅(v1.3+)
已有完善的 Node.js 工具链

6.3 Bun.Image 替换 sharp 的具体步骤

如果你的项目中使用了 sharp,可以考虑迁移到 Bun.Image(前提是你的运行环境支持 v1.3.14+):

// 旧代码(使用 sharp)
import sharp from "sharp";

async function resizeImage(input: Buffer, width: number): Promise<Buffer> {
  return sharp(input)
    .resize(width, undefined, { fit: "inside" })
    .jpeg({ quality: 85 })
    .toBuffer();
}

// 新代码(使用 Bun.Image)
async function resizeImage(input: Buffer, width: number): Promise<Buffer> {
  return new Bun.Image(input)
    .resize(width, undefined, { fit: "inside" })
    .jpeg({ quality: 85 })
    .bytes();
}

关键差异:sharp 返回 Promise<Buffer>,而 Bun.Image 的链式 API 是同步的(处理在内部异步进行),.bytes() 调用返回 Promise<ArrayBuffer>。


七、总结:Bun 加入 Anthropic 意味着什么

站在 2026 年回望,Bun 加入 Anthropic 的意义可能比表面上看起来的更大。

这不只是 Anthropic 买了一个 JavaScript 运行时,而是:

  1. AI 公司开始重视「最后一公里」的工程基础设施:大模型能力再强,也需要可靠的基础设施来承载和分发。Anthropic 选择从 Bun 切入,是因为 Claude Code 已经在用 Bun——收购是为了加固已有的优势。

  2. 开源与商业的新结合方式:不是收购后关闭源代码,而是保持开源但注入商业资源。这是一次「战略投资」而非「消灭竞争」。

  3. JavaScript 生态的 AI 原生化加速:当全球最流行的编程语言的运行时开始专门为 AI 工具优化,开发者使用 AI 编程的门槛会进一步降低。

  4. 工具链整合的新范式:Bun 的成功证明了「一个工具解决所有问题」的可行性。随着 AI 编程工具越来越强大,这类整合型工具的需求只会增加。

对于普通 JavaScript 开发者来说,这次收购带来的最直接好处是:Bun 会变得更快、更好,而且免费。因为 Anthropic 需要 Bun 保持开源和高质量,以支撑 Claude Code 的竞争力。

这可能是 2026 年 JavaScript 生态中最重要的一个信号:AI 时代的基础设施工具战争,已经从模型层延伸到了工具链层。


Tags: Bun | JavaScript | Anthropic | Claude Code | AI编程 | Zig语言 | HTTP3 | 图片处理 | 前端工程化 | Node.js

Keywords: Bun加入Anthropic | JavaScript运行时对比 | Zig语言入门 | AI编程工具 | Bun.Image API | HTTP3 QUIC | 单文件可执行文件 | JavaScript生态 | Claude Code原理

推荐文章

如何在 Linux 系统上安装字体
2025-02-27 09:23:03 +0800 CST
Vue3中如何处理SEO优化?
2024-11-17 08:01:47 +0800 CST
Manticore Search:高性能的搜索引擎
2024-11-19 03:43:32 +0800 CST
Nginx 如何防止 DDoS 攻击
2024-11-18 21:51:48 +0800 CST
设置mysql支持emoji表情
2024-11-17 04:59:45 +0800 CST
PHP 允许跨域的终极解决办法
2024-11-19 08:12:52 +0800 CST
Rust 并发执行异步操作
2024-11-19 08:16:42 +0800 CST
程序员茄子在线接单