NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:542407
用户头像

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

关注

评论

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

以用户体验为抓手,助力券商数字化转型

博睿数据

Android C++系列:Linux文件IO操作(一)

轻口味

c++ android jni 11月日更

【强势推出】专家带你玩,秒懂数据库!官方证书、万元奖品带回家!

华为云数据库小助手

GaussDB GaussDB(for openGauss) 华为云数据库

公司应该监控员工的上网行为吗?

石云升

职场经验 11月日更

怎么自学Python,大概要多久?

老表

Python 11月日更 编程入门 思路 如何解决问题

Flink CDC 2.1 正式发布,稳定性大幅提升,新增 Oracle,MongoDB 支持

Apache Flink

大数据 flink 后端 实时计算 CDC

盲盒开发盲盒app开发

自定义View:多点触摸画笔的实现

Changing Lin

11月日更

盲盒小程序开发源码搭建

选择 Pulsar 而不是 Kafka 的 7 大理由

Apache Pulsar

kafka 架构 云原生 中间件 Apache Pulsar

盲盒开发一番赏盲芒趣蛋趣小程序app开发

如何用Camtasia为“微课”视频添加光标效果?

淋雨

Camtasia

ARP欺骗与防范

喀拉峻

网络安全 安全 信息安全

社科院专家认为元宇宙是双刃剑,将带来五大巨变

CECBC

飞桨中国行——企业服务专场

百度大脑

人工智能

盲盒开发源码搭建小程序app

盲盒小程序开发盲盒源码搭建

Python Qt GUI设计:多线程中信号与槽的使用(基础篇—9)

不脱发的程序猿

Python qt PyQt GUI设计 多线程中信号与槽的使用

盲盒开发小程序app开发源码搭建

支撑长安链运行,区块链算力平台是什么?

CECBC

初识 .NET6

面向对象的猫

.net core .net6

进击的Java(九)

ES_her0

11月日更

盲盒h5小程序app系统开发

.NET6 内置IOC容器

面向对象的猫

.net core .net6

盲盒app开发

从消息到数据湖:看 Apache RocketMQ、Hudi、Kyuubi 最新进展

阿里巴巴云原生

数据湖 Meetup Apache RocketMQ Apache Hudi Apache Kyuubi

Kafka 已落伍,转角遇见 Pulsar!

Apache Pulsar

kafka 架构 分布式 Apache Pulsar 消息系统

大数据训练营一期1017作业

朱磊

盲盒开发盲盒小程序开发

盲盒开发盲盒小程序系统开发

盲盒开发

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