11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

社区质疑 TypeScript 与编译为 JavaScript 的语言

  • 2012-10-29
  • 本文字数:2464 字

    阅读完需:约 8 分钟

微软近期发布了编程语言TypeScript ,这在JavaScript 社区引起了轩然大波。来自雷德蒙德的这一新生事物会将一种专有的、类型安全的语言解释为JavaScript,从而使开发者能够利用JavaScript 的功能,同时降低了掌握JavaScript 语言本身的必要性。软件社区对这门新语言反应各异,有些人欣然接受以TypeScript 的方式编写类型安全的JavaScript,而其他人则质疑所有编译成JavaScript(Compile-to-JavaScript)的语言是否有必要存在。

最初,随着TypeScript 的发布,如DevProConnections 等很多和.Net 比较友好的新闻媒体做了大量宣传。DevProConnections 网站的定期撰稿人Michael K. Campbell 对于 TypeScript 的未来表现出了公正但更显积极的立场。Campbell 总结到,这种应用开发风格代表着 JavaScript 在逻辑上已经成熟,可以将 TypeScript 的发布看作一次正式宣告,JavaScript 已经安全地从浏览器进入桌面与后台服务的开发领域。

我忍不住想象 TypeScript 的光明未来。当我想到相对于支持 API 的后端 Web 服务(如 Microsoft’s ASP.NET Web API framework ),Web 开发日益向重度依赖具有动态页内渲染能力的 JavaScript 的架构发展,我就对 TypeScript 的未来特别兴奋。

有的开发者希望利用 JavaScript,而又不想投入太多时间。这些开发者发现,吸引他们采用 TypeScript 的原因并不是只有类型安全性。TypeScript 提供了一种基于类的面向对象编程模型,这吸引了一些 C#和 Java 风格语言的开发者。英格兰柴郡的一位软件开发者 Danny Tuppeny 写到,TypeScript 的这一特性让他可以利用 JavaScript 的功能,而不需要掌握基于原型的面向对象语言的相关基础知识。

我对程序集或 IL 并没有太多了解。当然,某些情况下多了解一些会很有用,但是相对于把时间投入到我日常使用的 C#或其他技能上,投入到程序集或 IL 上真的值得吗?

如果 TypeScript 能帮我拼装 JavaScript 的子类原型,就算我自己不会用 JavaScript 实现,这有什么关系吗?没关系。理解生成的代码对我有帮助吗?当然有。但这是必须的吗?并不是。重要的是理解它是如何工作的以及有何限制。同样道理,编写 C#代码时我也不需要百分之百地理解生成的 IL。

不过,TypeScript 只是编译为 JavaScript 的一族开发语言中的最新成员。 去年出现的 Dart 绕过了 JavaScript 的缺点,而且带来了健壮性更好、生产力更高的 Web 开发体验。相对于 JavaScript,这两种语言的语法都更为健壮,如都具有类型安全性;它们的相似性远远不是一个是另一个的山寨这么简单。

微软的 Web 开发者工具架构师 Scott Hanselman 在推销 TypeScript 的同时也质疑将它与 Dart 对比的必要性,他指出这两种语言是以不同方式开发的,而且其核心也存在根本差异。

有人拿 TypeScript 与 Dart 对比,这就像拿苹果跟化油器比。TypeScript 构建于 JavaScript 之上,因此没有 JS 互操作问题。而 Dart 是一个从头开始设计的原生虚拟机。Dart 可以与 JavaScript 互操作…但它并不是 JS。比如说,Dart 中甚至不能使用 JavaScript 的 Number 类型。

Dart 团队的开发者 Shannon -jj Behrens 强调了这一区别,并表示欢迎 TypeScript 加入编译成 JavaScript 的语言这一大家族。Dart 团队认为,因为对 JavaScript 的依赖,TypeScript 采用的是老式的、容易出现编程错误的技术,他们很快就能超越这一竞争者。这也解释了他们为什么要鼓励微软围绕 JavaScript 代码库继续努力。

现在我们有机会看一下 TypeScript,Dart 团队非常欢迎 TypeScript 团队进入这一社区。如果你已经有了规模庞大的 JavaScript 代码库,或者已在使用 Visual Studio,我们认为 TypeScript 对你的项目是很好的补充。

并不是所有的人都认同替换 JavaScript 或者用不同的语言来包装 JavaScript 的理念。NCZonline.net 的 Web 工程师和博主 Nicholas C. Zakas 质疑到,如果把同样的精力投入到 JavaScript 上可以得到一样的结果,那编译为 JavaScript 的语言是否值得学习呢。

我认为编译为 JavaScript 的语言是实现这一目标的障碍。我们应该说服更多的人来学习 JavaScript,而不是给他们更多去选择放弃 JavaScript。我常常在想,如果所有的团队和公司将花费在这些替代品上的时间、精力、人力和金钱都用在改进 JavaScript 及其教学上,情况会怎么样呢?

Yahoo 的高级 UI 原型设计师 Marco van Hylckama 回应到,他感觉很多 JavaScript 开发者宁可将精力放在那些干脆抛弃 JavaScript 的现有技术上,也不愿意努力学习 JavaScript 语言本身。Hylckama 在其 Twitter 账号上质疑 TypeScript 和编译成 JavaScript 的这类语言的必要性。

