this post was submitted on 02 Jul 2023
94 points (96.1% liked)

Android

27939 readers
273 users here now

DROID DOES

Welcome to the droidymcdroidface-iest, Lemmyest (Lemmiest), test, bestest, phoniest, pluckiest, snarkiest, and spiciest Android community on Lemmy (Do not respond)! Here you can participate in amazing discussions and events relating to all things Android.

The rules for posting and commenting, besides the rules defined here for lemmy.world, are as follows:

Rules


1. All posts must be relevant to Android devices/operating system.


2. Posts cannot be illegal or NSFW material.


3. No spam, self promotion, or upvote farming. Sources engaging in these behavior will be added to the Blacklist.


4. Non-whitelisted bots will be banned.


5. Engage respectfully: Harassment, flamebaiting, bad faith engagement, or agenda posting will result in your posts being removed. Excessive violations will result in temporary or permanent ban, depending on severity.


6. Memes are not allowed to be posts, but are allowed in the comments.


7. Posts from clickbait sources are heavily discouraged. Please de-clickbait titles if it needs to be submitted.


8. Submission statements of any length composed of your own thoughts inside the post text field are mandatory for any microblog posts, and are optional but recommended for article/image/video posts.


Community Resources:


We are Android girls*,

In our Lemmy.world.

The back is plastic,

It's fantastic.

*Well, not just girls: people of all gender identities are welcomed here.


Our Partner Communities:

!android@lemmy.ml


founded 1 year ago
MODERATORS
 

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?

you are viewing a single comment's thread
view the rest of the comments
[–] outofband2@lemmy.world 8 points 1 year ago (1 children)

Thank you for this great and detailed answer!

I would also add that today JVM environments support more languages such as Scala, Kotlin, and Clojure (to name a few). So more variety and more modern paradigms are available.

As for native languages, we are more or less left with C, C++, Go and Rust. Also some of them are really awesome, none seem like a good choice for general-purpose app development.

And a counter-intuitive thing is that modern run times are so well optimized that sometimes they can outperform native applications (I'm not talking about very tight calculations such image processing and AI), because JIT has much more information about both the specific hardware and run time introspection that is unavailable at compile time.

[–] Zak@lemmy.world 1 points 1 year ago (1 children)

JVM environments support more languages such as Scala, Kotlin, and Clojure

Are you aware of a currently supported way to run JVM Clojure on Android? The build tools I'm aware of have been abandoned for years and aren't really usable anymore due to bit rot.

[–] outofband2@lemmy.world 1 points 1 year ago (1 children)

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@lemmy.world 1 points 1 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.