写点什么

JavaScript 和 JSON 创建者对 JavaScript 未来的展望

  • 2018-08-01
  • 本文字数:2742 字

    阅读完需:约 9 分钟

近期在伦敦召开的 FullStack 大会上, Brendan Eich Douglas Crockford 分别做演讲探讨了 JavaScript 的未来。Eich 是 JavaScript 的创建者;Crockford 是 JSON 的创建者,也是《JavaScript 语言精粹》(“JavaScript: The Good Parts”)一书的作者。Eich 的大会演讲主要聚焦于一些需迭代改进的语言特性。Crockford 引导听众聚焦于 JavaScript 软件工程的下一步发展,他称之为一种全球分布的、安全的异步编程模式。

Crockford 指出,包括 JavaScript 在内的所有编程语言目前都停滞于旧架构中,即单机的单地址空间中,这造成了一些不必要的麻烦。但是由于 JavaScript 在函数和对象上实现的一些有意义的探索,Crockford 相信相比其它语言,JavaScript 要更有益于推进架构的转变。

Eich 提及在创建 JavaScript 中的最大遗憾,就是在语言初次发布后不久就立刻对用户有求必应,而不是考虑如何更好地解决用户的问题。例如,12=='12’是使用相等运算符“==”做强制类型转换,以便于处理通过 HTTP 将数据推送到服务器。

Crockford 指出,JavaScript 语言面临着一个问题,它可能过分关注“整形手术缺陷”的修修补补,而不是清楚地指明未来的改进方向。

与十年前相比,我认为语言中好的部分更少了,但是这些部分也做得更好了。

Eich 介绍了多年来 JavaScript 语言的改进情况,以及其中一些焕发了新活力的旧特性。例如,尽管 E4X 从未被 JavaScript 接受,但 JSX,即“剔除了不好的 XML 部分的 E4X”,却深受 React 用户的喜爱。

在本次演讲中,Eich 重点强调了 asm 和 WebAssembly 的价值。asm.js 源自 JavaScript 静态类型子集,实行以接近本机速度运行源代码。达到如此的性能改进,是因为 asm 支持从即刻编译(JIT)切换到预先编译(AOT),直接从抽象语法树(AST)转换为机器代码生成。

WebAssembly 是一种加载更快的、采用更广泛的 asm.js 版本。尽管 WebAssembly 仍然是同一 JavaScript 虚拟机的组成部分,但是它用单独的进程运行,因此它可以具有比 JavaScript 更具表现力的语法。

Eich 特别介绍了一些令他非常兴奋的特性,这些特性最早可于明年出现在 JavaScript 中。包括:

  • TC39 BigInt:一种新的值类型,用于处理任意精度的整数,bigness 提供对 TypeArrays 的支持。
  • 动态 import():默认情况下,ES 模块是静态导入的。动态导入还支持预取(prefetching)。
  • Array.prototype.flat/flatMap:实现任意数组的展平,它是实现展平和 smooshgate 的解决方案。
  • 更多的解析操作:用于任意对象和数组。
  • 类中的私有方法和访问器:在 Eich 看来,符号前缀“#”稍具争议,不应再使用。
  • 异步迭代:用于 await 语法。
  • 正则表达式上的一些改进。

更多建议及细节内容,参见 TC39 建议的完整列表

Crockford 在演讲中花了一些时间,质疑了听众的一些深层假设,并提出这些假设是如何影响大家的进步的。例如,计数是否应采用从“0”开始,还是从“1”开始?Crockford 解释了为什么他认为一切都应该从“0”开始。

Crockford 指出,缺乏正确的尾调用和尾调用优化( tail call optimization )his 目前为止在 ES2015 实现中的最令人失望之处。当前只有 Safari 实现了该部分规范。据 Crockford 介绍,尾调用是 ES2015 中添加的最重要特性,它有助于支持作为迭代替代功能的尾递归(tail recursion),以及后续传递(continuation passing)。

在 Crockford 看来,纯函数(pure functions)是语言未来发展中至关重要的特性。任何会影响纯函数的特性,都不应考虑在语言中采用。

目前 JavaScript 中也存在着不少 Crockford 不喜欢的特性,例如 async/await 特性。该特性有碍于开发人员对异步编程的理解,会使异步编程看起来就像是同步。

Crockford 解释了他对简单性的看法。“标准越简单,需要达成一致之处也就越少,就越有可能实现互操作性”。他以 JSON 为例做了解释。JSON 作 k 为一种语法,它并不涉及行为,易于理解和使用。JSON 的全部语法甚至可在一张名片背面放下。

Crockford 正致力于实现一种称为“neo”的新语言和 Transpiler(源到源编译器)。它以一种新语言的形式实现 Crockford 认可的 JavaScript 特性,并源到源编译为定义良好 JavaScript 程序。Crockford 有望于近期推出《JavaScript 工作机制》(“How JavaScript Works.”)一书,介绍其中的技术细节。

在演讲的问答部分,Eich 被问及了二进制抽象语法树(binary-ast)提案的情况。该提案介于传统JavaScript 和WebAssembly 之间,为所有的JavaScript 提供了二进制语法树。

Eich 认为,binary-ast 是一种潜在的实效(pragmatic)方法,但其优点有待通过初始实施及后续性能指标验证。Mozilla 正在致力于初步实现。其潜在的风险在于它可成为另一种安全攻击向量。此外,它会鼓励开发人员编写更大型的 JavaScript 代码库,而不是依靠工具和规则来优化代码库。

