# 类型系统与编程语言

# 概念

# Program Errors

  • trapped errors

导致程序终止执行,如除0,Java中数组越界访问

  • untrapped errors

出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址

# Forbidden Behaviours

语言设计时,可以定义一组forbidden behaviors.
它必须包括所有untrapped errors, 但可能包含trapped errors.

# Well behaved、ill behaved

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

# 强、弱类型

  • 强类型strongly typed

如果一种语言的所有程序都是well behaved,则该语言为strongly typed。

  • 弱类型weakly typed

否则为weakly typed。
比如C语言的缓冲区溢出,属于trapped errors,即属于forbidden behaviors..故C是弱类型

# 动态、静态类型

  • 静态类型 statically

如果在编译时拒绝ill behaved程序,则是statically typed。

    • 静态类型可以分为两种:

如果类型是语言语法的一部分,在是explicitly typed显式类型
如果类型通过编译时推导,是implicity typed隐式类型, 比如ML和Haskell

  • 动态类型dynamiclly

如果在运行时拒绝ill behaviors, 则是dynamiclly typed。

# 总结

无类型: 汇编
弱类型、静态类型 : C/C++
弱类型、动态类型检查: Perl/PHP
强类型、静态类型检查 :Java/C#
强类型、动态类型检查 :Python, Scheme
静态显式类型 :Java/C
静态隐式类型 :Ocaml, Haskell

# 参考: