More concretely, I’m asking this: why aren’t applications compiled fully to native code before distribution rather than bytecode that runs on some virtual machine or runtime environment?

Implementation details aside, fundamentally, an Android application consists of bytecode, static resources, etc. In the Java world, I understand that the main appeal of having the JVM is to allow for enhanced portability and maybe also improved security. I know Android uses ART, but it remains that the applications are composed of processor-independent bytecode that leads to all this complex design to convert it into runnable code in some efficient manner. See: ART optimizing profiles, JIT compilation, JIT/AOT Hybrid Compilation… that’s a lot of work to support this complex design.

Android only officially supports arm64 currently, so why the extra complexity? Is this a vestigial remnant of the past? If so, with the move up in minimum supported versions, I should think Android should be transitioning to a binary distribution model at a natural point where compatibility is breaking. What benefit is being realized from all this runtime complexity?

  • @outofband2
    link
    English
    11 year ago

    I actually use Clojure quite a bit on the backend/data pipelines, and was actually curious if it’s used in app development.

    Your comment probably answers that question :/ Probably too much of a small community and most applications seem to be backend stuff. Maybe it’s possible to build app with CkojureScript as it complise well to JavaScript.

    • @Zak
      link
      English
      11 year ago

      I actually wrote an app in Clojure and can no longer create new builds. What I’ve seen people doing lately does use Clojurescript, but I haven’t gotten around to trying that myself yet.