怎么理解元编程?
程序员文章站
2022-05-06 21:04:54
...
常看到元编程这个字眼,怎么理解元编程。希望别复制粘贴答案。
但西方哲学界在几千年中渐渐赋予该词缀一种全新的意义:关于某事自身的某事。比如 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,「元编程」。注意,程序甲和程序乙并不一定是同一种语言:
元编程就是编写把要执行的代码当文本进行操作的代码,举个不严谨的例子:
比如你要打从1到5五个数字,用python的话就是
比如Ruby,使用元编程可以扩展出领域专用语言DSL, 比如RSpec、puppet、chef等。相对于新创造的领域专用语言DSL来说, Ruby语言就成为其的元语言。
所以, 叫做元编程 。 meta-programming
一般代码的操作对象是数据
元编程操作的对象是其他代码 就是你写的代码是用来生成代码的 元编程之javascript ,祝你能找到答案。 就是无关业务逻辑,只跟当前代码结构相关的代码。比如通过在运行时通过java反射把所有Action结尾的类找出来,加上log或者其它动作。或者ruby里的methodingmissing, objc的category等给系统自带的类增强一些特性等。共有的特性就是它们处理的对象是你的代码,不是业务对象。 前面各位已经说的很好了,我的理解是
Ruby元编程构造简单优雅解决方案 根本就没有元编程,有的只是编程而已
推荐看看《ruby元编程》
回复内容:
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,「元编程」。注意,程序甲和程序乙并不一定是同一种语言:
('A'..'Z').each do |char|
system("python -c 'print \"#{char}\"'")
end
翻译的问题,怎么看都搞不清楚这个元编程怎么翻译过来的元编程就是编写把要执行的代码当文本进行操作的代码,举个不严谨的例子:
比如你要打从1到5五个数字,用python的话就是
print(1)
print(2)
print(3)
print(4)
print(5)
元编程是用代码在编译期或运行期生成/改变代码。除非程序的运行期的输入数据会被直接或间接转化成代码,否则元编程不会给程序带来新的逻辑(信息论原理),此时它本质上是一种(让程序员自我感觉良好的)手工压缩源代码技术
可以扩展程序自身,这样的能力,为元编程。比如Ruby,使用元编程可以扩展出领域专用语言DSL, 比如RSpec、puppet、chef等。相对于新创造的领域专用语言DSL来说, Ruby语言就成为其的元语言。
所以, 叫做元编程 。 meta-programming
一般代码的操作对象是数据
元编程操作的对象是其他代码 就是你写的代码是用来生成代码的 元编程之javascript ,祝你能找到答案。 就是无关业务逻辑,只跟当前代码结构相关的代码。比如通过在运行时通过java反射把所有Action结尾的类找出来,加上log或者其它动作。或者ruby里的methodingmissing, objc的category等给系统自带的类增强一些特性等。共有的特性就是它们处理的对象是你的代码,不是业务对象。 前面各位已经说的很好了,我的理解是
"元编程"比"我们手写代码"多提供了一个抽象层次
贴一篇我认为写的不错的文章Ruby元编程构造简单优雅解决方案 根本就没有元编程,有的只是编程而已
推荐看看《ruby元编程》
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
专题推荐
-
独孤九贱-php全栈开发教程
全栈 170W+
主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门
-
玉女心经-web前端开发教程
入门 80W+
主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门
-
天龙八部-实战开发教程
实战 120W+
主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习
推荐阅读
-
MyEclipse6.5编程的时候怎么开启自动提示和代码自动补全?
-
eclipse编程时出现Fail to create the java Virtual Machine怎么办?
-
scratch儿童编程软件使用时遇到物体碰到边缘反弹并倒过来怎么办?
-
myeclipse中怎么显示编程代码的行序号?
-
myeclipse编程提示ClassNotFoundException错误怎么办?
-
javascriptvoid怎么解决(简单好玩的编程代码)
-
谷歌安卓模拟器怎么用(谷歌编程官方软件推荐)
-
谷歌安卓模拟器怎么用(谷歌编程官方软件推荐)
-
javascriptvoid怎么解决(简单好玩的编程代码)
-
eclipse编程时出现Fail to create the java Virtual Machine怎么办?
网友评论
文明上网理性发言,请遵守 新闻评论服务协议
我要评论