具有完整类型推断(没有类型注释)的语言是否需要类型检查?

问题描述 投票:0回答:1

我是类型系统和类型推断的新手。我的目标是为没有类型的 OOP 语言实现静态类型系统和类型推断算法(最接近的例子是没有反射和内省等动态功能的 JS)。

我的第一个想法是实现静态类型系统和类型检查算法,然后为该系统实现类型推断。我查了几篇关于类型推断的文章(面向对象的类型推断JavaScript静态编译的类型推断SELF的类型推断),他们都跳过了类型检查部分,所以我有点对我的想法感到困惑。

主要问题是:类型推断与类型检查有何关系?类型推断后是否需要进行类型检查?这是如何在现有语言中通过类型推断(完全和部分)实现的?

types type-inference language-design typechecking
1个回答
0
投票

我实际上还没有实现静态类型系统,但目前我将如何区分类型推断和类型检查:

类型推断为没有显式类型的程序部分分配一组类型。如果程序部分的类型不明确和/或矛盾,编译器/解释器无法处理,则此过程可能会失败。

我们可以使用稍微更通用的术语“类型分配”来包括通过推理和显式注释分配的两种类型。

类型检查确认程序的各部分在类型方面是否正确组合在一起。这可能会在给定片段的所有类型分配完成后发生。例如,如果给定函数分配了给定类型,则在许多语言中,在语法上仍然可以使用类型不正确的值来调用它。

请注意,可以编写一个将类型推断和类型检查混合在一起的实现,但没有必要这样做。例如,给定一个具有函数

foo
的程序,调用函数
bar
foo
和 bar,可以在继续程序的其余部分之前分配其类型并检查调用点类型。

© www.soinside.com 2019 - 2024. All rights reserved.