Есть ли у Scala какие-либо преимущества для стирания типов? - PullRequest
10 голосов
/ 05 августа 2011

Я много слышал о разных языках JVM, все еще в режиме создания испарителя, которые предлагают как-то реализовать реификацию. У меня есть эта нытье наполовину запомнившаяся (или полностью воображаемая, не знаю какая) мысль, что где-то я читал, что Scala каким-то образом воспользовался стиранием типа JVM, чтобы делать вещи, которые он не смог бы сделать с помощью овеществления. Что на самом деле не имеет смысла для меня, поскольку Scala реализована как на CLR, так и на JVM, поэтому, если бы reification вызвал какое-то ограничение, это проявилось бы в реализации CLR (если Scala на CLR просто не игнорирует reification) .

Итак, есть ли хорошая сторона для стирания типа для Scala, или же reification безошибочно хорош?

1 Ответ

13 голосов
/ 05 августа 2011

См. Блог Олы Бини .Как все мы знаем, Java имеет ковариацию сайтов использования, реализованную с помощью небольших вопросительных знаков, где вы считаете, что дисперсия уместна.У Scala есть ковариация определения сайта, реализованная дизайнером класса.Он говорит:

Дженерики - это сложная языковая функция.Это становится еще сложнее, когда добавляется к существующему языку, который уже имеет подтип.В общем случае эти две функции не очень хорошо сочетаются друг с другом, и при добавлении их в язык необходимо соблюдать особую осторожность.Добавить их в виртуальную машину очень просто, если эта машина обслуживает только один язык - и этот язык использует те же самые дженерики.Но дженерики не сделаны.Не совсем понятно, как правильно обращаться, и происходят новые прорывы (хороший пример этого - Scala).На данный момент, дженерики не могут считаться «сделано правильно».Существует не только один тип генериков - они различаются по стратегиям реализации, особенностям и случаям реализации.

...

Что все это означает, что если вы хотите добавить переработанные универсалы вВ JVM вы должны быть абсолютно уверены, что эта реализация может охватывать как все статические языки, которые хотят внедрять инновации в своей собственной версии обобщений, так и все динамические языки, которые хотят создать хорошую реализацию и удобное средство взаимодействия с библиотеками Java.Потому что, если вы добавите улучшенные генерики, которые не соответствуют этим критериям, вы заблокируете инновации и усложните использование JVM в качестве многоязычной виртуальной машины.

, т.е.JVM, скорее всего, эти усовершенствованные дженерики не подойдут для функций, которые нам действительно нравятся в Scala, и мы столкнемся с чем-то неоптимальным.

...