Когда scalac является компилятором, он может украсить сгенерированный код любой структурой данных, необходимой для реализации улучшенных обобщений.
Я имею в виду, что скаляк будет способен видеть ...
// definition
class Klass[T] {
value : T
}
//calls
floats = Klass[float]
doubles = Klass[double]
... и "развернуть" что-то вроде этого:
// definition
class Klass_float {
value : float
}
class Klass_double {
value : double
}
// calls
floats = Klass_float
doubles = Klass_double
Редактировать
Дело в том, что компилятор имеет возможность создавать все необходимые структуры данных, которые демонстрируют необходимость предоставления дополнительной информации о типе во время выполнения. Как только эта информация о типе станет доступной, среда выполнения Scala воспользуется ею и сможет выполнять все операции с учетом типов, которые мы можем себе представить. Неважно, предоставляет ли JVM байт-код для улучшенных обобщений или нет. Работа выполняется не JVM, а библиотекой Scala.
Если вы уже написали символический отладчик (я так и сделал!), Вы знаете, что в принципе вы можете «сбросить» всю информацию, имеющуюся у компилятора во время компиляции, в сгенерированный двоичный файл, приняв любую организацию данных, которая окажется более удобной для дальнейшая обработка. Это в точности та же идея: «сбросить» всю информацию о типах, которую имеет компилятор Scala.
В двух словах, я не понимаю, почему это невозможно, независимо от того, предоставляет ли JVM собственные операции для улучшенных обобщений или нет. Байт-код JVM не имеет ничего общего с улучшенными обобщениями. Подобные вещи зависят от спецификации языка, возможностей компилятора и поддержки библиотеки времени выполнения.
Другое редактирование
IBM X10 демонстрирует способность, о которой я говорю: он компилирует код X10 в код Java, используя усовершенствованные обобщенные типы на платформах Java. Как я упоминал ранее: это может быть сделано (и IBM X10 сделал!), Но этот тип функций включает в себя спецификацию языка, поддержку компилятора (или плагинов компилятора) и достаточную поддержку в библиотеках времени выполнения. Больше информации на: http://x10.sourceforge.net/documentation/papers/X10Workshop2012/slides/Takeuchi.pdf