关于语言类型的理解
2016-07-06 15:14:34 小德 PHP 访问次数 1177


1、概念介绍:
Program Errors
Trapped errors:程序异常,终止执行,如除0,Java数组越界访问。
untrapped errors:出错程序能继续执行,如C的缓冲区溢出,Jump到错误地址。
Forbidden Behavious
语言设计可以定义一组Forbidden behaviours, 它必须包括所有的untrapped errors,也有可能包括trapped errors。

well behaved:
如果程序执行不可能出现的Forbidden behaviors,则为 well behaved;
ill behaved: 与well behaved 相反。

2、强弱类型:

强类型strongly typed: 一种语言所有的程序都是 well behaved,不出现 Forbidden behavious。表征为强类型一段内存块 只允许存一种类型的数据,不允许不同类型的内存块不经过类型强制转换就可以直接进行运算。
弱类型weakly typed: 否则为weakly typed。如C语言的缓存区溢出,属于untrapped errors ,属于forbidden behavious。表征与强类型相反。

3、静态,动态类型:
静态类型statically:在编译时拒绝ill behaved;
动态类型:在运行是拒绝ill behaved;

4、误区

C语言要写int a,Php 不用写(直接 $a),所以C 是静态,PHP是动态。这么理解太片面。譬如Ocaml是静态类型的,但是可以不用明确写出类型修饰符(属于静态隐式类型)。

静态类型分为:

显示类型explicitly typed,类型是语言语法的一部分。

隐式类型implicity typed,类型通过编译时推导

5、例子

无类型:汇编

弱类型、静态类型:C/C++

弱类型、动态类型检查:PHP/Perl

强类型、静态类型检查:JAVA/C#

强类型、动态类型检查:Python, Scheme

静态显式类型:Java/C

静态隐式类型:Ocaml/Haskell



参考:zhihu.com/question/19918532