Scalaのタイプシステムは完全にチューリングされています。証拠?例?利点?

StackOverflow https://stackoverflow.com/questions/4047512

質問

Scalaのタイプシステムが完全にチューリングされているという主張があります。私の質問は次のとおりです。

  1. これの正式な証拠はありますか?

  2. SCALAタイプシステムでは、単純な計算はどのように見えますか?

  3. これはScalaにとって何らかの利点ですか?言語ですか?これにより、Scalaは、チューリング完全なタイプシステムなしで言語を何らかの形でより「強力」にしていますか?

これは、一般的に言語とタイプシステムに適用されると思います。

役に立ちましたか?

解決

Ski Combinator Calculusのタイプレベルの実装があるブログ投稿があります。

チューリング完了タイプのシステムには、基本的に同じ利点と欠点があります。特に、実際に最終的に何かをすることを証明することはできません。

タイプレベルの計算の1つの例は、SCALA 2.8の新しいタイプを提供するコレクショントランスです。 Scala 2.8では、のような方法 map, filter そのように、彼らが呼ばれたのと同じタイプのコレクションを返すことが保証されています。だから、もしあなたの場合 filter a Set[Int], 、あなたは戻ってきます Set[Int] そしてもしあなたが map a List[String] あなたは戻ってきます List[Whatever the return type of the anonymous function is].

今、あなたが見ることができるように、 map 実際に要素タイプを変換できます。では、新しい要素タイプを元のコレクションタイプで表現できない場合はどうなりますか?例:a BitSet 固定幅の整数のみを含めることができます。したがって、あなたが持っている場合はどうなりますか BitSet[Short] そして、各番号をその文字列表現にマッピングしますか?

someBitSet map { _.toString() }

結果 します a BitSet[String], 、しかしそれは不可能です。したがって、Scalaは最も派生したスーパータイプを選択します BitSet, 、aを保持できます String, 、この場合、これはaです Set[String].

この計算はすべて中に行われています 時間をまとめます, 、またはより正確に タイプチェック時間, 、タイプレベルの関数を使用します。したがって、タイプが実際に計算されているため、設計時には知られていない場合でも、タイプセーフであることが静的に保証されています。

他のヒント

私の ブログ投稿 SCALAタイプシステムでスキー計算をエンコードすると、チューリングの完全性が示されます。

いくつかの単純なタイプレベルの計算には、自然数と追加のエンコード方法に関する例がいくつかあります/乗算.

最後に素晴らしいことがあります 一連の記事 Apocalispのブログでタイプレベルのプログラミングについて。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top