作者:Liam Tung
编译:王治治丨发布自:思否编辑部
原文链接:
https://www.zdnet.com/article/typescript-creator-how-the-programming-language-beat-microsofts-open-source-fears/
微软的开源编程语言 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 的能力。”
2015 年 Anders Hejlsberg 第一次来中国,就参加了 SegmentFault 思否组织的线下活动。作为 TypeScript 的核心开发者,在当时的活动中他就曾表示非常感谢中国如此多的开发者能够支持 TypeScript,另外他也表示,通过 SegmentFault 思否策划的线下活动,看到了中国整个开发者社区非常大的热情,也希望在之后越来越多的开发者能参与到 TypeScript 的工作中来。
《SegmentFault 创始人祁宁对话 C# 之父 Anders Hejlsberg》:https://segmentfault.com/a/1190000003944860
《SegmentFault 为何成为本次微软 Ignite 大会中国区唯一社区代表?》:https://segmentfault.com/a/1190000020867763