JavaScript和JSON创建者对JavaScript未来的展望
LorHallman
6年前
<p>近期在伦敦召开的 <a href="/misc/goto?guid=4959758010144049126" rel="nofollow,noindex">FullStack大会</a> 上, <a href="/misc/goto?guid=4959758010228591817" rel="nofollow,noindex">Brendan Eich</a> 和 <a href="/misc/goto?guid=4959758010315989137" rel="nofollow,noindex">Douglas Crockford</a> 分别做演讲探讨了JavaScript的未来。Eich是JavaScript的创建者;Crockford是JSON的创建者,也是《JavaScript语言精粹》(“JavaScript: The Good Parts”)一书的作者。Eich的大会演讲主要聚焦于一些需迭代改进的语言特性。Crockford引导听众聚焦于JavaScript软件工程的下一步发展,他称之为一种全球分布的、安全的异步编程模式。</p> <p>Crockford指出,包括JavaScript在内的所有编程语言目前都停滞于旧架构中,即单机的单地址空间中,这造成了一些不必要的麻烦。但是由于JavaScript在函数和对象上实现的一些有意义的探索,Crockford相信相比其它语言,JavaScript要更有益于推进架构的转变。</p> <p>Eich提及在创建JavaScript中的最大遗憾,就是在语言初次发布后不久就立刻对用户有求必应,而不是考虑如何更好地解决用户的问题。例如,12=='12'是使用相等运算符“==”做强制类型转换,以便于处理通过HTTP将数据推送到服务器。</p> <p>Crockford指出,JavaScript语言面临着一个问题,它可能过分关注“整形手术缺陷”的修修补补,而不是清楚地指明未来的改进方向。</p> <p>与十年前相比,我认为语言中好的部分更少了,但是这些部分也做得更好了。</p> <p>Eich介绍了多年来JavaScript语言的改进情况,以及其中一些焕发了新活力的旧特性。例如,尽管E4X从未被JavaScript接受,但JSX,即“剔除了不好的XML部分的E4X”,却深受React用户的喜爱。</p> <p>在本次演讲中,Eich重点强调了asm和WebAssembly的价值。asm.js源自JavaScript静态类型子集,实行以接近本机速度运行源代码。达到如此的性能改进,是因为asm支持从即刻编译(JIT)切换到预先编译(AOT),直接从抽象语法树(AST)转换为机器代码生成。</p> <p>WebAssembly是一种加载更快的、采用更广泛的asm.js版本。尽管WebAssembly仍然是同一JavaScript虚拟机的组成部分,但是它用单独的进程运行,因此它可以具有比JavaScript更具表现力的语法。</p> <p>Eich特别介绍了一些令他非常兴奋的特性,这些特性最早可于明年出现在JavaScript中。包括:</p> <ul> <li>TC39 BigInt:一种新的值类型,用于处理任意精度的整数,bigness提供对TypeArrays的支持。</li> <li>动态import():默认情况下,ES模块是静态导入的。动态导入还支持预取(prefetching)。</li> <li>Array.prototype.flat/flatMap:实现任意数组的展平,它是实现展平和smooshgate的解决方案。</li> <li>更多的解析操作:用于任意对象和数组。</li> <li>类中的私有方法和访问器:在Eich看来,符号前缀“#”稍具争议,不应再使用。</li> <li>异步迭代:用于await语法。</li> <li>正则表达式上的一些改进。</li> </ul> <p>更多建议及细节内容,参见 <a href="/misc/goto?guid=4959754528878843141" rel="nofollow,noindex">TC39建议的完整列表</a> 。</p> <p>Crockford在演讲中花了一些时间,质疑了听众的一些深层假设,并提出这些假设是如何影响大家的进步的。例如,计数是否应采用从“0”开始,还是从“1”开始?Crockford解释了为什么他认为一切都应该从“0”开始。</p> <p>Crockford指出,缺乏正确的尾调用和尾调用优化( <a href="/misc/goto?guid=4959758010430400607" rel="nofollow,noindex">tail call optimization</a> )his目前为止在ES2015实现中的最令人失望之处。当前只有Safari实现了该部分规范。据Crockford介绍,尾调用是ES2015中添加的最重要特性,它有助于支持作为迭代替代功能的尾递归(tail recursion),以及后续传递(continuation passing)。</p> <p>在Crockford看来,纯函数(pure functions)是语言未来发展中至关重要的特性。任何会影响纯函数的特性,都不应考虑在语言中采用。</p> <p>目前JavaScript中也存在着不少Crockford不喜欢的特性,例如async/await特性。该特性有碍于开发人员对异步编程的理解,会使异步编程看起来就像是同步。</p> <p>Crockford解释了他对简单性的看法。“标准越简单,需要达成一致之处也就越少,就越有可能实现互操作性”。他以JSON为例做了解释。JSON作k为一种语法,它并不涉及行为,易于理解和使用。JSON的全部语法甚至可在一张名片背面放下。</p> <p>Crockford正致力于实现一种称为“neo”的新语言和Transpiler(源到源编译器)。它以一种新语言的形式实现Crockford认可的JavaScript特性,并源到源编译为定义良好JavaScript程序。Crockford有望于近期推出《JavaScript工作机制》(“How JavaScript Works.”)一书,介绍其中的技术细节。</p> <p>在演讲的问答部分,Eich被问及了 <a href="/misc/goto?guid=4959758010517516833" rel="nofollow,noindex">二进制抽象语法树(binary-ast)提案</a> 的情况。该提案介于传统JavaScript和WebAssembly之间,为所有的JavaScript提供了二进制语法树。</p> <p>Eich认为,binary-ast是一种潜在的实效(pragmatic)方法,但其优点有待通过初始实施及后续性能指标验证。Mozilla正在致力于初步实现。其潜在的风险在于它可成为另一种安全攻击向量。此外,它会鼓励开发人员编写更大型的JavaScript代码库,而不是依靠工具和规则来优化代码库。</p> <p>当被问及TypeScript等类型系统时,Eich认为动态编程有其便利性。不会对编程产生妨碍的类型形态,无疑是一种好的类型系统。Eich指出,“人们习惯于使用不需付出任何代价的类型系统。”</p> <p>TypeScript非常出色,它是JS的一个严格超集。每个JS程序也是一个TS程序。Anders Hejlsberg是首屈一指的。</p> <p>演讲中,Crockford还被问及了一个关于TypeScript的负面问题:“它并没有解决我所遇到的问题”。出现这一误解的原因,在于TypeScript的主要优点是帮助定义接口。Crockford曾认定,“事情间的接口通常是产生错误之处”,而TypeScript有助于防止出现此类错误。</p> <p>在被问及React之类特性是否可以标准化时,Eich介绍了Dojo和Prototype等早期的软件库是如何将其概念引入到更高版本的JavaScript中的。进而指明,“我们的工作并非去标准化React等软件库”,而是努力实现将基本原语从软件库中提升到核心语言中。Eich指出,过早做标准化会导致问题,尤其是对于类型系统等尚待时日的解决方案。</p> <p>在被问及对基于RxJS Observables的Observables提案的看法时,Eich指出,该规范目前停滞不前,要在JavaScript语言中构建所需特性是一个挑战,他也不确定是否应该将Observables添加到语言中。他并未提及的是, <a href="/misc/goto?guid=4959758010600031481" rel="nofollow,noindex">用于流的WHATWG规范</a> 是Observables提案的一个超集。或许正是这两个提案之间的竞争,阻碍了Observables提案的推进。</p> <p>最后在被问及对机器学习的看法时,Eich指出,尽管深度学习非常有用,但是该技术并没有给出任何因果关系。目前的工作,只是一些高级形式的曲线拟合算法。</p> <p>会议演讲视频免费提供,但需要注册。注册是开放的。</p> <ul> <li>Eich的演讲,“下一代JavaScript”( <a href="/misc/goto?guid=4959758010700439446" rel="nofollow,noindex">JavaScript: The Next Generation</a> );</li> <li>Crockford的演讲,“JavaScript工作方式先睹为快”( <a href="/misc/goto?guid=4959758010779392131" rel="nofollow,noindex">How JavaScript Works: A Preview</a> )。</li> </ul> <p>查看英文原文: <a href="/misc/goto?guid=4959758010856969548" rel="nofollow,noindex">Eich and Crockford on the Future of JavaScript: Insight from the Creators of JavaScript and JSON</a></p> <p> </p> <p>来自:http://www.infoq.com/cn/news/2018/08/eich-crockford-js-future</p> <p> </p>