запрещено ли использовать скомпилированный код JIT (точно в срок) в приложении iOS для AppStore? - PullRequest
20 голосов
/ 20 февраля 2011

Я слышал, что JIT-скомпилированный код запрещен в iOS AppStore, потому что размещение исполняемого кода в куче запрещено.Это правильно?Или просто слух?

Ответы [ 3 ]

5 голосов
/ 24 февраля 2011
  1. Устанавливаемый код не разрешен («или» - ключевое слово в 3.3.2). Все (кроме Javascript) должно быть статически связано.

  2. JIT-компиляция в текст исходного кода Javascript, по-видимому, разрешена. (Не шутка, есть коммерческий компилятор, который делает это.) Компиляция в байт-код для выполнения интерпретатором, написанным на Javascript и запуска в UIWebView, может запутать рецензентов настолько, чтобы возможно отклонить приложение, делающее это.

  3. Песочница безопасности iOS, скорее всего, убьет любое приложение, которое пытается перейти к любым динамически генерируемым данным.

3 голосов
/ 20 февраля 2011

Это верно. Вы можете прочитать в стандартном соглашении iOS, которое необходимо принять при настройке регистрации разработчика:

3.3.2 Приложение не может загружать или устанавливать исполняемый код. Интерпретированный код может использоваться только в Приложение, если все скрипты, код и переводчики упакованы в Приложение так и не загружено. Единственным исключением из вышесказанного является скрипты и код загружены и запущены Встроенный в Apple фреймворк WebKit.

2 голосов
/ 01 ноября 2011

JIT-компиляция в текст исходного кода Javascript, по-видимому, разрешена. (Не шутка, есть коммерческий компилятор, который делает это.) Компилирование в байт-код для выполнения ...

Я также думал о компиляторе (не JIT, а реальном языке программирования), работающем на iOS. Моя идея заключалась в использовании адресов для написанных на ассемблере функций, реализующих псевдо-коды в качестве инструкций вместо «традиционного байт-кода» (1 байт на псевдо-код операции).

Один регистр ARM зарезервирован как «указатель кода» (здесь он называется «rCP»), указывающий на мой «байт-код». Последняя инструкция функции псевдо-кода - «ldmfd rCP !, {pc}». Это означает, что последняя инструкция функции - это не «возврат», а переход к следующему коду операции.

Используя этот метод, вы очень быстро получаете «байт-код». Может быть, коммерческий компилятор работает так. Я не могу поверить, что есть JIT-компилятор, выполняющий нативный код на iOS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...