ParparVM – Open Source JVM for iOS
github.com
github.com
I'm not sure if I agree with that conclusion. After all, RubyMotion and the Elements Compiler (www.elementscompiler.com) have kept up with all the new compiler requirements from Apple, including the requirement to emit bitcode for watchOS and tvOS. So clearly it's possible. And using LLVM directly, rather than using C as an intermediate representation, yields more control over debug information. Still, it's possible that at the next WWDC, or even next September, Apple will drop something new that will force us to use one of their compilers.
Now the OSS community is trying to fork the code and because the code is so complex its really hard to do that.
Even if Codename One goes belly up or is acquired by a closed source company in the future you will probably be able to still work with the code without a problem.
There are a couple of other advantages with this approach:
1. Use the native tooling (e.g. profilers etc.) which are pretty amazing on iOS.
2. Just write Objective-C/SWIFT code for various features. This is hugely convenient when adopting features from the latest version of iOS.
Neither do I agree with the statements about C code being "easier to use"; it is still generated code and it will most likely not be the nicest code to work with.
E.g. if you have a bug in the LLVM translation code, good luck tracking that... With ParparVM just open it in the debugger and see what went wrong.
Look at the referenced quote in the readme from a guy actually going thru the LLVM path (CEO of RoboVM). Its theoretically easy but in all practicality its pretty far from easy and you have no way of knowing what Apple will do with LLVM in the future. But they pretty much guaranteed they will support C as its an officially supported language.
Clojure, for example, permits AOT byte-code delivery of your project. So with a AOT compiled clojure.main jar on the class path, Clojure should theoretically work if you could interpret the byte-code at runtime as a fallback. In the absence of an interpreter, Clojure should also work if you do not rely on `eval` or any other functions which depend on the byte-code compiler at runtime.
This of course assumes their compilation model is compliant with whatever version of the JVM specification the Clojure compiler targets. IIRC it should be compatible back to Java 6, so Clojure might not work without some tweaks to this project's compiler.
(Disclaimer: I am not involved with the project.)
True that RoboVM does carry over a lot of Android's bloat and quite a few cross platform bugs and broken implementations. E.g. SQLite thread safety, broken java.net stack etc.
Oh and its also closed source now ;-)