通用编程与元编程

Jos*_*sto 17 programming-languages metaprogramming generic-programming

究竟有什么区别?似乎这些术语可以互换使用,但是阅读了Objective-c的维基百科条目,我遇到了:

除了C的过程编程风格之外,C++还直接支持某些形式的面向对象编程,泛型编程和元编程.

参考C++.显然他们有所不同?

Jör*_*tag 40

  • 编程:编写一个程序,用于创建,转换,过滤,聚合和操作数据.
  • 元编程:编写创建,转换,过滤器,聚集程序和否则操纵程序.
  • 通用编程:编写一个创建,转换,过滤,聚合和操作数据的程序,但只对数据结构做出最小的假设,从而最大限度地重用各种数据类型.

正如在其他几个答案中已经提到的那样,区别在C++中可能会令人困惑,因为通用编程和(静态/编译时)元编程都是通过模板完成的.为了进一步混淆你,C++中的泛型编程实际上使用元编程是有效的,即模板专业化从通用编程生成专门的(快速)程序.

还要注意,正如每个Lisp程序员都知道的那样,代码和数据是相同的,所以实际上没有"元编程"这样的东西,它只是编程.再次,这是一个有点硬在C++中看到的,因为你实际使用两个完全不同的编程语言编程(C++,势在必行,程序,面向对象的C家族语言)和元编程(模板,纯功能的"偶然"语言介于纯lambda演算和Haskell之间,语法粗糙,因为它实际上从未打算成为一种编程语言.)

许多其他语言在编程和元编程时使用相同的语言(例如Lisp,Template Haskell,Converge,Smalltalk,Newspeak,Ruby,Ioke,Seph).


Arm*_*yan 13

从广义上讲,元编程意味着编写可以产生其他程序的程序.例如,C++中的模板只在实例化时生成实际代码.可以将模板解释为将类型作为输入并将实际函数/类作为输出生成的程序.预处理器是另一种元编程.元编程的另一个组成例子:一个程序,它读取XML并根据XML生成一些SQL脚本.同样,通常,元程序是产生另一个程序的程序,而泛型程序是关于参数化(通常与其他类型)类型(包括函数).

在考虑对此答案的评论后编辑


Der*_*urk 9

我粗略地将元编程定义为"编写程序编写程序",将通用编程定义为"使用语言特性来编写参数或成员的数据类型参数化的函数,类等".

根据这个标准,C++模板对于两个泛型编程有用的(认为vector,list,sort元编程(认为加速和如灵)...)和.此外,我认为C++中的泛型编程(即编译时多态)是通过元编程(即从模板化代码生成代码)来完成的.


sep*_*p2k 5

泛型编程通常是指可以与许多类型一起使用的函数。例如,排序函数可对一组可比较对象进行排序,而不是对一个整数数组进行排序而对另一个可对字符串向量进行排序的排序函数。

元编程是指以编程方式检查,修改或创建类,模块或功能。