Linguaggi funzionali compilabili per la VM Dalvik di Android? [chiuso]


16

Ho un problema software che si adatta all'approccio funzionale alla programmazione, ma il mercato di riferimento sarà sul sistema operativo Android. Lo chiedo perché ci sono linguaggi funzionali che possono essere compilati sulla VM di Java, ma Dalvik bytecode! = Java bytecode.

In alternativa, sai se l' dxutilità può convertire in modo intelligente i .classfile generati da linguaggi funzionali come Scala?

Modifica : per aggiungere un po 'più di aiuto alla comunità e anche per aiutarmi a scegliere meglio, posso affinare un po' la domanda?

  • Hai usato qualche lingua alternativa con Dalvik? Quale?
  • Quali sono alcuni "problemi" (problemi) che potrei incontrare?
  • Le prestazioni sono accettabili? Con ciò intendo che l'applicazione sembra ancora reattiva per l'utente.

Non ho mai fatto sviluppo di telefoni cellulari, ma sono cresciuto su dispositivi vincolati e non ho l'illusione che ci sia un costo per l'utilizzo di linguaggi non standard con la piattaforma. Devo solo sapere se il costo è tale che dovrei calpestare il mio approccio nella lingua predefinita (cioè applicare i principi funzionali nel linguaggio OOP).


Ho aggiornato la domanda. Grazie @geekosaur per la tua risposta iniziale. Quello stava iniziando le informazioni che stavo cercando.
Berin Loritsch,

Ho sentito sussurri nel caffè di Haskell di persone che lo facevano con FFI + Haskell + Courage. Credo che ci sia una libreria su github / hackage per questo
Daniel Gratzer,

Risposte:


7

C'è un post sul blog di Christian Neukirchen chiamato Programmazione per Android con Scala che mostra come costruire programmi Scala per Android. Sembra che sia in dexgrado di gestire Scala, ma è necessario utilizzare uno strumento come ProGuard per ridurre le dimensioni della libreria di classi Scala perché dexaltrimenti importerebbe l'intero runtime di Scala.

Ci sono anche alcuni lavori in corso sulla programmazione Android con Erjang e Clojure .


1
Sembra che quasi tutte le opzioni che hai dato abbiano gravi penalità di prestazione. Questo mi dice che le opzioni non sono ancora abbastanza mature per la prima serata. Forse tra un altro anno?
Berin Loritsch,

Fintanto che non utilizzi gran parte della libreria di classi di Scala, non ci dovrebbero essere penalità di performance significative. Inoltre, puoi automatizzare l'intero processo con Maven.
Kim,

@Berin: Penso che il futuro non stia usando i linguaggi di targeting JVM - dexdopotutto è ottimizzato per gestire non solo il bytecode Java ma anche le convenzioni bytecode Java (vedrai alcune discussioni di questo nei link che ho fornito in precedenza) - ma il targeting la VM Dalvik direttamente. Concepibilmente, ciò potrebbe finire per essere più veloce della dexrotta Java .
Geekosaur,

1
E per quelli che si chiedono: il bytecode VM Dalvik è documentato: codici operativi , formati di istruzioni . Vedo alcune possibilità per l'ottimizzazione dello spioncino non possibili mirando subito alla JVM, per non parlare delle ottimizzazioni più intelligenti che utilizzano direttamente l'architettura Dalvik.
Geekosaur,

@Kim, l'articolo che ho trovato afferma che il problema delle prestazioni era nelle differenze tra gli algoritmi di caricamento della classe per Java e Dalvik. Se sto lontano dalle funzionalità linguistiche dinamiche di Scala, dovrei essere in grado di evitare i problemi di caricamento della classe. Lo stesso problema ha afflitto le altre opzioni. È ancora tutto piuttosto nuovo in questo momento. Potrei ancora finire per provarlo su questo progetto - è comunque una prova di concetto.
Berin Loritsch,

7

Kawa è una variante adorabile ma poco conosciuta di Scheme che esiste in silenzio da molti anni e funziona sia su JVM che Dalvik, nativamente . Pertanto, simile a Mirah, il suo output non include VM aggiuntive e include solo librerie importate in modo esplicito. Kawa ha molte macro standard (incluse alcune specifiche per le API Android) che rendono piacevole una sintassi pulita (supponendo che una non sia contraria alle parentesi) e aggiunge alcune gustose chicche sopra Scheme, come "promesse" (valutazione pigra e futures in uno). Il linguaggio è abbastanza robusto e ben documentato, ed è stato attivamente mantenuto ed evoluto sin dai primi giorni di Java.

Il Calendario dell'Avvento di Java riassume i meriti di Kawa con alcuni esempi e collegamenti informativi.


Caspita, grazie per avermi indicato Kawa! Ho avuto il desiderio di fare qualche sviluppo Android non Java e questo sembra davvero promettente.
Evicatos,

1

Accanto a scala ti consiglio di dare un'occhiata a mirah su Android, qui ci sono alcuni dettagli: http://threebrothers.org/brendan/blog/strange-loop-2011-mirah-for-android-development/

Cosa rende questo approccio "migliore" rispetto alle altre lingue? Mirah è un linguaggio tipizzato statico che ricorda il rubino. Ciò consente uno stile funzionale probabilmente migliore di java. Solitamente il "porting" di un linguaggio su Android è problematico perché è necessario eseguire il porting anche della libreria standard. Mirah evita questo evitando di avere una lib standard. Nel materiale di riferimento c'è una bella panoramica dell'esperienza REAL WORLD che esegue mirah su Android e come si è scoperto. (prova 2)


1
Per favore , non ripubblicare la stessa risposta, tutto quello che dovevi fare per chiedere che la tua risposta fosse cancellata dopo averla modificata era contrassegnarla per l'attenzione della moderazione.
yannis,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.