红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

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

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

关注

评论

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

软件测试/人工智能丨引领未来:软件测试中的人工智能

测试人

人工智能 软件测试

最新demo版|如何0-1开发支付宝小程序之如何调试小程序(二)

盐焗代码虾

支付宝小程序 小程序调试 如何调试

2G内存搞定一亿数据的分析引擎

Western Panda

数据库 大数据 开源 数据分析 OLAP

云桌面架构的全面剖析

青椒云云电脑

云桌面 云桌面解决方案 云桌面系统

全栈程序员太难了,这个报表工具别再错过了!!

秃头小帅oi

程序员 前端 后端 低代码 全栈

Util应用框架基础(七)- 二级缓存

何镇汐

开源 后端 .net core

杜绝硬编码,为系统安全保驾护航

尚思卓越

网络安全 硬编码 内嵌账号

Util应用框架基础(七)- API

何镇汐

开源 后端 .net core

Vue公共loading升级版(处理并发异步差时响应)

快乐非自愿限量之名

Vue 前端 处理机制

青椒云云桌面系统_企业上云桌面云服务解决方案

青椒云云电脑

云桌面 云桌面解决方案 云桌面系统

软件测试/人工智能丨人工智能会取代软件测试工程师吗

测试人

人工智能 软件测试

体育直播系统多功能开发:专家分析、竞猜比分引爆用户互动欲望

软件开发-梦幻运营部

Util应用框架基础(七)- Redis 缓存

何镇汐

开源 后端 .net core

Java多线程消费消息

不在线第一只蜗牛

Java 多线程 RocketM

开源流程设计器的对比与选型

小狗围观科幻

体育赛事平台开发:赛事数据分析驱动体育平台创新

软件开发-梦幻运营部

bitget钱包VS imtoken 钱包大比拼,全方面对比

大瞿科技

RTC技术沦陷后,人类或将一夜回到解放前?

X2Rtc

RTC 未来世界 科技趋势

这6个复盘模型,你知道几个?让你轻松搞定年终总结

彭宏豪95

个人成长 复盘 年终总结 在线白板 项目复盘

文心一言 VS 讯飞星火 VS chatgpt (140)-- 算法导论11.4 5题

福大大架构师每日一题

福大大架构师每日一题

技术分享| anyRTC之RTN网络

anyRTC开发者

音视频 网络 RTC RTN

JNPF开发平台凭什么火?

互联网工科生

低代码 JNPF

使用 LCM LoRA 4 步完成 SDXL 推理

快乐非自愿限量之名

逻辑思维 流程模型

如何理解低代码开发工具?

树上有只程序猿

低代码 应用开发 JNPF

Util应用框架基础(七)- 本地缓存

何镇汐

开源 后端 .net core

国内外传输大文件有哪些好用又便宜的文件传输工具?

镭速

传输大文件 文件传输工具 国内外传输大文件

原来 TinyVue 组件库跨框架(Vue2、Vue3、React、Solid)是这样实现的?

OpenTiny社区

开源 Vue 前端 React SOLID

item_search_pro-高级关键字搜索淘宝商品api接口

技术冰糖葫芦

API 文档

从大模型到内容生成,初窥门径的AI新次元

阿里云视频云

云计算 视频云 AIGC

影视行业如何远程完整快速传输大文件?

镭速

传输大文件

Util应用框架开发环境搭建(十)- 安装 Redis

何镇汐

开源 后端 .net core

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