微软的开源编程语言TypeScript是JavaScript的另一种自我,但带有类型系统,今年12月已经有10年历史了。
它已成长为构建可在浏览器中运行的应用程序的常用语言,但早在2010年,它就不得不通过仍然担心开源的微软公司文化来选择路。
TypeScript的共同创建者,丹麦的微软软件工程师,微软技术研究员Anders Hejlsberg向ZDNet描述了2010年的那一刻,当时微软当时的首席执行官史蒂夫·鲍尔默(Steve Ballmer)领导的团队决定,开源战略是唯一的取胜之道JavaScript开发人员。
鲍尔默(Ballmer)在2001年将Linux称为"癌症",威胁到了微软的所有知识产权,而在2010年,微软的开源对于高层管理人员来说仍然是一个棘手的问题。
Hejlsberg说:" Linux被视为对Windows的威胁,事实恰恰相反。"
鲍尔默(Ballmer)于2014年8月辞去首席执行官一职,此后便撤回了这一职位,如今,在微软首席执行官萨蒂亚·纳德拉(Satya Nadella)的领导下,鲍尔默一直专注于云技术,该公司热爱开源,并拥有开源代码存储库GitHub。
它的其他主要开源项目包括流行的代码编辑器Visual Studio Code(VS Code)、. NET Code 和TypeScript,TypeScript是JavaScript的超集,其类型系统可编译为JavaScript。
自2012年正式发布以来,TypeScript已成为浏览器应用程序前端开发的关键语言,被Slack,Airbnb以及当然Microsoft等公司采用,后者在TypeScript中构建了VS Code。该语言现在与Java,JavaScript和Python一起在十大编程语言中占有一席之地。
但是在2010年,Hejlsberg知道,在Microsoft的Redmond总部出售TypeScript作为一个开源项目可能会很难。随着编程语言的十周年纪念日,海斯伯格回忆起微软如何看待开放源代码。
他告诉ZDNet:"圣诞节将到10年。" " TypeScript实际上只是一个想法,'让我们看看我们是否可以在JavaScript方面做得更好"。
"我们构建了一些原型,然后将它们整合在一起。但是很明显,我们要吸引JavaScript社区的唯一方法就是开源。那时,这是一次不同的讨论。那天的微软。"
他说,海斯伯格的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编译器。在Microsoft,他还是C#的首席架构师。
Hejlsberg说,在迁移到GitHub之前,TypeScript用户将在开发者大会上提交错误或需求请求,但是他的团队将需要一年的时间来交付通常会错过商标的新功能。
为什么要创建TYPESCRIPT?
TypeScript是在互联网和公司的有趣关头孵化的。由于Internet Explorer失去了对Google Chrome的份额,微软稍后将在2015年使用开源Chakra JavaScript引擎启动其Edge浏览器。但是到那时,专注于网络标准和功能强大的JavaScript引擎V8的 Google Chrome 已经成为浏览器大战的明显赢家。
"浏览器之战结束了,谷歌构建了Chrome,HTML5也在发生。谷歌还构建了一个非常高效的JavaScript引擎,JavaScript的效率大大提高了。每个人都开始意识到,浏览器将成为真正的浏览器。应用程序正在构建中。" Hejlsberg回忆道。
那时,开发人员已开始为浏览器构建庞大的JavaScript应用程序,并努力用JavaScript编写它们,他说这种语言缺乏诸如模块,类之类的关键功能,而且,重要的是缺乏一种通过程序中的规则创建订单的类型系统。
然后是开发人员工具,例如像VS Code这样的集成开发环境(IDE),它们可以提高开发人员的生产率。
"如果您考虑到我们开发工具(例如现代IDE)的强大功能,我们都认为这是理所当然的,例如Visual Studio或WebStorm(来自JetBrains)以及其他产品--我们拥有的所有程序员生产力功能,例如VSCode的IntelliSense,代码定义代码导航需要IDE能够推理出您正在处理的代码。"他说。
"类型系统是您推理代码的一种方法。它是在运行和部署代码之前检查代码的能力。如果没有使用某种语言的类型,这几乎是不可能的。
"当时,开发人员正在做疯狂的事情,例如编写整个产品,例如Outlook.com,该产品曾经是用C#变体编写的,然后使用称为Script Sharp的工具交叉编译到JavaScript。"
Google有一个类似的交叉编译工具,称为Google Web Toolkit(GWT),该工具允许其开发人员使用Java编写并交叉编译为JavaScript。
"通过这种方式,[Google]可以获得成熟的开发人员工具。他们可以获得具有项目功能,模块和类以及IntelliSense和语句完成功能的真实IDE,然后他们可以将JavaScript视为一种指令语言,"他说。
在TypeScript出现之前,Microsoft打算将一种称为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的能力。"