gpt4 book ai didi

javascript - "use asm"究竟做什么?

转载 作者:可可西里 更新时间:2023-11-01 02:38:35 24 4
gpt4 key购买 nike

据我所知,Asm.js只是JavaScript的一个严格规范,它使用了JavaScript的特性,并不是一门新的语言。

例如,它不使用 var a = e;,而是提供 var a = e|0;

我的问题是,如果 asm.js 只是一个定义并且可以通过改变使用和声明变量和动态类型的方式来实现,那么 "use asm"; 实际上做了什么?是否有必要在声明函数体之前放置此字符串?

最佳答案

Asm.js 是 JavaScript 的一个非常严格的子集,它针对机器而非人类进行了优化。如果您希望您的浏览器将某些代码解释为 asm.js 代码,您需要创建一个模块,其中适用以下条件:

  • 所有代码都是完全静态类型的,并且仅限于 JavaScript 的非常严格的 asm.js 子集
  • 你的模块以 "use asm" pragma 开头

此外,asm.js 模块最多只允许三个可选但非常具体的参数:

  • 一个标准库对象,提供对 JavaScript 标准库子集的访问
  • 外部函数接口(interface) (FFI),提供对自定义外部 JavaScript 函数的访问
  • 堆缓冲区,提供单个 ArrayBuffer 作为 asm.js 堆

所以,你的模块基本上应该是这样的:

function MyAsmModule(stdlib, foreign, heap) {
"use asm";

// module body...

return {
export1: f1,
export2: f2,
// ...
};
}

模块的函数参数允许 asm.js 调用外部 JavaScript 并与“普通”JavaScript 共享其堆缓冲区。从模块返回的导出对象允许外部 JavaScript 调用 asm.js。

省略 “use asm”,您的浏览器将不知道它应该将您的代码解释为 asm.js 模块。它会将您的代码视为“普通”JavaScript。但是,仅使用 "use asm" 不足以让您的代码被解释为 asm.js。未能满足上述任何其他条件,您的代码也将被解释为“普通”JavaScript:

enter image description here

有关 asm.js 的更多信息,请参见例如。 John Resig's article from 2013official specs .

关于javascript - "use asm"究竟做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23448804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com