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


10

Voglio creare una libreria di analisi SyncML ( nessuna UI ) che dovrebbe essere in grado di creare messaggi basati sulle informazioni fornite dall'applicazione host, alimentate dai metodi della libreria. Inoltre, la libreria dovrebbe essere in grado di richiamare i metodi nell'applicazione host.

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

La priorità è di avere questo disponibile su dispositivi mobili.

Domande:

  1. Quale configurazione devo usare? (linguaggi di programmazione, compilatori, IDE ecc.)
  2. Come compilerei questa libreria per queste diverse piattaforme e come mi collegherei ad essa?
  3. Altre informazioni? ad esempio articoli che trattano 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 benvenuta.

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

Risposte:


8

L'uso della piattaforma Java / JVM sarebbe la scelta ovvia: ha la più ampia copertura multipiattaforma di qualsiasi lingua e se si dispone di un background 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 consiglierei uno dei seguenti:

  • Scala : se desideri una lingua potente, tipicamente statica, multi-paradigma con grandi prestazioni sulla JVM. Potrebbe adattarti se hai uno sfondo C #.
  • Clojure : se preferisci la programmazione funzionale, come i linguaggi dinamici e ti piace vivere all'avanguardia. Clojure ha capacità di concorrenza davvero eccellenti che possono essere allettanti: vale la pena guardare il video collegato per approfondimenti.
  • Groovy : se desideri un linguaggio di scripting orientato agli oggetti dinamico semplice ma efficace che sia molto familiare agli sviluppatori C # / Java.

Tutti questi linguaggi ottengono tutti i vantaggi di essere su JVM (fantastico compilatore JIT, raccolta dei rifiuti molto efficace, un enorme set di librerie) ma sono linguaggi molto più produttivi in ​​cui lavorare.

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

Considerazioni su altre opzioni:

  • C / C ++ può certamente funzionare su più piattaforme, ma richiede una ricompilazione (e test successivi) in codice nativo per ogni piattaforma. Con i linguaggi JVM che non sono necessari in quanto il bytecode stesso è portatile. A meno che tu non abbia assolutamente bisogno di C / C ++ per le prestazioni o l'accesso a funzionalità hardware non elaborate, penso che sia un mal di testa che dovresti evitare.
  • C # nella forma di Mono potrebbe funzionare (testimoniare il successo di Unity come una libreria multipiattaforma per esempio), ma non è in nessun luogo l'ecosistema JVM in termini di maturità, disponibilità della libreria o persino prestazioni non elaborate. Inoltre, non sarà mai compatibile al 100% con Microsoft .Net poiché .Net ha funzionalità specifiche di Windows che sono un incubo per la portabilità. Tuttavia, vale la pena considerare se sei determinato a rimanere con C #.
  • Javascript potrebbe essere un'opzione esterna se sei interessato a utilizzare la libreria sia sul lato client che sul lato server.

1
Grazie per la magnifica risposta. Sai quanto è possibile eseguire il porting di Java su iPhone, sotto forma di libreria o framework? Inoltre, non posso usare Funambol, il punto è creare la mia biblioteca.
Andrei,

2
Capisco che Apple stia diventando abbastanza restrittiva su Java su iPhone al momento. Mi aspetto che la pressione del mercato lo farà accadere di più in futuro - questo articolo theserverside.com/discussions/thread.tss?thread_id=63072 ad esempio parla di Oracle che dimostra un'app basata su Java in iPod Touch.
Mikera,

+1 per avermi istruito sul non dover usare Java di per sé, ma si può usare Scala, Clojure, Groovy. Risposta affascinante.
Anthony,

3

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


3

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

  1. Ad esempio, mentre potrebbe essere possibile comprimere un codice C ++ nella piattaforma mobile di Windows, qualsiasi cosa .NET sarà sempre più semplice qui della sua "controparte dal punto di vista del supporto.

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

  3. La cosa più importante suppongo sia il tipo e il livello della GUI che vuoi costruire.

Ora veniamo alle scelte più promettenti.

un. Per Symbian, Blackberry, Android, BREW e Bada (samsung) Java / J2ME è il modo più comune. Tuttavia, potresti essere meglio con C / C ++ in molti casi, per roba core 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 considero un obiettivo

Ecco un riferimento wiki che mostra l'insieme di tutte le piattaforme che mostra tutte le opzioni e dove si applicano.

Grazie alla tua domanda, ho appreso dal link wiki sopra che ora ci sono SDK, che cercano di risolvere il problema sopra. I due più vicini sono:

  1. Marmalade: http://www.madewithmarmalade.com/marmalade/supported-platforms supporta in modo interessante quasi tutte le piattaforme. Windows sta per essere aggiunto per rendere il cerchio completo.

  2. Codice particella: http://www.particlecode.com/

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


Android fornisce Bada e iOS consentono C ++.
Klaim,

3

.NET è difficilmente disponibile su molte piattaforme e Objective-C è anche peggio, inoltre .NET è un po 'lento e ObjC praticamente non ha supporto al di fuori di Apple. Fondamentalmente C non vale nemmeno la pena prendere in considerazione, a meno che un fattore esterno non ti faccia usare.

L'unico linguaggio possibile è C ++.


2
Sai qualcosa sui vantaggi dell'utilizzo del progetto Mono in combinazione con C #? Perché C non vale la pena considerare?
Andrei,

2
@Andrei: Per quanto ne so, Mono non è quasi il ritratto della disponibilità su tutte le piattaforme che hai elencato. E C non vale la pena considerare perché è proprio come C ++, ma con tutte le buone funzionalità tagliate, il che è ovviamente una cosa stupida da fare se puoi usare C ++.
DeadMG

4
@DeadMG: Mi piacerebbe vederti discutere questo punto con Linus Torvalds: thread.gmane.org/gmane.comp.version-control.git/57643/… - senza dire che deve avere ragione al 100%, vorrei mi piace solo guardare la fiamma.
Michael Borgwardt,

2
@DeadMG C non è C ++ con le buone caratteristiche tagliate; C ++ è C con aggiunte caratteristiche orribili. Non c'è niente di sbagliato in C.
bendaggio

2
@WTP: ha chiesto una raccomandazione, non la mia storia di vita. Il semplice fatto è che qualunque cosa tu pensi delle funzionalità extra di C ++, il fatto è che esistono e rendono C ++ - accessibile solo al codice, il che è un bonus, e C non è nulla C ++ - il contrario non è vero. Quando si utilizza C ++ su C, si aggiungono solo opzioni. Pertanto, per definizione, C ++ è un linguaggio superiore e puoi sempre scegliere di non utilizzare le funzionalità C ++. Quale sarebbe follia, ma puoi.
DeadMG
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.