Интерпретировать сценарии Objective C во времени выполнения на iPhone?

Там должен так или иначе загрузить цель c сценарий во времени выполнения и выполнить его против классов/методов/объектов/функций в текущем приложении для iPhone?

ГЛАВНОЕ ПРИМЕЧАНИЕ: основная причина, которую я хотел бы сделать, это должно позволить мне быстрому прототипированию приложение, и затем, после того, как я сделан главная фаза разработки прототипа, беру сценарии, которые я писал, и скомпилируйте их во время изготовления вместо этого. Я никогда не планирую на поставке приложения с целью c интерпретатор в нем.

Причина, которую я спрашиваю, состоит в том, что я играл вокруг с воском iPhone, lua интерпретатор, который может быть встроен в приложение для iPhone, и оно работает очень приятно, в том смысле, что любой объект/метод/функция, это публично доступно в Вашем коде Objective C, автоматически соединяется мостом и доступный в lua.

Это позволяет Вам приложениям быстрого прототипирования, просто заставляя ядро Вашего приложения быть lua файлами, которые находятся в пользовательском каталоге документов. Просто перезагрузите приложение, и можно проверить изменения в lua файлах, не будучи должен восстановить приложение в XCode - средство сохранения достижения!

Но с Яблоками недавние 3.1.3 материала SDK это получило меня думающий, что самый безопасный подход для того, чтобы сделать этот тип быстрого prototypeing будет состоять в том, если Вы могли бы использовать Objective C в качестве интерпретируемого кода... Тем путем, худший вариант развития событий, Вы могли просто скомпилировать его в свое приложение перед Вашим выпуском вместо этого. Я услышал, что lua источник может быть скомпилирован в код байта и связан в во время изготовления, но я думаю, что потрясающая безопасная вещь состояла бы в том, если бы источник в виде сценария был в цели c, не lua. Тем путем Ваш источник всегда находится в цели c, независимо.

Это приводит меня к удивлению (я искал, но ничего не придумал), если существуют какие-либо примеры того, как встроить Интерпретатор Objective C в приложение для iPhone? Это позволило бы Вам быстрому прототипированию Ваше приложение против текущих классов, которые встроены в Ваш двоичный файл, и, когда то, что вы собирались развертывает Ваше приложение, вместо того, чтобы прокрутить классы в интерпретаторе приложения, Вы компилируете их во вместо этого.

С iPad и ОС 4, bluetooth-клавиатуры и виртуальные клавиатуры могут работать с iPhone и iPad... Это собирается сделать этот тип быстрого прототипирования чем-то намного более полезным, по крайней мере, в течение dev времени. Если Вам встроили интерпретатор в Ваше приложение и имеете его на Вашем iPad, например, можно кодировать против интерпретатора в то время как на дороге без XCode. И мне, самый полезный способ вернуть источник к "яблоку утвержденное" состояние было бы то, если бы сценарии были Objective C.

6
задан Brad Parks 28 April 2010 в 11:51
поделиться

4 ответа

Это не совсем невозможно, но было бы недостаточно просто, чтобы того стоить. Objective-C обычно не интерпретируемый язык. Это не непреодолимо - интерпретируемый или компилируемый - это просто выбор реализации в большинстве случаев. Например, Ruby традиционно считается интерпретируемым языком сценариев, но MacRuby компилирует его в код точно так же, как Objective-C. Так что можно было бы написать интерпретатор для Objective-C, но этого никто не делал. Придется написать самому.

Кроме того, правила запрещают интерпретаторы, кроме интерпретатора Javascript от Apple. До сих пор это никому не навязывалось, но если вы пытаетесь быть очень прямой стрелкой, интерпретируемый код, к сожалению, также отсутствует.

3
ответ дан 9 December 2019 в 20:41
поделиться

Что ж, есть пара важных моментов, которые стоит поднять:

  1. Зачем интерпретировать код Objective-C, если вы можете скомпилировать его? Я понимаю идею «быстрого прототипирования», но одна из причин сделать это, например, в Lua, состоит в том, что Lua - гораздо более сжатый язык, чем Objective-C. Я не знаю, принесет ли интерпретация Objective-C такой же бонус.
  2. Если вы хотите иметь плагины или динамически загружаемые модули в своем приложении, вы всегда можете скомпилировать их как отдельный пакет и загрузить их, используя NSBundle или аналогичный механизм.
  3. С учетом всего сказанного, я не знаю ни одного интерпретатора Objective-C. Скорее всего, вам придется написать свой собственный. Я не уверен, нарушит ли это руководство Apple или нет: это все равно будет код Objective-C, но я думал, что у них тоже есть правила против интерпретируемого кода. (Я полагаю, они никогда не представляли себе гипотетического сценария, в котором интерпретировалась бы Objective-C .)
2
ответ дан 9 December 2019 в 20:41
поделиться

Взгляните на документацию для objc_msgSend () и другие части Objective-C Runtime Reference . По сути, вы можете проанализировать текст и отправить его во время выполнения.

0
ответ дан 9 December 2019 в 20:41
поделиться

Objective-C - это на самом деле просто C со средой выполнения и некоторым синтаксическим сахаром. Это компилируемый по своей сути язык (я не думаю, что для C есть готовые к производству интерпретаторы, хотя я могу ошибаться).

В Xcode раньше была функция под названием ZeroLink для ускорения времени компиляции, но она была удалена в Xcode 3, поскольку она вызывала слишком много ошибок.

3
ответ дан 9 December 2019 в 20:41
поделиться