JS之父和JSON之父:JavaScript的下一站

2018 年 7 月 30 日 前端之巅
作者|Dylan Schiemann
译者|覃云
7 月 11 日,FullStack 2018 在伦敦举行,JavaScript 之父 Brendan Eich 和 JSON 之父、“JavaScript:The Good Parts”的作者 Douglas Crockford 一同出席,并就 JavaScript 的未来发表了演讲。

Eich 的演讲主要是围绕语言的迭代和改进功能进行,而 Crockford 主要关注 JavaScript 是否能将软件工程引向下一个巅峰,也就是全局分布式、安全的异步编程。

Eich:不该对开发者有求必应

Eich 讲述了这些年 JS 发生的变化,以及多久之后会再更新。例如,E4X 从未被 JS 接受,但“剔除了不好的 XML 部分的 E4X”,即 JSX,受到了很多 React 用户的喜爱。

Eich 提及在创建 JavaScript 中最大遗憾,就是在 JavaScript 第一个版本发布不久,就来之不拒地满足用户的需求,而不是想着解决他们面对的问题。例如,使用相等运算符 == 进行强制类型转换,如 12 =='12',便于通过 HTTP 将数据推送到服务器。

在本次演讲中,Eich 还重点强调了 asm 和 WebAssembly 的价值。asm.js 是 JavaScript 静态类型子集,asm.js 源代码的运行速度接近原生。

这种性能上的改进来自于 asm 支持从 JIT 转换到 AOT 编译,从抽象语法树(AST)直接转换为机器代码生成。

WebAssembly 是一个加载速度更快和更通用的 asm.js 版本。WebAssembly 在一个单独的进程中运行,因此它的语法比 JavaScript 更具有表现力,但仍然是 JavaScript 虚拟机的组成部分。

即将发布的新功能

Eich 对明年即将推出的这些语言功能感到兴奋:

  • TC39 BigInt - 一种新的值类型(value type),它能处理任意精度的整数,支持 TypedArrays

  • Dynamic import() - ES 模块默认导入是静态的,动态导入支持预取

  • Array.prototype.flat / flatMap - 数组的任意展平,而且它是展平和 smooshgate 的解决方案

  • 更多解构 - 可用于任意对象和数组

  • 类中的私有方法和访问器 - Eich 认为,符号前缀“#”有些争议,不应再使用了

  • 异步迭代 - for-await-of 的语法

  • RegExp 的改进

