是否可以将Groovy,Scala等JVM语言反编译为初始形式?
如果我尝试反编译一个4行的Groovy类,我会得到大约20行反编译的Java代码。
这更像是一个理论问题,而不是一个实际问题,因为市场上没有这样的反编译器(不是我所知道的)。
感谢。
答案 0 :(得分:3)
是的,它可能具有Java反编译器可以管理的类似保真度(意思是:代码看起来相似,但不一定相同)。
但是,您需要为每种语言使用专用的反编译器。
编辑:我想我需要澄清一下我期望的保真程度:
for
替换为while
,...)所有这些都是反编译Java代码时也会出现的错误,因为从字节代码到Java源代码的关联不是1:1。
但是,如果你有一个专用的Groovy反编译器,那么我强烈怀疑它能够从反编译的Groovy代码产生多更可读的代码,而不是Java反编译器。
答案 1 :(得分:1)
不一定可能。例如,一种语言可能会以不可逆的方式破坏它的名称。此外,它可以将源语言的不同构造映射到单个java语言构造。
然而,最令人不快的是,java语言(与JVM字节码相比)无法强大到足以对源语言的某些概念或构造进行编码,从而可以实现它们。 Java和JVM字节码已经是这种情况,后者无法表达泛型。
答案 2 :(得分:0)
嗯,我能想到的唯一问题是编译器优化和注释的问题。注释不会保留在字节码中(幸运的是),并且编译器可能会更改源代码以获得更好的性能,除了它似乎可能。