Onorio Catenacci
Onorio Catenacci

Reputation: 15333

Android Adverse To Dynamic Languages

I believe I read at some point that due to Android running on the Dalvik VM, that dynamic languages for the JVM (Clojure, Jython, JRuby etc.) would be hard pressed to obtain good performance on Dalvik (and hence on Android). If I recall correctly, the reasoning was that under the hood, in order to achieve the dynamic typing, there was quite a bit of fiddling done with the java bytecode and that the bytecode->dalvik translation wouldn't pick this up easily.

So should I avoid a dynamic JVM language if I want to develop for Android?


EDIT: I guess I should have provided a bit more context. I was considering using Clojure to develop apps for Android. I was thinking about using Clojure for a few reasons:

However, when I tried to write apps for Android in Clojure, I found that there is a performance issue that is unacceptable. But I found a blog posting that said that dynamically typed languages (Clojure for example) would have problems due to the bytecode manipulation needed to get the dynamic typing. So I was sort of looking for independent confirmation that this is true or it isn't. I should have known better than to make the assumption that in this particular issue all dynamically typed JVM languages could be treated as the same. I guess I did ask a fairly broad question so I guess I shouldn't be surprised that people didn't quite understand what I was asking.

Upvotes: 30

Views: 7078

Answers (5)

J D
J D

Reputation: 48687

dynamic languages for the JVM would be hard pressed to obtain good performance on Dalvik

Dynamic languages are hard pressed to obtain good performance, period. If you want performance, use a statically typed language like Java (or C#, F# etc.).

Upvotes: 1

Matt G
Matt G

Reputation: 2373

Dan Bornstein gave a presentation on Dalvik at Google I/O. It's worth watching to learn about the system in general, including the constraints you care about. The specific issue of non-Java languages compiled into Java bytecode comes up during the Q&A.

Remco van 't Veer has a github project where he's patched Clojure to work on Android. Tim Riddell has written a tutorial on how to use it.

As mentioned here by @sean, there is sometimes a bigger problem than just performance. Dan Bornstein discusses it when asked about Jython, at ~54:00 in video. There is currently no support for dynamic languages which generate bytecode on-the-fly, (because the bytecode translation is not available at runtime).

Upvotes: 17

Javier
Javier

Reputation: 62623

Android just got scripting

Upvotes: 3

Jeremy Wall
Jeremy Wall

Reputation: 25245

Given the relatively speaking cramped hardware of the phone running you probably should just target java and not worry about a dynamic jvm language. They dynamic languages on the jvm aren't going to be as efficient as the java to my understanding.

Besides the Android SDK is pretty sane and easy to write for I don't think you'll experience very many benefits using something else.

Upvotes: 2

Sean McCauliff
Sean McCauliff

Reputation: 1524

There are some patches to make clojure work.

http://riddell.us/tutorial/clojure_android/clojure_android.html

I think the real issue is the use of byte code generators by some dynamic languages; they won't generate byte code for the Davlik VM. Therefore eval will not work.

Upvotes: 2

Related Questions