Doppio: JVM的TypeScript實現 Node和瀏覽器下直接運行Java

上次咱們介紹了node-jvm,一個很酷的Node.js上的JVM實現。它的代碼比較直白,很容易理解。惋惜的是它用CPS變換來實現每一個opcode的handler。這種實現方式是編譯器的常見作法。然而因爲JavaScript沒有尾遞歸優化,所以爆棧很容易發生。而後實現的細節上也有一點瑕疵,例如long類型、checkcast指令等。html

Doppio是一個基於TypeScript實現的JVM,能夠在Node.js和瀏覽器裏直接運行。Doppio比node-jvm要完善許多。node

doppio

你能夠直接在瀏覽器裏體驗 Doppiogit

安裝

若是你想在本地安裝的話,須要安裝node >= 0.10wgetgithub

git clone https://github.com/int3/doppio.git
cd doppio
tools/setup.sh
make

使用

在本地運行服務器:typescript

make dev
tools/server.coffee --dev

以上使用dev版,若是你打算使用release版,則使用:segmentfault

make release
tools/server.coffee --release

而後經過 http://localhost:8000/ 訪問瀏覽器

若是你想在瀏覽器裏包含本身的代碼,能夠把.class文件放在classes/目錄下,而後再次運行make devmake releasesass

目前Doppio還不支持從JARs中加載類文件,之後會增長支持。目前須要先解壓縮JAR。服務器

終端下同樣能夠使用:app

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項目主頁


編譯 SegmentFault

相關文章
相關標籤/搜索