上次咱們介紹了node-jvm,一個很酷的Node.js上的JVM實現。它的代碼比較直白,很容易理解。惋惜的是它用CPS變換來實現每一個opcode的handler。這種實現方式是編譯器的常見作法。然而因爲JavaScript沒有尾遞歸優化,所以爆棧很容易發生。而後實現的細節上也有一點瑕疵,例如long
類型、checkcast
指令等。html
Doppio是一個基於TypeScript實現的JVM,能夠在Node.js和瀏覽器裏直接運行。Doppio比node-jvm要完善許多。node
你能夠直接在瀏覽器裏體驗 Doppio。git
若是你想在本地安裝的話,須要安裝node >= 0.10
和wget
。github
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 dev
或make release
。sass
目前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
編譯 SegmentFault