Después de echar un vistazo en el Java VM specification, noté que se podía usar mucho más que solo letras ASCII para crear un identificador.Verdaderos genéricos de java (plantillas)
En primer lugar, me preguntaba si había alguna símbolos adicionales (aparte de $
, que están disponibles para los identificadores)
¿Cree que sería posible, con el juego de caracteres extendidos para codificar información adicional en un identificador y un cargador de clases personalizado para implementar verdaderos genéricos de Java?
Por supuesto, tendría que evitar el borrado de tipos, pero eso podría ser posible con un analizador personalizado.
Por lo que podría almacenar nombres genéricos en un formato como: $g$GenericList$_Java_lang_String$
estoy usando GenericList
aquí como no tengo la intención de modificar la implementación original!
Colóquelos con el cargador de clases, cree una versión adecuada GenericList<String>
y envíela de regreso.
EDITAR: Planeo usar esto para un idioma que estoy construyendo en la JVM. Como utiliza $
y _
como caracteres especiales, ¡la información de codificación podría funcionar!
EDIT 2: Supongo que lo más difícil de hacer serían los métodos genéricos? ¿Alguien tiene información sobre cómo se implementarían?
EDIT 3: Dado que las clases solo se pueden descargar cuando el cargador de clases desaparece, ¿podría caché y eliminar plantillas resueltas, como funciona en .Net, o lo haría como C++?
+1, idea interesante. Asegúrese de echar un vistazo a .NET IL, que utiliza un concepto similar para implementar genéricos sin borrado de tipo (en este caso, el carácter '(retroceso) se utiliza para delimitar parámetros genéricos en identificadores). –
En realidad he estado buscando en Rotor (SSCIL), muy muy interesante. Mi problema es más cómo implementaría el almacenamiento en caché y el tiempo de vida de cada identidad genérica – Darkzaelus