我听说iOS AppStore中不允许使用JIT编译代码,因为禁止在堆中放置可执行代码。那对吗?或只是谣言?
答案 0 :(得分:5)
不允许使用可安装代码(“或”是3.3.2中的关键字)。一切(Javascript除外)必须静态链接。
JIT编译成Javascript源代码文本似乎是允许的。 (不是一个玩笑,有一个商业编译器可以做到这一点。)编译成字节码以便由编写Javascript并在UIWebView中运行的解释器执行可能会使审阅者感到困惑,可能会拒绝执行此操作的应用程序。
iOS安全沙箱可能会杀死任何试图跳转到任何动态生成数据的应用。
答案 1 :(得分:2)
这是对的。 您可以阅读iOS标准协议,在设置开发人员注册时需要接受该协议:
3.3.2应用程序可能无法下载或安装可执行代码。 解释的代码只能用于 应用程序,如果所有脚本,代码 和口译员包装在 申请而非下载。该 唯一的例外是上述情况 下载和运行的脚本和代码 Apple的内置WebKit框架。
答案 2 :(得分:2)
JIT编译成Javascript源代码文本似乎是允许的。 (不是一个玩笑,有一个商业编译器可以做到这一点。)编译成字节码以便执行...
我也想到了在iOS上运行的编译器(不是JIT,但是真正的编程语言)。我的想法是使用地址来编译器编写的函数,将伪操作码作为指令而不是“传统字节码”(每个伪操作码1个字节)。
一个ARM寄存器保留为指向“字节码”的“代码指针”(此处命名为“rCP”)。伪操作码函数的最后一条指令是“ldmfd rCP!,{pc}”。这意味着函数的最后一条指令不是“返回”,而是跳转到下一个操作码。
使用此方法可以获得非常快速的“字节码”。也许商业编译器的工作原理如下。我无法相信在iOS上运行本机代码的JIT编译器。