编程理论术语简记

来源:互联网 发布:单页制作软件 编辑:程序博客网 时间:2024/05/05 15:18

编程理论术语简记

 

1.      GP(Generic Programming):泛型编程,也成为类属编程。泛型是构成库的一种方式,与传统的OOP不同,这类库一般由类属组件和类属算法组成,组件和算法通过迭代器组装起来,组件则对迭代器提供一定的封装。STL、boost、ATL、ACE等库都是构建在泛型概念之上的。

2.      强/弱类型:指类型检查的严格程度。语言分无类型、弱类型和强类型三种。无类型的不检查甚至不区分指令和数据;弱类型的检查很弱,仅能严格区分指令和数据;强类型则严格地在编译器进行检查(为所有变量指定数据类型)。强类型语言在没有强制类型转化之前,不允许两种不同类型的变量相互操作。Java、C#和Python是强类型语言;VB、PHP是弱类型语言;B语言是无类型语言。

3.      LISP:ListProcessor,即列表处理语言,是由约翰•麦卡锡在1960念左右创造的一种基于λ演算的函数式编程语言。LISP语言拥有理论上的最高运算能力,其现代的主要版本包括Common Lisp和Scheme。LSIP在CAD绘图软件上的应用非常广泛,普通用户均可以用lisp编写出各种定制的绘图命令。

4.      Lambda演算:即λ演算,是一套用于研究函数定义、函数应用和递归的形式系统。它对函数式编程有巨大的影响,特别是LISP语言。Lambda演算可以被称为最小的通用程序设计语言,它包括一条变换规则(变量替换)和一条函数定义方式,Lambda之通用在于,任何一个可计算函数都能用这种形式来表达和求值。因而,它是定价于图灵机的。

5.      图灵机:是指一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。除了图灵机以外,还有许多其他的计算模型,包括:寄存器机、递归函数、λ演算演算、生命游戏、马尔可夫算法,它们都无一例外地和图灵机的计算能力等价。一切直觉上能行可计算的函数都可用图灵机计算,反之亦然,这就是著名的邱奇—图灵论题。

6.      惰性计算:Lazy Evaluation,又称懒惰计算,它的目的是要最小化计算机要做的工作。它有两个相关而又有区别的含义:“延迟计算”和“短路求值”。与惰性计算相反的是热情计算。

(1)    延迟计算:也称延迟求值,特别用于函数式编程语言中,在使用延迟求值时,表达式不在它绑定到变量之后就立即求值,而是在该变量被取用的时候求值。延迟计算的一个好处是能够建立可计算的无限列表而没有妨碍计算的无限循环或大小问题

(2)    短路求值:Short-circuit evaluation,也称极小化求值。如:作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程便告终止,这称之为短路求值。布尔表达式在很多语言中使用惰性求值,在这种上下文中它通常叫做短路求值;条件表达式也通常使用惰性求值,但出于不同的原因。

(3)    热情求值:也称严格求值,是多数传统编程语言的求值策略。在热情求值中,表达式在它被约束到变量的时候就立即求值。这在简单编程语言中作为底层策略是更有效率的,因为不需要构造和管理表示未求值的表达式的中介数据结构。

7.      求值策略:Evaluation Strategy,在计算机科学中它是确定编程语言中表达式的求值的一组规则。基于如何处理给函数(或算子)的实际参数,求职策略分为两大基类:严格的和非严格的。热情求值映射到严格求值,惰性求值映射到非严格求值。它的重点典型地位于函数(或算子)上­——求职策略定义何时和以何种次序求值给函数的实际参数,何时把它们代换如函数,代换以何种形式发生。传值调用、传引用调用和部分求值是求职策略中严格求值里的三种。

8.      部分求值:也称为柯里化。在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。函数柯里化的对偶是反柯里化(Uncurrying),一种使用匿名单参数函数来实现多参数函数的方法。

9.      闭包:Closure,从技术上看,闭包就是动态分配一个含有代码指针的数据结构,这个代码指针指向一个计算函数结构的代码片段以及一个受限变量环境。闭包常用来表示一个方法引用或一个匿名函数。

10.  复用:从语言层面上来说,现代的编程语言为复用提供了三种主要的基本途径:结构化、面向对象(OO)、泛型(GP)。结构化程序设计是的复用是函数上的复用,OO的复用是二进制上的复用,而GP是源代码上的复用。

11.  结构一致性:OO的通用性是建立在类继承体系之上的,这导致了算法只能够被用在有限的类型上面;而GP则是建立在结构一致性之上的,它是指语法结构上的一致性,GP假定某个特定的语法跟其语义能够对应起来。GP结构一致性举例:如排序,一个集合如果要能够进行排序的话,其上必须有了“序”关系;在C++中,序关系里的偏序关系被映射为操作符“<”,只要某个集合或区间内的元素支持“<”,即存在偏序关系,那么这个集合就是可排序的,而不用去管其中的元素是人还是狗。

12.  元程序:Meta Program,是可以操作目标程序(Object Program)的程序,它可以构造目标程序,也可以将目标程序段组合成更大的目标程序,还可以观察目标程序的结构和其他特性。目标程序是以形式语言书写的一些句子,如常见的高级语言程序语言。元程序是处理程序的程序,如大家熟悉的编译器、解释器、类型检查器、定理证明器、程序生成器、转换系统和程序分析器等等。

13.  元编程:Meta Programing,是指某类计算机程序(元程序)的编写。编写元程序的语言称之为元语言,被操作的语言成为目标语言。一门语言同时也是自身的元语言的能力成为反射。元编程通常有两种方式起作用:一种方式是通过API来暴露运行时引擎的内部信息;另一种方式是动态执行包含编程命令的字符串。因此,“程序能编写程序”。

14.  模板元编程:Template Meta Programing,即TMP,是一种元编程技术,编译器使用模板产生暂时性的源码,然后再和剩下的源码混合,并编译。这些模板的输出包括编译时期常熟、数据机构以及完整的函数。模板元编程没有可变的变量——也就是说,变量一旦初始化后就不能改动,因此它可以被视为函数式编程的一种形式。STL、Boost库都用到了该技术。

 

0 0