网易首页 > 网易号 > 正文 申请入驻

Vercel发布Scriptc引争议,被质疑“纯抄”Perry

0
分享至

如果 TypeScript 能像 Go、Rust 一样,直接编译成一个不带 Node.js 的原生二进制,你会用吗?

Vercel Labs 最近开源的 scriptc ,想做的就是这件事。一个普通的 fib.ts ,执行 scriptc build fib.ts 后,可以得到约 178 KB 的独立可执行文件,官方给出的启动时间约为 2 毫秒。


项目很快冲上 GitHub 热门,但评论区也冒出一个尖锐质疑: 这不就是在抄 Perry 吗?

因为在 scriptc 出现之前,Perry 已经打出了几乎相同的口号,同样把 TypeScript 编译成不依赖 Node.js、V8 和 Electron 的原生程序。

Perry 确实更早,scriptc 也确实撞上了相同的产品叙事,但现有公开证据不足以支持“纯抄”这个结论。

scriptc 到底做了什么

scriptc 不是 pkg 、Node.js SEA 那类打包工具。

传统的单文件打包方案,通常会把 JavaScript 代码和 Node.js 运行时一起塞进可执行文件。你得到的是一个方便分发的文件,里面仍然带着 JavaScript 引擎。scriptc 的静态模式则尝试把 TypeScript 代码真正转换成原生机器码,最终产物不包含 Node.js、V8 或其他 JavaScript 引擎。

它的编译链路并不神秘:

  1. 使用 TypeScript 官方编译器完成解析和类型检查。

  2. 把代码转换成带类型的中间表示。

  3. 默认通过 LLVM 生成机器码,也保留 C 后端作为参考实现。

  4. C 后端交给 Clang,最终链接成原生可执行文件。


真正困难的部分,不是把 number 变成机器指令,而是还原 JavaScript 的行为。

字符串要保持 UTF-16 语义,数组、Map、Set 要遵守 JavaScript 的顺序和身份规则,闭包、异常、 async/await 、事件循环也不能只做一个“差不多能跑”的版本。scriptc 为此实现了一套 C 运行时,并用差异测试反复比较同一段程序在 Node.js 和原生二进制中的输出、错误信息与退出码。

遇到无法静态编译的 npm 依赖或 any 代码时,开发者可以显式开启 --dynamic ,把 quickjs-ng 嵌入二进制。官方把处理结果分成三类:

  • 静态编译 :不携带 JavaScript 引擎。

  • 动态执行 :显式开启后,由嵌入式引擎处理不能静态转换的部分。

  • 拒绝编译 :给出具体错误码和修改提示,不静默生成错误程序。

这个边界比“一切 TypeScript 都能直接变成机器码”诚实得多。


Perry 确实来得更早

质疑不是凭空出现的。

Perry 的 GitHub 仓库创建于 2026 年 1 月,首个公开提交也在 1 月。scriptc 的 npm 包最早出现在 7 月 13 日,GitHub 仓库则到 7 月 22 日才公开。按公开时间线计算,Perry 领先了大约半年。

两者的宣传语也很像:

  • 都强调 TypeScript 直接编译到原生代码。

  • 都强调产物不依赖 Node.js 和 V8。

  • 都把小体积、低启动延迟和单文件分发作为卖点。

  • 都在补齐常见 Node.js API 和 npm 包兼容能力。

所以,Perry 用户看到一家更有影响力的公司带着相似项目入场,心里不舒服完全可以理解。小团队先做出来,大公司后来拿走聚光灯,这在开源社区并不少见。

但“更晚做同一类产品”和“抄了代码”,不是一回事。

看代码,两者走的不是一条路

我对比了两个项目当前公开的架构和代码目录,最明显的区别有三处。

第一,编译器前端不同。

scriptc 直接调用 TypeScript 编译器 API,利用 tsc 的解析、类型检查和类型收窄结果,再生成自己的 typed IR。Perry 的主体以 Rust 编写,使用 SWC 解析 TypeScript,并维护自己的类型系统、HIR 和转换步骤。

第二,运行时策略不同。

