Есть ли у Scala какие-либо преимущества для стирания типов?
Я много слышал о разных языках JVM, все еще в режиме создания испарителя, которые предлагают как-то реализовать реификацию. У меня есть эта нытье наполовину запомнившаяся (или полностью воображаемая, не знаю какая) мысль, что где-то я читал, что Scala каким-то образом воспользовался стиранием типа JVM, чтобы делать вещи, которые он не смог бы сделать с помощью овеществления. Что на самом деле не имеет смысла для меня, так как Scala реализована как на CLR, так и на JVM, поэтому, если бы reification вызвал какое-то ограничение, это проявилось бы в реализации CLR (если Scala на CLR просто не игнорирует reification),
Итак, есть ли хорошая сторона для стирания типа для Scala, или реификация - несомненная хорошая вещь?
1 ответ
Смотрите блог Олы Бини. Как все мы знаем, в Java есть ковариация сайтов использования, реализованная с помощью небольших вопросительных знаков, где вы считаете, что дисперсия уместна. У Scala есть ковариация определения сайта, реализованная дизайнером класса. Он говорит:
Дженерики - сложная языковая особенность. Это становится еще сложнее, когда добавляется к существующему языку, который уже имеет подтип. В общем случае эти две функции не очень хорошо сочетаются друг с другом, и при добавлении их в язык необходимо соблюдать особую осторожность. Добавить их в виртуальную машину очень просто, если эта машина обслуживает только один язык - и этот язык использует те же самые дженерики. Но дженерики не сделаны. Не совсем понятно, как правильно обращаться, и происходят новые прорывы (хороший пример этого - Scala). На данный момент, дженерики не могут считаться "сделано правильно". Существует не только один тип обобщений - они различаются по стратегиям реализации, особенностям и конкретным случаям.
...
Все это означает, что если вы хотите добавить усовершенствованные дженерики в JVM, вы должны быть абсолютно уверены, что эта реализация может охватывать как все статические языки, которые хотят внедрять инновации в своей собственной версии обобщения, так и все динамические языки, которые хотят создать хорошую реализацию и хороший интерфейс для взаимодействия с библиотеками Java. Потому что, если вы добавите улучшенные дженерики, которые не соответствуют этим критериям, вы подавите инновации и значительно затрудните использование JVM в качестве многоязычной виртуальной машины.
То есть, если бы мы внедрили дженерики в JVM, скорее всего, эти дженерики не подойдут для функций, которые нам действительно нравятся в Scala, и мы застряли бы в чем-то неоптимальном.