【问题标题】:is it prohibited using of JIT(just-in-time) compiled code in iOS app for AppStore?是否禁止在 AppStore 的 iOS 应用程序中使用 JIT(即时)编译代码?
【发布时间】:2011-06-30 14:19:01
【问题描述】:

听说iOS AppStore不允许JIT编译代码,因为禁止将可执行代码放在堆中。对吗?还是只是谣言?

【问题讨论】:

    标签: ios jit appstore-approval


    【解决方案1】:
    1. 不允许安装代码(“或”是 3.3.2 中的关键词)。一切(Javascript 除外)都必须静态链接。

    2. 似乎允许将 JIT 编译为 Javascript 源代码文本。 (不是开玩笑,有一个商业编译器可以做到这一点。)编译成字节码以由解释器编写的 Javascript 执行并在 UIWebView 中运行可能会使审阅者感到困惑,以至于可能会拒绝这样做的应用程序。

    3. iOS 安全沙盒可能会杀死任何试图跳入任何动态生成数据的应用程序。

    【讨论】:

    • #1 和#2 不确定,但#3 让我确定。谢谢!
    【解决方案2】:

    没错。 您可以阅读 iOS 标准协议,在设置开发者注册时需要接受该协议:

    3.3.2 应用程序不得下载或安装可执行代码。 解释代码只能用于 一个应用程序,如果所有的脚本,代码 和口译员被打包在 应用程序并没有下载。这 上述情况的唯一例外是 下载并运行的脚本和代码 Apple 内置的 WebKit 框架。

    【讨论】:

    • 好像没有禁止JIT..?它只是禁止“下载”。 JIT 可以解释为脚本解释的最后一步......真的很混乱。
    • 您引用的文字与您的陈述完全矛盾。它说只要应用程序不下载代码,您就可以解释。这部分在过去 6 个月左右内确实发生了变化。我认为它不再被禁止了。
    • 该行已更改,但仍有关于添加可执行代码的警告。这就是 Nitro 仍然只能使用 Safari 组件访问的原因。您的一个误解是:解释!= JIT。口译很慢。无论安全设置如何,类似这种错误的解释代码都可以运行。一位数逆波兰符号的 Python 解释器仅限于加法:input='34+1+7+'; temp=[];d=lambda x: temp.append(int(x)) if x != '+' else temp.append(temp.pop() + temp.pop());filter(d,input) ;打印温度[-1]
    【解决方案3】:

    似乎允许将 JIT 编译为 Javascript 源代码文本。 (不是开玩笑,有一个商业编译器可以做到这一点。)编译成字节码执行......

    我还对在 iOS 上运行的编译器(不是 JIT,而是真正的编程语言)提出了自己的想法。我的想法是使用地址来实现将伪操作码作为指令而不是“传统字节码”(每个伪操作码 1 个字节)的汇编程序编写的函数。

    一个 ARM 寄存器被保留为指向我的“字节码”的“代码指针”(这里称为“rCP”)。伪操作码函数的最后一条指令是“ldmfd rCP!, {pc}”。这意味着函数的最后一条指令不是“返回”,而是跳转到下一个操作码。

    使用这种方法,您可以获得非常快的“字节码”。也许商业编译器就是这样工作的。我不敢相信有一个 JIT 编译器在 iOS 上运行本机代码。

    【讨论】:

    • 你刚才描述的Direct threading--这是一种为语言实现简单“编译器”的常用技术。
    猜你喜欢
    • 2016-12-15
    • 2013-10-13
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多