即刻获取 HarmonyOS应用开发者基础/高级认证 了解详情
写点什么

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

  • 2020-09-24
  • 本文字数:3768 字

    阅读完需:约 12 分钟

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

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


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


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


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


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


Hejlsberg 说:“Linux 被视为对 Windows 的威胁,可事实证明,它恰恰相反。”


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


微软的其他主要开源项目包括流行的代码编辑器 Visual Studio Code(VSCode)、.NET Code 和 TypeScript。TypeScript 是 JavaScript 的超集,带有类型系统,代码可编译为 JavaScript。


自 2012 年正式发布以来,TypeScript 已成为浏览器应用程序前端开发的主导语言之一,Slack、Airbnb 以及微软自己都采用了 TypeScript,微软还用 TypeScript 构建了 VS Code。这种语言现在与 Java、JavaScript 和 Python 一道,在十大编程语言中占有一席之地。


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


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


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


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


Hejlsberg 说:“我们知道这是我们必须做的事情,但是我们没有这方面的经验。”


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


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


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


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


Hejlsberg 曾在 Borland 任职,自 1996 年以来一直在微软工作,负责构建 Turbo Pascal 编译器。在微软,他还是 C# 的首席架构师。


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

为什么要创建 TypeScript?

TypeScript 是在微软和 Web 走在重要路口的有趣关头诞生的。由于 Internet Explorer 的市场份额被谷歌 Chrome 攫取,微软在 2015 年使用开源 Chakra JavaScript 引擎打造了全新的 Edge 浏览器。但是到了这个时候,专注于 Web 标准,具备功能强大的 V8 JavaScript 引擎的谷歌 Chrome 显然已经赢得了浏览器大战。


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


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


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


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


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


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


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


Hejlsberg 和他的公司决定建立一个“可擦除类型系统”,这个组件使 TypeScript 成为 JavaScript 的超集。在编译时,TypeScript 会删除所有类型并将代码还原回 JavaScript。


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

TypeScript 的主要竞争对手有哪些?

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


他说:“但是 JavaScript 并不是真正的竞争者。它是我们的双胞胎或是另一个自我。


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


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


像 JavaScript 一样,微软的 TypeScript 也会跟随 ECMAScript 标准的发展步伐,并且 TypeScript 的进展速度越来越快,以迎合喜欢纯 JavaScript 的开发人员。


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


在过去的两年中,TypeScript 团队改进了对 JavaScript js.doc 注释中类型注解的支持,从而“为那些不想使用 TypeScript 的人”带来更适合他们的 Type Script。


“由于 TypeScript 是 JavaScript 的超集,因此你也可以将 JavaScript 视为 TypeScript 的子集。这意味着我们整个 TypeScript 工具链非常乐于处理 JavaScript,并在 JavaScript 之上提供所有服务,”Hejlsberg 说。


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


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



TypeScript 之父,图片来源:微软 /YouTube

原文链接

TypeScript creator: How the programming language beat Microsoft’s open-source fears


2020-09-24 13:123234

评论 1 条评论

发布
用户头像
确实牛逼
2020-09-26 21:53
回复
没有更多了
发现更多内容

关于性能优化的总结

罗亮

架构师训练营第七周学习总结

张明森

道德的神

多选参数

故事

架构师课程第七周 作业

杉松壁

ARTS打卡-07

Geek_yansheng25

运行 client-go 测试用例.md

FeiLong

Kubernetes

Prometheus 删除指定 Metric

耳东@Erdong

Prometheus metrics

罪羊树——暴力也是种优雅

烫烫烫个喵啊

算法 二叉树 替罪羊 平衡二叉树

第七章作业

小胖子

架构师训练营第七周作业

张明森

发布一本用 GitBook 编辑的书

耳东@Erdong

git gitbook

架构师训练营第七周作业--web压测工具

CATTY

web 性能压测工具类

jason

Vagrant 创建多台主机

FeiLong

vagrant 虚拟机

架构师训练营 - 第 6 周学习总结

红了哟

用 GitBook 创建一本书

耳东@Erdong

git markdown gitbook

从推特被黑看安全木桶效应

石君

安全设计 安全事件

多问为什么

声远

技术 沟通 软件开发流程

Golang实现结构体数组按多字段排序

卓丁

多字段排序 结构体多字段排序 Go 语言

架构师训练营 - 第 6 周命题作业

红了哟

JDK1.8新特性(二):为什么要关注JDK1.8

xcbeyond

新特性 JDK1.8 JDK1.8新特性

Java中生成随机数的不同方法

wjchenge

redis系列之——事物及乐观锁

诸葛小猿

redis 乐观锁 事物 原子性 隔离性

我关闭了微信朋友圈广告!

诸葛小猿

广告 微信朋友圈 关闭

Windows Sandbox应用

Dare Devor

容器 Sandbox 虚拟化

JDK1.8新特性(三):Lambda表达式,让你爱不释手

xcbeyond

Lambda 新特性 JDK1.8 JDK1.8新特性

盘点本周区块链国内大事件

CECBC

Go: 通过例子学习 Map 的设计 — Part I

陈思敏捷

map Go 语言

思想无语言边界:以cglib介绍AOP在java的一个实现方式

八苦-瞿昙

随笔 随笔杂谈 aop

谈谈你是如何理解JS异步编程的,EventLoop、消息队列都是做什么 ,什么是宏任务,什么是微任务?

GKNick

计算机网络基础(六)---网络层-网络地址转换NAT技术

书旅

laravel 计算机网络 网络协议 计算机基础 NAT

TypeScript之父:JS不是竞争对手,曾在惧怕开源的微软文化中艰难求生_语言 & 开发_Liam Tung_InfoQ精选文章