这是个好问题!它询问我们对键入语言中的类型的期望。
首先请注意,我们可以使用unitype键入任何编程语言:只需说一个字母U
,然后说每个程序都具有type即可U
。这不是非常有用,但是很有意义。
有很多理解类型的方法,但是从程序员的角度来看,我认为以下内容很有用。将类型视为规范或保证。说具有类型就是说“我们保证/期望/要求满足由编码的属性”。通常,就像一样简单,在这种情况下,属性只是“它是整数”。eAeAAint
您的类型的表达能力没有止境。原则上,它们可以是任何种类的逻辑语句,也可以使用类别理论和诸如此类的东西。例如,从属类型将使您可以表达诸如“此函数将列表映射到列表以使输出为排序的输入”之类的内容。您可以走得更远,此刻,我正在听有关“并行分离逻辑”的演讲,该演讲使您可以谈论并发程序如何在共享状态下工作。花哨的东西。
编程语言设计中的类型艺术是表达性和简单性之间的一种平衡:
- 更具表现力的类型使我们能够(对自己和对编译器)更详细地解释应该发生的情况
- 简单类型更易于理解,并且可以在编译器中更轻松地实现自动化。(人们提出的类型本质上需要证明助手和用户输入来进行类型检查。)
不应低估简单性,因为并非每个程序员都拥有编程语言理论的博士学位。
因此,让我们回到您的问题:您怎么知道您的类型系统是好的?好吧,证明定理可以证明您的类型是平衡的。有两种定理:
定理说你的类型是有用的。知道程序具有类型应该暗示一些保证,例如,程序不会卡住(这将是安全性定理)。另一类定理会将类型与语义模型联系起来,以便我们可以开始使用实数数学来证明有关程序的信息(这些将是适当性定理,以及许多其他定理)。上面的单型不好,因为它没有这么有用的定理。
定理说你的类型很简单。一个基本的判断是,给定表达式是否具有给定类型是可以确定的。另一个简单功能是提供一种推断类型的算法。关于简单性的其他定理是:表达式最多具有一种类型,或者表达式具有主体类型(即,它具有的所有类型中的“最佳”类型)。
由于类型是非常通用的机制,因此很难更具体。但是,我希望您能看到应该射击的东西。像编程语言设计的大多数方面一样,也没有绝对的成功衡量标准。取而代之的是存在设计可能性的空间,而重要的是要了解您在空间中或想要在空间中的位置。