AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

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

关注

评论

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

5分钟学会 Vim 分屏操作方方面面

爱好编程进阶

Java 程序员 后端开发

BATJ互联网月薪38K的Java岗面试题首曝光,掌握这些大厂Offer指定跑不了

爱好编程进阶

Java 程序员 后端开发

Day177

爱好编程进阶

Java 程序员 后端开发

ansible 模块:blockinfile

ghostwritten

ansible

ansible 模块:blockinfile

ghostwritten

ansible

IntelliJ IDEA开发最佳配置

爱好编程进阶

Java 程序员 后端开发

ansible 模块:script

ghostwritten

ansible

ansible 模块:add_host

ghostwritten

ansible

docker下kibana搭建

爱好编程进阶

Java 程序员 后端开发

IO流详细解答,博主亲自手敲代码,快速上手

爱好编程进阶

Java 程序员 后端开发

CountDownLatch、CyclicBarrier和Semaphore区别及底层原理

爱好编程进阶

Java 程序员 后端开发

Eclipse中查看源代码

爱好编程进阶

Java 程序员 后端开发

hive踩过的小坑

爱好编程进阶

Java 程序员 后端开发

HIVE3 深度剖析 (上篇)

明哥的IT随笔

大数据 hie

ansible 模块:set_fact

ghostwritten

ansible

idea启动tomcat报错,org

爱好编程进阶

Java 程序员 后端开发

萌新看过来,你还学不懂VScode插件吗?

葡萄城技术团队

报表

无形资产管理系统解决方案

低代码小观

资产管理 CRM 财务审核系统 CRM系统 企业管理软件

6个月的开发,来面试居然要18K,我一问连5K都不值

爱好编程进阶

Java 程序员 后端开发

90后码农:我面试了很多80后程序员,他们大多技术深度都不够

爱好编程进阶

Java 程序员 后端开发

Day346&347&348&349

爱好编程进阶

程序员 后端开发

还在写SQL做SAP二开?通过RFC调用NetWeaver,让HANA数据库操作更可靠

葡萄城技术团队

ERP 全套信息化系统 二开

ansible template jinja2 渲染

ghostwritten

ansible

C++类和对象详解

爱好编程进阶

Java 程序员 后端开发

centos7离线安装mysql5

爱好编程进阶

Java 程序员 后端开发

Cloud-借助消息队列解决分布式事务

爱好编程进阶

Java 程序员 后端开发

当.Net撞上BI可视化,这3种“套路”你必须知道

葡萄城技术团队

看板 数据大屏 BI数据分析

Batman+joker乱谈

爱好编程进阶

Java 程序员 后端开发

CentOS7各个版本镜像下载地址

爱好编程进阶

Java 程序员 后端开发

Day274

爱好编程进阶

Java 程序员 后端开发

“银行家算法”大揭秘!在前端表格中利用自定义公式实现“四舍六入五成双”

葡萄城技术团队

银行家算法 纯前端表格技术

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