V8发布版本v8.4
高性能C++垃圾回收器
理解ECMAScript规范,第4部分
WebAssembly 支持高达 4GB 的内存
引言
得益于 Chrome 和 Emscripten 的近期工作,现在您可以在 WebAssembly 应用程序中使用高达 4GB 的内存。这比之前 2GB 的限制有了很大的提升。或许您会觉得奇怪为什么会有这种限制——毕竟人们无需特殊工作就可以使用 512MB 或 1GB 的内存!——但事实证明,从 2GB 跳到 4GB 不仅浏览器端需要一些特殊处理,工具链端也有挑战,这些内容将在本文中详细介绍。
V8 版本 v8.3
那个 `.wasm` 文件里有什么?介绍:`wasm-decompile`
我们拥有越来越多的编译器和其他工具来生成或操作 .wasm
文件,有时候您可能会想看看里面的内容。也许您是该类工具的开发者,或者更直接地说,您是针对 Wasm 的程序员,想知道生成的代码是什么样子,出于性能或其他原因。
理解ECMAScript规范,第三部分
在本篇中,我们将深入了解ECMAScript语言及其语法的定义。如果您对上下文无关语法不熟悉,现在是学习基础知识的好时机,因为规范使用上下文无关语法来定义语言。请参阅《Crafting Interpreters》中的上下文无关语法章节以获得更易理解的介绍,或者查看维基百科页面以获取更数学化的定义。
V8中的指针压缩
在内存和性能之间总是存在不断的斗争。作为用户,我们希望既能快速又尽量少地使用内存。不幸的是,通常提升性能会带来内存消耗的代价(反之亦然)。
理解 ECMAScript 规范,第2部分
让我们继续练习我们出色的规范阅读技巧。如果你还没有查看前一集,现在是个好机会!
准备好进入第2部分了吗?
一个有趣的了解规范的方式是,从一个我们知道有的JavaScript功能开始,找出它是如何被规范定义的。
警告!本集包含从ECMAScript规范(截至2020年2月)中复制粘贴的算法。它们最终会过时。
我们知道属性是在原型链中查找的:如果一个对象没有我们尝试读取的属性,我们就沿着原型链向上查找,直到找到它(或者找到一个没有原型的对象)。
例如:
const o1 = { foo: 99 };
const o2 = {};
Object.setPrototypeOf(o2, o1);
o2.foo;
// → 99
原型链查找在哪里定义?
让我们来找出这种行为是在哪里定义的。一个好的起点是查看对象内部方法的列表。
既有[[GetOwnProperty]]
,也有[[Get]]
——我们感兴趣的是不限于自身属性的版本,所以我们选择[[Get]]
。
不幸的是,属性描述符规格类型也有一个名为[[Get]]
的字段,因此在查看规范时,我们需要仔细区分这两种独立的用法。