26

CLRジェネリックの実装がJVMよりも多くの機能をサポートしていることを考えると、JVMのジェネリックは単なるJavaの「コンパイラトリック」であるため、F#ではより種類の多い型は不可能ですがScalaでは可能であるのはなぜですか?CLRジェネリックの実装はどういうわけか物事の邪魔になりますが、JVMにはそれがないため、設計者が意図したものよりも先に進むことができます。動的言語のように、強く型付けされたコンパイラーでは不可能になるようなトリックを実行できますか?

4

2 に答える 2

24

原則として、F#がより高い種類の型を含めることを妨げるものがあるかどうかはわかりません。CLRはそれらをネイティブにサポートしていないため、より間接的なコンパイル戦略を使用する必要がありますが、JVM上のScalaにも当てはまります。CLRの洗練されたジェネリックに加えてこれを行うのはもっと複雑かもしれませんし、そうでないかもしれませんが、F#にそれらが含まれていない理由はより哲学的だと思います。種類の多いタイプがあればいいのですが、F#の設計では、他の.NET言語とうまく相互運用できる単純な機能を好む傾向があります。より高い種類の型は、おそらく言語に追加するためにかなりの労力を必要とし、型推論や言語の他の部分を複雑にし、C#や他の.NET言語とは確実にうまく相互運用しません。

于 2013-02-26T12:11:24.937 に答える
-6

より良い?考えられる。

私が知っている唯一の違いは、「特殊化」と呼ばれるジェネリックの機能です。また、Scala ではプログラマーの制御下で利用できます。だから... Scalaの方が「優れている」と主張できると言わざるを得ません。

于 2013-02-26T04:58:12.480 に答える