作者:Liam Tung
编译:王治治丨公布自:思否编辑部
原文链接:https://www.zdnet.com/article...


微软的开源编程语言 TypeScript 是 JavaScript 的一个超集,到往年 12 月就满 10 岁了。

它曾经成长为构建在浏览器中运行的应用程序的首选语言,但早在 2010 年,它不得不在微软公司的文化中抉择本人的形式,过后微软公司依然胆怯开源。

TypeScript 之父 Anders Hejlsberg 是微软的丹麦软件工程师和技术研究员,他在一次媒体采访中形容了 2010 年,在微软首席 Steve Ballmer 的领导下做出的决定 —— 开源策略是博得JavaScript开发人员的惟一路径。

Ballmer 在 2001 年称 Linux 是威逼微软所有知识产权的 "癌症",而在 2010 年,微软的开源依然是高层管理人员的辣手问题。

"Linux被视为对Windows的威逼,而事实证明,它恰恰相反。"Hejlsberg 说。

Ballmer 于 2014 年 8 月卸任 CEO,尔后他发出了这一立场,现在,在微软 CEO 萨提亚-纳德拉(Satya Nadella)的领导下,该公司专一于云计算并酷爱开源,还领有开源代码库 GitHub。

微软其余次要的开源我的项目包含风行的代码编辑器 Visual Studio Code(VS Code)、.NET Code 和 TypeScrip。

自 2012 年正式公布以来,TypeScript 曾经成为浏览器利用前端开发的重要语言,被 Slack、Airbnb 等公司采纳,当然还有用 TypeScript 构建 VS Code 的微软本人。当初,该语言与Java、JavaScript 和 Python 一样,在十大编程语言中稳居一席之地。

但在 2010 年,Hejlsberg 晓得,将 TypeScript 作为一个开源我的项目在微软雷德蒙德总部采购可能会很艰难。在这一编程语言行将迎来 10 周年之际,Hejlsberg 回忆起微软是如何以畏惧的态度对待任何开源我的项目的。

"到圣诞节的时候就 10 年了,TypeScript 最后真的只是一个想法,'让咱们看看咱们是否能够在 JavaScript 方面做得更好'。

"咱们构建了一些原型,而后将它们整合在一起。然而很显著,咱们要吸引 JavaScript 社区的惟一办法就是开源。那时的微软进行了一次不同观点的探讨。"

Hejlsberg 的 TypeScript 团队“实际上必须让旗杆上的一群人对咱们在这里应该做什么有强烈的认识”,但没有提及任何可能拥护它的高管的名字。但他指出,过后在鲍尔默(Balmer)的领导下,微软对开源感到“十分矛盾”。Hejlsberg 说:“咱们晓得这是咱们必须做的事件,然而咱们没有教训。”

然而随着 TypeScript 的成熟和开源在 Microsoft 从 Windows 到云的转变中取得认可,该公司将在 2014 年通过 GitHub 上的公共存储库将 TypeScript 转换为“凋谢开发”模型。应用 GitHub 能够使 TypeScript 和 JavaScript 开发人员社区影响其将来。

因为采纳了不同的办法,他的团队当初与应用 JavaScript 或 TypeScript 的开发人员之间的客户“零距离”。

Hejlsberg 解释说:“从技术意义上讲,开源是指您向人们提供您的源代码并放弃您的知识产权,从技术上讲,这是开源的。”

“然而接下来是开放式开发,您实际上是在公开地实现整个开发过程,自 2014 年 TypeScript 移至 GitHub 以来,咱们始终在这样做。”

现在,微软于 2018 年以 75 亿美元的价格收买了 GitHub, TypeScript 团队则由大概 20 名微软工程师进行日常工作的中央,从而实现“与客户放弃紧密联系,这是我从未见过的事”。

Hejlsberg 在 Borland 任职后,自 1996 年以来始终在 Microsoft 工作,并建设了Turbo Pascal编译器。在微软,他还是C#的首席架构师。

Hejlsberg 说,在迁徙到 GitHub 之前,TypeScrip t用户将在开发者大会上提交谬误或需要申请,然而他的团队将须要一年的工夫来交付通常会错过新性能。

为什么要创立TYPESCRIPT?

TypeScript在微软孵化的时候,正值网络和公司的一个乏味的关头。随着 Internet Explorer 的份额被 Google Chrome 夺走,微软在 2015 年推出了应用开源 Chakra JavaScript 引擎的 Edge 浏览器。但过后谷歌 Chrome 浏览器凭借其对网络规范的关注和弱小的 JavaScript 引擎 V8,曾经成为浏览器大战的显著赢家。

"浏览器大战完结了,谷歌曾经打造出了 Chrome 浏览器,HTML5 也正在产生。谷歌还打造了一个十分高效的 JavaScript 引擎,JavaScript 的效率曾经大大晋升。每个人都开始意识到,浏览器将成为真正的浏览器。"Hejlsberg 回顾道。

