2011-04-07 9 views
5

Cuando se ejecuta -v javap en la clase compilada resultante de este poco de Scala (versión 2.8.1 final):¿Por qué ejecutar javap en una clase Scala compilada muestra entradas extrañas en el conjunto constante?

Punto de clase (x: Int, y: Int)

me sale el siguiente salida para las entradas constantes del grupo, junto con varios pitidos terminales que indican caracteres no imprimibles?

#19 = Utf8    Lscala/reflect/ScalaSignature; 
#20 = Utf8    bytes 
#21 = Utf8    \t2\"\t!!>Lg9A(Z7qift4A\nqCA\r!BA 
                 aM\4 
                  -\tAA[1wC&Q\nTWm;=R\"\t 
                        E\tQa]2bYL!a\tMr\1PE*,7\r\t+\t)A-\t/%:$ 

eDu\taP5oSRtDc!CAqA!)Qca-!)!da- 
#22 = Utf8    RuntimeVisibleAnnotations 
#23 = Utf8    Point 
#24 = Class    #23   // Point 

¿Alguna idea de lo que está pasando y por qué? Nunca antes había visto basura binaria en las entradas CONSTANT_Utf8.

Estoy usando una versión OpenJDK 7 en Mac 10.6, si eso hace la diferencia - Trataré de replicar mañana cuando tenga otros sistemas operativos con los que jugar, y los actualizaré en consecuencia.

+0

Está codificado de manera ad hoc, para ser lo más compacto posible. Sugerí MIME64 o incluso MIME96, que sería un poco más grande que el formato actual, pero no mucho. Obviamente, esa sugerencia no fue tomada. –

Respuesta

8

El elemento ScalaSignature es donde se almacena la información de tipo adicional que necesita Scala. Se está almacenando (codificado, obviamente) en anotaciones ahora para que esté disponible para las herramientas de reflexión.

+0

(¿Qué, no XML? :-) –

+0

¡La pregunta es cuándo! ¿Cuándo habrá tales herramientas? – pedrofurla

Cuestiones relacionadas