弱类型、强类型、动态类型、静态类型语言的区别是什么?
类型系统的一些概念,众说纷纭,使用上也比较乱。有些东西,甚至不好严格定义。以下算学术界的一种相对“严格”的说法。
1.先定义一些基础概念
Program Errors
- trapped errors
导致程序终止执行,如除0,Java中数组越界访问
- untrapped errors
出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址
Forbidden Behaviours
语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.
Well behaved、ill behaved
- well behaved: 如果程序执行不可能出现forbidden behaviors, 则为well
behaved。
- ill behaved: 否则为ill behaved...