TeaVM
From APIDesign
Line 1: | Line 1: | ||
[[TeaVM]] is a [[bytecode]] to [[JavaScript]] translator written by Alexey Andreev: https://github.com/konsoletyper/teavm | [[TeaVM]] is a [[bytecode]] to [[JavaScript]] translator written by Alexey Andreev: https://github.com/konsoletyper/teavm | ||
- | Alexey contacted [[I|me]] (as the author of [[Bck2Brwsr]]) and we were seeking for a way to cooperate. I suggested Alexey to extend his [[TeaVM]] to understand [[DukeScript]]'s | + | Alexey contacted [[I|me]] (as the author of [[Bck2Brwsr]]) and we were seeking for a way to cooperate. I suggested Alexey to extend his [[TeaVM]] to understand [[DukeScript]]'s @{{HTML4J|net/java/html/js|JavaScriptBody}} annotation and he did it! |
That is amazing! Now we have a [[common ground]] - a way to write [[Java]] libraries that talk to [[JavaScript]] and can execute them in a variety of [[environment]]s (like [[FXBrwsr]], [[DlvkBrwsr]], [[HTML|NetBeans and Eclipse]], via [[Bck2Brwsr]] or [[TeaVM]]). No need to worry about proprietary [[API]] to talk to different [[VM]]s! Use [[DukeScript]] - it is the [[wikipedia:Lingua_franca|ligua franca]] all [[VM]]s understand (well, somebody needs to enhance [[GWT]] and convince the [[Doppio]] guys). | That is amazing! Now we have a [[common ground]] - a way to write [[Java]] libraries that talk to [[JavaScript]] and can execute them in a variety of [[environment]]s (like [[FXBrwsr]], [[DlvkBrwsr]], [[HTML|NetBeans and Eclipse]], via [[Bck2Brwsr]] or [[TeaVM]]). No need to worry about proprietary [[API]] to talk to different [[VM]]s! Use [[DukeScript]] - it is the [[wikipedia:Lingua_franca|ligua franca]] all [[VM]]s understand (well, somebody needs to enhance [[GWT]] and convince the [[Doppio]] guys). | ||
- | + | == Getting Started with [[DukeScript]] and [[TeaVM]] == | |
- | + | Once your application is ready, you can then decide how you want to deploy it. Whether you want more feature rich [[Bck2Brwsr]], or lightweight (but not as complete) [[TeaVM]]. The best way to get started is currently to use the [[Minesweeper]] application and modify it to your needs: | |
+ | |||
+ | <source lang="bash"> | ||
+ | $ hg clone http://source.apidesign.org/hg/html~demo/ | ||
+ | $ cd html~demo/ | ||
+ | $ hg up -C teavm # or directly to version 908708015f61 which is known to work | ||
+ | $ mvn clean install -DskipTests | ||
+ | $ cd minesweeper/ | ||
+ | $ mvn -Pteabrwsr clean package bck2brwsr:brwsr | ||
+ | </source> | ||
+ | |||
+ | And you can repeat the last step once you modify the [[HTML]] or [[Java]] code. And don't forget - the other way to execute the same application is: | ||
+ | |||
+ | <source lang="bash"> | ||
+ | $ mvn exec:java | ||
+ | </source> | ||
+ | |||
+ | == Competition is [[Good]]! == | ||
+ | |||
+ | Now the competition between [[VM]]s can start! We have a way to write a sample application once and then execute it and compare the results. For example here is a ''minesweeper'' (written with [[DukeScript]] [[API]]s) executed by [[TeaVM]]: http://xelfi.cz/minesweeper/teavm/ and here is one executed by [[Bck2Brwsr]]: http://xelfi.cz/minesweeper/bck2brwsr/ - the same [[HTML]] page, the same [[Java]] code - just different [[VM]]s (btw. [[I]] have speeded up the [[Bck2Brwsr]] start a bit; now it should be less than a second): | ||
* [http://source.apidesign.org/hg/html~demo/file/4dce5ea7e13a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java MinesModel] | * [http://source.apidesign.org/hg/html~demo/file/4dce5ea7e13a/minesweeper/src/main/java/org/apidesign/demo/minesweeper/MinesModel.java MinesModel] | ||
* [http://source.apidesign.org/hg/html~demo/file/4dce5ea7e13a/minesweeper/src/main/webapp/pages/index.html HTML] | * [http://source.apidesign.org/hg/html~demo/file/4dce5ea7e13a/minesweeper/src/main/webapp/pages/index.html HTML] | ||
In any case, congratulation Alexey for your [[good]] work and thanks for sharing the [[common ground]]! | In any case, congratulation Alexey for your [[good]] work and thanks for sharing the [[common ground]]! |
Revision as of 11:34, 23 February 2015
TeaVM is a bytecode to JavaScript translator written by Alexey Andreev: https://github.com/konsoletyper/teavm
Alexey contacted me (as the author of Bck2Brwsr) and we were seeking for a way to cooperate. I suggested Alexey to extend his TeaVM to understand DukeScript's @JavaScriptBody annotation and he did it!
That is amazing! Now we have a common ground - a way to write Java libraries that talk to JavaScript and can execute them in a variety of environments (like FXBrwsr, DlvkBrwsr, NetBeans and Eclipse, via Bck2Brwsr or TeaVM). No need to worry about proprietary API to talk to different VMs! Use DukeScript - it is the ligua franca all VMs understand (well, somebody needs to enhance GWT and convince the Doppio guys).
Getting Started with DukeScript and TeaVM
Once your application is ready, you can then decide how you want to deploy it. Whether you want more feature rich Bck2Brwsr, or lightweight (but not as complete) TeaVM. The best way to get started is currently to use the Minesweeper application and modify it to your needs:
$ hg clone http://source.apidesign.org/hg/html~demo/ $ cd html~demo/ $ hg up -C teavm # or directly to version 908708015f61 which is known to work $ mvn clean install -DskipTests $ cd minesweeper/ $ mvn -Pteabrwsr clean package bck2brwsr:brwsr
And you can repeat the last step once you modify the HTML or Java code. And don't forget - the other way to execute the same application is:
$ mvn exec:java
Competition is Good!
Now the competition between VMs can start! We have a way to write a sample application once and then execute it and compare the results. For example here is a minesweeper (written with DukeScript APIs) executed by TeaVM: http://xelfi.cz/minesweeper/teavm/ and here is one executed by Bck2Brwsr: http://xelfi.cz/minesweeper/bck2brwsr/ - the same HTML page, the same Java code - just different VMs (btw. I have speeded up the Bck2Brwsr start a bit; now it should be less than a second):
In any case, congratulation Alexey for your good work and thanks for sharing the common ground!