2011-08-05 9 views
10

私はまだ何か別の方法で実現化を提案している、まだ蒸気ウェアモードの、異なるJVM言語についてたくさん聞いてきました。私は、スカラが何らかの形でJVMのタイプ消去を利用して、それが実現することができないことをすると読んだどこかにあると思っていたことを思い出した(または全く想像していなかった) ScalaはCLRとJVM上で実装されているので、実際に私には意味を持たないものです。そのため、CLR上のScalaが現実化を無視している場合を除き、 。Scalaの場合、消去をタイプするのに利点はありますか?

ですから、Scalaの消去をタイプするのに良い面があるのですか?

+0

最も普遍的なJVM言語のみが従っている場合。 :( –

+2

"CLR上のScalaが単にReificationを無視していない限り" ...それは... – soc

答えて

13

Ola Bini's blogを参照してください。皆さんが知っているように、Javaにはサイト間共分散があり、分散が適切であると思うところでは疑問符がほとんどありません。 Scalaにはクラス定義者が実装する定義サイトの共分散があります。彼は言う:

ジェネリックスは複雑な言語機能です。すでに サブタイプがある既存の言語に追加すると、さらに複雑になる これらの2つの機能は、一般的なケースの ではあまりうまく機能しないため、 言語に追加する際には細心の注意が必要です。そのマシン は、1つの言語のみを提供すればよく、その言語では汎用の ジェネリックを使用すると、仮想マシンにそれらを追加するのは簡単です。しかしジェネリックは行われていない。 が正しく処理され、新しいブレークスルーが起こっていることが完全に理解されていません(Scalaはこれの良い例である です)。この時点では、ジェネリック医薬品は とみなすことはできません。ジェネリックの種類は1種類だけではなく、 実装戦略、機能、コーナーケースで異なります。

...

何このすべての手段あなたが JVMに具体化ジェネリックを追加したい場合は、あなたがその実装がで技術革新をしたい すべての静的言語の両方を包含することができることを非常に一定でなければならないことです独自の バージョンのジェネリックス、そして の優れた実装と、Java ライブラリとのすばらしいインターフェース機能を作成したいすべての動的言語です。 のこれらの基準を満たさない標準化されたジェネリックスを追加すると、イノベーションが妨げられ、 は多言語VMとしてJVMを使用するのが難しくなります。

すなわち、我々はJVMでのジェネリック医薬品を具体化していた場合は、最も可能性の高いものを具体化ジェネリック医薬品は、私たちは本当にScalaの程度などの機能には適していない、と私たちは次善の何かで立ち往生することと思います。

+0

すばらしい答え、ありがとう! – soc

関連する問題