Я слышал, что JIT-компилированный код не разрешен в iOS AppStore, потому что размещение исполняемого кода в куче запрещено. Это так? Или просто слух?
Запрещается ли использование JIT (точно в срок) скомпилированного кода в приложении iOS для AppStore?
Ответ 1
-
Устанавливаемый код не разрешен ( "или" - ключевое слово в 3.3.2). Все (кроме Javascript) должно быть статически связано.
-
JIT-компиляция в текст исходного кода Javascript представляется допустимой. (Не шутка, есть коммерческий компилятор, который делает это.) Компиляция в байт-код для исполнения интерпретатором, написанным Javascript и выполняемым в UIWebView, может смутить рецензентов, чтобы отклонить приложение, выполняющее это.
-
Песочница безопасности iOS, вероятно, убьет любое приложение, которое пытается перейти на любые динамически сгенерированные данные.
Ответ 2
JIT-компиляция в текст исходного кода Javascript, по-видимому, разрешена. (Не шутка, есть коммерческий компилятор, который делает это.) Компиляция в байт-код для выполнения...
Я также рассказал о компиляторе (не JIT, но реальном языке программирования), работающем на iOS. Моя идея заключалась в использовании адресов для ассемблерных функций, реализующих псевдокоды в качестве инструкций вместо "традиционного байт-кода" (1 байт на псевдо-код).
Один регистр ARM зарезервирован как "указатель кода" (здесь называется "rCP" ), указывающий на мой "байт-код". Последней инструкцией псевдоокодовой функции является "ldmfd rCP!, {pc}". Это означает, что последняя команда функции не является "возвратом", а переходит в следующий код операции.
Используя этот метод, вы получаете очень быстрый "байт-код". Может быть, коммерческий компилятор работает так. Я не могу поверить, что JIT-компилятор использует собственный код на iOS.
Ответ 3
Это правильно. Вы можете прочитать стандартное соглашение iOS, которое необходимо принять при настройке регистрации разработчиков:
3.3.2 Приложение не может загрузить или установить исполняемый код. Интерпретированный код может использоваться только в приложение, если все скрипты, код и переводчики упакованы в Приложение и не загружено. только исключение из вышеизложенного скриптов и кода, загруженных и выполняемых Встроенная в WebKit инфраструктура Apple.