当被问及 TypeScript 等类型系统时,Eich 认为动态编程有其便利性。不会对编程产生妨碍的类型形态,无疑是一种好的类型系统。Eich 指出,“人们习惯于使用不需付出任何代价的类型系统。”

TypeScript 非常出色,它是 JS 的一个严格超集。每个 JS 程序也是一个 TS 程序。Anders Hejlsberg 是首屈一指的。

演讲中,Crockford 还被问及了一个关于 TypeScript 的负面问题:“它并没有解决我所遇到的问题”。出现这一误解的原因,在于 TypeScript 的主要优点是帮助定义接口。Crockford 曾认定,“事情间的接口通常是产生错误之处”,而 TypeScript 有助于防止出现此类错误。

在被问及 React 之类特性是否可以标准化时,Eich 介绍了 Dojo 和 Prototype 等早期的软件库是如何将其概念引入到更高版本的 JavaScript 中的。进而指明,“我们的工作并非去标准化 React 等软件库”,而是努力实现将基本原语从软件库中提升到核心语言中。Eich 指出,过早做标准化会导致问题,尤其是对于类型系统等尚待时日的解决方案。

在被问及对基于 RxJS Observables 的 Observables 提案的看法时,Eich 指出,该规范目前停滞不前,要在 JavaScript 语言中构建所需特性是一个挑战,他也不确定是否应该将 Observables 添加到语言中。他并未提及的是,用于流的 WHATWG 规范是 Observables 提案的一个超集。或许正是这两个提案之间的竞争,阻碍了 Observables 提案的推进。

最后在被问及对机器学习的看法时,Eich 指出,尽管深度学习非常有用,但是该技术并没有给出任何因果关系。目前的工作,只是一些高级形式的曲线拟合算法。

会议演讲视频免费提供,但需要注册。注册是开放的。

查看英文原文: Eich and Crockford on the Future of JavaScript: Insight from the Creators of JavaScript and JSON

2018-08-01 06:542834
用户头像

发布了 391 篇内容, 共 149.2 次阅读, 收获喜欢 257 次。

关注

评论

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

高效学习:如何制定有价值的学习目标

石云升

学习 28天写作

AQS之ReentrantReadWriteLock写锁

伯阳

读写锁 ReentrantReadWriteLock 多线程与高并发 lock

Java虚拟机知识 - JVM入门

小马哥

Java JVM 架构师 Java虚拟机 七日更

厉害!腾讯T3-2都还在学的微服务+MySQL+Kafka+boot2.x+虚拟机PDF

Java架构之路

Java 程序员 架构 面试 编程语言

如何开发一个完善的Kafka生产者客户端?

李尚智

kafka 架构 中间件 消息中间件

深度模型的日志异常检测,还有谁不会?

华为云开发者联盟

运维 日志 网络 AIOPS 系统

有人相爱,有人年少财务自由,有人数据结构都背不出来

Java架构师迁哥

Pulsar vs Kafka,CTO 如何抉择?

Apache Pulsar

大数据 pulsar 消息中间件

从零开始学java第一天(为报训练营做准备)

落曦

Java 程序经验小结:避免使用终结方法

后台技术汇

28天写作

全球城市ZoneId和UTC时间偏移量的最全对照表

YourBatman

GMT UTC ZoneId 时区

架构师 3 期 3 班 -week9- 作业

zbest

作业 week9

架构师 3 期 3 班 -week9- 总结

zbest

总结 week9

人设崩塌的美国生物实验室

脑极体

[JetPack] LiveData源码解析

Changing Lin

android 技术 JetPack

k8s 上运行我们的 springboot 服务之——springboot服务https请求

柠檬

Java k8s https Istio,

OMG,阿里大佬Kafka手写实战记录,这也太香了

Java架构之路

Java 程序员 架构 面试 编程语言

你跟涨薪只差这份Java核心知识点文档,读懂它你就是技术大佬!

Java架构之路

Java 程序员 架构 面试 编程语言

持币生息钱包APP系统开发|持币生息钱包软件开发

系统开发

区块链数字货币钱包系统软件开发|区块链数字货币钱包APP开发

系统开发

Redis中哈希分布不均匀该怎么办

Java 数据库 编程 程序员 面试

关注直播 解锁采集器新功能

滴滴云

运维 可观测性 直播技术 滴滴夜莺

还热乎的面经

书旅

百度 面试 面经

深度 | 阿里云蒋江伟:什么是真正的云原生?

阿里巴巴云原生

云计算 容器 运维 云原生 k8s

惊悚,单个java进程占用700%的CPU

万里无云

Java 后端 cpu

FFMpeg解码API以及在解码过程中存在的丢帧问题

wangwei1237

ffmpeg 视频解码

对微服务架构设计实践中若干问题的探讨

xcbeyond

微服务 28天写作

DCache 分布式存储系统|安装部署与应用创建

TARS基金会

缓存 分布式 微服务 存储 TARS

HTML(六)——html表单

程序员的时光

程序员 大前端 七日更 28天写作

2020 总结 | VoltDB的亮点,你了解多少?

VoltDB

数据库 物联网 VoltDB

史上最全!阿里巴巴2021年最新最全500道Java后端面试大全(值得收藏)

Java 编程 程序员 面试

JavaScript和JSON创建者对JavaScript未来的展望_JavaScript_Dylan Schiemann_InfoQ精选文章