编程语言的类型系统比较
Contents
An Introduction To Programming Type Systems比较了一下编程语言中的类型系统。
- 没类型: 比如汇编语言,没有类型的概念,所有都只是一个数字
- 弱静态类型: 比如C语言,可以定义类型,但是不强制执行,在不同类型之间自动转换
- 强静态类型: 比如Java,定义类型,并且用虚拟机检查类型
- 强动态类型: 比如Python,JavaScript和Ruby,动态推断类型而不需要定义,然后解释器会强制执行。所有的动态语言必须就是强的,因为不然的话就没有办法解析对象类型了。
- 弱动态类型: 没有。
静态类型说 | 动态类型说 |
---|---|
静态类型编译时就能发现问题,帮你解决麻烦 | 静态类型只能检查一部分错误,不能只靠编译器来替代测试 |
静态类型因为显示定义了类型,所以易读 | 动态类型因为需要写的代码少所以易读 |
至少我知道我的代码可以编译 | 能编译不代表能运行 |
我信任静态类型来保证我的团队写出好的代码 | 编译器不能阻止你写烂代码 |
没办法调试一个不知道类型的对象 | 调试过于复杂的对象等级是不能忍受的 |
编译器能发现的bug发生上午,在我的公司,运行时bug发生在半夜,客户那里 | 不能缺少测试,单元测试比编译器更可靠 |