且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Doppio: JVM的TypeScript实现 Node和浏览器下直接运行Java

更新时间:2022-08-29 14:18:06

上次我们介绍了node-jvm,一个很酷的Node.js上的JVM实现。它的代码比较直白,很容易理解。可惜的是它用CPS变换来实现每个opcode的handler。这种实现方式是编译器的常见做法。然而由于JavaScript没有尾递归优化,因此爆栈很容易发生。然后实现的细节上也有一点瑕疵,例如long类型、checkcast指令等。


Doppio是一个基于TypeScript实现的JVM,可以在Node.js和浏览器里直接运行。Doppio比node-jvm要完善许多。

Doppio: JVM的TypeScript实现 Node和浏览器下直接运行Java


你可以直接在浏览器里体验 Doppio


安装

如果你想在本地安装的话,需要安装node >= 0.10wget

git clone https://github.com/int3/doppio.git

cd doppio

tools/setup.sh

make

使用

在本地运行服务器:

make dev

tools/server.coffee --dev

以上使用dev版,如果你打算使用release版,则使用:

make release

tools/server.coffee --release

然后通过 http://localhost:8000/ 访问

如果你想在浏览器里包含自己的代码,可以把.class文件放在classes/目录下,然后再次运行make devmake release

目前Doppio还不支持从JARs中加载类文件,以后会增加支持。目前需要先解压缩JAR。

终端下一样可以使用:

make dev-cli

node build/dev-cli/console/disassembler.js classes/demo/Fib

# doppio-dev -> node build/dev/console/runner.js

./doppio-dev classes/demo/Fib

./doppio-dev classes/demo/Fib 7        # 向JVM传递参数

./doppio-dev -jar my_application.jar   # 解压缩并运行JAR

使用make release-cli构建程序的优化版本,生成的代码可以在build/release-cli中找到。使用./doppio可以调用运行时环境。


测试

运行所有测试

make test -j4

运行特定测试

sh node build/dev-cli/console/test_runner.js -h node build/dev-cli/console/test_runner.js classes/test/Strings

Doppio项目主页