编程语言弱类型、强类型、动态类型、静态类型语言的区别

基础概念

  1. Program Errorstrapped errors。解释器或编译器不能处理的错误。导致程序终止执行,如除0,Java中数组越界访问untrapped errors。 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址

  2. Forbidden Behaviours 运行环境预先定义的错误。 语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.

  3. Well behaved: 如果程序执行不可能出现forbidden behaviors,则为well behaved

  4. ill behavedwell behaved:可能出现forbidden behaviors则为ill behaved…

强、弱类型,静态、动态类型

  1. 强类型strongly typed: 如果一种语言的所有程序都是well behaved——即不可能出现forbidden behaviors,则该语言为strongly typed。

  2. 弱类型weakly typed: 否则为weakly typed。比如C语言的缓冲区溢出,属于trapped errors,即属于forbidden behaviors…故C是弱类型。弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说C语言的int可以变成double。 这样的结果是:容易产生forbidden behaviours,所以是弱类型的动态、静态类型

  3. 静态类型 statically: 如果在编译时拒绝ill behaved程序,则是statically typed; a. 如果类型是语言语法的一部分,在是explicitly typed显式类型; b. 如果类型通过编译时推导,是implicity typed隐式类型, 比如ML和Haskell

  4. 动态类型dynamiclly: 如果在运行时拒绝ill behaviors, 则是dynamiclly typed。

Note

  1. 脚本语言直接运行在解释器,一般没有编译的过程,所以也称为解释语言。但为了工作效率,脚本语言的编译环境也可能被开发,像运行JavaScript的Node.js.

  2. 脚本语言没有编译的过程, 通常会在运行环境下报错,所以多为动态类型

  3. C#和Java, 为了编程效率及商业因素,都有自己的专用IDE,像VS和Eclipse。IDE为了代码的运行效率和健壮性会将程序员输入的自然语言编译为中间语言,例如.lib文件和.jar文件,编译的过程在不同的IDE中是不同的。之后就是将各自格式的中间语言文件部署到其运行环境, 也就是常说的 .Net Framework和 JRE()

编程语言分类图

分类图

你可能感兴趣的:(编程语言弱类型、强类型、动态类型、静态类型语言的区别)