Hejlsberg 说:"过后开发人员曾经开始为浏览器构建宏大的 JavaScript 利用,并致力用 JavaScript 编写这些利用,他说这种语言不足模块、类等要害性能,更重要的是,不足在程序中通过规定创立秩序的类型零碎。

而后是开发者工具,比方像 VS Code 这样的集成开发环境(IDE),它们能够用于进步开发者的生产力。

“如果您思考到咱们开发工具(例如古代 IDE)的弱小性能,咱们都认为这是天经地义的,例如 Visual Studio 或 WebStorm(来自 JetBrains)以及其余产品 —— 咱们领有所有的程序员生产力性能,例如 VSCode 的 IntelliSense,代码定义代码导航须要 IDE可能推理出您正在解决的代码。”他说。

“类型零碎是您推理代码的一种办法。它是在运行和部署代码之前查看代码的能力。如果没有应用某种语言的类型,这简直是不可能的。

"过后,开发人员正在做一些疯狂的事件,比方编写整个产品,比方Outlook.com,它一度是用 C# 的变体编写的,而 C# 是用一种叫做 Script Sharp 的工具穿插编译成 JavaScript 的。"

Google 有一个相似的穿插编译工具,叫做 Google Web Toolkit(GWT),它容许其开发人员用 Java 编写并穿插编译成 JavaScript。

“他们能够失去一个真正的 IDE,具备我的项目性能、模块和类、IntelliSense 和语句实现,而后他们能够将 JavaScript 视为一种指令语言,"他说。

在 TypeScript 呈现之前,微软就想把一个叫 Script Sharp 的工具变成产品。但 Hejlsberg 不晓得这些开发者是否违心 "弯下那么大的腰来用 JavaScript 写作"。那么为什么不尝试用 JavaScript 解决真正的问题呢?

"因为必定不会通过通知人们用另一种语言编写来为JavaScript建设最佳的开发体验。"他说。

"所以咱们开始钻研咱们能做什么来解决这些问题,为 JavaScript 构建更好的工具。这就是 TypeScript 的真正起源。要害是在语言中增加一个类型零碎,而不夺走当初让 JavaScript 如此受欢迎的所有货色。"

Hejlsberg 和公司决定建设一个 "可擦除的类型零碎" —— 这个组件使 TypeScript 成为 JavaScript 的超集。在编译时,TypeScript 会删除所有的类型,并将其返回给 JavaScript。

"从某种意义上说,这是一个只存在于开发者体验期间的类型零碎,但在运行时它就会隐没。但在运行时,它能给你带来所有的益处,而没有任何的毛病。"他解释道。

TYPESCRIPT的次要竞争对手是什么?

依据 Hejlsberg 的说法,TypeScript 惟一真正的竞争对手是 JavaScript,因为这两种语言当初都是运行前端应用程序的首选语言,而 WebAssembly 正在含糊本地应用程序和浏览器应用程序之间的界线。

"但 JavaScript 并不是真正的竞争对手,它是咱们的孪生兄弟或另一个自我。"他说。

"问题实际上是,'是否有语言能够与 JavaScript 和/或 TypeScript 竞争?有,也没有。但你在这些列表上看到的每一种语言通常都有一个亲和点。就像 Python 在机器学习和 AI 中找到了一大堆用处,而 SQL 被用来创立数据库,C# 和 Java 在企业后端很重要。

"你晓得,JavaScript 和 TypeScript 是前端的运行形式。它是惟一一种在浏览器中运行的语言,除了当初的 WebAssembly。所以有一种齐全天然的亲和力。如果你要写一个 web 利用,你就会用 JavaScript 或 TypeScript 来写。"

像 JavaScript 一样,Microsoft TypeScript 也跟踪 ECMAScript 规范的倒退,而且越来越多的TypeScript被开发进去,以投合那些喜爱纯JavaScript的开发者。

“一旦性能进入 ECMAScript 标准化流程的第三阶段,咱们就认为该性能已准备就绪,能够在 TypeScript 中采纳,而后咱们与社区单干以合并申请。”

在过来的两年里,TypeScript团队通过改良对JavaScript js.doc正文中类型正文的反对,致力于“为那些不想应用TypeScript的人”构建TypeScript。

“因为 TypeScript 是 JavaScript 的超集,因而您也能够将 JavaScript 视为 TypeScript 的子集。这意味着咱们整个 TypeScript 工具链十分乐于解决 JavaScript 并在 JavaScript 之上提供所有服务,” Hejlsberg 说。

“从某种意义上说,JavaScript 就像没有类型正文的 TypeScript。因而,一种风行的应用 JavaScript 的形式是,人们将类型正文放在正文(js.doc正文)中,而不是间接在源代码中应用类型正文。编译器实际上能够从这些正文中取得很多信息。因而,在过来的几年中,咱们实际上加强了对 js.doc 正文的反对,并加强了间接应用 JavaScript 的能力。”