pypy - Hindley Milner 类型推断对 PyPy for RPython 有用吗?

标签 pypy rpython hindley-milner

PyPy 是否在编译时进行静态类型检查以在编译时捕获类型错误?如果不是,像 HM 类型推断这样的东西是否有助于在编译时捕获这些错误?

最佳答案

在两个帐户上。 (我假设 PyPy 是指具有 JIT 编译器和其他功能的 Python 解释器。)它在任何时候都不会对 Python 代码进行静态类型检查,因为它实现了 Python 语言,而不是静态类型的 Python语。事实是,您*不能**t 检测 Python 程序中的所有类型错误(对于“类型错误”的大多数定义)。您可以尝试找到一些,但即使您可以证明在运行时会发生类型错误,您也不能拒绝执行该程序,因为从其他地方运行该代码并捕获它是完全有效的(有时也是有用的)异常(exception)。

顺便说一句,Damas-Hindley-Milner 推断类型的类型系统甚至远不足以表达 Python 程序中“类型”的一个有用子集(并不是说最流行的静态类型系统表现更好)。尝试输入 zip ,例如(提示:Haskell 没有它,它有几个专门用于 2、3、4 个参数的函数)。或者,如果你想要更难的东西,getattr .然后是整个名义和结构子类型的事情。

已经尝试在 Python 和类似语言中推断类型,但这些方法必然与函数式编程世界在该领域所做的完全不同(见上文)。此外,这些项目从来没有发现 Python 程序中的所有类型错误(尽管有些项目已经涵盖了大大简化的子集,或者检测了 Python 程序中的一些错误)。做一些研究( Lambda the Ultimate 有很多链接)。

现在,名称“PyPy”在历史上也用于 RPython translation toolchain ,除其他外,它确实可以推断 RPython 程序的静态类型。但是 RPython 不是 Python(它有很多限制,以至于它实际上是一种不同的语言),并且类型系统和类型推断与 DHM(整个程序,基于抽象解释,完全不同)完全不同不同的类型系统)。

关于pypy - Hindley Milner 类型推断对 PyPy for RPython 有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13736091/

相关文章:

haskell - 了解 Hindley-Milner 类型推断中的多型

python - LLVM、Parrot、JVM、PyPy + python

interpreter - 使用 PyPy 翻译工具链制作了哪些解释器?

python - rPython 和 __future__ 导入

types - Scheme 编译器 Stalin 中的全局类型推断

haskell - 推断包含 Haskell 表达式的字符串的类型

python - Pypy 3.2 枕头问题

python - 如何在 Yosemite 上设置 lxml 和 pypy?

python - NumPy: `vectorize` 的替代方案,让我可以访问数组

python - RPython 支持生成器吗?