不,不… http://www.typescriptlang.org/ 到底为什么我要用另一种语言编写代码再将其编译为 JavsScript 呢?

位于伦敦的一家 UI 开发公司——Neave Interactive——通过其 Twitter 账户从另一个角度探讨了这一主题,该公司质疑是否对 JavaScript 的学习困难到要使用替代品或通过其他编译为 JavaScript 的语言来抽象的地步了:

JavaScript 真的这么可怕吗?先是 CoffeeScript、Dart,现在又来了 TypeScript。

虽然所有的支持者、批评者和竞争者都在表达自己的观点,但毋庸置疑的是,TypeScript 在软件开发领域正越来越受欢迎。目前人们认为 JavaScript 不仅是一种可行的 Web 前端解决方案,也能用于创建桌面应用程序,还能开发可靠的服务端产品。OSS Watch 的作者之一Mark Johnson 指出,JavaScript 使用场景的增加很可能会加剧对JavaScript 开发者的需求,而且随着这种需求的上升, TypeScript 和 Dart 等语言的使用机会也相应增长

随着支持使用 JavaScript 编写跨平台的游戏和应用的工具的增多,以及像 Windows 8 和 Open WebOS 这样的平台将 Web 技术推向桌面,对于 TypeScript 所提供特性的需求只会越来越多。

查看英文原文 Community Questions TypeScript and Compile-to-JavaScript Languages


感谢侯伯薇对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-10-29 23:483003
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 123.4 次阅读, 收获喜欢 32 次。

关注

评论

发布
暂无评论
发现更多内容

博文推荐 | 一文带你看懂 Pulsar 的消息保留和过期策略

Apache Pulsar

架构 云原生 中间件 干货 Apache Pulsar

到底什么样的ABAP系统能运行Fiori应用

Jerry Wang

SAP abap Fiori 11月日更

时序序列分类算法概述

云智慧AIOps社区

大数据 算法 时间序列 智能运维

纪念林徽因

AI运动:阿里体育端智能最佳实践

阿里巴巴终端技术

最佳实践 端智能

flutter开发中vscode插件推荐1

坚果

flutter vscode 11月日更

【Flutter 专题】06 图解基础【登录】页面并学习相关 Widget

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 11月日更

GaussDB NoSQL架构设计分享

华为云开发者联盟

nosql 云原生 GaussDB 超融合 多模数据库

企业数字化转型与SAP云平台

Jerry Wang

SAP 11月日更 SAP数字化转型 SAP云平台

CSS奇技淫巧之滤镜

Augus

CSS 11月日更

ETL和数据建模

大数据技术指南

11月日更

APP上运行小程序的混合移动研发模式

Speedoooo

容器 ios开发 APP开发

火出边际的Serverless,你居然还不了解?

华为云开发者联盟

云计算 Serverless 运维 云原生 敏捷

博文推荐|Pulsar 的消息存储机制和 Bookie 的 GC 机制原理

Apache Pulsar

存储 Apache Pulsar 消息中间件 Apache BookKeeper bookie

Kafka中的数据不丢失机制及CAP理论详解

五分钟学大数据

11月日更

潜藏在手机中的新威胁:免安装应用安全指北

OPPO数智技术

安全 移动端

云小课 | 网站接入WAF失败怎么办?看这里就够了

华为云开发者联盟

华为云 Web应用防火墙 接入WAF失败 故障排查

TDengine助力曲靖卷烟厂有效提升时序数据存取效率

TDengine

数据库 tdengine 后端

告诉你!操作系统是个大骗子!

博文视点Broadview

论文解读丨无监督视觉表征学习的动量对比

华为云开发者联盟

视觉 无监督学习 无监督视觉 表征学习 动量对比

一图看懂 Apache ShardingSphere 5.0.0

SphereEx

数据库 开源 ShardingSphere

虚拟机与容器的混合管理实践

OPPO数智技术

Kubernetes 后端 云化底层的那些事

Python 中的反转字符串:reversed()、切片等

华为云开发者联盟

Python 切片 反转字符串 reversed 反转

亿磐获评《新闻周刊》2021年度最受雇员喜爱工作场所

InfoQ_434670063458

亿磐 EPAM 新闻周刊

博文推荐|Pulsar 存储空间不释放的问题分析与解决方法

Apache Pulsar

架构 云原生 Apache Pulsar 技术干货 BookKeeper 存储空间

译文|选择 Apache Pulsar 而非 Kafka 的 10 个理由

Apache Pulsar

kafka 架构 云原生 中间件 Apache Pulsar

Vue进阶(幺玖幺):ECharts 实现地图功能

No Silver Bullet

Vue eCharts 11月日更

containerd镜像层过大问题

ilinux

Apollo选型及优势介绍

小鲍侃java

11月日更

dart系列之:在dart中使用packages

程序那些事

Java flutter dart 程序那些事 11月日更

She Builds Summit|邀您一同感受她的科技力量!

SphereEx

开源 AWS SphereEx 潘娟

社区质疑TypeScript与编译为JavaScript的语言_JavaScript_Harry Brumleve_InfoQ精选文章