3

我想用 LLVM 将 Java 编译为 Javascript,如下所示:

  • *.java 到 *.class,通过 Oracle 的 javac
  • *.class 到 *.bc,通过 vmkit 的 vmjc
  • *.bc 到 *.html 与 JS,通过 emscripten 的 emcc

创建的 HTML/JS 文件(大约 170KB 大)ReferenceError: _StartJnjvmWithoutJIT is not defined在打开时会在浏览器控制台中打印。尝试对此进行调试时,我注意到 *.bc 文件 (LLVM IR) 甚至似乎都不包含我的代码,即我正在打印的字符串不在其中。

我做了什么:

vmjc -disable-opt -main=MyTest MyTest.class

无论我使用 Java 6 还是 7,它都会打印出来:

WARNING: Class file 'java/lang/VMString' requires Java version 1.7. This JVM only supports Java versions up to 1.6.

*.bc无论如何它都会创建一个文件。*.ll当我将其转换为非二进制(MyTest_main不过,那里确实出现了一个类似的字符串:

llvm-dis MyTest.class.bc

那么,这种方法是否可行?关于 Java 版本的警告是什么意思?为什么我的“hello world”字符串没有出现在*.ll代码中,这是个问题吗?

4

2 回答 2

0

您可以通过使用 GWT 将 Java 直接编译为 JavaScript 来缩短路径。

于 2014-02-01T21:31:07.443 回答
-2

Java 和 JavaScript 是两种不同的语言。交叉编译很棘手,而且大多会导致代码笨拙。

我个人建议手动重新实现 Typescript 中的核心逻辑,因为它支持经典的 OO(面向对象)开发和类型安全。以这种方式翻译代码很耗时,但相对容易。

或者,也可以使用原生 JavaScript 进行 OO 风格的编程。但是由于它缺乏类型保存,因此这种方式的开发更加困难。 http://addyosmani.com/resources/essentialjsdesignpatterns/book/

于 2014-02-02T11:32:35.007 回答