RPython(Pythonのサブセット)が静的に型指定されていることがよくあります。 (WikipediaのEgが。)RPythonには何が静的に型付けされていますか?
最初は、私は、彼らは、Pythonにそれを追加する方法を疑問に思い、彼らは各関数の先頭で、このようなassert isinstance(arg1, ...)
などのステートメントを追加するための要件を追加したかもしれないと思った(しかし、私は本当に信じられませんでしたそれ)。
私はいくつかのRPythonコードを見ましたが、実際には静的に見えるわけではありません。多くの場合、コンパイラは関数の引数が特定の型だけであることを証明できますが、必ずしもすべての場合にそうではないことを証明することができます。
例えば、これはstring.split
のRPython実装です:
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
は、言われている:「変数は最大1つのタイプの値が含まれている必要があります」。
したがって、関数の引数も変数としてカウントされますか? RPythonはどんな意味で静的に型付けされていますか?またはこれは実際に偽証されていますか?
http://codespeak.net/pypy/dist/pypy/doc/translation.html –