Cla*_*oft 2 java scala scalac scala-compiler
将Scala文件反编译为Java代码时,经常会遇到用ScalaSignature
s 注释的类。这些似乎只有一个注释值,即经过某种程度编码的String。为什么Scala编译器会创建这样的奇数构造,而不是Attribute
在class
文件中使用custom ?
与使用注释相比,将签名存储为属性的传统方法同时更优雅,更紧凑(约15%)和更简单。但是,要访问属性中的腌制签名,需要获取并解析整个类文件。由于注释可以被JVM识别,因此新方法允许使用Java反射直接从运行的Scala程序中检索腌制的签名字节。
新方法是编写良好的Scala反射库的正在进行中的开发的一部分。Java反射以简化的以Java为中心的方式查看Scala程序。要给出以Scala为中心的反射程序视图,必须由Java反射提供的信息与在Scala签名中找到的信息一起完成。传统的存储方法将要求再次解析所有类文件-JVM已经解析了它们,并通过反射公开了大部分内容。新的存储方法允许以与获取其他反射信息相同的方式访问腌制的Scala签名,从而使新的Scala反射库更简单,更快速。
尽管Scala反射库将不属于2.8版本,但希望现有的2.8类文件在新的反射库可用时与之兼容。此外,由于2.8类文件在任何情况下都不与2.7类文件兼容,因此更改2.8中存储签名的方法将不需要在不久后更改另一种二进制不兼容类文件格式。
归档时间: |
|
查看次数: |
1462 次 |
最近记录: |