RPython (Python의 하위 집합)이 정적으로 입력되었다고 자주 언급됩니다. (예 : Wikipedia)RPython에 정적으로 무엇이 입력 되었습니까?
처음에는 어떻게 그 코드를 파이썬에 추가 할 것인지 궁금했고, 각 함수의 시작 부분에 assert isinstance(arg1, ...)
과 같은 명령문을 추가 할 필요가 있다고 생각했습니다. (하지만 실제로는 믿을 수 없었습니다. 그).
그런 다음 RPython 코드를 살펴 보았지만 실제로 정적으로 표시되지는 않습니다. 대부분의 경우, 컴파일러는 함수 인수가 특정 유형에만있을 수 있지만 모든 경우에 확실히 해당 할 수는 없다는 것을 증명할 수 있습니다.
예컨대, 이것은 RPython의 string.split
의 구현 : RPython에 대한 PyPy 문서에서
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은 어떤 의미에서 정적으로 타입이 지정 되었습니까? 아니면 실제로 위증입니까?
http://codespeak.net/pypy/dist/pypy/doc/translation.html –