私はそれがすべてコンパイル時間であり、プログラムをコンパイルするとその実行について多くの保証が行われるという考えが大好きです。一般的に、静的型システム(Haskell、C ++など)は、動的型システムよりも強力なコンパイル時保証を提供するようです。
私が理解していることから、Adaはコンパイル時のチェックに関してさらに進んでおり、実行前にさまざまなバグを検出することができます。また、ある時点で、デリケートなフィールド(プログラミングエラーが人命にかかわる可能性がある場合)に選択されたことを考えると、かなり安全だと考えられています。
今、私は疑問に思う:より強力な静的保証が、より文書化され安全なコードにつながるなら、なぜ私たちはその方向でもっと研究しないのか?
欠落しているように見えるものの例はint
、基礎となるアーキテクチャのビット数によって決定される範囲を持つジェネリック型を定義する代わりに、範囲を持つことができる言語です(次の例でInt [a..b]
は、 aおよびbを含む):
a : Int [1..24]
b : Int [1..12]
a + b : Int [2..36]
a - b : Int [-11..23]
b - a : Int [-23..11]
または(これをAdaから):
a : Int [mod 24]
b : Int [mod 24]
a + b : Int [mod 24]
この言語は、範囲に最適な基本型を選択し、式のコンパイル時チェックを実行します。たとえば、次のようになります。
a : Int [-3..24]
b : Int [3..10]
その後:
a / b
定義されることはありません。
これは一例にすぎませんが、コンパイル時に実施できることはもっとたくさんあると感じています。それでは、なぜこれに関する研究がほとんどないように思われますか?このアイデアを説明する技術用語は何ですか(このトピックに関する詳細情報を見つけることができるように)。制限は何ですか?
dependent type
やをお試しくださいrefinement type
。