哪些编程语言允许在同一语言中动态生成代码,并且可以作为参数传递

时间:2013-10-22 18:05:49

标签: programming-languages metaprogramming

基本上,我很好奇(肯定是危险的)什么语言允许你动态地构建一个代码块以便稍后执行。

我看过http://en.wikipedia.org/wiki/Self-modifying_code 我没找到我在那里寻找的东西。

这不是辩论,我不是在问哪一个比其他人好。 我只想知道哪些语言包含此编程功能或类似的东西。如果可以的话,我想看一些示例代码来说明这个功能。

我之前在ASP.NET中做过类似的事情,动态构建了要发送到要执行的页面的javascript代码,或者C#生成SQL查询,但从未在同一种语言中使用过。即C#生成C#。

这是一个它可能是什么样子的例子(我用C#/ Javaish语言编写)

/表示代码块转义序列

CodeBlock codeblock = new CodeBlock();

codeblock+= / print("interesting "); int x = 0;  /

for(int i=0; i++; i<10)
{
  codeblock+= / for(int i=0; i++; i<10) {  x++; Canvas.Draw(new line(x,x+50); } /

}

executionMethod(codeblock);

public void executionMethod(ExecutableCode block)
{
  block.exectute();
}

1 个答案:

答案 0 :(得分:2)

“执行动态构造的代码块”与“元编程”不同。

执行动态代码块的功能很容易识别:语言具有“eval”等功能(如您的示例所示)。

“元编程”是指一个程序操纵其他程序(有时适用于自身)的能力。它不一定是编程语言的属性;它可以简单地是一组大量的设施,恰好以某种语言实现,旨在支持这些活动,例如程序转换工具。由语言特征直接实现的元编程通常缺乏完整的通用性;你可以做langauge设计师决定让你做的事情,而不是更多。 (尝试在大多数存在的“反射”语言中重命名变量)。这就是更通用的工具更有效的地方;它不一定受到语言设计师的限制。