2011-08-05 19 views
10

Farklı türden JVM dilleri hakkında hala bir şeyler duyuyorum. Bunu hatırlatan, yarı hatırlanan (ya da tamamen hayal edilmiş, hangisi olduğunu bilmiyorum), Scala'nın bir şekilde JVM'nin tipinin silinmesinden faydalanabileceği şeyler yapması gerektiğini düşündüğüm bir yer olduğunu düşündüm. Scala, CLR'de olduğu kadar JVM'de de uygulandığından bu benim için mantıklı değil, bu yüzden eğer birleşme CLR uygulamasında bir çeşit sınırlamaya yol açmışsa (CLR'deki Scala sadece birleşme görmezden gelmiyorsa) .Scala için silme işleminin herhangi bir avantajı var mı?

Scala için silme yazmak için iyi bir yön var mı, yoksa yeniden tanımlanmış iyi bir şey mi?

+0

Yalnızca en çok bulunan JVM dili takip ederse. :( –

+2

"CLR'deki Scala, sadece birleşme görmezden gelmiyorsa ..." – soc

cevap

13

Bkz. Ola Bini's blog. Hepimizin bildiği gibi, Java'nın varyansın uygun olduğunu düşündüğünüz her yerde küçük soru işaretleriyle uygulanmış kullanım alanı kovaryansı vardır. Scala, sınıf tasarımcısı tarafından uygulanan tanım alanı kovaryansına sahiptir. Diyor:

Generics karmaşık bir dil özelliğidir. Zaten alt türüne sahip olan mevcut bir dile eklendiğinde daha fazla karmaşık hale gelir. Bu iki özellik, genel durumunda birlikte çok iyi oynamıyor ve bunları bir diline eklerken büyük dikkat gösterilmelidir. Bu makine sadece bir dile hizmet etmek zorundaysa ve bu dil aynı jeneriklerini kullanıyorsa, bunları bir sanal makineye eklemek basittir. Ancak jenerikler bitmedi. 'un doğru şekilde nasıl işleneceği ve yeni atılımların nasıl gerçekleştiği tam olarak anlaşılamamıştır (Scala, bunun iyi bir örneği olan ). Bu noktada, jenerikler “doğru yapıldığında” olarak kabul edilemez. Sadece bir tür jenerik yoktur - bunlar, uygulama stratejileri, özellik ve köşe durumlarında farklılık gösterir.

...

Bu tüm araçlar size JVM için şeyleşmiş jeneriği eklemek istiyorsanız, bu uygulama yenilik yapmak istiyorum tüm statik dilleri hem kapsayacak ki çok belli olmasıdır kendi sürümü jenerik ve bir iyi uygulama ve Java kütüphaneleri ile güzel bir arabirim tesisi oluşturmak isteyen tüm dinamik diller. Bu kriterleri yerine getirmeyen, yeniden adlandırılmış jenerikler eklerseniz, inovasyonu bastırır ve JVM'yi çoklu dil VM olarak kullanmak için bu kadar çok yapmasını zorlaştırırsınız. Biz JVM jeneriği şeyleşmiş olsaydı

, büyük olasılıkla bu şeyleşmiş jenerik gerçekten Scala hakkında gibi özellikler için uygun olmaz yani ve biz optimal bir şeyle kalmış olurdu.

+0

Harika cevap, teşekkürler! – soc

İlgili konular