fbpx
维基百科

元编程

元編程(英語:Metaprogramming),又譯超編程,是指某类计算机程序的编写,这类计算机程序编写或者操纵其它程序(或者自身)作为它们的資料,或者在编译时完成部分本应在运行时完成的工作。多数情况下,与手工编写全部代码相比,程序员可以获得更高的工作效率,或者给与程序更大的灵活度去处理新的情形而无需重新编译。

编写元程序的语言称之为元语言。被操纵的程序的语言称之为「目标语言」。一门编程语言同时也是自身的元语言的能力称之为「反射」或者「自反」。

反射是促进元编程的一种很有价值的语言特性。把编程语言自身作为一級資料類型(如LISPForthRebol)也很有用。支持泛型编程的语言也使用元编程能力。

元编程通常通过两种方式实现。一种是通过应用程序编程接口(APIs)将运行时引擎的内部信息暴露于编程代码。另一种是动态执行包含编程命令的字符串表达式。因此,“程序能够编写程序”。虽然两种方式都能用于同一种语言,但大多数语言趋向于偏向其中一种。

示例 编辑

这是一个简单的使用bash脚本编写的元程序示例,同时也是一个生成式编程的例子:

#!/bin/bash # metaprogram echo '#!/bin/bash' >program for ((I=1; I<=992; I++)) do  echo "echo $I" >>program done chmod +x program 

这个脚本(或程序)生成了一个新的993行的程序来打印输出数字1至992。这只是一个怎样用代码来编写更多代码的示例;但并不是打印一串数字最有效的方法。尽管如此,一个程序员可以在几分钟内编写和执行这个元程序,却生成了近1000行的代码。

不是所有的元编程都需要产生式编程。如果一个程序可以在运行时改变或者可以使用增量编译(如LispForthPerlPythonREBOLSmalltalkRubyPHPTclLuaGroovyFrink英语Frink (programming language)JavaScript),那么就可以在不实际生成源代码的情况下使用这种技术实现元编程。

最常见的元编程工具是编译器,它可以将程序员使用高级语言编写的相对短小的程序转换为等价的汇编语言或者机器语言程序。这是最基础的编程工具,在大多数情况下,直接编写机器语言程序是不太现实的。

编译器能够将一种语言转换为另一种,而其它元编程系统则允许以编程方式操纵一种语言。系统即是这样一种简单的系统。在Microsoft Office©的程序中,宏可以记录一些特定的按键组合,并重新执行。另一方面,这些可执行代码可以通过点击宏选择界面的“编辑”按钮获得。

LISP恐怕是具备元编程能力的典范语言,不仅因为它在历史上优先发展,更由于它的元编程的简洁与强大。在Lisp元编程中,准引用操作符(通常是一个逗号)引入的代码是在程序定义时而不是运行时被赋值。元编程语言因此等价于主编程语言,并且在需要的时候,已经存在的Lisp例程还可以直接重用于元编程。

在程序中嵌入直接处理程序数据的解释器即可实现这一目的。现在已经有一些用于常用高级语言的实现,例如RemObject为Object Pascal编写的Pascal Script。

另一个很常用的元编程例子是lexyacc,这两个工具用来生成词法分析器语法分析器。Yacc通常用作编译器的编译器,生成能够将高级语言转换为机器语言的工具。

自产生程式是一种源代码等于输出的特殊的元程序。面向语言的程序设计是一种强烈关注元编程的编程风格,通过领域特定语言来实现。

宏用于产生式编程 编辑

IBM System/360及其衍生物拥有强大的汇编宏工具,通常用于生成完整的程序或者程序片段(比如针对不同操作系统)。CICS事务处理系统也提供了汇编宏,可以生成用于预处理阶段的COBOL语句。

元编程实现 编辑

  • ASF+SDF元环境
  • DMS软件再造工具包
  • 意图编程
  • Joose(JavaScript)
  • Moose (Perl)
  • Nemerle
  • Stratego/XT
  • Template Haskell

