代入以外の命令文の型推論


10

命令型言語の型システムに関する研究論文を検索したところ、参照が可変で、複合演算子、ループ、条件などの真の命令型制御構造を持たない言語の解決策しか見つかりませんでした。

したがって、http://rust-lang.orgなどの部分的な型推論を伴う命令型言語をどのように実装できるかは明確ではありません。

論文ではList of a、パラメータ化された型はHindley-Milner型システムの自明な拡張であるなど、パラメータ化された型については触れられていません。統合アルゴリズムのみを拡張する必要があり、残りの推論はそのまま機能します。ただし、パラドックスが発生するため、割り当てを簡単に追加できないため、ML値の制限などの特別な手法を適用する必要があります。

命令型ループ、条件、IO、および複合ステートメントを含む言語の型システムについて説明した論文や本をお勧めしますか?


4
標準MLには実際には複合演算子、ループ、および条件があります(1行の例:)let val x = ref 9 in while !x>0 do (print (Int.toString (!x)); x := !x-1) end。では、調査の質問のレベルで、あなたが探している答えは「値の制限を含め、Caml / SMLで開発された手法を適用すること」ですか?
Rob Simmons

問題は、「Caml / SML向けに開発された手法について、どの論文をお勧めしますか?」でした。
nponeccop

わかりました-私はそれを理解し、最後の文を編集して「MLで使用されているHindley-Milner型推論のアクセス可能な参照を探しているのですか?」そして、私は5分の編集制限に達しました:-)
Rob Simmons、

回答:


14

型推論へのきちんとした機能的な参照を探しているなら、私はGundry、McBride、およびMcKinnaの2010の「型推論のコンテキスト」に少し偏っていますが、これは実際の既存の実装への良いガイドではないかもしれません。

あなたが定義した場合:私は、答えの一部は、その値の制限を超えて、本当に多くの困難命令型言語にヒンドリー-ミルナーの型推論を適応させることがないと思いe1; e2ための糖衣構文として(fn _ => e2) e1および定義while e1 do e2のためのシンタックスシュガーとしてはwhiledo e1 (fn () => e2)、どこwhiledo規則的であるが再帰関数

fun whiledo g f = if g then (f (); whiledo g f) else ();

その後、型推論を含むすべてが正常に動作します。

値の制限が特別なテクニックであることについて、私は次の話が好きです。カールクラリーから買ったと思います。次のコードを検討してください。値の制限により、MLでの書き込みが妨げられます。

let
   val x: 'a option ref = ref NONE
in
   (x := SOME 5; x := SOME "Hello")  
end

次のコードと比較してみてください。これはまったく問題ありません。

let
   val x: unit -> 'a option ref = fn () => ref NONE
in
   (x () := SOME 5; x () := SOME "Hello")  
end

2番目の例の機能はわかっています。次の2つの新しいrefセルが作成されます。 NONESOME 5し、最初の(an int option ref)に入れ、次にSOME "Hello"2番目の(a string option ref)に入れます。

xxαrefオプションαxΛαref[α]無し

これは、最初の例の「良い」動作の1つが、2番目の例と同じように動作することを示唆します。型レベルのラムダを2回インスタンス化します。最初にでインスタンス化するxintx [int]参照セルを保持しているNONEと評価されSOME 5ます。我々はインスタンス化二度目xstring小文字ます、x [string](に評価するために、さまざまな!)基準セル保持NONE当時とSOME "Hello"。この動作は「正しい」(タイプセーフ)ですが、プログラマーが期待するものとはまったく異なります。このため、プログラマーがこの予期しない種類の動作に対処しないように、MLに値の制限があります。


1
の脱糖バージョンにe1; e2は、不一致の括弧とセミコロン(定義することになっています)が含まれています。もしかして(fn _ => e2) e1
伊藤剛

Right-o、Tsuyoshi:修正されました。
Rob Simmons

あなたの最後の段落は基本的に言っています:(操作上の)セマンティクスと型システムは一致しません。1つは修正する必要があり、後者を修正することを選択します。
Radu GRIGore 2011年

ラドゥ:確かに、私はその概要に同意します。
Rob Simmons、

3

Xavier Leroyの博士論文は良いスタートです。


1
論文は、命令型ループ、条件、IO、および複合ステートメントをカバーしていませんか?私の質問の主な理由は、これらのトピックをカバーする論文が見つからなかったことです。タイピングの割り当てに関する論文は豊富です。
nponeccop

0

自分の質問にネクロ回答して申し訳ありませんが、問題のリファレンスは

標準MLの提案、ミルナー、1983

パート6「標準派生フォーム」では、非常に広範囲に渡って命令構造の脱糖について説明しています。そして、これまでのところ、私が見つけたこれらの大部分が明白な変換の最も古いリファレンスです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.