Bun.js 集成了 SQL/Redis/S3,为什么 Java/Go/Python 不集成?
先看最小代码:import{sql, RedisClient}frombun;// PG,自带 constusersawait sqlSELECT * FROMusersWHEREid${1};// Redis,自带 const redisnew RedisClient(redis://localhost:6379);await redis.set(key,value);// S3,自带 constfileBun.s3.file(my-bucket,hello.txt);await file.write(hello world);数据库、缓存、对象存储,一把梭。不用 npm install。不用 go get。不用 pip install。Bun 出生就带。痛点:每个语言都要装包写后端,连数据库是基本操作。但每个语言,都得装一遍。Java:dependencygroupIdorg.postgresql/groupIdartifactIdpostgresql/artifactIdversion42.7.3/version/dependencyClass.forName(org.postgresql.Driver);Connection connDriverManager.getConnection(url, user,pwd);PreparedStatementpsconn.prepareStatement(SELECT * FROM users);ResultSet rsps.executeQuery();连接还得手动关。忘关就泄漏。Go:import(contextgithub.com/jackc/pgx/v5)funcmain(){db, _ :pgx.Connect(context.Background(),postgres://...)}go get拉包,版本对不对靠运气。Python:importpsycopg2 connpsycopg2.connect(hostlocalhost,dbnamemydb,useru,passwordp)curconn.cursor()cur.execute(SELECT * FROM users)pip install装一堆。虚拟环境一开,版本锁死。AI 写代码,生成完还得提醒你记得装包。Bun 不需要。生下来就有。Bun 还内置了啥• Bun.file:文件读写• Bun.password:密码哈希• Bun.hash:哈希算法• Bun.serve:HTTP 服务• Bun.sql:PostgreSQL 驱动• Redis:Redis 客户端• Bun.s3:对象存储• Bun.build:打包器• bun:test:测试框架• bun install:包管理• bunx:npx 替代一把梭,啥都带。为什么 Bun 能集成?1. 没历史包袱Bun 2022 年才出。Java 都 30 年了,标准库动一行,几千万项目可能挂。Go 1.0 后承诺向后兼容,加东西格外谨慎。Bun 一身轻,想加啥加啥。2. 用 Zig 手写协议PG 协议、Redis 协议、HTTP/1.1、HTTP/2、TLS。Bun 团队用 Zig 全部手写。不是套壳 libpq。不是套壳 hiredis。是从 wire format 一行一行抠出来的。性能比 C 还快。3. 商业公司在背后推Jarred Sumner 拿了融资。专门养一队人维护这些驱动。Go 和 Python 的 PG 驱动,基本靠社区志愿者。4. 没到 1.0Bun 1.0 还没发。API 改就改了。Java、Go 改个函数签名,社区能吵一年。为什么其他语言不集成?1. 标准库哲学不同Go 哲学是小而精。goroutine进标准库,数据库驱动一律外部。Python 哲学是自带电池,但电池也就那几个。asyncio、json、http是核心。Java 标准库只规定 JDBC 接口,不规定具体驱动。商业数据库太多,Sun 也管不过来。2. 协议碎片化PG、MySQL、Redis、MongoDB、ClickHouse、Elasticsearch。每个协议都不一样,每年还在演进。今天集成 PG,明天 MySQL 8.4 协议更新,又得跟着改。谁来长期维护?3. 许可证冲突PG 驱动 BSD。Redis 驱动 MIT。MySQL 驱动 GPL。打进标准库,许可证一污染,整个语言生态跟着遭殃。4. ABI/API 稳定性Java 改个函数签名,几十万 JAR 可能挂。Go 1.x 承诺兼容,标准库加东西就畏手畏脚。5. 维护意愿数据库协议每年更新。PG 每年发版,MySQL 8 改了一堆,Redis 6 跟 7 协议都有差异。谁愿意在标准库长期背这活儿?Bun 不怕。没承诺 ABI 稳定,改就改了。对开发有啥影响?AI 写代码更顺AI 生成 Bun 代码,直接能跑。生成 Java 代码,AI 还得提醒你加依赖。import{sql, RedisClient}frombun;const redisnew RedisClient(redis://localhost:6379);// 一段完整:HTTP PG Redis Bun.serve({port:3000, async fetch(req){constidnew URL(req.url).searchParams.get(id);if(!id)returnnew Response(id required,{status:400});// 查缓存 const cachedawait redis.get(user:${id});if(cached){returnResponse.json({source:cache, data: JSON.parse(cached)});}// 查库 const userawait sqlSELECT * FROMusersWHEREid${id};if(user.length0){returnnew Response(not found,{status:404});}// 写回缓存 await redis.set(user:${id}, JSON.stringify(user[0]),EX,10);returnResponse.json({source:db, data: user[0]});}});HTTP、PG、Redis,一把梭。换 Node.js,得装 pg、ioredis。然后 npm install。然后祈祷版本对。新项目可以试 Bun小项目、脚本、工具、内部系统,Bun 一把梭。性能比 Node.js 快,内置工具多。老项目别瞎迁移Bun 还在 1.0 之前,生态没 Node.js 全。生产大项目,Node.js 22 LTS 稳得多。以后新语言可能都这么干Deno 内置了 KV,虽然不是 PG 但思路一样。Bun 把 PG、Redis、SQLite 都内置了。以后新语言出生,大概率都带数据库驱动。老牌语言改不动,只能让社区卷。写在最后Bun 集成数据库驱动,不是技术难题。是利益、“哲学”、包袱的问题。• Go 哲学小而精,不会改。• Java 包袱重,改一行挂一片。• Python 靠社区,统一不了。• Bun 出生晚,没包袱,有钱,有人,敢改。写代码的,跟着用就行。哪个顺手用哪个。写小工具用 Bun。写大项目用 Node.js。写底层用 Go。写胶水用 Python。别死磕一门。能解决问题就行。