「リアルワールド」プログラミングに最適な依存型のタイプされた言語? [閉まっている
-
08-10-2019 - |
質問
どれの 依存して入力されました プログラミング言語は、実際のアプリケーション開発に使用できますか?
これらはいくつかの点であり、私は重要だと思います:
- ドキュメンテーション
- プログラムの例
- 標準的なライブラリ
- または少なくとも使いやすい外国の関数インターフェイス
- 現実世界のタスクに言語を使用している人々のコミュニティ
- ツールサポート
解決
提案します Agda, 、それはHaskellとの互換性を呼び出しているからです。そのため、おそらく最高のライブラリを備えた依存してタイプされた言語です。しかし、ドキュメントとチュートリアルは少し光沢がありません。また、ツールのサポートもあまり大きくありません。正直に言うと、最も依存してタイプされた言語のほとんどは、現時点ではあまり完全に開発されていません。
代わりに、あなたの言語が持つべきであるとわずかに弱い要求で行った場合 ガッドの, 、ScalaとHaskellの2つの非常によく維持されているオプションがあります。 iMhoは、GADTを使用して依存型の利点のほとんどを取得し、TypeCheckingを決定して起動します。
ScalaとHaskellには、どちらも大規模および十分に文書化されたライブラリ、作業ツールチェーン、およびFFI(それぞれJavaとCに)を備えています。どちらもそれらを使用して、実際の問題を解決するためにそれらを使用しています。 解析 と ウェブ 発達。
他のヒント
受け入れられている答えには、誤った情報が含まれています。 AGDAでのタイプチェックは、陽性/終了/宇宙のチェックをオフにしない限り、決定できます。さらに、IOプロセスがHaskellでプログラム可能であるように、AGDAでは無限のプロセスがプログラム可能です。唯一の制限は、実行された場合、無限のプロセスを無期限に展開できないことです。 タイプチェックの過程で. 。 AGDAにチューリングマシンシミュレーターを実装できます。タイプチェッカーを終了または説得することが保証されているという嘘を伝えることはできません。
ただし、「現実世界」プログラミングに関しては、依存してタイプされた言語がまだ実験段階にあることに同意します。私たちはまだヘビーデューティ開発をサポートすることはできませんが、昔の機能的言語のように、未来に目を向けている人々の間で重要な趣味を維持することができます。
Idrisは、Tweyが示唆しているように、「現実世界」に依存してタイプされた言語に最も近い候補です。 AGDAよりも、物事を成し遂げることにはるかに焦点を当てています。依存してタイプされたプログラミングの背後にあるアイデアを把握するためのより良い手段としてAGDAをお勧めしますが、Idrisはより実用的な選択肢です。
この議論の候補者としてのHaskellの最近のリリースを検討する価値があると言っています。 GHC 7.4以来、Haskellはタイプレベルデータの有用な概念のサポートを開始し、少なくとも シングルトン テクニック(それはクラッジですが)、ランタイム値に応じてタイプを実際に持つことができます(等しい変数を等しく実行することに依存することにより)。したがって、Haskellは、従属タイプを実験する初期段階での実際の「現実の世界」言語です。
AGDAは、汎用プログラミング言語になるようには設計されていません。 ATSは、AGDAよりもややエレガントではありませんが、低レベルのプログラミング用に設計された依存型の言語です。 Idrisは、パフォーマンスのアプリケーションレベルのプログラム向けに設計された依存型型型型の言語です。