PyPyはコンパイル時に静的タイプチェックを実行して、コンパイル時にタイプエラーをキャッチしますか?そうでない場合は、HM型推論のようなものがコンパイル時にこれらのエラーをキャッチするのに役立ちますか?
1 に答える
両方のアカウントでいいえ。(PyPyとは、JITコンパイラーやその他の機能を備えたPythonインタープリターを意味すると思います。)静的に型付けされたPythonのようなものではなく、Python言語を実装しているため、Pythonコードの静的な型チェックはいつでも行われません。言語。真実は、Pythonプログラムのすべてのタイプエラー(「タイプエラー」のほとんどの定義)を静的に検出することは*できない*ということです。いくつかを見つけることはできますが、実行時に型エラーが発生することを証明できたとしても、プログラムの実行を拒否することはできません。他の場所からそのコードを実行してキャッチすることは完全に有効である(場合によっては役立つ)からです。例外。
ちなみに、Damas-Hindley-Milnerが型を推測する型システムは、Pythonプログラムの「型」の有用なサブセットでさえも表現するのにリモートで十分ではありません(最も人気のある静的型システムがこれ以上うまくいくわけではありません)。zip
たとえば、入力してみてください(ヒント:Haskellにはありません。2、3、4引数に特化したいくつかの関数があります)。または、もっと難しいものが必要な場合は、getattr
。そして、全体の名目上および構造上のサブタイピングがあります。
Pythonや同様の言語で型を推測する試みがありましたが、これらのアプローチは、関数型プログラミングの世界がその分野で行ったこととは必然的にまったく異なります(上記を参照)。また、これらのプロジェクトは、 Pythonプログラムですべてのタイプエラーを検出することはありません(ただし、非常に単純化されたサブセットをカバーしているものや、Pythonプログラムでエラーを検出しているものもあります)。いくつかの調査を行います(Lambda the Ultimateには多くのリンクがあります)。
現在、「PyPy」という名前は、歴史的にRPython変換ツールチェーンにも使用されていました。これは、とりわけ、RPythonプログラムの静的型を推測します。しかし、RPythonはPythonではなく(事実上異なる言語であるという点で、多くの制限があります)、型システムと型推論はDHM(抽象解釈に基づくプログラム全体)とは根本的に異なります。異なるタイプのシステム)。