强/弱类型和静态/动态类型是正交的。
从功能上讲,强/弱是关于值的类型是否重要。在弱类型语言中,您可以使用两个恰好用数字填充的字符串,并对它们执行整数加法运算。在强类型语言中,这是一个错误(除非您首先将值强制转换或转换为正确的类型)。强/弱打字不是黑白事情;大多数语言都不是100%严格也不是100%弱小的。
静态/动态类型是关于类型是绑定到值还是绑定到标识符。在动态类型的语言中,您可以将任何值分配给任何变量,而无论类型如何。静态类型为每个标识符定义一个类型,而从其他类型进行赋值要么是错误,要么会导致隐式转换。一些语言采用混合方法,允许使用静态声明的类型以及未类型化的标识符(“变体”)。还有一种类型推断,一种机制,通过使编译器找出类型,可以进行静态类型而无需明确声明所有类型。(Haskell广泛使用此类型,C#通过var
关键字公开它)。
弱的动态编程允许一种务实的方法。语言在大多数情况下不会妨碍您,但是当您用脚射击时也不会介入。相比之下,强静态类型促使程序员以允许编译器或解释器检测一类错误的方式,明确表达对代码中值的某些期望。有了一个好的类型系统,程序员可以准确地定义一个值可以做什么和不可以做什么,并且,如果偶然地有人不希望地尝试某个东西,那么类型系统通常可以阻止它并确切地指出问题出在哪里以及为什么出了错。