【问题标题】:Android Adverse To Dynamic LanguagesAndroid 对动态语言不利
【发布时间】:2010-11-01 16:24:36
【问题描述】:

我相信我在某些时候读到,由于 Android 在 Dalvik VM 上运行,JVM 的动态语言(Clojure、Jython、JRuby 等)很难在 Dalvik 上(因此在 Android 上)获得良好的性能)。如果我没记错的话,原因是在幕后,为了实现动态类型,对 java 字节码进行了相当多的摆弄,而字节码->dalvik 翻译不会轻易接受这一点。

如果我想为 Android 开发,我应该避免使用动态 JVM 语言吗?


编辑:我想我应该提供更多的上下文。我正在考虑使用 Clojure 为 Android 开发应用程序。我考虑使用 Clojure 有几个原因:

  • 我想学FP

  • 我真的不想学 Java

  • Clojure 好像有一些很 有趣的语言概念(STM 例如)。

但是,当我尝试在 Clojure 中为 Android 编写应用程序时,我发现存在无法接受的性能问题。但我发现一篇博客文章说动态类型语言(例如 Clojure)会因为获取动态类型所需的字节码操作而出现问题。所以我在寻找独立的确认,这是真的还是不是。我应该知道,在这个特定问题中,所有动态类型的 JVM 语言都可以被视为相同的假设。我想我确实问了一个相当广泛的问题,所以我想我不应该对人们不太明白我在问什么感到惊讶。

【问题讨论】:

    标签: android dynamic clojure jvm


    【解决方案1】:

    Dan Bornstein 给了一个presentation on Dalvik at Google I/O。值得一看的是了解整个系统,包括您关心的约束。非Java语言编译成Java字节码的具体问题出现在问答环节。

    Remco van 't Veer 有一个github project,他在其中修补了 Clojure 以在 Android 上工作。 Tim Riddell 写了一个tutorial on how to use it

    正如@sean 在此提到的,有时存在比性能更大的问题。 Dan Bornstein 在~54:00 in video. 被问及 Jython 时对此进行了讨论。目前不支持动态生成字节码的动态语言(因为字节码翻译在运行时不可用)。

    【讨论】:

      【解决方案2】:

      Android 只是 got scripting

      【讨论】:

      • 我不确定你是否理解我的问题哈维尔。
      • @onorio:可能不完全是,因为您说的是基于 JVM 的语言;但是如果你想要任何脚本语言,现在 android 支持一些'本机',而不需要中间的 JVM,这是目前脚本的一个相当大的性能瓶颈。
      【解决方案3】:

      有一些补丁可以让 clojure 工作。

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

      我认为真正的问题是某些动态语言使用字节码生成器;他们不会为 Davlik VM 生成字节码。因此 eval 将不起作用。

      【讨论】:

      • @Sean McCauliff,该补丁是否解决了 Clojure 的启动性能问题?我正在学习 Clojure(想要它的 FP 部分)为 Android 编程,但我遇到了启动时间的一个主要问题。据我所知,启动时间问题尚未得到解决——除非补丁解决了它。
      【解决方案4】:

      鉴于手机运行的硬件相对狭窄,您可能应该只针对 java 而不必担心动态 jvm 语言。在我看来,它们在 jvm 上的动态语言不会像 java 那样高效。

      除了 Android SDK 非常健全且易于编写之外,我认为使用其他东西不会给您带来很多好处。

      【讨论】:

        【解决方案5】:

        JVM 的动态语言很难在 Dalvik 上获得良好的性能

        动态语言很难获得良好的性能,时期。如果您想要性能,请使用静态类型语言,如 Java(或 C#、F# 等)。

        【讨论】:

        • LuaJIT 是一个反例。也适用于 Android。
        猜你喜欢
        • 2015-07-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-13
        • 2011-05-13
        • 2011-02-10
        • 2010-10-05
        • 1970-01-01
        相关资源
        最近更新 更多