Подтвердить что ты не робот

Для Scala существуют ли какие-либо преимущества для стирания типа?

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

Итак, есть ли хорошая сторона, чтобы набрать стирание для Scala, или это овеществление безграничной хорошей вещи?

4b9b3361

Ответ 1

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

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

...

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

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