可以执行自己的代码(作为字符串文字传递)的编程语言叫什么?我脑海中的设置与此类似(暂时忘记输入代码、结果等):

string eight = "5+3" 
int result = run(eight) 

在哪里 run是关键字。那是一种反射式编程语言吗?

请您参考如下方法:

你能想到的最好的就是你所要求的就是“有一个评估功能”(正如哈维尔在他对你的问题的评论中提到的那样)。

自托管不是必需的,也不一定能满足您的需求。两个例子是:C 是一种自托管语言,它不能在字符串中执行它自己的代码,但 Tcl 不是一种自托管语言,它可以执行它自己在字符串中给出的代码。

  • 附带说明一下,C 有一半时间在没有 API 来执行外部进程的环境中运行。因此,虽然在某些环境中您可以配置您的系统以使 C 能够执行其自己的编译器,然后执行其自己的代码,但通常这并不是您真正想要的。
  • 旁注。如果我们可以作弊并使用“执行外部编译器”路线来做到这一点,那么语言不需要自托管来做你想做的事。它只需要一个 exec 函数来调用它自己的编译器(通常用 C 编写)。

  • 与反射/自省(introspection)相同,能够自己进行自省(introspection)并不意味着您可以在字符串中执行代码。具有反射但没有内置 eval 的语言的两个示例是 C# 和 Java。
  • 附带说明一下,一旦你有一个 eval 函数,你通常可以进行反射/内省(introspection),尽管方式很笨拙。

  • 自我解释与自我托管的定义相同。 Tcl 是一种语言,它的 eval 函数不是自己编写的——它只是公开了用 C 实现的 Tcl 代码评估器。

    乍一看,元循环评估器看起来像你想要的。它被定义为自我解释,其中 eval 函数是内置的,而不是在语言本身中实现的。但进一步看,您会注意到它是由用于实现该功能的机制定义的,而不是由功能本身定义的。 Tcl 又是一个异常(exception),它不满足元循环评估器的所有定义,但仍然具有 eval 函数(不适用,没有必要)。因此,在我看来,元循环评估器是“具有评估功能”功能的特定实现。

    因此,我只想说任何“具有 eval 功能”的语言都可以满足您的要求。


    评论关闭
    IT干货网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!