2011-08-05 8 views
10

He estado escuchando mucho sobre diferentes lenguajes JVM, todavía en modo vaporware, que proponen implementar la reificación de alguna manera. Tengo este regaño medio recordado (o totalmente imaginado, no sé cuál) que pensé que en algún lugar leí que Scala de alguna manera se aprovechó del borrado de tipo de la JVM para hacer cosas que no sería capaz de hacer con la reificación. Lo cual realmente no tiene sentido para mí ya que Scala se implementa en el CLR y en la JVM, por lo que si la reificación causara algún tipo de limitación, aparecería en la implementación de CLR (a menos que Scala en el CLR simplemente ignore la reificación) .Para Scala, ¿existen ventajas de escribir borrado?

Entonces, ¿hay un lado bueno para escribir el borrado de Scala, o la reificación es una cosa buena sin paliativos?

+0

Si solo el lenguaje JVM más ubicuo sigue su ejemplo. :( –

+2

"a menos que Scala en el CLR esté simplemente ignorando la reificación" ... lo hace. – soc

Respuesta

13

Ver Ola Bini's blog. Como todos sabemos, Java tiene una covarianza en el sitio de uso, implementada al tener pequeños signos de interrogación dondequiera que piense que la variación es apropiada. Scala tiene una covarianza en el sitio de definición, implementada por el diseñador de la clase. Él dice:

El genérico es una característica de lenguaje complicado. Se vuelve aún más complicado cuando se agrega a un idioma existente que ya tiene el subtipo . Estas dos características no funcionan muy bien juntas en el caso general , y se debe tener mucho cuidado al agregarlas a un lenguaje . Agregarlos a una máquina virtual es simple si esa máquina solo tiene que servir un idioma, y ​​ese lenguaje usa los mismos genéricos . Pero los genéricos no están listos. No se entiende completamente cómo se maneja correctamente y se están produciendo nuevos avances (Scala es un buen ejemplo de esto, ). En este punto, los genéricos no se pueden considerar "hecho a la derecha". No solo hay un tipo de genéricos: varían en las estrategias de implementación , las características y los casos de las esquinas.

...

Lo que esto significa es que si desea agregar los genéricos reificadas a la JVM, debe ser muy seguro de que que la aplicación puede abarcar todos los idiomas tanto estáticas que quieren hacer de la innovación su propia versión de genéricos, y todos los lenguajes dinámicos que desean crear una buena implementación y una buena facilidad de interfaz con bibliotecas Java . Porque si agrega genéricos reificados que no cumplen con los criterios de , reprimirá la innovación y hará que sea más difícil de usar la JVM como máquina virtual multilenguaje.

es decir, Si hubiéramos materializado genéricos en la JVM, más probable es que esos genéricos reificadas podría no ser adecuado para las características que realmente me gusta de Scala, y que estaría pegado con algo subóptima.

+0

¡Excelente respuesta, gracias! – soc

Cuestiones relacionadas