有关这些提案的更多信息,请参阅 TC39 提案的完整列表(https://github.com/tc39/proposals)。

不会标准化 React 类似的库

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

Eich 认为 binary-ast 是一种潜在的实用方法,但有待实践和后续的性能指标测试,以肯定其优势。Mozilla 正在进行初步实验。它的潜在的风险包括:它可成为另一种安全攻击载体,再者,它只是鼓励开发人员编写更大的 JavaScript 代码库,而不是依靠工具和规则来优化他们的代码库。

当被问及类型系统(如 TypeScript)时,Eich 评论说动态编程带给人们很大的便利性,并且不会产生妨碍,是一个非常好的类型系统。Eich 指出,“人们总是习惯使用不需付出任何代价的类型系统。”

TypeScript 非常出色,因为它是 JS 一个严格的超集,每个 JS 程序都是一个 TS 程序,Anders Hejlsberg 是一流的。

Eich 被问及是否会标准化类似 React 的库。他指出像 Dojo 和 Prototype 这样的早期库是如何将其概念引入 JS 的更高版本中,并指出,“我们并不会标准化像 React 那样的库”。相反,我们努力将基本原语( essential primitives)从库中提升到核心语言中。Eich 指出,过早做标准化会导致问题,尤其是对于类型系统等的解决方案。

被问及他对基于 RxJS Observables 的 Observables 提案的看法。Eich 指出,该规范已经停滞不前,要在语言中构建一个所需的功能是一个巨大的挑战。而且他也不确定是否应该将 Observable 添加到语言中。他没有提到 WHATWG specification for streams(https://github.com/whatwg/streams)是 Observables 的超集(superset),也许是这两个提案之间的竞争阻碍了 Observables 提案的进展。

最后,Eich 被问及机器学习,他认为,虽然深度学习很有用,但它并没有告诉我们关于其中的因果关系,它只是曲线拟合算法的一种高级形式。

Crockford:JavaScript 比其他语言更有优势

Crockford 指出,就目前来说,要达到上述的目标还存在很大的困难,因为包括 JavaScript 在内的所有编程语言都还停留在单机单地址空间的旧架构中。

但是,由于 JavaScript 能利用函数和对象做很多有趣的事情,所以 Crockford 认为 JavaScript 比其他语言,更容易达到上述的目标。

Crockford 认为,编程语言有一个通病,它们可能过于专注于“不良整形手术”的修复,而对未来没有一个清楚的认知。

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

会上,Crockford 质疑了听众的一些臆想,并指出这些臆想对我们的进步造成很大的影响。例如,他认为我们应该从零开始计数,并解释了为什么一切都应该从零开始。

Crockford 指出,到目前为止,ES2015 最大缺憾是缺乏正确的尾调用( tail calls)或尾调用优化机制,到目前为止只有 Safari 实现了该部分规范。根据 Crockford 的说法,尾调用是 ES2015 最重要的特性,因为这个特性有助于支持尾递归( tail recursion),功能替代的迭代,以及后续传递(continuation passing)。

Crockford 认为纯函数是未来语言中最关键的东西,任何影响纯函数的都不应该被考虑用于语言上。

Crockford 不喜欢 JavaScript 中的很多的特性。例如,他不喜欢 async / await,因为它阻碍了开发人员理解异步编程,使异步编程看起来像是同步的。

Crockford 解释了他对“简单”一词的看法,“标准越简单,需要达成一致的地方也越少,并且越有可能实现互操作性。” 他以 JSON 为例,解释说 JSON 是一种语法,它没有说明行为,易于理解和使用。JSON 所有的语法在一张名片背面就可以放下。

Crockford 正在研究一种名为“neo”的新语言和编译器,它以一种新语言的形式实现 Crockford 认可的 JavaScript 特性,并源到源编译定义良好的 JavaScript 程序,更多细节他将发布在一本名为《How JavaScript Works》的书中。

Crockford 也被问及有关 TypeScript 的问题,他认为:“TypeScript 并没有解决我所遇到的问题。” 这种对 TypeScript 的误解与他先前的声明“错误通常发生在事物的接口之间”有些矛盾,因为 TypeScript 的一个最重要的优点是帮助定义接口以防止这些错误发生。

  相关链接

https://skillsmatter.com/skillscasts/10595-opening-keynote-javascript-the-next-generation

https://skillsmatter.com/skillscasts/11232-keynote-how-javascript-works-a-preview

https://www.infoq.com/news/2018/07/eich-crockford-js-future

  课程推荐

登录查看更多
0

相关内容

JavaScript 是弱类型的动态脚本语言,支持多种编程范式,包括面向对象和函数式编程。
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
算法与数据结构Python,369页pdf
专知会员服务
160+阅读 · 2020年3月4日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
68+阅读 · 2020年1月17日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
83+阅读 · 2019年11月25日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
20+阅读 · 2019年11月7日
微信小程序支持webP的WebAssembly方案
前端之巅
19+阅读 · 2019年8月14日
2020年你应该知道的8种前端JavaScript趋势和工具
前端之巅
5+阅读 · 2019年6月9日
专访阿里亚顿:Serverless与BFF与前端
前端之巅
45+阅读 · 2019年5月8日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
React Native 分包哪家强?看这文就够了!
程序人生
12+阅读 · 2019年1月16日
WebAssembly在QQ邮箱中的一次实践
IMWeb前端社区
13+阅读 · 2018年12月19日
在浏览器中使用tensorflow.js进行人脸识别的JavaScript API
人工智能头条
6+阅读 · 2018年7月2日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
Arxiv
99+阅读 · 2020年3月4日
Arxiv
5+阅读 · 2019年10月11日
Factor Graph Attention
Arxiv
6+阅读 · 2019年4月11日
Arxiv
17+阅读 · 2019年4月5日
Arxiv
3+阅读 · 2018年3月29日
VIP会员
相关VIP内容
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
115+阅读 · 2020年5月10日
算法与数据结构Python,369页pdf
专知会员服务
160+阅读 · 2020年3月4日
【新书】Java企业微服务,Enterprise Java Microservices,272页pdf
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
68+阅读 · 2020年1月17日
【电子书】C++ Primer Plus 第6版,附PDF
专知会员服务
83+阅读 · 2019年11月25日
【电子书】Flutter实战305页PDF免费下载
专知会员服务
20+阅读 · 2019年11月7日
相关资讯
微信小程序支持webP的WebAssembly方案
前端之巅
19+阅读 · 2019年8月14日
2020年你应该知道的8种前端JavaScript趋势和工具
前端之巅
5+阅读 · 2019年6月9日
专访阿里亚顿:Serverless与BFF与前端
前端之巅
45+阅读 · 2019年5月8日
使用 C# 和 Blazor 进行全栈开发
DotNet
6+阅读 · 2019年4月15日
React Native 分包哪家强?看这文就够了!
程序人生
12+阅读 · 2019年1月16日
WebAssembly在QQ邮箱中的一次实践
IMWeb前端社区
13+阅读 · 2018年12月19日
在浏览器中使用tensorflow.js进行人脸识别的JavaScript API
人工智能头条
6+阅读 · 2018年7月2日
浅谈浏览器 http 的缓存机制
前端大全
6+阅读 · 2018年1月21日
Top
微信扫码咨询专知VIP会员