类型系统是一组规则,用于提供有关程序中实体的附加信息层,以便运行时,编译器或任何其他机器知道该怎么做处理它所操作的位串。它还有助于维护合同 - 编译器(或代码分析器,或运行时或任何其他程序)可以验证程序在任何给定点上对程序员期望它运行的值进行操作。
编程语言的属性,关于其类型系统:
输入书写属性:
- 明确/清单(明确输入)
程序员必须明确写下类型,因此类型在源代码中变得明显。
类型与变量相关联(int x = 5-> 5为int)
- 隐含/潜在/推断(隐式输入)
程序员不会写下类型。因此类型是隐含的或潜在的。
类型与值相关联(x = 9.5 - > 9.5是浮动)
类型安全属性:
类型检查 是验证程序是否提交任何类型错误(验证程序的类型安全性)的过程。
- 动态(Dinamically typed)
类型检查*在运行时进行(程序运行时 - >动态)
- 静态(静态类型)
类型检查*在运行时之前进行(程序未运行时 - >静态)
类型安全性 :编程语言阻止或防止类型错误的程度。
- 强烈打字
具有更严格的键入规则的语言(高类型安全性)。
绕过类型系统的方法很少(如果有的话)。
- 弱类型
具有更宽松的打字规则的语言(低类型安全性)
绕过类型系统的几种方式或一些方法。
类型兼容性属性:
类型A和类型B的兼容性 :可以在可以使用B的地方使用A,或者可以在可以使用A的地方使用B.
A型和B型的身份 :A可以在可以使用B的地方使用,AND,B可以在可以使用A的地方使用。
- 名词打字:
如果它们具有相同的名称,则两种类型是兼容的。 (typedef int A; typedef long long A; ...)
- 结构类型:
如果它们具有相同的结构,则两种类型是兼容的。 (typedef char A; typedef char B; ...)
输入逻辑属性:
- 类型系统的健全性
它可以防止发生任何类型错误
如果事情没有问题,他们就不会好起来。
- 类型系统的完整性
它没有阻止任何非暴力行为发生
如果事情没有问题,他们就没事了。
最终注意事项:
将动态语言与动态类型语言或具有静态类型语言的静态语言混淆是很重要的。
动态语言是一个更通用的概念。它是一种可以在运行时进行不同活动的语言,例如添加新代码,扩展对象和定义,或修改类型系统(实际上)。
同样的概念也适用于静态语言。
小心关联不同的属性,从另一个中推导出一个属性,或者在它们之间创建心理暗示。复杂程度和不断创新,几乎允许所有属性组合能够共存(具有更高或更低的程度,并且通常以微妙的方式)。
这是对类型系统进行为期一周的研究的结果,具有逻辑和编程背景。目的是检查我目前的理解,并创建一个讨论,一劳永逸地解决关于类型属性的疑虑和误解。