'. '

Bck2Brwsr

From APIDesign

(Difference between revisions)
Jump to: navigation, search
(TODO)
m (TODO)
Line 22: Line 22:
** look into the '''GraphBuilderPhase''' class and see how it creates SSA form (using '''FrameStateBuilder''')
** look into the '''GraphBuilderPhase''' class and see how it creates SSA form (using '''FrameStateBuilder''')
** '''BciBlockMapping''' class that is used for creating structured control flow from byte codes.)
** '''BciBlockMapping''' class that is used for creating structured control flow from byte codes.)
-
* More precise number support (int32, int64, float, etc.) - ''Martin Š.'' working on
+
* More precise int64 support - ''Martin Š.'' working on
-
* [[API]] for drawing on the canvas
+
* [[API]] for drawing on the canvas: Toni works on that, read about [http://jayskills.com/blog/2013/01/22/canvas-for-bck2brwsr/ his experience]
-
* Convertor from [[GWT]]'s native code to [[Bck2Brwsr]]'s ''@JavaScriptBody'' - ''Lahváč'' may be investigating
+
* Convertor from [[GWT]]'s native code to [[Bck2Brwsr]]'s ''@JavaScriptBody'' - ''Lahváč'' created a hint. Igor works on [[Ant]] task.
* Method overriding with various modifiers
* Method overriding with various modifiers
* Compatibility tests
* Compatibility tests
-
** Object.clone(), array.clone()
 
* Basic reflection support (e.g. [[Bck2Brwsr]] throws {{JDK|java/lang|SecurityException}} when allowed),
* Basic reflection support (e.g. [[Bck2Brwsr]] throws {{JDK|java/lang|SecurityException}} when allowed),
** '''Done''': Class.newInstance() works.
** '''Done''': Class.newInstance() works.
-
** '''Done''': Class.getMethods() works (returns only public methods) and parameterless methods can be invoked.
+
** '''Done''': Class.getMethods() works (returns only public methods)
** '''Done''': Annotations of classes and methods
** '''Done''': Annotations of classes and methods
-
** TODO: methods with parameters
 
* Debugger of [[Java]] (and not [[JavaScript]] would be good)
* Debugger of [[Java]] (and not [[JavaScript]] would be good)
-
* [[Maven]] archetype for creating the calculator like demos
+
* Support for [[MVC|MVVC]] like '''knockout.js'' - Jarda works on that.
-
** with translation in the browser
+
-
'''Done:'''
+
== Done ==
* Throwing and catching exceptions by ''Tomáš Z.'', finally block by [[User:JaroslavTulach|me]].
* Throwing and catching exceptions by ''Tomáš Z.'', finally block by [[User:JaroslavTulach|me]].
Line 44: Line 41:
* Speed benchmark and infrastructure to measure it in various environments - ''Martin Š.''
* Speed benchmark and infrastructure to measure it in various environments - ''Martin Š.''
** Run with ''-Dvmtest.brwsrs=firefox,chromium-browser'' (or any other browsers you want to test)
** Run with ''-Dvmtest.brwsrs=firefox,chromium-browser'' (or any other browsers you want to test)
 +
* [[Maven]] archetype for creating the calculator like demos
 +
* Int32, Int16, Int8 arithmetics done by Martin Š.

Revision as of 09:06, 22 January 2013

During my duties at JavaOne2012 my feeling (primed by observing various RSS feeds full of posts about something which ends .js) that Java is no longer as cool as it used to be straightened. It always starts by loosing interest of newcomers, targeting just a piece of the technology segment and soon once Good Technology becomes new COBOL. Can that happen to Java? Just read Is JavaScript the Future of Programming? and (if you like Java), you'll get scared. I decided to do something about that. I'd like to return my favorite programming language Bck2Brwsr.

Contents

Goals

Create small Java capable to boot fast and run in 100% of modern browsers including those that have no special support for Java.

Demonstrate that Java has benefits over JavaScript when creating larger HTML5 applications.

Unlike other similar efforts, the goal of this project is not to execute any existing Java library. It is expected that libraries for the new, limited environment need to be specially designed.

Demo

Right now there are two compilator demos. One is generating the JavaScript during compile phase (try here). That is no longer the most interesting one.

There is also a demo that is using classes packaged in JAR files. That is in my opinion more interesting as it shows how easy it is to reuse (simple) libraries in your browser as well as on your server. Try it here!

TODO

Although the system is capable to run and execute trivial applications, there remains tons of things to improve and fix. Any help is welcomed. Just let me know if something interests you:

  • Speed - use Graal's flow analyzer
    • look into the GraphBuilderPhase class and see how it creates SSA form (using FrameStateBuilder)
    • BciBlockMapping class that is used for creating structured control flow from byte codes.)
  • More precise int64 support - Martin Š. working on
  • API for drawing on the canvas: Toni works on that, read about his experience
  • Convertor from GWT's native code to Bck2Brwsr's @JavaScriptBody - Lahváč created a hint. Igor works on Ant task.
  • Method overriding with various modifiers
  • Compatibility tests
  • Basic reflection support (e.g. Bck2Brwsr throws SecurityException when allowed),
    • Done: Class.newInstance() works.
    • Done: Class.getMethods() works (returns only public methods)
    • Done: Annotations of classes and methods
  • Debugger of Java (and not JavaScript would be good)
  • Support for MVVC like 'knockout.js - Jarda works on that.

Done

  • Throwing and catching exceptions by Tomáš Z., finally block by me.
  • Support for converting ByteCode in the browser
  • Speed via register based system - Ľubomír finished first version of his register based rewrite on Dec 14, 2012.
  • Speed benchmark and infrastructure to measure it in various environments - Martin Š.
    • Run with -Dvmtest.brwsrs=firefox,chromium-browser (or any other browsers you want to test)
  • Maven archetype for creating the calculator like demos
  • Int32, Int16, Int8 arithmetics done by Martin Š.
Personal tools
buy