冒号课堂§3.2:超级范式

第三课 常用范式(2)

3.2 超级范式——提升语言的级别

智能繁衍:机器人生产机器人          ——题记

关键词:编程范式,模板元编程,元编程,语言导向式编程,产生式编程

摘要:元编程简谈

?提问

什么是元编程?它与通常的编程有何不同?

元编程有何用处?它有哪些应用?

相比自编的元程序,用IDE自动生成的代码有什么缺陷?

语言导向式编程有何优点?它与元编程有何关系?

元编程与产生式编程有何异同?

为什么说元程序是一种最高级的程序?

:讲解

问号忽然想起一事,问道:“有一本名为《C++模版元编程》的书,既然提到了模板,想来也属于泛型编程吧?”

冒号答道:“模板元编程即Template Metaprogramming,与泛型编程密切相关但自成一派,隶属于另一种编程范式——元编程(Metaprogramming),简称MP。此处的前缀‘meta-’常译作‘元’,其实就是‘超级’、‘行而上’的意思。比如,元数据(Metadata)是关于数据的数据,元对象(Metaobject)是关于对象的对象,依此类推,元编程自然是关于程序的程序,或者说是编写、操纵程序的程序。”

叹号皱着眉:“听着有点绕。”

冒号投影出另一段代码——

C++(元编程):
template <int N>
struct factorial
{
   enum { value = N * factorial<N - 1>::value };
};
template <>        // 特化(specialization)
struct factorial<0>  // 递归中止
{
   enum { value = 1 };
};
void main()
{
   cout << factorial<5>::value << endl; // 等价于 cout << 120 << endl;
}

“以上用模板元编程实现了阶乘运算。”冒号讲解道,“与前面三种核心范式的阶乘实现有着根本的不同:这里阶乘的值是在编译时而非运行时计算出来的。换句话说,这段代码以模板形式通过编译器生成了新的代码,并在编译期间获得执行。”

时间: 2024-11-01 16:38:10

冒号课堂§3.2:超级范式的相关文章

冒号和他的学生们(连载10)——超级范式

超级范式 智能繁衍:机器人生产机器人 --题记 引号忽然想起一事,问道:"有一本名为<C++模版元编程>的书,既然提到了模板,想来也属于泛型编程吧?" 冒号答道:"模板元编程即Template Metaprogramming,与GP密切相关但自成一派,隶属于另一种编程范式--元编程(Metaprogramming),简称MP.这里的前缀'meta-'常译作'元',其实就是'超级'.'行而上'的意思.比如,元数据(Metadata)是关于数据的数据,元对象(Meta

冒号课堂§3.1:泛型范式

第三课 常用范式(1) 课前导读 这一课介绍了四个常用的编程范式:泛型式.元编程.切面式和事件驱动式. 本课共分四节-- 1.泛型范式 2.超级范式 3.切面范式 4.事件驱动 3.1泛型范式--抽象你的算法 以类行杂,以一行万 --<荀子•王制篇> 关键词:编程范式,泛型编程,STL,算法 摘要:泛型式编程简谈 ?提问 泛型编程有哪些优点? STL有哪些要素?各自有什么作用? 泛型编程的泛化对象是什么? 泛型编程的核心思想是什么? :讲解 冒号重新开讲:"你们会不会经常遇到这样的情

冒号课堂§4.4:情景范式

第四课 重温范式(4) 4.4情景范式--餐馆里的编程范式 理论是认生的孩童,多陪他玩玩,自会活泼起来 --题记 关键词: 编程范式,情景编程 摘要: 编程范式在餐馆中的应用 ?提问 l 什么是闭包?为什么被称为闭包?它有什么作用? l 规则引擎有何用处? l 能否设想一个生活中的场景,把介绍的九种编程范式都用上? :讲解 叹号摘下眼镜,揉了揉眼:"范式再好,多了也难免有些审美疲劳." 逗号也搓着太阳穴:"这段时间脑子被灌得沉甸甸的." "彼此彼此!你们的

