ここで私はそれを読みました:
Haskellには間違いなく最先端の型システムはありません(研究言語を数えたとしても近いものではありません)が、実稼働で実際に使用されるすべての言語のうちHaskellがおそらくトップです。
だから私は2つのことを求めています:
- どの研究言語がHaskellより強力な型システムを持っているか。
- 彼らは何を改善しますか。
私は単なるプログラマーなので、型理論で使用される多くの数学的なオブジェクトを知りません。できれば穏やかな説明を提供してください。
ここで私はそれを読みました:
Haskellには間違いなく最先端の型システムはありません(研究言語を数えたとしても近いものではありません)が、実稼働で実際に使用されるすべての言語のうちHaskellがおそらくトップです。
だから私は2つのことを求めています:
私は単なるプログラマーなので、型理論で使用される多くの数学的なオブジェクトを知りません。できれば穏やかな説明を提供してください。
回答:
この質問は、「より良い」という主観的な定義に依存しているため、やや問題があります。
Agda、Idris、Coqなどの依存型付き言語は、Haskellよりも強力な型システムを持っています。つまり、これらの言語の型を使用して、Haskellよりもコードに関するプロパティを厳密に証明できます。つまり、キャッチされる不正確なプログラムがさらにあります。
ただし、これには代償が伴います。型の推論、および特定の型の値が存在するかどうかのテストは、もはや不可能です。つまり、これらの言語では、コードに型を明示的に注釈する必要があります。基本的に、これはコードの独自の正確性証明を書くことに要約されます。
では、これらの言語はHaskellよりも「優れている」のでしょうか?彼らはあなたのコードの正確さの高度な証明をチェックできますが、Haskellのようにコードに関するプロパティを自動的に証明することはできません。
Haskellよりも「優れた」別の研究言語はLiquidHaskellです。これは基本的にHaskellで、特殊なコメントから解析された絞り込みタイプが上にボルトで固定されています。
絞り込みタイプを使用すると、プロパティを使用してタイプを絞り込むことができます。たとえば、の代わりにをInt
指定して{i : Int | i > 0}
、すべての正の整数のタイプを指定できます。型の推論は絞り込み型で決定できますが、依存型でできるほど多くの正確性プロパティを証明することはできません。
他にも改良型のシステムがありますが、私はそれらのどれにもそれほど精通していません。
ML言語ファミリ(StandardML、OCaml)は、Haskellと同様の伝統から生まれたため、同様の型システムを持っています。しかし、それらはHaskellとまったく同じではなく、それらの機能のいくつかはあなたに合っているかもしれません(プログラミング言語のタイプシステムは人間を助けるために存在するため、客観的に優れたタイプシステムというものはありません)。以下は、Haskellにはない(しかし、対応する同様の概念を持つかもしれない)OCamlのいくつかの機能です。
そして、これをML-Haskellの銃撃戦に変える必要はありません。さもなければ、Bob Harperのブログ投稿へのリンクを開始します;-)
研究言語Cleanには、一意性型があるため、Haskellよりも優れた型システムがあります。一意性タイプの背後にある考え方は、線形論理と密接に関連しています。線形論理は、古典的な論理よりもリソースに制限のある「現実世界」に近いものです。
反研究言語Rustには、古典的な純粋型システムよりも「現実世界」に近い独自の機能を持つ型システムもあります。型システムに影響を与えたアイデアのほとんどは、Rustが存在するずっと前から完全に独立して公開されています。しかし、これらの古いアイデアをまとめる方法は独特であり、既知の抜け穴や矛盾が存在する場合でも、実際の研究出版物に値するでしょう。