代码之家  ›  专栏  ›  技术社区  ›  learner meng

在nodejs中,V8引擎是如何编译和执行带有c++代码引用的javascript的?

  •  -1
  • learner meng  · 技术社区  · 2 年前

    我知道nodejs中使用internalBindings来帮助javascript代码引入c++模块,但最终v8会将javascript编译成ast。此时,ast同时包含javascript语言的内容和c++引用的内容。

    在执行ast时,我想知道它是否被解析。当到达c++引用的内容时,首先运行c++代码,然后返回结果,这样JavaScript就可以完全集成到c++代码中。v8就是这样运行js代码的吗?

    1 回复  |  直到 2 年前
        1
  •  0
  •   Elvis Adomnica    2 年前

    正如Bergi提到的,本地投标的性质是不同的,它发生在二进制“级别”,我们称之为ABI(应用程序二进制接口)。基本上,运行库知道如何处理用两种语言编写的对象,因为它们尊重相同的二进制结构和接口。

    NodeJS允许您编写 C++ addons 但它通常提供 Node-API 可以与 C++ wrapper 它以低开销提供C++对象模型和异常处理语义。

        2
  •  0
  •   Bergi    2 年前

    带有c++代码引用的javascript[]v8将把javascript编译成ast。此时,ast同时包含javascript语言的内容和c++引用的内容。

    您误解了本机绑定的性质。没有JS 密码 引用C++ 密码 ,并且没有包含这两种语言的代码内容的AST。只有JavaScript代码被解析到AST中。

    当从JS调用到C++时,它是一个JS 对象 引用C++ 对象 并调用其方法。nodejs的内部绑定由C++代码设置,创建表示本地资源的JS对象和调用C++函数的JS函数对象。