冒号课堂§4.3:汇总范式

第四课 重温范式(3) 4.3汇总范式--一张五味俱全的大烙饼 形者神之质,神者形之用 --<范缜·神灭论> 关键词: 编程范式,设计模式 摘要: 总结编程范式 ?提问 l 编程范式与设计模式有什么区别? l 编程范式的核心价值是什么? l 总结前面介绍的编程范式,它们各自有哪些代表语言?核心概念和运行机制是什么?针对的问题和主要的目的是什么?实现原理是什么?常见的应用有哪些?有什么不足之处? :讲解 稍事休整后,大家重新团结在以冒号为中心的周围. 问号再度发问:"编程范式与设计模式

冒号课堂§4.2:逻辑范式

第四课 重温范式(2) 4.2逻辑范式--当算法失去了控制 道常无为而无不为 --<老子·道经> 关键词: 编程范式,逻辑式编程,Prolog,算法,逻辑,控制 摘要: 再谈逻辑式编程 ?提问 衡量软件复杂度是由代码的长度决定的吗? 为什么逻辑式的编码一般比过程式的更简洁? 逻辑式编程相比命令式编程有哪些优势和劣势? :讲解 问号提出:"逻辑式编程不是也很特别吗?前面似乎介绍得也不多." "那我们就用逻辑式语言Prolog再实现一次quicksort吧."

冒号课堂§4.1:函数范式

第四课 重温范式(1) 课前导读 本课对函数式编程与逻辑式编程作了更详细的展开,并对前面介绍的范式进行了汇总分析,最后用情景式编程贯穿所学范式. 本课共分四节-- 函数范式 逻辑范式 汇总范式 情景范式 4.1 函数范式--精巧的数学思维 知不知,上:不知不知,病 --<老子·德经> 关键词:编程范式,函数式编程,Haskell,Groovy 摘要: 再谈函数式编程 ?提问 掌握编程范式对编程语感的提高有什么作用? 为什么声明式程序一般比命令式程序更简洁? 函数式编程有哪些特征?为何简洁而不失

冒号课堂§3.3:切面范式

第三课 常用范式(3) 3.3 切面范式--多角度看问题 横看成岭侧成峰 --<苏轼·题西林壁> 关键词:编程范式,SoC,DRY,AOP,Aspect,join point,pointcut,advice,OOP 摘要:AOP简谈 ?提问 什么是SoC和DRY? 如何有效地避免紊乱.松散.重复的代码? 抽象与分解的原则是什么? 什么是横切关注点? 接入点与切入点有何区别? 什么是编织?有哪些不同的编织方法? 实施AOP有哪些步骤? 为什么说AOP是OOP的一种补充? 为什么提倡尽可能地阅读原

冒号课堂§2.4:并发范式

第二课 重要范式(4) 2.4 并发范式--合作与竞争 在合作中竞争,在竞争中合作 --<竞合> 关键词:编程范式,并发式编程,线程,进程,过程式,函数式,逻辑式,对象式 摘要:并发式编程简谈 ?提问 并发式编程有何特点? 并发式编程有哪些好处? 合理的并发式编程设计应满足哪些条件? :讲解 逗号好奇地问:"还有其他类型的编程范式吗?" "不但有,而且有很多."冒号喝了一口水,悠悠地说,"并发式编程(concurrent programming

冒号课堂§2.3:对象范式

第二课 重要范式(3) 2.3 对象范式--民主制社会的编程法则 民为贵,社稷次之,君为轻 --<孟子·尽心下> 关键词:编程范式,OOP,面向对象,过程式编程 摘要: OOP简谈 ?提问 OOP是一种特殊的命令式吗? OOP的基本思想是什么? OOP到底好在哪里? OOP将要一统天下吗? 过程式编程与OOP在设计理念上有什么差异? :讲解 短憩之后,引号迫不及待地问:"面向对象的范式应该是一种特殊的命令式吧?" "面向对象?"冒号咕哝着,"姑