4

是否可以将诸如 Groovy、Scala 之类的 JVM 语言反编译为其初始形式?

如果我尝试反编译一个 4 行 Groovy 类,我会得到大约 20 行反编译的 Java 代码。

这更像是一个理论问题而不是实际问题,因为市场上没有这样的反编译器(我不知道)。

谢谢。

4

3 回答 3

3

是的,Java 反编译器可以管理类似的保真度是可能的(意思是:代码看起来相似,但不一定相同)。

但是,您需要为每种语言使用专用的反编译器。

编辑:我想我需要澄清我期望的保真度:

  • 局部变量的名称可能是可重现的,也可能是不可重现的
  • 循环类型可能会被误解(for替换为while, ...)
  • 更笼统地说:可以以两种类似方式完成的事情可能会被误解
  • ...

所有这些都是反编译 Java 代码时也会出现的错误,仅仅是因为字节码与 Java 源代码的关联不是 1:1。

但是,如果您有一个专用的 Groovy 反编译器,那么我强烈怀疑它通过反编译已编译的 Groovy 代码会产生Java 反编译器更易读的代码。

于 2011-04-20T13:27:19.093 回答
1

这不一定是可能的。例如,一种语言可能会以一种不可逆的方式破坏它的名称。此外,它可以将源语言的不同结构映射到单个 java 语言结构。

然而,最重要的是,Java 语言(与 JVM 字节码相比)无法强大到足以对源语言的某些概念或结构进行编码,从而使它们可以被具体化。Java 和 JVM 字节码已经是这种情况,后者无法表达泛型。

于 2011-04-20T14:05:00.730 回答
0

好吧,我唯一能想到的就是编译器优化和注释的问题。字节码中没有保留注释(谢天谢地),编译器可能会更改源代码以获得更好的性能,除了这似乎是可能的。

于 2011-04-19T21:10:09.660 回答