Come pianificare lo sviluppo di applicazioni multipiattaforma [chiuso]

0

Nei miei primi giorni di programmazione, stavo usando Visual Basic per l'apprendimento. Mi ha insegnato molti concetti, e sono stato in grado di creare alcuni programmi interessanti (secondo me, comunque ...). Ho allargato il mio orizzonte a base di C / C ++, PHP e MySQL.

Uno dei miei progetti preferiti, voglio trasformarmi in un'applicazione multi-platfrom (per x86 / x64) con finestre e avere open source. Ho già deciso sulla licenza, ma voglio sapere, prima di iniziare a sviluppare in una nuova lingua, come posso scegliere quale lingua utilizzare, cioè multipiattaforma e consentire la creazione di finestre? Non desidero utilizzare le tecnologie web, in quanto l'applicazione funziona con molti file locali alla volta.

Questa è non una domanda su quale sia la tecnologia migliore, ma su quale sarebbe utile per questo progetto. So che qualcosa deve essere possibile, perché ci sono app che funzionano come binari di Mac OSX, binari di Windows e persino binari di Linux, tutto in Windows (cioè VLC Media Player, Firefox (Ice Wheazel), ecc.)

    
posta Canadian Luke 13.04.2014 - 04:57
fonte

2 risposte

2

Dipende principalmente da quali piattaforme stai mirando.

Se scegli come target solo piattaforme PC (che non sono molto esotiche), allora hai molte opzioni riguardanti il linguaggio (C ++, Java, Python, Go, ecc.) e la struttura della GUI multipiattaforma (Qt, GTK, SWT, Swing, wxWidgets, ecc. Ecc.). La portabilità non dovrebbe essere la principale preoccupazione quando si sceglie una lingua per il programma solo per PC (praticamente tutto ciò che è non specifico per OS dovrebbe essere portatile ).

Se vuoi scegliere come target PC e qualcosa di più (web o mobile), hai bisogno di un livello superiore di portabilità. Lo stile architettonico è cruciale, perché vuoi staccare pezzi specifici della piattaforma dal codice portatile. Lo stile più popolare che si rivolge ai requisiti di portabilità è architettura a livelli (il codice portabile va nel livello intermedio). Ogni livello può (e spesso lo sarà) essere scritto in una lingua diversa. Puoi prendere in considerazione la possibilità di strutturare il tuo codice a strati anche in caso di programmi solo per PC (probabilmente appariranno cose specifiche del sistema operativo).

Le possibilità linguistiche si restringono quando si prende di mira qualcosa di più del PC. A seconda di quali piattaforme particolari ti interessano, può anche rendere impossibile scrivere tutto in una lingua (a meno che tu non sia preparato per scrivere il tuo compilatore).

  • Per PC e dispositivi mobili, C ++ è la scelta giusta per scrivere codice portatile (livello logico), perché tutte le piattaforme mobili tradizionali lo supportano. Per GUI mobile - Qt o soluzioni specifiche per piattaforma (Java, ObjC e C #). La scelta di Qt può velocizzare tutto (la maggior parte del codice viene eseguito ovunque) ma potrebbe essere necessaria una conoscenza di basso livello di Qt e piattaforme mobili per farlo funzionare. Più hai una GUI, più Qt sarà più redditizio.
  • Nel caso in cui desideri scegliere come target PC e web, hai le lingue Java, Python e Go . Se scegli Java, avrai tutto più omogeneo (framework come GWT e Vaadin abilitano la scrittura del codice lato client in Java). Se scegli Go, avrai una lingua più giovane (più fresca) rispetto a Java, che richiede meno hotplate e non ha bisogno della VM per funzionare (meno parti coinvolte = meno problemi), ma dovrai utilizzare una lingua diversa per il web GUI (JavaScript o Dart) .
  • Le cose si complicano molto se vuoi che il tuo programma funzioni su PC, web e mobile e vuoi che la versione per PC e mobile sia autosufficiente (funziona senza componente server). In questo caso non esiste una sola lingua che verrà eseguita ovunque. Probabilmente prenderei l'approccio PC + mobile per il codice logico (scriverlo in C ++) e poi, o creare collegamenti ad altro linguaggio disponibile sulla piattaforma web, o scrivere software server in C ++. Un'altra possibilità è scrivere logica in Java (approccio PC + web) e quindi scrivere (usando LLVM) un compilatore che traduca java in lingue disponibili su piattaforme mobili di destinazione. In ogni caso, è necessario un ulteriore sforzo per farlo funzionare su un terzo tipo di piattaforma .

L'elenco qui sopra non è esaustivo né completo.

Dopo aver scelto le tecnologie, raccomando progettare interfacce tra i livelli , quindi pianificare l'implementazione.

    
risposta data 13.04.2014 - 17:37
fonte
1

Ogni SO utilizza i propri formati di file per i file eseguibili e le librerie condivise e ogni SO ha anche una propria API per le applicazioni che interagiscono con esso. Ciò significa che generalmente i file binari creati per OS A non possono essere utilizzati su OS B.

Esistono due modi per scrivere applicazioni che possono essere utilizzate su più piattaforme:

  1. Si utilizza una macchina virtuale (VM) che nasconde tutte / la maggior parte delle differenze tra i sistemi operativi. Le tecnologie Web sono basate su questo (con il browser che fornisce la VM), ma anche su linguaggi come Java e lingue interpretate.
  2. Si creano binari separati per ciascun sistema operativo che si supporta e si utilizzano librerie multipiattaforma per nascondere la maggior parte delle differenze tra i sistemi operativi dalla logica dell'applicazione principale.

Quando si sceglie una lingua per lo sviluppo multipiattaforma, le considerazioni principali sono

  • Quali piattaforme voglio supportare
  • In quali lingue mi trovo a mio agio quando utilizzo
  • Per quale di quelle lingue ci sono VM o compilatori che prendono di mira tutte le piattaforme richieste
  • Quelle lingue supportano le funzionalità che voglio (ad esempio una GUI), possibilmente attraverso le librerie
  • Per linguaggi compilati in modo nativo, per i quali esistono librerie multipiattaforma che supportano tutte le piattaforme richieste o sono pronto a scriverne uno da solo.
risposta data 13.04.2014 - 10:37
fonte

Leggi altre domande sui tag