做者:Liam Tung
编译:王治治丨发布自:思否编辑部
原文连接:https://www.zdnet.com/article...前端
微软的开源编程语言 TypeScript 是 JavaScript 的一个超集,到今年 12 月就满 10 岁了。程序员
它已经成长为构建在浏览器中运行的应用程序的首选语言,但早在 2010 年,它不得不在微软公司的文化中选择本身的方式,当时微软公司仍然惧怕开源。web
TypeScript 之父 Anders Hejlsberg 是微软的丹麦软件工程师和技术研究员,他在一次媒体采访中描述了 2010 年,在微软首席 Steve Ballmer 的领导下作出的决定 —— 开源战略是赢得JavaScript开发人员的惟一途径。typescript
Ballmer 在 2001 年称 Linux 是威胁微软全部知识产权的 "癌症",而在 2010 年,微软的开源仍然是高层管理人员的棘手问题。数据库
"Linux被视为对Windows的威胁,而事实证实,它偏偏相反。"Hejlsberg 说。 编程
Ballmer 于 2014 年 8 月卸任 CEO,此后他收回了这一立场,现在,在微软 CEO 萨提亚-纳德拉(Satya Nadella)的领导下,该公司专一于云计算并热爱开源,还拥有开源代码库 GitHub。segmentfault
微软其余主要的开源项目包括流行的代码编辑器 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在微软孵化的时候,正值网络和公司的一个有趣的关头。随着 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。
"从某种意义上说,这是一个只存在于开发者体验期间的类型系统,但在运行时它就会消失。但在运行时,它能给你带来全部的好处,而没有任何的缺点。"他解释道。
根据 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》
《SegmentFault 为什么成为本次微软 Ignite 大会中国区惟一社区表明?》