Quale lingua dovrei usare per creare una libreria multipiattaforma? [chiuso]

9

Voglio creare una libreria di analisi SyncML ( nessuna interfaccia utente ) che dovrebbe essere in grado di creare messaggi basati sulle informazioni fornite dall'applicazione host, alimentate dai metodi della libreria. Inoltre, la libreria deve essere in grado di eseguire callback ai metodi nell'applicazione host.

Voglio essere in grado di compilarlo e renderlo disponibile su quante più piattaforme possibili: Windows, Windows Phone 7 OS, OSX, iOS, Linux, Android, BlackBerry. Fondamentalmente quante più piattaforme possibili.

La priorità è di averla disponibile sui dispositivi mobili.

Domande:

  1. Quale configurazione dovrei usare? (linguaggi di programmazione, compilatori, IDE ecc.)
  2. Come potrei compilare questa libreria per queste diverse piattaforme e come collegarmi ad essa?
  3. Altre informazioni? per esempio. articoli che riguardano il tema dello sviluppo multipiattaforma?

Non ho mai fatto questo tipo di progetto multipiattaforma prima, quindi qualsiasi informazione disponibile per mettermi nella giusta direzione sarebbe gradita.

Io stesso ho uno sfondo in C # /. NET e Objective-C.

    
posta Andrei 24.11.2011 - 16:49
fonte

4 risposte

8

Utilizzare la piattaforma Java / JVM sarebbe la scelta più ovvia - ha la più ampia copertura multipiattaforma di qualsiasi lingua, e se hai uno sfondo C # /. Net i concetti saranno molto familiari.

Si noti che non è necessario utilizzare il linguaggio Java per ottenere i vantaggi della piattaforma Java; infatti, al giorno d'oggi, se si avvia un progetto da zero probabilmente si consiglia di ricorrere a una delle seguenti procedure:

  • Scala - se vuoi una langauge potente, tipizzata staticamente, a più paradigmi con grandi prestazioni sulla JVM. Potrebbe essere adatto a te se hai uno sfondo in C #.
  • Clojure - se preferisci la programmazione funzionale, come i linguaggi dinamici e goditi la vita all'avanguardia. Clojure ha capacità di concorrenza veramente eccellenti che possono essere allettanti: vale la pena guardare il video collegato per alcuni approfondimenti.
  • Groovy - se vuoi un linguaggio di scripting dinamico orientato agli oggetti semplice ma efficace che sarà molto familiare agli sviluppatori C # / Java.

Tutte queste lingue hanno tutti i vantaggi di essere sulla JVM (fantastico compilatore JIT, garbage collection molto efficace, un enorme set di librerie) ma sono linguaggi molto più produttivi su cui lavorare.

A proposito, c'è già una libreria SyncML open source disponibile in Java chiamata Funambol . Non sei sicuro della misura in cui questo è utile direttamente a te, ma è un esempio del fatto che di solito c'è una libreria Java open source per praticamente tutto .......

Pensieri su altre opzioni:

  • C / C ++ può certamente funzionare su più piattaforme, ma richiede una ricompilazione (e successivi test) in codice nativo per ciascuna piattaforma. Con linguaggi JVM che non è necessario in quanto il bytecode compilato è portatile. A meno che non sia assolutamente necessario C / C ++ per le prestazioni o l'accesso alle funzionalità hardware raw, penso che sia un mal di testa da evitare.
  • C # sotto forma di Mono potrebbe funzionare (testimonia il successo di Unity come una libreria multipiattaforma per esempio), ma non è in nessun posto Ecosistema JVM in termini di maturità, disponibilità di librerie o anche prestazioni non elaborate. Inoltre non sarà mai compatibile al 100% con Microsoft .Net dato che .Net ha caratteristiche specifiche di Windows che sono un incubo per la portabilità. Tuttavia, vale la pena considerare se si è determinati a rimanere con C #.
  • Javascript potrebbe essere un'opzione esterna se sei interessato a utilizzare la libreria sia lato client che lato server.
risposta data 25.11.2011 - 05:08
fonte
3

Potresti provare Java - Java Runtime Environment (la macchina virtuale) è multipiattaforma, Java può essere usato nei dispositivi mobili con Android (o con Java ME) e .NET è molto simile ad esso.

    
risposta data 24.11.2011 - 19:58
fonte
3

Questa non è una scelta ma molte. Mentre è allettante trovare una cosa che vada ovunque, non è sempre il modo migliore di farlo.

  1. Ad esempio, mentre può essere possibile spremere un codice C ++ nella piattaforma mobile Windows, qualsiasi cosa .NET sarà sempre più facile qui rispetto alla sua controparte dal punto di vista del supporto.

  2. Allo stesso modo, è necessario fare una scelta importante se si vuole che sia nativo o in fase di esecuzione e si limiti strettamente a Web potente o più generico potente? Ad esempio, Adobe Runtime è più onnipresente, ma limiterà a ciò che è possibile fare rispetto ai linguaggi di programmazione core.

  3. La cosa più importante, credo, è il tipo e il livello della GUI che si desidera creare.

Ora stiamo arrivando alle scelte più promettenti.

a. Per Symbian, Blackberry, Android, BREW e Bada (samsung) Java / J2ME è il modo più comune. Tuttavia, in molti casi si potrebbe essere migliori di C / C ++, per roba di base nativa in alcune piattaforme.

b. Per Windows .NET con qualsiasi linguaggio supportato sarebbe buono.

c. Per iOS - non c'è altra scelta che l'obiettivo C. Questo è NON molto C ++ quindi non lo conterei come obiettivo

Questo è un riferimento wiki che mostra un insieme di tutte le piattaforme che mostrano tutte le opzioni e dove si applicano.

Grazie alla tua domanda, ho imparato dal link del wiki qui sopra che esistono ora gli SDK, che cercano di risolvere il problema precedente. I due che si avvicinano di più sono:

  1. Marmalade: link questo supporta in modo interessante le quasi tutte le piattaforme . Windows sta per essere aggiunto per fare il giro completo.

  2. Codice particella: link

Non li ho ancora usati, ma sembra un lavoro interessante.

    
risposta data 24.11.2011 - 20:20
fonte
3

.NET è difficilmente disponibile su molte piattaforme, e Objective-C è anche peggio, oltre a .NET è piuttosto lento e ObjC non ha praticamente alcun supporto al di fuori di Apple. C come lingua, in pratica, non vale nemmeno la pena di essere presa in considerazione a meno che qualche fattore esterno non la faccia usare.

L'unico linguaggio valido per i risultati è C ++.

    
risposta data 24.11.2011 - 17:12
fonte