【发布时间】:2016-12-21 15:47:51
【问题描述】:
Qt Quick Compiler 究竟做了什么?我的理解是它将 QML/JS “编译”成 C++ 并将其集成到最终的二进制/可执行文件中。因此,在运行时没有 JIT 编译或任何其他与 JS 相关的事情。
但是,我在某处看到一篇文章声称它不是这样的,实际上它只是将 QML/JS “捆绑”成最终的二进制/可执行文件,但在运行时仍然存在一些与 QML/JS 相关的开销。
documentation page有这样的解释:
.qml 文件以及随附的 .js 文件可以翻译成 中级 C++ 源代码。用传统编译后 编译器,代码被链接到应用程序二进制文件中。
这个“中级 C++源代码”是什么?为什么不只是“C++ 源代码”?这让我感到困惑,但最后一条声明有点承诺,是的,它是 C++ 代码,在使用 C++ 编译器编译后,您将拥有一个二进制/可执行文件,而无需在运行时进行任何额外的编译/解释。
实际上是这样的吗?
【问题讨论】:
-
该代码具有中间性质,因为它没有将 Javascript 直接映射到 C++。例如。
var i = 1, j = 2, k = i+j未转换为 C++ 等效的double i = 1., j = 2., k = i+j。而是将代码翻译成一系列直接操作JS虚拟机状态的操作。 JS 语义不是你可以免费获得的东西:无论你如何实现它,都会有运行时成本。没有额外的编译和解释,但是实现JS状态的虚拟机还是要存在的。这不是一个容易摆脱的开销。
标签: qt compilation qml