Objective-C 中是否有 eval 函数(如 lisp、javascript、python、ruby ......)?
我所说的 eval 是一个函数,它可以将任意 Objective-C 代码(可能具有类定义、副作用、自省等)作为字符串(不是块或 NSInvocation 或 IMP 或类似的东西),并评估每个表达式,尊重当前运行时环境状态、副作用、类定义等。
如果没有,是否可以在现有运行时的范围内实现?
Objective-C 中是否有 eval 函数(如 lisp、javascript、python、ruby ......)?
我所说的 eval 是一个函数,它可以将任意 Objective-C 代码(可能具有类定义、副作用、自省等)作为字符串(不是块或 NSInvocation 或 IMP 或类似的东西),并评估每个表达式,尊重当前运行时环境状态、副作用、类定义等。
如果没有,是否可以在现有运行时的范围内实现?
无论是语言还是 Apple 的框架都没有直接支持这样的事情。然而, LLVM的目标之一是成为一个可嵌入的编译器套件。我很确定它可以在内存中生成可执行代码。困难的部分是为该代码提供对调用代码的预先存在环境的访问权限。例如,编译引用局部变量或类似内容的代码。
(请注意,iOS App Store 禁止使用这种方法,但它可能在 Mac OS X 上可行。)
绝对不。Objective-C 是一种完全编译的语言。只有解释型语言才能做这种事情。
不,代码评估是动态语言的功能。尽管 Objective-C 具有动态特性,甚至 Cocoa 运行时,但它仍然被认为是一种静态语言(通常)。