首页 > 后端开发 > Python教程 > 怎么理解元编程?

怎么理解元编程?

WBOY
发布: 2016-06-06 16:22:23
原创
1323 人浏览过

常看到元编程这个字眼,怎么理解元编程。希望别复制粘贴答案。

回复内容:

Meta- 这个前缀在希腊语中的本意是「在…后,越过…的」,类似于拉丁语的 post-,比如 metaphysics 就是「在物理学之后」,这个词最开始指一些亚里士多德的著作,因为它们通常排序在《物理学》之后。

但西方哲学界在几千年中渐渐赋予该词缀一种全新的意义:关于某事自身的某事。比如 meta-knowledge 就是「关于知识本身的知识」,meta-data 就是「关于数据的数据」,meta-language 就是「关于语言的语言」,而 meta-programming 也是由此而来,是「关于编程的编程」。

弄清了词源和字面意思,可知大陆将 meta- 这个前缀译为「元」并不恰当。台湾译为「后设」,稍微好一点点,但仍旧无法望文生义。也许「自相关」是个不错的选择,「自相关数据」、「自相关语言」、「自相关编程」——但是好像又太罗嗦了。

Anyway。先看看 meta-data:

「我的电话是 +86 123 4567 8910」
——这是一条数据;
「+86 123 4567 8910 有十三个数字和一个字符,前两位是国家代码,后面是一个移动电话号码」 —— 这是关于前面那条数据的数据。

那么照猫画虎,怎样才算 meta-programming 呢?泛泛来说,只要是与编程相关的编程就算是 meta-programming 了——比如,若编程甲可以输出 A - Z,那么写程序甲算「编程」;而程序乙可以生成程序甲(也许还会连带着运行它输出 A - Z),那么编写程序乙的活动,就可以算作 meta-programming,「元编程」。注意,程序甲和程序乙并不一定是同一种语言:
<code class="language-rb"><span class="p">(</span><span class="s1">'A'</span><span class="o">..</span><span class="s1">'Z'</span><span class="p">)</span><span class="o">.</span><span class="n">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">char</span><span class="o">|</span>
    <span class="nb">system</span><span class="p">(</span><span class="s2">"python -c 'print </span><span class="se">\"</span><span class="si">#{</span><span class="n">char</span><span class="si">}</span><span class="se">\"</span><span class="s2">'"</span><span class="p">)</span>
<span class="k">end</span>
</code>
登录后复制
翻译的问题,怎么看都搞不清楚这个元编程怎么翻译过来的
元编程就是编写把要执行的代码当文本进行操作的代码,举个不严谨的例子:
比如你要打从1到5五个数字,用python的话就是
<code class="language-text">print(1)
print(2)
print(3)
print(4)
print(5)
</code>
登录后复制
元编程是用代码在编译期或运行期生成/改变代码。除非程序的运行期的输入数据会被直接或间接转化成代码,否则元编程不会给程序带来新的逻辑(信息论原理),此时它本质上是一种(让程序员自我感觉良好的)手工压缩源代码技术 可以扩展程序自身,这样的能力,为元编程。

比如Ruby,使用元编程可以扩展出领域专用语言DSL, 比如RSpec、puppet、chef等。相对于新创造的领域专用语言DSL来说, Ruby语言就成为其的元语言。

所以, 叫做元编程 。 meta-programming

一般代码的操作对象是数据
元编程操作的对象是其他代码 就是你写的代码是用来生成代码的 元编程之javascript ,祝你能找到答案。 就是无关业务逻辑,只跟当前代码结构相关的代码。比如通过在运行时通过java反射把所有Action结尾的类找出来,加上log或者其它动作。或者ruby里的methodingmissing, objc的category等给系统自带的类增强一些特性等。共有的特性就是它们处理的对象是你的代码,不是业务对象。 前面各位已经说的很好了,我的理解是
"元编程"比"我们手写代码"多提供了一个抽象层次
贴一篇我认为写的不错的文章
Ruby元编程构造简单优雅解决方案 根本就没有元编程,有的只是编程而已
推荐看看《ruby元编程》
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板