可以编译为Android Dalvik VM的功能语言吗?[关闭]


16

我有一个适合功能编程方法的软件问题,但目标市场将是Android OS。我问是因为有些功能语言可以编译为Java的VM,但是Dalvik字节码!= Java字节码。

另外,您是否知道该dx实用程序是否可以智能地转换.class从Scala等功能语言生成的文件?

编辑:为了给社区增加更多帮助,并帮助我更好地选择,我可以对问题进行一些改进吗?

  • 您是否在Dalvik中使用了任何其他语言?哪个?
  • 我可能会遇到哪些“陷阱”(问题)?
  • 性能可以接受吗?那样的话,我的意思是应用程序仍然对用户有所响应。

我从来没有做过手机开发,但是我在受限的设备上长大,并且我不幻想在该平台上使用非标准语言会产生成本。我只需要知道是否花了这么多钱,就可以将我的方法变成默认语言(即在OOP语言中应用功能原理)。


我已经更新了问题。谢谢@geekosaur的初步回答。那是我一直在寻找的开始信息。
Berin Loritsch 2011年

我曾在Haskell咖啡馆听到有人在窃窃私语,这些人是通过FFI + Haskell + Courage这样做的。我相信github / hackage上有一个图书馆
Daniel Gratzer

Answers:


7

Christian Neukirchen撰写了一篇博客文章,题为《使用Scala进行Android编程》,展示了如何为Android构建Scala程序。看起来dex可以处理Scala,但是您需要使用ProGuard之类的工具将Scala类库缩减为最小大小,因为dex否则将导入整个Scala运行时。

还有一些正在进行的有关使用ErjangClojure进行Android编程的工作。


1
您提供的几乎所有选项似乎都受到严重的性能损失。这告诉我,对于黄金时段而言,这些选择还不够成熟。也许再过一年?
Berin Loritsch 2011年

只要您不使用Scala的类库的大部分,就不会有任何明显的性能损失。另外,您可以使用maven自动化整个过程。

@Berin:我认为未来不会使用以JVM为目标的语言- dex毕竟已经过优化,不仅可以处理Java字节码,而且还可以处理Java的字节码约定(您会在我之前提供的链接中看到有关此问题的一些讨论)-而是目标Dalvik VM直接。可以想象,这最终可能会比Java dex路由更快。
geekosaur 2011年

1
对于那些好奇的人:Dalvik VM字节码已记录在案:操作码指令格式。我看到通过立即定位JVM无法实现窥视孔优化的某些可能性,更不用说直接使用Dalvik架构进行更智能的优化了。
geekosaur 2011年

@Kim,我发现的文章说性能问题在于Java和Dalvik的类加载算法之间的差异。如果我远离Scala的动态语言功能,则应该能够避免类加载问题。同一问题困扰着其他选择。现在还很新。我仍然可能最终在这个项目上进行尝试-无论如何,这都是概念的证明。
Berin Loritsch 2011年

7

Kawa是Scheme的一个可爱但鲜为人知的变体,它已经悄悄存在了许多年,并且在JVM和Dalvik上都可以在本地运行。因此,类似于Mirah,其输出不包含任何额外的VM,而仅包含显式导入的库。Kawa具有许多标准宏(包括一些特定于Android API的宏),这些宏可提供一种简洁的语法(假定其中一个与括号无关),并在Scheme之上添加了一些好吃的东西,例如“ promises”(懒惰的eval和Future)一)。该语言功能强大且文档齐全,自Java成立以来就一直得到积极维护和发展。

Java降临日历通过一些示例性示例和链接总结了Kawa的优点。


哇,谢谢你把我引向川!我一直很想做一些非Java Android开发,这看起来确实很有希望。
Evicatos

1

除了scala之外,我建议您在android上查看mirah,以下是一些详细信息:http ://threebrothers.org/brendan/blog/strange-loop-2011-mirah-for-android-development/

那么,什么使这种方法比其他语言“更好”呢?Mirah是一种静态类型语言,与ruby类似。可以说某些功能样式可能比java更好。通常将语言“移植”到android是有问题的,因为您也需要移植标准库。Mirah通过避免使用标准库来避免这种情况。在参考资料中,有关于REAL WORLD在Android上运行mirah的经验的很好概述,以及它的结果。(尝试2)


1
不要重新发布相同的答案,编辑后要求取消删除它所要做的就是标记它以引起注意。
扬尼斯2012年


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.