Почему запуск javap в скомпилированном классе Scala показывает странные записи в пуле констант? - PullRequest
5 голосов
/ 08 апреля 2011

При запуске javap -v в скомпилированном классе, полученном из этого бита Scala (окончательная версия 2.8.1):

Точка класса (x: Int, y: Int)

Я получаю следующий вывод для постоянных записей пула вместе с несколькими терминальными звуковыми сигналами, указывающими непечатаемые символы?

#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

Есть идеи, что происходит и почему? Я никогда не видел бинарный мусор в записях CONSTANT_Utf8.

Я использую сборку OpenJDK 7 на Mac 10.6, если это что-то изменит - завтра я попытаюсь повторить репликацию, когда у меня будут другие операционные системы, и обновлю соответственно.

1 Ответ

8 голосов
/ 08 апреля 2011

Элемент ScalaSignature - это место, где хранится дополнительная информация о типе, которая нужна Scala. Теперь он хранится (очевидно, в кодировке) в аннотациях, так что его можно сделать доступным для инструментов отражения.

...