从这里,我发现 JavaScript 是用 C++ 编写的。我还发现/推断出大多数 JavaScript 是 C++(例如Math.atan+""
和Math.atan.toString()
yielding "function atan() { [native code] }"
)。我[native code
假设是 C++,否则“隐藏”它的意义何在?
我的问题是有没有办法在 JavaScript 中使用 C++?在函数或 JavaScript 平台中使用它?
从这里,我发现 JavaScript 是用 C++ 编写的。我还发现/推断出大多数 JavaScript 是 C++(例如Math.atan+""
和Math.atan.toString()
yielding "function atan() { [native code] }"
)。我[native code
假设是 C++,否则“隐藏”它的意义何在?
我的问题是有没有办法在 JavaScript 中使用 C++?在函数或 JavaScript 平台中使用它?
emscripten项目允许您从 C 和 C++ 生成 Javascript:
Emscripten 是一个 LLVM 到 JavaScript 的编译器。它采用 LLVM 位码——可以从 C/C++、使用 llvm-gcc (DragonEgg) 或 clang 或任何其他可以转换为 LLVM 的语言生成——并将其编译成可以在网络上运行的 JavaScript(或JavaScript 可以运行的任何其他地方)。
通过ccall 和 cwrap等方法,您可以调用 C 函数:
使用该站点中的示例,此 C++ 代码用于extern "C"
防止名称修改:
#include <math.h>
extern "C" {
int int_sqrt(int x) {
return sqrt(x);
}
}
可以这样编译:
./emcc tests/hello_function.cpp -o function.html -s EXPORTED_FUNCTIONS="['_int_sqrt']"
并在 Javascript 中使用:
int_sqrt = Module.cwrap('int_sqrt', 'number', ['number'])
int_sqrt(12)
int_sqrt(28)
embind可用于 C++ 函数和类。该站点的快速示例如下:
// quick_example.cpp
#include <emscripten/bind.h>
using namespace emscripten;
float lerp(float a, float b, float t) {
return (1 - t) * a + t * b;
}
EMSCRIPTEN_BINDINGS(my_module) {
function("lerp", &lerp);
}
并编译:
emcc --bind -o quick_example.js quick_example.cpp
并在 Javascript 中使用:
<!doctype html>
<html>
<script src="quick_example.js"></script>
<script>
console.log('lerp result: ' + Module.lerp(1, 2, 0.5));
</script>
</html>
您可以使用 NACL。它是 chrome 的本机客户端,但它是实验性的。您必须编写 C++ 代码,然后在 JS 文件中引用它。