4

GroovyやScalaなどのJVM言語を初期形式に逆コンパイルすることは可能ですか?

4行のGroovyクラスを逆コンパイルしようとすると、約20行の逆コンパイルされたJavaコードが得られます。

市場にはそのような逆コンパイラーがないので、それは実際的な問題というよりも理論的な問題です(私が知っていることではありません)。

ありがとう。

4

3 に答える 3

3

はい、Javaデコンパイラーが管理できるのと同様の忠実度を実現することは可能です(つまり、コードは類似しているように見えますが、必ずしも同一である必要はありません)。

ただし、言語ごとに専用の逆コンパイラが必要です。

編集:私は私が期待する忠実度のレベルを明確にする必要があると思います:

  • ローカル変数の名前は、再現できる場合とできない場合があります
  • ループタイプが誤って解釈される可能性があります( 、...forに置き換えられwhileます)
  • より一般的:2つの同様の方法で実行できることは誤解される可能性があります
  • ..。

これらはすべて、バイトコードからJavaソースコードへの関連付けが1:1ではないという理由だけで、Javaコードの逆コンパイルでも発生するエラーです。

ただし、専用の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 に答える