编程基础之什么是元编程

开发 开发工具
元编程是指某类[计算机程序]的编写,这类计算机程序编写或者操纵其他程序(或者自身)作为它们的数据,或者在[运行时]完成部分本应在[编译时]完成的工作。来看本文。

大家知道元编程么?元编程到底什么呢?下面为你介绍元编程。

元编程是用来产生代码的程序,操纵代码的程序,在运行时创建和修改代码而非编程时,这种程序叫做元程序。而编写这种程序就叫做元编程。比如编译原理中用来生成词法分析器和语法分析器的lex和yacc。

元编程技术在多种编程语言中都可以使用,但更多的还是被应用于动态语言中,因为动态语言提供了更多的在运行时将代码视为数据进行操纵的能力。虽然像C#和Java这样较为静态的语言也提供了反射机制,但是仍然没有诸如Ruby这样的更趋动态性的语言那么透明,这是因为静态语言在运行时其代码和数据是分布在两个层次上的。

元编程是指某类[计算机程序]的编写,这类计算机程序编写或者操纵其他程序(或者自身)作为它们的数据,或者在[运行时]完成部分本应在[编译时]完成的工作。很多情况下比手工编写全部代码相比工作效率更高。编写元程序的语言称之为元语言,被操作的语言称之为目标语言。一门语言同时也是自身的元语言的能力称之为反射。

反射是促进元编程的一种很有价值的语言特性。把编程语言自身作为头等对象(如Lisp或Rebol)也很有用。支持泛型编程的语言也使用元编程能力。

元编程通常有两种方式起作用。一种方式是通过应用程序接口(API)来暴露运行时引擎的内部信息。另一种方法是动态执行包含编程命令的字符串。因此,“程序能编写程序”。虽然两种方法都能用,但大多数方法主要靠其中一种。

使用示例一个简单元编程的例子是使用bash脚本的产生式编程示例:

 

  1. #!/bin/bash  
  2. # metaprogram  
  3. echo '#!/bin/bash' >program  
  4. for ((I=1; I<=992; I++)) do 
  5. echo "echo $I" >>program  
  6. done  
  7. chmod +x program 

 

这个脚本(或程序)生成了一个新的993行程序来打印1至992。这只是演示用代码来写更多代码,并不是打印数字的最有效方法。然而,一个程序员可以几分钟内编写和执行元程序,却生成了近1000行代码。

不是所有的元编程都用产生式编程。如果程序可以在运行时改变(如Lisp、Python、REBOL、Smalltalk、Ruby、PHP、Perl, Tcl、Lua、Groovy和JavaScript),这种技术可以不实际生成源代码就使用元编程。

最常用的元编程工具是编译器,把高级语言转换为汇编语言或机器语言。更灵活的方法是在程序中嵌入解释器直接处理程序数据。有一些实现例如为Object Pascal编写的RemObject's Pascal Script。

另一个很常用的元编程例子是lex和yacc,用来生成词法分析器和语法分析器。Yacc通常用作编译器的编译器,生成一个把高级语言转换为机器语言的工具。

quine是一种源代码等于输出的特殊的元程序。

面向语言的程序设计是一种强烈关注元编程的编程风格,通过领域特定语言来实现。

希望通过本文的对于元编程的介绍,能给你带来帮助。

【编辑推荐】

  1. 基于Ruby的元编程技术
  2. 用Ajax、元编程和Ruby on Rails框架进行企业级搭建
  3. 8.4.1 元编程的思想
  4. 8.4.2 元编程的应用
责任编辑:于铁 来源: 互联网
相关推荐

2009-07-20 15:42:59

JDBC是什么

2011-11-11 15:47:22

JavaScript

2020-07-23 17:29:47

接口编程代码

2011-08-04 10:18:45

数据驱动编程

2011-07-05 14:42:46

java

2021-02-26 13:08:27

Java高并发AQS

2021-09-15 09:12:56

Python元编程元数据

2021-01-26 13:45:03

网络安全Winsock编程

2024-01-10 09:26:52

Rust所有权编程

2011-08-18 09:52:13

iPhone SDKUIPageContr

2011-07-14 15:05:54

PHP

2011-08-18 10:02:47

iPhone SDKOpenFlow

2010-06-04 09:11:10

.NET并行编程

2011-06-13 10:41:17

JAVA

2011-09-27 13:52:41

2023-11-02 18:45:00

Rust编程表达式

2009-10-23 13:24:20

linux Shell

2014-09-17 11:45:20

iOS编程App运作

2013-06-17 11:21:27

2009-03-12 10:52:43

Java线程多线程
点赞
收藏

51CTO技术栈公众号