您的位置首页  网络科技  前端

TypeScript之父:JS不是竞争对手曾在惧怕开源的微软文化中艰难求生

  开源的 TypeScript 也曾在微软内部遭到,但如今 TypeScript 已经成为 Web 应用构建的主流语言。

  微软的开源编程语言 TypeScript 是 JavaScript 的一种带有类型系统的变体,到今年 12 月已经有 10 年历史了。

  如今,它已成长为开发人员构建可在浏览器中运行的应用时常用的语言。但时间回 2010 年,彼时的 Type Script 却需要在依旧惧怕开源的微软公司文化中找到自己的出路。

  TypeScript 的共同创始人之一,来自丹麦的微软软件工程师和技术研究员 Anders Hejlsberg 向 ZDNet 讲述了 2010 年的那一段历史。当时微软的首席执行官史蒂夫·鲍尔默领导的团队决定,开源战略是唯一可以赢得 JavaScript 开发人员支持的制胜法宝。

  鲍尔默在 2001 年曾说过“开源就是一种癌症,Linux 是一种毒瘤”,称其威胁到了微软的所有知识产权。直到 2010 年,开源对于微软的高层管理人员来说仍然是一个棘手的问题。

  鲍尔默于 2014 年 8 月辞去首席执行官一职。如今,在微软首席执行官萨蒂亚·纳德拉的领导下,公司已经将业务重心转向了云计算,并热情地拥抱了开源社区,还收购了开源代码存储库 GitHub。

  但回到 2010 年,Hejlsberg 知道在微软的雷蒙德总部推销开源 TypeScript 的想法可能会是一个艰巨的挑战。随着这种编程语言迎来十周年纪念日,他回忆起微软彼时是如何看待开源代码的。

  “圣诞节就是我们的 10 周年纪念。”Hejlsberg 告诉 ZDNet,“TypeScript 一开始实际上只是一个想法,看看我们是否可以在 JavaScript 方面做得更好”。

  “我们构建了一些原型,然后将它们整合在一起。但是很明显,我们要吸引 JavaScript 社区的唯一方法就是开源。但在那时的微软讨论这个话题的氛围和今天是大相径庭的。”

  Hejlsberg 的 TypeScript 团队当时的处境并不好,他们需要扭转高层的偏见,高层的那些人对 Hejlsberg 所做的事情有强烈的抵触情绪。虽然 Hejlsberg 没有提及任何当初反对 TypeScript 的高管的名字,但 Hejlsberg 指出, 当时在鲍尔默的领导下,微软对开源有着“非常矛盾”的态度,而且有一种“恐惧”心理。

  可是随着 TypeScript 的逐渐成熟,加上开源在微软主营业务从 Windows 到云的转变过程中获得了认可,该公司在 2014 年通过 GitHub 上的一个公共存储库将 TypeScript 转型为“开放式开发”模式。使用 GitHub,意味着 TypeScript 和 JavaScript 的开发社区可以影响这种编程语言的未来发展。

  由于采用了这种全新的方法,他的团队现在与他们的客户,也就是使用 JavaScript 或 TypeScript 的开发人员之间实现了“零距离”。

  Hejlsberg 解释说:“从技术意义上讲,开源是指你向人们提供你的源代码并放弃你的知识产权,这就是技术上的开源。但接下来是开放式开发,你实际上是在公开地完成整个开发过程。自 2014 年 TypeScript 移至 GitHub 以来,我们一直在这样做。”

  GitHub 在 2018 年被微软以 75 亿美元的价格收购,如今由约 20 位微软工程师组成的 TypeScript 团队的所有日常工作都在 GitHub 上完成,从而做到了“与客户保持从未有过的亲密关系”。

  Hejlsberg 说,在迁移到 GitHub 之前,TypeScript 用户会在开发者大会上提交错误或需求请求,但他的团队往往需要一年的时间来交付新功能,结果经常会错过时机。

  “浏览器之战结束了,谷歌构建了 Chrome,HTML5 也在崛起。谷歌还构建了一个非常高效的 JavaScript 引擎,JavaScript 的效率大大提高了。每个人都开始意识到,浏览器将成为真正的应用的乐园。”Hejlsberg 回忆道。

  那时,开发人员已开始为浏览器构建庞大的 JavaScript 应用程序,并努力用 JavaScript 编写它们,他说这种语言缺乏诸如模块、类等关键功能;而且,重要的是缺乏一种通过程序中的规则来建立秩序的类型系统。

  然后是开发工具,比如 VS Code 这样的集成开发环境(IDE),它们可以提高开发人员的生产率。

  “想一想我们开发工具强大能力的源泉(例如现代化的 IDE),包括 Visual Studio 或 WebStorm(来自 JetBrains)以及其他产品所拥有的的所有编程生产力特性(例如 VS Code 的 IntelliSense、代码定义、代码导航等等),都需要 IDE 能够推理出你正在处理的代码。我们都认为这是理所当然的需求。”他说,“类型系统是你推理代码的一种方法。它提供了在运行和部署代码之前检查代码的能力。如果编程语言没有类型,这几乎是不可能做到的。当时,开发人员正在做很多疯狂的事情,例如编写这样的大型项目。该产品曾经是用 C# 的一个变体编写的,然后使用称为 Script Sharp 的工具交叉编译到了 JavaScript 上。”

  谷歌有一个类似的交叉编译工具,称为 Google Web Toolkit(GWT),该工具允许其开发人员使用 Java 编写代码并交叉编译为 JavaScript。通过这种方式,谷歌获得了成熟的开发工具链。他们可以获得具有项目功能、模块和类,以及 IntelliSense 和语句自动完成功能的 IDE,然后他们可以将 JavaScript 视为一种指令语言。

  在 TypeScript 出现之前,微软打算将一种称为 Script Sharp 的工具转变为产品。但是 Hejlsberg 想知道这些开发人员是否愿意“屈服于此来编写 JavaScript”。那么,为什么不尝试解决 JavaScript 的实际问题呢?

  Hejlsberg 说:“因为你肯定没法告诉人们说,用另一种语言编写代码可以为 JavaScript 建立最佳的开发体验。因此,我们开始研究如何解决这些问题,以为 JavaScript 构建更好的工具。这的确是 TypeScript 的起源。关键是要向语言中添加类型系统,而且还不能影响那些让 JavaScript 如此流行的东西。”

  从某种意义上说,它是一个 type system,只存在于开发人员编程期间,在运行时就会消失。不过在运行的时候,它给你带来的只有好处,没有任何缺点。

  根据 Hejlsberg 的说法,TypeScript 的唯一真正竞争对手是 JavaScript,因为这两种语言都是运行前端应用程序的必备语言,而 WebAssembly 却模糊了原生应用程序和浏览器应用程序之间的界限。

  这个问题实际上是:是否存在与 JavaScript / TypeScript 竞争的语言?答案是肯定的也是否定的。但是你在这些列表上看到的每种语言通常都有相似点,例如 Python 已在机器学习和 AI 领域找到了很多用例,而 SQL 被用于创建数据库,C# 和 Java 在企业后端发光发热。

  “JavaScript 和 TypeScript 是前端的运行方式。这是浏览器中唯一运行的语言,除了现在的 WebAssembly 之外。因此,这是完全自然而然的亲缘关系。如果要编写 Web 应用程序,你就会用 JavaScript 或 TypeScript 编写。”

  Hejlsberg 说:“一旦功能进入 ECMAScript 标准化流程的第三阶段,我们就认为该功能已准备就绪,可以在 TypeScript 中采用,然后我们会与社区合作以合并拉取请求。”

  “从某种意义上说,JavaScript 就像是没有类型注释的 TypeScript。因此,一种流行的 JavaScript 使用方式是,人们将类型注解放在注释(js.doc 注释)中,而不是直接在源代码中使用类型注解。编译器实际上可以从这些注释中获得很多信息。”

  正因如此,在过去的几年中,Heijlsberg 和他的团队一直在增强对 js.doc 注释的支持,并增强直接使用 JavaScript 的能力。

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186