开发式编程是聚合的,
声明式编程是声明的,
产生式编程是组合的,

声明式编程和产生式编程看起来很像:
1.声明式编程需要一个解析器,产生式编程需要一个生成器;
2.产生式编程(正统的)需要一个编辑器,声明式编程也可以有(如jbpm)。
3.产生式编程有一个元模型,声明式编程也可以定义。

本质的区别在于:
1.产生式是自底向上,而声明式是自定向下。即产生式编程用的思路是组合概念(用小粒度的概念组合生成大粒度的概念),
而声明式编程是解析概念,用统一的概念来理解,把不同差异性交由具体程序解析。
2.声明式编程的编辑器生成的是xml文件,将由框架程序解析;而产生式生成程序代码,不做解析运行。
3.由于1,导致元数据模型不一样,产生式是相对细粒度的,而声明式是粗粒度的(不能直接比较大小,定义的是无差异性的概念)。如Ant,jbpm都是很大的概念。

中国软件开发情况:"目前,国内传统大型企业应用软件有两种方式居多:编码式开发方式和一次开发方式。值得注意的是,两种方式都有致命的缺陷---编码式开发方式使得企业级应用软件的快速开发和实施难以实现;一次性开发持续运行的方式,则导致软件的严重僵化和应用的不适应。尽管有时两种方式的操作者会彼此攻击,但在用户看来,它们之间并无显著不同"

其说的以及普元做的,就是这三个开发方式。

buaawhl老大说:"Interpreter is over Code Generator。meta programming的最高层次是 语言级别直接解决,比如,smalltalk, ruby, python, 还有其他reflection 支持的非常好的语言。甚至 STL 等 template 技术,也可以算作语言级别。Code Generation 是最低级别的meta programming解决方案。技术含量也最低。这个级别必须超越,才能够真正达到质变,完全跳出概念炒作的层次。"