【发布时间】:2013-10-22 18:05:48
【问题描述】:
基本上,我很好奇(肯定是一件危险的事情)什么语言允许您动态构建代码块以供以后执行。
我看过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();
}
【问题讨论】:
-
一个简单的网络搜索应该提供的语言列表比任何人有时间研究的都要多。而且几乎任何语言都可以自己构建和加载。您可能要问的典型示例是 Lisp、Ruby、Python、等等等等。
-
这取决于你的意思。有“评估”机制,但即使这样也不是必需的; Java 可以自己编译。 Lisp 宏会自动扩展。传递函数也是一种描述方式,但不同。
-
您的示例甚至不需要 eval。这可以在标准的 Haskell 中完成。基本上,您有一个列表
[0..9],并且想要构建一个列表[drawLine 0 50, drawLine 1 51, ...],您可以使用像序列这样的标准函数“运行”它。
标签: programming-languages metaprogramming