Develop iOS Apps in Java with RoboVM
robovm.org
robovm.org
Found my answer: Note! When you compile a program using RoboVM it will translate not only the main class into native code but also the transitive dependencies of that main class. So the first time you compile a program for a particular CPU and OS RoboVM also compiles many of the standard runtime classes such as java.lang.Object, java.lang.String, etc. A simple class like HelloWorld references about 1500 classes directly or indirectly. RoboVM keeps a cache of compiled classes and only recompiles a class when it or any of its direct dependencies have changed.
Wow
This is basic compiler design 101.
The Java VM is just a possible implementation for the Java language.
The fact that many mix "Java the language", with "Java the Virtual Machine", is a consequence of the lack of knowledge in compiler design that seems so common nowadays.
This can happen even in languages like C when you do static linking.
The solution is to have the linker remove all code that is not being called. The consequence of it, it that you are restricted in doing reflection, for example.
Some Java native compilers allow you to provide a list of methods to leave alone, to avoid them being removed from the final executable.
Although, from my experience doing Android with Scala, the process is slow.
Here's an interesting blog post on RoboVM: "JavaFX On IOS Using RoboVM And Maven" http://www.zenjava.com/2013/08/01/javafx-on-ios-using-robovm...
Current limitations: no debugging, Boehm GC (though anything except stack references are collected precisely) and the ObjC -> Java bindings are a bit in flux.
I personally would like to see the ObjC bindings ala Xamarin get done. JavaFX is a trainwreck in my opinion. I think that would also be a really good business opportunity for Niklas/Trillian, i can see tons of enterprises wanting to code their iOS apps via a JVM language. RoboVM already has Maven/STB plugins available, so development is very smooth. And compile times beat Xamarin easily.
What gets me really excited is that RoboVM supports Scala out of the box. Writing iOS/Android/desktop games and apps in Scala would be amazing.
[1] http://www.youtube.com/watch?v=h0Ro41uamD0 [2] https://twitter.com/RainerBasso/status/378621566206369792
It has several frontends, including JVM bytecode, and several backends, including Objective-C (and vanilla C, these days).
Besides ExcelsiorJET, Aonix and IBM Webpshere Real Time VM do also offer AOT compilation.
There are also dozens of tools for developing native apps in many platforms with HTML5/JavaScript, most notably Titanium : http://www.appcelerator.com/platform/titanium-platform/.
Do they link iOS frameworks C libraries and just provide wrappers in a C# or Java lib (which are then compiled to bytecode then native) ?