吵翻了!TypeScript 官方编译器移植到 Go 语言,为什么不是 Rust / C# ?!

开发 前端
“为啥不是 Rust?为啥不选 C#?”毕竟,TS 的灵魂人物 Anders Hejlsberg 可是 C# 的缔造者,而 Rust 在 JS/TS 生态中早已是“性能先锋”的代名词。这到底是怎么回事?让我们一探究竟!

TypeScript(简称 TS)社区最近炸开了锅!官方宣布将 TS 编译器从 JavaScript(JS)移植到 Go 语言,号称性能提升10倍。这一消息一出,开发者们的情绪像是过山车:有人拍手叫好,觉得这波操作务实又高效;有人却满脸问号,甚至有点受伤——“为啥不是 Rust?为啥不选 C#?”毕竟,TS 的灵魂人物 Anders Hejlsberg 可是 C# 的缔造者,而 Rust 在 JS/TS 生态中早已是“性能先锋”的代名词。这到底是怎么回事?让我们一探究竟!

10倍性能提升,Go 成“救世主”

先来看看这次移植的亮点。TS 官方在博客《A 10x Faster TypeScript》中明确表示,新的 Go 版编译器(代号“Corsa”)将大幅提升开发者体验。无论是命令行构建还是编辑器加载速度,都能实现10倍左右的加速。以 Visual Studio Code(VS Code)这个拥有150万行代码的庞然大物为例,原先用 JS 版编译器(tsc)检查全项目要77.8秒,现在 Go 版只用7.5秒,足足快了10.4倍!编辑器加载时间也从9.6秒骤降到1.2秒,内存占用还减半。这波优化,直接让大型项目的开发者从“等得花儿都谢了”变成了“快到飞起”。

TS 团队的核心诉求很明确:他们希望编译器能快速启动、快速完成任务,同时保持与现有 JS 代码库的高度兼容。项目负责人 Ryan Cavanaugh 在 GitHub 讨论中写道:“我们需要新代码在语义和结构上尽量贴近现有代码,这样才能同时维护两套代码库。”这意味着,这次不是从零开始的重写,而是一次“搬家式移植”。Go 之所以脱颖而出,是因为它的代码风格与 TS 现有的函数式+数据结构模式高度吻合,用 Go 写出来的代码几乎像是 JS 版的“镜像”,开发者改动时可以轻松在两边同步。

除此之外,Go 的内存管理也帮了大忙。TS 编译器需要大量处理抽象语法树(AST)等数据结构,这些对象生命周期较长,而 Go 的垃圾回收(GC)机制正好能简化代码复杂度。Anders Hejlsberg 在采访中提到:“Go 是最接近原生代码的语言,同时还自带自动垃圾回收。”相比之下,手动管理内存会让移植工作量翻倍,而 TS 团队显然不想给自己找这个麻烦。

Rust:生态宠儿为何落选?

然而,看到 Go 被选中,Rust 的粉丝坐不住了。毕竟,在 JS/TS 生态中,Rust 早已是“性能担当”的代表。像 SWC、OXC、esbuild(虽然是用 Go 写的)这样的工具,都在用 Rust 或 Go 大幅提升构建速度。Rust 以其内存安全和强大的类型系统著称,尤其擅长处理编译器这种需要大量遍历树结构的场景。社区里有人直言:“Rust 的 match 语法简直是为解析器和 AST 遍历量身定做的,Go 能比得上吗?”

对此,TS 团队的回应很直接。Ryan Cavanaugh 在 FAQ 中解释:“如果是从头重写,Rust 确实是个好选择。但我们这次是移植,需要保留现有行为的精确性。”Rust 的零成本抽象和严格的借用检查虽然强大,却要求开发者重新设计内存管理逻辑,这与 TS 当前基于 GC 的代码风格格不入。Anders Hejlsberg 在视频采访中补充道:“Rust 没有垃圾回收,我们得重构所有数据类型,这太费劲了。”换句话说,Rust 的理想主义虽美,但在这次务实的“搬家”任务面前,显得有点“水土不服”。

还有个现实问题:Rust 的学习曲线陡峭。Go 的简单语法让新手也能快速上手,这对开源项目的贡献者友好度是个加分项。一名网友在 Hacker News 上调侃:“Rust 粉丝别急,TS 团队只是想快点干完活,而不是花半年研究生命周期。”虽然有点夸张,但也道出了部分真相——TS 团队更看重效率和兼容性,而非追求极致的性能潜力。