scriptc 的静态运行时主要用 C 实现,内存管理采用引用计数并配合循环回收。动态模式嵌入 quickjs-ng。Perry 的编译器和运行时主体是 Rust,采用自己的 GC、标准库和大量原生扩展模块。

第三,产品边界不同。

scriptc 当前更像一个面向 CLI 和服务端程序的 TypeScript 原生编译实验,重点是 Node.js 行为一致性、静态覆盖率和可诊断性。Perry 已经把范围扩展到桌面、移动端、手表、电视、WebAssembly 和原生 UI 组件,野心明显更大。

两者都会经过“解析、类型表示、降低、代码生成、链接”这些阶段,也都使用 LLVM。可这是一类原生编译器常见的技术骨架,不能仅凭架构相似就认定抄袭。

目前能确认的是:

  • Perry 更早公开,应该得到先行者应有的关注。

  • 两个仓库的主要实现语言、前端和运行时设计明显不同。

  • 在没有代码相似性、提交来源或许可证违规证据之前,“纯抄”仍然是一句情绪化指控。

TypeScript 的下一条路

这场争论背后,其实是 TypeScript 生态正在发生的一次路线分化。

过去我们默认 TypeScript 最终还是 JavaScript。类型只服务于开发阶段,运行时继续交给 Node.js、Bun 或浏览器。scriptc 和 Perry 都在挑战这个前提:既然大量业务代码已经具备足够稳定的类型信息,为什么不能把其中一部分直接编译成机器码?

这条路如果走通,对命令行工具、Serverless 函数、小型服务和边缘任务很有吸引力。启动更快、内存更低、部署时不需要携带完整运行时,源码也不必作为 JavaScript 一起分发。

但别急着把 Node.js 卸了。

JavaScript 的动态能力、原生扩展、复杂 npm 依赖和 Node.js 行为兼容,都是长期工程。scriptc 目前版本仍是 0.0.x ,官方也把 macOS arm64 列为主要平台。Perry 虽然覆盖面更广,距离完整兼容整个 Node.js 生态同样很远。

我的看法是,scriptc 最值得欢迎的地方,不是它“发明”了 TypeScript 原生编译,而是 Vercel Labs 的入场把这条小众路线推到了更多开发者面前。

Perry 应该被看见,scriptc 也应该按自己的实现质量接受检验。可以质疑它为什么不提先行项目,可以比较谁的兼容性和性能更扎实,但在证据出现之前,没必要把两个开源项目的竞争压缩成一句“谁抄了谁”。

真正的胜负,最终还是要由真实项目、长期维护和兼容性测试决定。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
杨澜也没料到,当年那个普通人前夫,如今早已收获了真正的幸福

杨澜也没料到,当年那个普通人前夫,如今早已收获了真正的幸福

小椰的奶奶
2026-08-03 01:25:54
冲击亚冠名额?郑智:目标是保级;赛季还很长,需要慢慢来

冲击亚冠名额?郑智:目标是保级;赛季还很长,需要慢慢来

懂球帝
2026-08-02 21:55:12
男排世联赛冠军出炉,欧洲豪门三度登顶,美国队决胜局崩盘

男排世联赛冠军出炉,欧洲豪门三度登顶,美国队决胜局崩盘

南海浪花
2026-08-03 02:58:23
中国5大通血管食物,洋葱排第5,第1名超市很常见,很多人不懂吃

中国5大通血管食物,洋葱排第5,第1名超市很常见,很多人不懂吃

医学科普汇
2026-08-01 21:25:06
雨下破纪录!台风来袭,广州何时放晴?

雨下破纪录!台风来袭,广州何时放晴?

趣味萌宠的日常
2026-08-03 01:37:45
婚前想把男友80万存款变共同财产,被拒后控诉“我就是想要个态度”!网友炸锅:这不叫不分彼此,这叫空手套白狼!

婚前想把男友80万存款变共同财产,被拒后控诉“我就是想要个态度”!网友炸锅:这不叫不分彼此,这叫空手套白狼!

一丝不苟的法律人
2026-08-02 20:16:36
就在今天,解放军黄岩岛亮剑,美军公开表态,菲律宾已无退路

就在今天,解放军黄岩岛亮剑,美军公开表态,菲律宾已无退路

