slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
TypeScript 编译器移植到本机代码,C# 忠实粉丝问为什么用 Go?
17611538698
webmaster@21cto.com

TypeScript 编译器移植到本机代码,C# 忠实粉丝问为什么用 Go?

编程语言 3 408 2025-03-16 05:13:06

图片

微软TypeScript 团队已经发布了 TypeScript 编译器到本机代码的移植预览版,它带来了巨大的性能提升,包括一项新的语言服务,将加快项目的编译与加载速度,并在 Visual Studio Code(VS Code)中启用新的 AI 功能。

该项移植由微软首席技术研究员安德斯·海思伯格(Anders Hejlsberg)推动,他是 TypeScript 和 C# 的创建者。他表示,TypeScript 无法扩展到最大的项目,客户报告称大型项目编译时存在内存不足的情况。“我们已经达到了 JavaScript 所能发挥的极限。”他在一篇视频中说道。

图片

JavaScript 提供了一个即时(JIT)编译器,但是海思伯格表示它存在局限性,包含 JIT 编译的开销、缺乏共享内存并发性,以及缺乏对结构内联分配等优化的支持。

该项目代号由安德斯发起,名为 Corsa,是现有 TypeScript 编译器代码的移植版。

由于这是一个移植版而非重写版,海思伯格认为其行为将保持不变,即使在极端情况下也是如此,因此它将是一个“即插即用的替代品”。还将有一个新的进程中间层 API,能够使其他语言能够与编译器对话。

这对开发者的影响是巨大的。

微软本身就有一个大型的 TypeScript 项目,即 Visual Studio Code,大约有 150 万行代码。海思伯格展示了新编译器如何将编译时间从1分钟多一点缩短到 6 秒以内的。 

图片

对于 VS Code 用户来说还会有更多好处,因为波浪线错误和悬停帮助等功能依赖于在加载时解析整个项目,所以新的本机编译器将大大加快项目加载速度,并将启用新的 AI 功能,例如立即对 LLM(大语言模型)的输出进行类型检查。

该项目还有一个副作用,TypeScript 语言服务现在将基于语言服务协议 (LSP),这是开发现有服务时尚不存在的标准。这意味着与编译器不同,新的语言服务将具有不同的行为,海思伯格表示,团队正在研究重构等领域,以考虑应如何实现这一项。

Corsa 项目根据 Apache 2.0 许可证已经在 GitHub 上开源。

https://github.com/microsoft/typescript-go

在GitHub 上最先热议的问题之一是为什么使用 Go 而不是 C#,尤其是考虑到是安德思·海思伯格的参与以及 C# 支持 AOT(预先)编译的事实。

安德斯在演讲中表示,该项目六个月前启动,花费了大量时间对“各种语言”进行原型设计。他表示,Go 被证明是最合适的语言,因为它“针对所有平台优化了本机代码,对数据布局有很好的控制,能够拥有循环数据结构等等”,以及“使用垃圾收集器进行自动内存管理,并且具有很好的并发性。”

一些.NET开发者对此感到失望。“这听起来像是对 C# 的不信任,因为 Anders 是 C# 的原创者,而他的团队现在选择不使用它,”其中一位开发者如此说道。

另一位开发者则表示“这样的事情让我羞于在 C# .NET 上建立我的职业生涯......如果他们不在旗舰产品中使用自己的工具,我对他们的工具就没有信心。”

在接受采访时,安德斯表示,尽管 AOT 取得了进步,但“C# 是字节码优先的”,并非适用于所有平台,“没有经过十年的强化”并且“不是按照这种方式设计的”。 

另一个重要因素是 C# 高度面向对象,而 Go“是函数和数据结构”,这使得 TypeScript 编译器端口更加顺畅。

他还说,Go 被当做选择项,但它仍然具有垃圾收集功能的最低级语言。

许多人对微软错失提升 .NET 功能的机会感到失望,但也有人表示,“我真的很喜欢 TS 团队决定使用 Go 而不是 C#……这表明他们有能力把社区的需求放在第一位。”其他人则认为 Rust 会是更好的选择。

安德斯坚定地宣称,TS团队使用 Go 的决定是由“特定的技术要求”所驱动的,“它不会削弱我们对 C# 和 .NET 的深入和持续投资。微软的大多数服务和产品都严重依赖 C# 和 .NET。”他说,C# 非常适合“需要快速、可维护和可扩展开发的场景”。

微软长期以来一直致力于语言多样性,这也不是 .NET 开发者第一次抱怨这家公司的选择。Windows 主要是 C/C++,这是 Windows Vista 早期开发过程中的失望之举,桌面版本的 Office 也是另一个例子。

.NET 社区之外的人会很高兴TS团队基于技术原因做出了这个决定,这将是 TypeScript 多年来最大的进步,缓解了许多从事大型项目的团队的一个大痛点。 

那么,我们什么时候才能获得原生的 TypeScript?

安德斯·海思伯格预计在 2025年底前将推出一个“功能齐全的替代命令行编译器”。它将作为 TypeScript 7.0 的版本号发布,现有的基于 JavaScript 的编译器将继续维护,并将成为 TypeScript 6.0。这两个项目将一直维护,直到 TypeScript 7 及更高版本“达到足够的成熟度和采用率”为止。

作者:场长

评论