我相信我在某些时候读过,由于Android在Dalvik VM上运行,JVM(Clojure,Jython,JRuby等)的动态语言很难在Dalvik上获得良好的性能(因此在Android上也是如此) )。如果我没记错的话,理由是在引擎盖下,为了实现动态类型,java字节码有很多小问题,字节码 - > dalvik翻译不会轻易地解决这个问题。
如果我想为Android开发,我应该避免使用动态JVM语言吗?
我想学习FP
我真的不在乎学习Java
Clojure似乎有一些非常的 有趣的语言概念(STM 例如)。
但是,当我尝试在Clojure中为Android编写应用程序时,我发现存在一个无法接受的性能问题。但是我发现一篇博文说,动态类型语言(例如Clojure)会因为获得动态类型所需的字节码操作而出现问题。所以我有点寻找独立的确认,这是真的,或者不是。我应该知道的最好是假设在这个特定的问题中,所有动态类型的JVM语言都可以被视为相同。我想我确实提出了一个相当广泛的问题,所以我想我不应该对人们不太了解我的问题感到惊讶。
答案 0 :(得分:17)
Remco van 't Veer有github project,他修补Clojure在Android上工作。 Tim Riddell撰写了tutorial on how to use it。
如@sean所述,有时候问题不仅仅是表现。当被问及Jython时,Dan Bornstein在~54:00 in video.讨论它。目前不支持动态语言,它们即时生成字节码,(因为字节码转换在运行时不可用)。
答案 1 :(得分:3)
Android只是got scripting
答案 2 :(得分:2)
有一些补丁可以使clojure工作。
http://riddell.us/tutorial/clojure_android/clojure_android.html
我认为真正的问题是某些动态语言使用字节码生成器;他们不会为Davlik VM生成字节代码。因此,eval不起作用。
答案 3 :(得分:2)
鉴于手机运行的相对简陋的硬件,你可能应该只针对java而不用担心动态的jvm语言。它们在jvm上的动态语言不会像我理解的那样高效。
除了Android SDK非常合理且易于编写之外,我认为使用其他东西不会带来很多好处。
答案 4 :(得分:1)
JVM的动态语言很难在Dalvik上获得良好的性能
动态语言难以获得良好的性能,期限。如果您想要性能,请使用静态类型语言,如Java(或C#,F#等)。