Spesso si afferma che RPython (un sottoinsieme di Python) è tipizzato staticamente. (Ad esempio su Wikipedia.)cosa viene tipizzato staticamente in RPython?
Inizialmente, mi chiedevo come avrebbero aggiunto quello a Python e pensavo che avrebbero potuto aggiungere il requisito di aggiungere istruzioni come assert isinstance(arg1, ...)
all'inizio di ogni funzione (ma non potevo davvero credere quella).
Poi ho guardato un po 'di codice RPython e non sembra affatto scritto staticamente. In molti casi, potrebbe essere che il compilatore possa provare che un argomento di funzione può essere solo di alcuni tipi ma sicuramente non in tutti i casi.
esempio Questa è l'implementazione di 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
Nella documentazione PyPy su RPython, si dice: "variabili dovrebbero contenere valori di al massimo un tipo".
Quindi, gli argomenti di funzione contano anche come variabili? O in che senso RPython è tipizzato staticamente? O questo è veramente errato?
http://codespeak.net/pypy/dist/pypy/doc/translation.html –