经常声明,RPython(Python的一个子集)是静态类型的。 (例如,在Wikipedia。)在RPython中静态类型是什么?
起初,我不知道他们会如何添加到Python,并认为他们可能已添加到每个函数的开头添加语句,如assert isinstance(arg1, ...)
要求(但我不能真的相信那)。
然后我看了一些RPython代码,它看起来并没有真正的静态类型。在很多情况下,编译器可能会证明函数参数只能是某些类型,但绝对不是。
例如,这是RPython实施string.split
:
def split(value, by, maxsplit=-1):
bylen = len(by)
if bylen == 0:
raise ValueError("empty separator")
res = []
start = 0
while maxsplit != 0:
next = value.find(by, start)
if next < 0:
break
res.append(value[start:next])
start = next + bylen
maxsplit -= 1 # NB. if it's already < 0, it stays < 0
res.append(value[start:len(value)])
return res
在约RPython的PyPy文档,它是说:“变量应包含最多一个类型的价值观”。
那么,函数参数也算作变量吗?或者说RPython是静态类型的?或者这实际上是错误的?
http://codespeak.net/pypy/dist/pypy/doc/translation.html –