A menudo se afirma que RPython (un subconjunto de Python) está tipado estáticamente. (Por ejemplo, Wikipedia.)¿Qué está escrito estáticamente en RPython?
Inicialmente, me pregunté cómo agregarían eso a Python y pensaron que podrían haber agregado el requisito de agregar declaraciones como assert isinstance(arg1, ...)
al comienzo de cada función (pero realmente no podía creer ese).
Luego miré un código RPython y realmente no se ve estático en absoluto. En muchos casos, es posible que el compilador pueda probar que un argumento de función solo puede ser de ciertos tipos, pero definitivamente no en todos los casos.
por ejemplo, esta es la implementación de 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
En la documentación sobre PyPy RPython, se dice: "variables deben contener valores de como máximo un tipo".
Entonces, ¿los argumentos de función también cuentan como variables? ¿O en qué sentido está RPython estáticamente tipado? ¿O es esto realmente mal dicho?
http://codespeak.net/pypy/dist/pypy/doc/translation.html –