在运行时运行任意代码

时间:2012-03-13 17:42:20

标签: objective-c macos

我知道这是一个奇怪的问题,但我想知道这是否可行。是否有任何方法可以在运行时运行代码(可由用户键入)?例如,假设我允许用户键入一些Core Graphics绘图代码。我希望此代码在我的预览窗格的drawRect方法中运行。

所以我要做的就是将这组字符串转换为实际的运行时代码。

这是否可能,或者我只是在浪费时间?

2 个答案:

答案 0 :(得分:3)

我看到了一些解决方案:

  1. 创建您自己的语言,并在应用程序中解析它
  2. 如果在mac上,理论上你可以从它们输入的内容创建一个函数存根,并使用应用程序附带的GCC在运行时将代码编译成dylib,然后使用dylib函数来运行你创建的函数。

答案 1 :(得分:1)

在Mac上,您可以让您的应用程序向编译器发送文本(多个附带Xcode),编译代码,并将编译结果作为从属应用程序运行(例如,通过套接字控制,并复制预览窗格图像像素通过管道返回)。如果需要,您可以使用某种预处理器转换源代码文本,并将其包装在您自己的运行时shell中。

另外,您可以编写或移植C语言解释器(C语言的各个子集有几个开源解释器),并将Core Graphics库调用插入C解释器的解析器和运行时引擎。

我不知道Objective C的完整解释器。