17611538698
webmaster@21cto.com

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

编程语言 0 38 21小时前

图片

微软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 及更高版本“达到足够的成熟度和采用率”为止。

作者:场长

评论