跳到主要内容

15 篇博文 含有标签「WebAssembly」

查看所有标签

WebAssembly JSPI 有一个新的 API

· 阅读需 7 分钟
Francis McCabe, Thibaud Michaud, Ilya Rezvov, Brendan Dahl

WebAssembly 的 JavaScript Promise 集成 (JSPI) API 有一个新 API,可在 Chrome M126 版本中使用。我们讨论了变化的内容、如何配合 Emscripten 使用以及 JSPI 的路线图。

JSPI 是一个允许使用 顺序 API 的 WebAssembly 应用程序访问 异步 Web API 的接口。许多 Web API 是通过 JavaScript Promise 对象设计的:它们不会立即执行请求的操作,而是返回一个 Promise 来完成这些操作。而另一方面,许多编译为 WebAssembly 的应用程序源自 C/C++ 领域,那里主要由阻塞调用者直到任务完成的 API 主导。

WebAssembly JSPI 即将进入原始试验

· 阅读需 3 分钟
Francis McCabe, Thibaud Michaud, Ilya Rezvov, Brendan Dahl

WebAssembly 的 JavaScript Promise 集成 (JSPI) API 正在随着 Chrome M123 版本进入原始试验阶段。这意味着您可以测试您和您的用户是否能够从这个新 API 中受益。

JSPI 是一个 API,允许所谓的顺序代码(已编译为 WebAssembly)访问 异步 的 Web API。许多 Web API 是以 JavaScript 的 Promise 表达的:它们不是立即执行请求的操作,而是返回一个 Promise 来执行。当操作最终执行时,浏览器的任务运行器会用 Promise 调用任何回调。JSPI 接入这个架构,使 WebAssembly 应用程序在返回 Promise 时暂停,并在 Promise 被解析时恢复运行。

V8比以往更快、更安全!

· 阅读需 8 分钟
[Victor Gomes](https://twitter.com/VictorBFG),格吕酒专家

欢迎来到激动人心的V8世界,在这里速度不仅仅是一种特性,而是一种生活方式。随着我们向2023告别,是时候庆祝V8今年取得的令人印象深刻的成就了。

通过创新的性能优化,V8继续拓展Web不断演变的边界。我们引入了新的中层编译器,并对顶级编译器基础设施、运行时和垃圾回收器进行了多项改进,从而实现了全方位的显著速度提升。

WebAssembly尾调用

· 阅读需 9 分钟
Thibaud Michaud, Thomas Lively

我们在V8 v11.2中推出了WebAssembly尾调用!在本文中,我们将简要介绍该提案,展示一个关于使用Emscripten的C++协程的有趣用例,并说明V8如何在内部处理尾调用。

什么是尾调用优化?

如果一个调用是当前函数在返回之前执行的最后一个指令,就称其处于尾部位置。编译器可以通过丢弃调用帧并将调用替换为跳转来优化此类调用。

这对递归函数尤其有用。例如,考虑以下用C语言编写的函数,该函数对链表中的元素求和:

int sum(List* list, int acc) {
if (list == nullptr) return acc;
return sum(list->next, acc + list->val);
}

使用常规调用,这会消耗𝒪(n)的堆栈空间:链表中的每个元素都会在调用堆栈中添加一个新的框架。如果列表足够长,这很快会导致堆栈溢出。通过将调用替换为跳转,尾调用优化实际上将此递归函数转化为一个使用𝒪(1)堆栈空间的循环:

WebAssembly动态分级已在Chrome 96中准备好试用

· 阅读需 3 分钟
Andreas Haas — Tierisch fun

V8拥有两个编译器,可以将WebAssembly代码编译为可执行的机器代码:基线编译器__Liftoff__ 和优化编译器 TurboFan。Liftoff生成代码的速度比TurboFan快得多,从而实现快速启动时间。而TurboFan可以生成更快的代码,从而实现高峰性能。

WebAssembly 支持高达 4GB 的内存

· 阅读需 8 分钟
Andreas Haas、Jakob Kummerow 和 Alon Zakai

引言

得益于 Chrome 和 Emscripten 的近期工作,现在您可以在 WebAssembly 应用程序中使用高达 4GB 的内存。这比之前 2GB 的限制有了很大的提升。或许您会觉得奇怪为什么会有这种限制——毕竟人们无需特殊工作就可以使用 512MB 或 1GB 的内存!——但事实证明,从 2GB 跳到 4GB 不仅浏览器端需要一些特殊处理,工具链端也有挑战,这些内容将在本文中详细介绍。

那个 `.wasm` 文件里有什么?介绍:`wasm-decompile`

· 阅读需 7 分钟
Wouter van Oortmerssen ([@wvo](https://twitter.com/wvo))

我们拥有越来越多的编译器和其他工具来生成或操作 .wasm 文件,有时候您可能会想看看里面的内容。也许您是该类工具的开发者,或者更直接地说,您是针对 Wasm 的程序员,想知道生成的代码是什么样子,出于性能或其他原因。

脱离网络:使用 Emscripten 的独立 WebAssembly 二进制文件

· 阅读需 14 分钟
Alon Zakai

Emscripten 一直以来主要专注于编译到 Web 和其他 JavaScript 环境(如 Node.js)。但是,随着 WebAssembly 开始在不需要JavaScript 的情况下被使用,出现了一些新的用例,因此我们一直在努力支持从 Emscripten 发出的独立 Wasm 文件,这些文件不依赖于 Emscripten 的 JS 运行时!本文会解释为什么这很有趣。