2012-03-13 2 views
2

Я знаю, что это странный вопрос, но мне интересно, возможно ли это. Есть ли способ, с помощью которого код (который был бы введен пользователем) может быть запущен во время выполнения ? Например, предположим, что я разрешу пользователю вводить код чертежа Core Graphics. Я хотел бы, чтобы этот код запускался в методе drawRect моей панели предварительного просмотра.Выполнение произвольного кода во время выполнения

Так что мне нужно было бы преобразовать эту группу строк в фактический код времени выполнения.

Возможно ли это, или я просто трачу свое время?

+0

Это на iOS или Mac? –

ответ

3

Я вижу несколько решений:

  1. Создать язык самостоятельно, и разобрать его в-приложения
  2. Если на макинтош, вы могли бы теоретически, создать функцию заглушки от того, что они входят в , и использовать GCC, поставляемый с приложением для компиляции кода во время выполнения в dylib, а затем использовать функции dylib для запуска созданной вами функции.
+0

Да, это для Mac. Я обновлю свой тег, чтобы это отразить. –

+2

Создание собственного языка для рисования - ваш лучший выбор. Если вы действительно разрешаете им запускать любой код C, который они хотят, это ужасно опасно. С помощью собственного языка вы можете точно определить, что они могут сделать, и если они выполняют только пару операций рисования, это не должно быть так сложно. – pinerd314159

+0

Ну, я не уверен, что выполнит то, о чем я думаю. Если цель состоит в том, чтобы позволить им создать идеальный код рисования (используя функции Core Graphics) через живое обновление, то как бы создать мой собственный язык с этим? Я не говорю, что это плохая идея; Я просто не понимаю, как это поможет моей ситуации. –

1

На Mac вы можете отправить свое приложение в компилятор (некоторые из них идут с Xcode), скомпилировать код и запустить скомпилированный результат в качестве подчиненного приложения (например, управляемое через сокет, и копирование пикселей пикселя предварительного просмотра обратно через канал). При необходимости вы можете преобразовать текст исходного кода с помощью какого-то препроцессора и обернуть его в свою собственную оболочку времени выполнения.

В качестве альтернативы вы можете написать или перенести интерпретатор языка C (имеется несколько интерпретаторов с открытым исходным кодом для различных подмножеств C), а также включить вызовы библиотеки Core Graphics в синтаксический анализатор интерпретатора C и механизм времени выполнения.

Я не знаю полного переводчика для Objective C.

+0

Спасибо за ваш ответ. –

Смежные вопросы