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