それは良い質問です!型付き言語の型に何を期待するかを尋ねます。
最初に、unitypeを使用して任意のプログラミング言語を入力できることに注意してください。たとえばU
、文字を1つ選択して、すべてのプログラムにタイプがあると言いU
ます。これはそれほど有用ではありませんが、ポイントになります。
タイプを理解するには多くの方法がありますが、プログラマーの観点からは、次のことが有用だと思います。タイプは仕様または保証と考えてください。言っても型があるAは、「我々が保証/期待/需要ということであるeがでエンコードされたプロパティを満たすAを」。多くの場合、Aはのような単純なものです。この場合、プロパティは単に「整数です」です。eあeああint
タイプの表現力に終わりはありません。原則として、それらは任意の種類の論理ステートメント、カテゴリ理論などを使用できます。たとえば、依存型を使用すると、「この関数はリストをリストにマッピングして、出力がソートされた入力になるように」できます。さらに先に進むことができます。私が「並行分離ロジック」の話を聞いているときは、並行プログラムが共有状態でどのように機能するかについて話すことができます。ファンシーなもの。
プログラミング言語設計における型の芸術は、表現力とシンプルさのバランスをとることの 1つです。
- より表現力豊かなタイプにより、何が起こっているのかを(自分自身とコンパイラーに)より詳細に説明できます
- 単純な型は理解しやすく、コンパイラでより簡単に自動化できます。(人々はタイプチェックを行うために証明アシスタントとユーザーの入力を本質的に必要とするタイプを考え出します。)
すべてのプログラマーがプログラミング言語の理論で博士号を取得しているわけではないため、単純さを過小評価してはなりません。
それでは、あなたの質問に戻りましょう:あなたの型システムが良いことをどうやって知るのですか?さて、あなたのタイプのバランスが取れていることを示す定理を証明してください。定理には次の2種類があります。
あなたのタイプが有用であると言う定理。プログラムにタイプがあることを知っていることは、たとえばプログラムが動かなくなることがないという保証を意味するはずです(これは安全定理です)。別の定理ファミリーは、タイプをセマンティックモデルに接続し、実際の数学を使用してプログラムについての事柄を証明できるようにします(これらは、妥当性定理などになります)。上記のユニタイプは、そのような有用な定理を持たないため、不適切です。
あなたのタイプは単純であると言う定理。基本的なものは、与えられた式が与えられた型を持っているかどうかを決定できるということです。別の単純化機能は、型を推論するためのアルゴリズムを提供することです。単純化に関する他の定理は、式には最大で1つの型が含まれる、または式には主要な型(つまり、式が持つすべての型の中で「最良の」型)があるということです。
タイプは非常に一般的なメカニズムであるため、より具体的にすることは困難です。しかし、私はあなたが何を撮るべきかを見てほしいと思います。プログラミング言語設計のほとんどの側面と同様に、成功の絶対的な尺度はありません。代わりに、デザインの可能性のスペースがあり、重要なことは、スペースのどこにいるか、またはなりたい場所を理解することです。