上次我們介紹了 node-jvm ,一個很酷的Node.js上的JVM實作。它的代碼比較直白,很容易了解。可惜的是它用CPS變換來實作每個opcode的handler。這種實作方式是編譯器的常見做法。然而由于JavaScript沒有尾遞歸優化,是以爆棧很容易發生。然後實作的細節上也有一點瑕疵,例如 long checkcast
類型、
指令等。 Doppio 是一個基于 TypeScript 實作的JVM,可以在Node.js和浏覽器裡直接運作。Doppio比node-jvm要完善許多。

安裝
如果你想在本地安裝的話,需要安裝
node >= 0.10
和
wget
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 dev
或
make 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項目首頁