我读过:
我承认在元编程/代码生成背后的目的有些混乱。
有谁有使用元编程/代码生成的具体例子吗?更好的解释是,为什么它比另一种选择更好。
编辑:蒂索会被视为元编程吗?
发布于 2010-08-12 13:56:26
想象一个制造汽车的家伙。说这和使用电脑是一样的。
在某种程度上,他意识到他总是在做同样的事情,或多或少。
所以他建了工厂来制造汽车,而且情况要好得多。他现在在编程!
然而,在某种程度上,他再次意识到自己总是在做同样的事情。
现在他决定建造制造汽车的工厂。那是元编程。
元编程功能非常强大,但是系统中的一个故障使得所有的优势都变成了巨大的困难。所以掌握它并使用它..。或者离我远点!
发布于 2010-08-12 15:24:26
我认为元编程是“编写(或修改)其他程序的程序”。(另一个答案是“制造工厂的工厂”,很好的比喻)。
人们发现它的各种用途:定制应用程序,生成样板代码,为特殊情况优化程序,实现DSL,插入代码来处理正交设计问题(“方面”)。
值得注意的是,已经发明了许多不同的机制来实现这一点:文本模板、宏、预处理条件、泛型、C++-模板、方面、反射、.通常,这些机制中的一些是以某些语言构建的,而另一些机制则构建为其他语言,而大多数语言根本就没有元编程支持。这种分散分布的功能意味着您可能能够在一种语言中进行某种类型的元编程,但有局限性,但无法在另一种语言中执行这些类型的编程。这是令人恼火的:-}
我一直在关注的一个观察是,我们可以构建通用的元编程机器,它可以与任何形式的程序变换语言一起工作。程序转换是一种参数化模式:“如果您看到此语法,请用该语法替换它”。
一个转换本身通常并不令人印象深刻,但几十个或数百个可以对代码进行引人注目的更改。因为(复杂的)程序转换实际上可以模拟图灵机器,它们可以执行任意代码更改,包括所有你发现散乱的技术。
接受语言定义的工具。语言特定的转换和生成另一个用于应用这些转换的转换是元元编程工具:一个编写“编写程序的程序”的程序。
其价值在于,您可以应用这种工具对任意代码进行各种各样的更改。而且,你不需要语言设计委员会来意识到你想要一种特殊的元编程支持,赶快提供它,这样你就可以继续你今天的工作了。
一个有趣的教训是,这类机器需要强大的程序分析(符号表、控制和数据流分析等)。支持帮助它专注于代码中的问题所在,这样元编程机器就可以在这一点上做一些事情(这方面的一个非常弱的例子是点切规范,即“在类似这样的地方进行更改”)。
OP要求提供元编程应用的具体示例。我们使用了"meta"-metaprogramming工具(DMS软件重组工具包)在大型代码基础上自动执行以下活动:
跨多种语言,包括Java,C#,C++,PHP,.
“任择议定书”还问,“为什么这比其他办法要好呢?”答案与规模、时间和准确性有关。
对于大型应用程序来说,代码库的庞大意味着您没有足够的资源或时间手工进行这样的分析或更改。
对于代码生成或优化任务,您可能可以手工完成,但是工具可以更快、更准确地完成。
从本质上讲,这些工具做的是人类根本无法做到的事情。
值得注意的是,这些工具没有创造性;您仍然需要人类来决定让他们做什么,例如,决定任务是什么(示例见上面的列表),并确定如何定义分析/转换以达到效果。你还需要元程序员。然而,当一个元程序员使用正确的知识支持这样一个工具时,生成的代码似乎是由一个令人难以置信的快速、创造性的专家编码器构建的。
发布于 2010-08-12 13:53:46
我最近(过去的6个月)代码生成的具体示例:
因此,元编程示例列表:您在C++中看到的最酷的元编程示例是什么?
https://stackoverflow.com/questions/3468246
复制相似问题