C#:Anders 的“亲儿子”为何被冷落?

如果说 Rust 落选还能理解,那 C# 被排除在外就让很多人摸不着头脑了。Anders Hejlsberg 是 C# 的创始人,TS 又是微软的项目,按理说用 C# 既能“肥水不流外人田”,还能统一微软的开发叙事。部分 C# 支持者甚至感到被背叛:“Anders 你这是不爱自己的孩子了吗?”还有人感叹:“C# 的 Roslyn 编译器都用 C# 写得那么成功,为什么 TS 不跟上?”

TS 团队的理由依然围绕“移植便利性”。Ryan Cavanaugh 表示:“C# 的面向对象风格和 TS 现在的函数式代码不太搭。”TS 编译器的 JS 版几乎全是函数和数据结构,几乎没有类,而 C# 的习惯用法更偏向 OOP(面向对象编程)。Anders 在采访中进一步解释:“Go 比 C# 更低级,它的结构体和内联数据表达能力更接近 JS 的风格。”他还提到,C# 虽然有 AOT(提前编译)选项,但这些功能跨平台支持不够成熟,远不如 Go 的静态单二进制文件来得直接。

社区里也有声音质疑这种说法。一名 Hacker News 用户指出:“C# 有 record、静态方法和 Span,完全可以映射 TS 的数据结构,Anders 这理由有点牵强。”还有人猜测,背后可能是团队偏好或政治因素:“Go 在微软内部越来越流行,连 Dapr 框架都用它,C# 是不是被边缘化了?”不过,Anders 本人澄清道:“这不是对 C# 的否定,微软内部 C# 仍是主流。这只是针对 TS 的特定需求做出的选择。”

吵归吵,开发者体验才是王道

这场语言之争吵得热火朝天,但 TS 团队的态度很明确:他们不在乎“语言信仰”,只想用最合适的工具解决问题。Go 的胜利不是因为它完美无缺——比如它与 JS 的互操作性就比不上 Rust 或 C#——而是因为它在这次移植中平衡了性能、兼容性和开发效率。TS 团队甚至承诺会优化 Go 的 JS API,确保生态工具不会因为这次迁移而翻车。

对于普通开发者来说,这场争论的意义可能没那么大。无论编译器是用 Go、Rust 还是 C# 写的,最终输出的还是 JS 代码,运行时性能不会有变化。真正的好处是构建更快、编辑器更流畅。正如一名网友总结:“10倍加速都摆在面前了,还在乎用什么语言写?赶紧用起来吧!”

未来展望:TS 7.0 会带来什么?

按照官方计划,Go 版编译器将在 TypeScript 7.0 中正式亮相,而 JS 版会继续维护到 6.x 系列稳定。这意味着短期内开发者可以自由选择版本,长期来看则会逐步过渡到 Go 版。TS 团队还透露,新编译器将支持更高级的重构功能和 AI 工具集成,这些都得益于性能的飞跃。

至于 Rust 和 C# 的粉丝们,或许可以期待下一次机会。毕竟,Anders Hejlsberg 也说了:“如果是个全新项目,语言选择会完全不同。”但眼下,Go 已经接过了接力棒,带着 TS 迈向更快的未来。你怎么看这次选择?欢迎留言吵一架——毕竟,程序员不吵架,还叫程序员吗?

Ref:

责任编辑:武晓燕 来源: Piper蛋窝
相关推荐

2009-02-24 08:48:02

D语言C++编译器

2009-08-10 17:12:54

C#编译器

2009-08-06 14:59:36

C#编译器

2009-08-14 11:34:26

Mono C#编译器

2009-09-01 10:35:19

C# 3.0编译器

2009-08-14 16:37:02

C# NGWS run

2023-08-22 08:00:00

编译器开发RustOCaml

2015-07-13 10:27:40

GoRust竞争者

2020-09-15 09:23:19

C++WindowsC#

2015-11-17 10:00:50

DGORust

2015-11-17 08:54:42

语言gorust

2023-07-31 07:33:04

Rust编译器内存

2013-12-30 11:21:31

Go编译器

2009-08-14 14:50:41

util.concur

2022-08-22 07:38:01

Go语言函数

2010-01-18 10:34:21

C++编译器

2010-01-21 09:11:38

C++编译器

2014-12-08 09:47:48

Go

2020-04-07 16:12:56

Go编程语言开发

2009-08-18 11:27:56

配置C#命令行编译器
点赞
收藏

51CTO技术栈公众号