【问题标题】:Difference between Dart interpreter and Dart JIT compiler?Dart 解释器和 Dart JIT 编译器的区别?
【发布时间】:2021-09-20 06:11:35
【问题描述】:

背景

AOT compiling Dart for iOS Android (Dart Developer Summit 2016):

iOS 限制:不能 JIT

另外,通过阅读飞镖团队的一篇文章:Flutter: Don’t Fear the Garbage Collector,我读到:

在调试模式下,Dart 的大部分管道都被运送到设备: Dart 运行时,即时编译器/解释器(JIT for Android 和 iOS 解释器)、调试和分析服务。


问题

我想知道这两个概念之间有什么区别,特别是对于 dart。为什么 iOS 不支持 JIT 编译,却支持 Dart 解释器?

无问题

这与 AOT 与 JIT 编译无关,这是更常见的问题。你可以找到here

我也已经知道解释器和编译器之间的区别:解释器以更高级别的形式逐步执行代码,而不是将其编译为机器码,如 JIT 和 AOT 执行。

【问题讨论】:

    标签: dart


    【解决方案1】:

    iOS 不支持 Dart JIT 编译器没有任何技术原因,这是由于 Apple 的安全政策。而且这个限制不是 Dart 特有的,它会影响所有的 JIT 编译器。

    JIT 编译器需要动态创建新的机器代码并将其写入可执行页面,但在 iOS 上,这只能由具有“动态协同设计”权利的应用程序完成。例如,此权利授予使用 JavaScriptCore 的第一方应用程序,但不是第三方应用程序。

    这意味着 App Store 应用程序无法写入可执行内存,因此无法将 JIT 嵌入其中。您可以使用 WKWebView 运行 JIT 加速 JavaScript(它在具有第一方权利的单独进程中运行),但您不能在 iOS 上运行自己的 JIT 编译器。

    另一方面,没有 JIT 的解释器永远不会生成新的机器代码,因此它可以在 iOS 上毫无问题地运行(尽管 App Store 审查过程仍然对允许运行的脚本施加限制。)

    多年来,已经有几个利用 JIT 工作的漏洞,例如允许将页面从 +w 切换到 +x 并返回,但不能同时切换,但目前似乎这些都没有工作和使用3rd 方应用程序中的 JIT 根本不可能。即使漏洞仍然可用,Dart 团队也不会依赖可以随时修复的 iOS 漏洞,或者更糟的是,会导致应用被标记为恶意。

    请注意,您会在网上找到有关 iOS 14 如何允许 3rd 方应用程序使用 JIT 编译器的文章,但这似乎仅限于通过开发人员工具侧载的应用程序,因此它与面向开发人员的 Dart / Flutter 无关谁想通过 App Store 分发他们的应用程序。

    【讨论】:

    • 感谢您的回答。不知道为什么我以前没有看到它。
    猜你喜欢
    • 2011-07-01
    • 2017-03-13
    • 2014-06-18
    • 2013-12-22
    • 2018-01-23
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多