Ich habe ein Softwareproblem, das zum funktionalen Ansatz der Programmierung passt, aber der Zielmarkt wird das Android-Betriebssystem sein. Ich frage, weil es funktionale Sprachen gibt, die zu Javas VM kompilieren, aber Dalvik-Bytecode! = Java-Bytecode.
Oder wissen Sie, ob das dx
Dienstprogramm .class
die aus Funktionssprachen wie Scala generierten Dateien intelligent konvertieren kann ?
Bearbeiten : Kann ich die Frage ein wenig verfeinern, um der Community ein bisschen mehr Hilfe zukommen zu lassen und um mir bei der Auswahl zu helfen?
- Haben Sie andere Sprachen mit Dalvik verwendet? Welche?
- Was sind einige "Fallstricke" (Probleme), auf die ich stoßen könnte?
- Ist die Leistung akzeptabel? Damit meine ich, dass die Anwendung immer noch auf den Benutzer reagiert.
Ich habe noch nie Mobiltelefone entwickelt, bin aber mit eingeschränkten Geräten aufgewachsen und habe keine Illusion, dass die Verwendung von Nicht-Standardsprachen mit der Plattform Kosten verursacht. Ich muss nur wissen, ob die Kosten so hoch sind, dass ich meinen Ansatz in die Standardsprache umwandeln sollte (dh Funktionsprinzipien in der OOP-Sprache anwenden).
quelle
Antworten:
Es gibt einen Blog-Beitrag von Christian Neukirchen mit dem Titel Programming for Android with Scala , in dem gezeigt wird, wie man Scala-Programme für Android erstellt. Wie es aussieht,
dex
kann Scala damit umgehen, aber Sie müssen ein Tool wie ProGuard verwenden, um die Scala-Klassenbibliothek auf die richtige Größe zu bringen, dadex
andernfalls die gesamte Scala-Laufzeit importiert wird.An der Android-Programmierung mit Erjang und Clojure wird derzeit gearbeitet .
quelle
dex
ist immerhin optimiert, um nicht nur Java-Bytecode, sondern auch Javas Bytecode- Konventionen zu behandeln (Sie werden dies in den zuvor bereitgestellten Links erörtern) - sondern Targeting die Dalvik VM direkt. Möglicherweise ist das schneller als die Java-dex
Route.Kawa ist eine schöne, aber wenig bekannte Variante des Programms, die seit vielen Jahren leise existiert und sowohl auf der JVM als auch auf Dalvik ausgeführt wird . Daher enthält die Ausgabe ähnlich wie bei Mirah keine zusätzliche VM und nur explizit importierte Bibliotheken. Kawa verfügt über viele Standardmakros (einschließlich einiger für Android-APIs spezifischer Makros), die für eine schöne, saubere Syntax sorgen (vorausgesetzt, man ist nicht abgeneigt von Klammern) und zusätzlich zu Scheme einige leckere Extras wie "Versprechen" (Lazy Eval und Futures) hinzufügen in Eins). Die Sprache ist ziemlich robust und gut dokumentiert und wurde seit den Anfängen von Java aktiv gepflegt und weiterentwickelt.
Der Java-Adventskalender fasst Kawas Verdienste mit einigen informativen Beispielen und Links zusammen.
quelle
Neben Scala kann ich Ihnen vorschlagen, sich Mirah auf Android anzuschauen. Hier einige Details: http://threebrothers.org/brendan/blog/strange-loop-2011-mirah-for-android-development/
Was macht diesen Ansatz "besser" als die anderen Sprachen? Mirah ist eine statische typisierte Sprache mit Ähnlichkeit zu Rubin. Das erlaubt einen funktionalen Stil, der vermutlich besser ist als Java. Normalerweise ist das 'Portieren' einer Sprache auf Android problematisch, da Sie auch die Standardbibliothek portieren müssen. Mirah vermeidet dies, indem es vermeidet, eine Standardbibliothek zu haben. In dem referenzierten Material gibt es eine schöne Übersicht von REAL WORLD Erfahrung mit mirah auf Android und wie es sich herausstellte. (versuche 2)
quelle
Bei Clojure für Android ( https://github.com/clojure-android/neko ) Neko hat sich viel bewegt .
Es gibt Leistungsprobleme im Zusammenhang mit der Dalvik-VM und dem Clojure-Compiler. Diese Probleme werden langsam gelöst.
Eine Präsentation zum aktuellen Status (Juli 2015): https://www.youtube.com/watch?v=mVXTcAEKgF8&index=9&list=PLZdCLR02grLoBx0Y5ZrpdmLxc160PIwzQ
quelle
Es ist noch nicht ganz so weit, aber Miguel de Icaza, ein Typ, der ein oder zwei Dinge über die Davlik VM weiß, sagt: " F # für Droiden ist auf ihrer Liste der Dinge, die zu tun sind ." Also würde ich sagen, dass ein offizielles Paket kommt.
quelle