10

どういうわけか具体化を実装することを提案している、まだベーパーウェアモードのさまざまなJVM言語について多くのことを聞いてきました。私はこのしつこいことを半分覚えています(または完全に想像しましたが、どちらかわかりません)。ScalaがJVMの型消去を利用して、具体化ではできないことを実行したことをどこかで読んだと思いました。ScalaはJVMだけでなくCLRにも実装されているため、これは私にはあまり意味がありません。したがって、具体化によって何らかの制限が発生した場合、CLR実装に表示されます(CLR上のScalaが具体化を無視している場合を除く) 。

それで、Scalaの型消去には良い面がありますか、それとも具象化は軽減されない良いことですか?

4

1 に答える 1

13

OlaBiniのブログを参照してください。ご存知のとおり、Javaには使用サイトの共分散があり、分散が適切であると思われる場合は、疑問符をほとんど付けずに実装されます。Scalaには、クラス設計者によって実装された定義サイトの共分散があります。彼は言う:

ジェネリックスは複雑な言語機能です。すでにサブタイピングされている既存の言語に追加すると、さらに複雑になります。これらの2つの機能は、一般的なケースではうまく機能しないため、言語に追加する場合は細心の注意を払う必要があります。それらを仮想マシンに追加するのは、そのマシンが1つの言語のみを提供する必要があり、その言語が同じジェネリックを使用している場合は簡単です。しかし、ジェネリックは行われていません。正しく処理する方法が完全には理解されておらず、新しいブレークスルーが発生しています(Scalaはこの良い例です)。現時点では、ジェネリックは「正しく行われた」とは見なされません。ジェネリックスのタイプは1つだけではありません。それらは、実装戦略、機能、およびコーナーケースが異なります。

..。

これが意味することは、JVMに洗練されたジェネリックを追加したい場合、その実装が独自のバージョンのジェネリックで革新を行いたいすべての静的言語と、優れた実装とJavaライブラリとの優れたインターフェース機能を作成します。これらの基準を満たさない洗練されたジェネリックを追加すると、イノベーションが抑制され、JVMを多言語VMとして使用することがはるかに困難になるためです。

つまり、JVMでジェネリックを具体化した場合、それらのジェネリックを具体化したものは、Scalaで本当に気に入っている機能に適していない可能性が高く、最適ではないものに悩まされることになります。

于 2011-08-05T01:55:38.453 に答える