外部链接 编辑

  • Code generation Vs Metaprogramming (页面存档备份,存于互联网档案馆
  • c2.com Wiki: Metaprogramming article (页面存档备份,存于互联网档案馆
  • : The first metaprogramming framework for eXist-db (页面存档备份,存于互联网档案馆

元编程, 此條目需要擴充, 2018年12月18日, 请協助改善这篇條目, 更進一步的信息可能會在討論頁或扩充请求中找到, 请在擴充條目後將此模板移除, 此條目没有列出任何参考或来源, 2014年10月9日, 維基百科所有的內容都應該可供查證, 请协助補充可靠来源以改善这篇条目, 无法查证的內容可能會因為異議提出而被移除, 元編程, 英語, metaprogramming, 又譯超編程, 是指某类计算机程序的编写, 这类计算机程序编写或者操纵其它程序, 或者自身, 作为它们的資料, 或者在编译时完成部分本应在运行时. 此條目需要擴充 2018年12月18日 请協助改善这篇條目 更進一步的信息可能會在討論頁或扩充请求中找到 请在擴充條目後將此模板移除 此條目没有列出任何参考或来源 2014年10月9日 維基百科所有的內容都應該可供查證 请协助補充可靠来源以改善这篇条目 无法查证的內容可能會因為異議提出而被移除 元編程 英語 Metaprogramming 又譯超編程 是指某类计算机程序的编写 这类计算机程序编写或者操纵其它程序 或者自身 作为它们的資料 或者在编译时完成部分本应在运行时完成的工作 多数情况下 与手工编写全部代码相比 程序员可以获得更高的工作效率 或者给与程序更大的灵活度去处理新的情形而无需重新编译 编写元程序的语言称之为元语言 被操纵的程序的语言称之为 目标语言 一门编程语言同时也是自身的元语言的能力称之为 反射 或者 自反 反射是促进元编程的一种很有价值的语言特性 把编程语言自身作为一級資料類型 如LISP Forth或Rebol 也很有用 支持泛型编程的语言也使用元编程能力 元编程通常通过两种方式实现 一种是通过应用程序编程接口 APIs 将运行时引擎的内部信息暴露于编程代码 另一种是动态执行包含编程命令的字符串表达式 因此 程序能够编写程序 虽然两种方式都能用于同一种语言 但大多数语言趋向于偏向其中一种 目录 1 示例 2 宏用于产生式编程 3 元编程实现 4 外部链接示例 编辑这是一个简单的使用bash脚本编写的元程序示例 同时也是一个生成式编程的例子 bin bash metaprogram echo bin bash gt program for I 1 I lt 992 I do echo echo I gt gt program done chmod x program 这个脚本 或程序 生成了一个新的993行的程序来打印输出数字1至992 这只是一个怎样用代码来编写更多代码的示例 但并不是打印一串数字最有效的方法 尽管如此 一个程序员可以在几分钟内编写和执行这个元程序 却生成了近1000行的代码 不是所有的元编程都需要产生式编程 如果一个程序可以在运行时改变或者可以使用增量编译 如Lisp Forth Perl Python REBOL Smalltalk Ruby PHP Tcl Lua Groovy Frink 英语 Frink programming language 和JavaScript 那么就可以在不实际生成源代码的情况下使用这种技术实现元编程 最常见的元编程工具是编译器 它可以将程序员使用高级语言编写的相对短小的程序转换为等价的汇编语言或者机器语言程序 这是最基础的编程工具 在大多数情况下 直接编写机器语言程序是不太现实的 编译器能够将一种语言转换为另一种 而其它元编程系统则允许以编程方式操纵一种语言 宏系统即是这样一种简单的系统 在Microsoft Office c 的程序中 宏可以记录一些特定的按键组合 并重新执行 另一方面 这些可执行代码可以通过点击宏选择界面的 编辑 按钮获得 LISP恐怕是具备元编程能力的典范语言 不仅因为它在历史上优先发展 更由于它的元编程的简洁与强大 在Lisp元编程中 准引用操作符 通常是一个逗号 引入的代码是在程序定义时而不是运行时被赋值 元编程语言因此等价于主编程语言 并且在需要的时候 已经存在的Lisp例程还可以直接重用于元编程 在程序中嵌入直接处理程序数据的解释器即可实现这一目的 现在已经有一些用于常用高级语言的实现 例如RemObject为Object Pascal编写的Pascal Script 另一个很常用的元编程例子是lex和yacc 这两个工具用来生成词法分析器和语法分析器 Yacc通常用作编译器的编译器 生成能够将高级语言转换为机器语言的工具 自产生程式是一种源代码等于输出的特殊的元程序 面向语言的程序设计是一种强烈关注元编程的编程风格 通过领域特定语言来实现 宏用于产生式编程 编辑IBM System 360及其衍生物拥有强大的汇编宏工具 通常用于生成完整的程序或者程序片段 比如针对不同操作系统 CICS事务处理系统也提供了汇编宏 可以生成用于预处理阶段的COBOL语句 元编程实现 编辑ASF SDF元环境 DMS软件再造工具包 意图编程 Joose JavaScript Moose Perl Nemerle Stratego XT Template Haskell外部链接 编辑Code generation Vs Metaprogramming 页面存档备份 存于互联网档案馆 The Art of Enterprise Metaprogramming c2 com Wiki Metaprogramming article 页面存档备份 存于互联网档案馆 Solenoid The first metaprogramming framework for eXist db 页面存档备份 存于互联网档案馆 取自 https zh wikipedia org w index php title 元编程 amp oldid 78599464, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。