携手游人间a
2026-08-02 06:08:36
曾是中国女足主帅,嫁给师兄后丁克至今,如今丈夫是上海女足领队

曾是中国女足主帅,嫁给师兄后丁克至今,如今丈夫是上海女足领队

胡一舸南游y
2026-08-01 15:19:26
好莱坞金牌制片人亲口承认:曾警告荷兰弟和赞达亚别谈恋爱,“每一代蜘蛛侠都这样”

好莱坞金牌制片人亲口承认:曾警告荷兰弟和赞达亚别谈恋爱,“每一代蜘蛛侠都这样”

生活观察员啊
2026-08-01 01:49:12
泰山陪爬变陪“睡”?贴身搂抱、明码标价变味儿,这山爬得太辣眼

泰山陪爬变陪“睡”?贴身搂抱、明码标价变味儿,这山爬得太辣眼

傲傲讲历史
2026-07-27 14:44:50
诺兰《奥德赛》完整画幅仅7家IMAX GT厅,如何选?

诺兰《奥德赛》完整画幅仅7家IMAX GT厅,如何选?

可乐谈情感
2026-08-03 04:25:19
特朗普又“变卦”了,突然宣布半导体关税,谁料美巨头先崩了!

特朗普又“变卦”了,突然宣布半导体关税,谁料美巨头先崩了!

疯狂小菠萝
2026-08-02 16:24:08
杨颖带小海绵逛街,顶着大太阳也没打伞,小海绵狼尾发型像黄晓明

杨颖带小海绵逛街,顶着大太阳也没打伞,小海绵狼尾发型像黄晓明

动物奇奇怪怪
2026-08-02 10:41:02
睡别人老婆到底违不违法?分4种情况,看完别再抱有侥幸

睡别人老婆到底违不违法?分4种情况,看完别再抱有侥幸

小蜜情感说
2026-08-01 04:35:14
住建局领导,偷睡别人老婆,被直播!

住建局领导,偷睡别人老婆,被直播!

地产八卦
2025-08-06 19:25:42
被哈佛录取、考F1只是冰山一角!韩红又被扒出新身份 变得更离谱

被哈佛录取、考F1只是冰山一角!韩红又被扒出新身份 变得更离谱

笑谈历史阿晡
2026-07-31 14:46:30
北京安贞医院柳瑞:再警告一次!半夜心梗突然发作,这样做

北京安贞医院柳瑞:再警告一次!半夜心梗突然发作,这样做

白宸侃片
2026-08-02 01:48:41
超强台风“白海豚”瞪大眼逼近东南沿海,浙江多地紧急通知!

超强台风“白海豚”瞪大眼逼近东南沿海,浙江多地紧急通知!

笔墨V
2026-08-03 00:20:52
默森:利物浦才是阿森纳最大争冠对手,曼城本赛季拿不了英超

默森:利物浦才是阿森纳最大争冠对手,曼城本赛季拿不了英超

懂球帝
2026-08-02 20:31:47
我开长途货车,在路上捎了个年轻尼姑,她哭着说:大哥求你个事

我开长途货车,在路上捎了个年轻尼姑,她哭着说:大哥求你个事

千秋文化
2026-08-02 20:23:01
2026-08-03 05:43:00
呼呼历史论
呼呼历史论
分享有趣的历史
863文章数 17706关注度
往期回顾 全部

科技要闻

零跑月销10万破纪录!比亚迪奇瑞海外卖爆

头条要闻

特朗普称伊朗请求美国暂缓发动袭击 伊方回应来了

头条要闻

特朗普称伊朗请求美国暂缓发动袭击 伊方回应来了

体育要闻

常规赛MVP可以衡量常规赛成就吗?

娱乐要闻

徐克和多位港星送别施南生

财经要闻

央行:继续实施好适度宽松的货币政策

汽车要闻

历史性里程碑时刻 零跑7月交付达101267台

态度原创

数码
旅游
亲子
公开课
军事航空

数码要闻

中国广电部署下半年重点工作:加快推进电视业务升级等

旅游要闻

打造文旅新业态 激活消费新引擎

亲子要闻

原来网上说的都是真的

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

特朗普:在伊朗和中东多国请求下 同意取消打击伊朗

无障碍浏览 进入关怀版