Annuncio pubblicitario
Stai attualmente discutendo se utilizzare java per la tua prossima applicazione o utilizzare toolkit e framework nativi? Vorresti sapere quali vantaggi offre java rispetto alla programmazione nativa per un'applicazione? Continuate a leggere per scoprirlo!
Che cos'è un'applicazione nativa?
Un'applicazione nativa è un programma scritto appositamente per un sistema operativo (OS) e possibilmente per l'hardware specifico che esegue quel sistema operativo. È per lo più scritto in un linguaggio come C / C ++. Il codice sorgente C / C ++ viene compilato in un modulo oggetto utilizzando un compilatore, che viene quindi assemblato in un eseguibile collegando le librerie richieste. Un programma creato in questo modo verrà eseguito sull'hardware e sul sistema operativo specifici per cui è stato creato, ma potrebbe non funzionare correttamente su altri sistemi.
Perché le applicazioni native non sono portatili?
Un compilatore per un linguaggio come C / C ++ traduce le istruzioni del codice sorgente in linguaggio macchina per la CPU di destinazione. Quando si tenta di eseguire questo codice su una CPU diversa, il programma potrebbe non funzionare correttamente (o non funzionare affatto) poiché le istruzioni del linguaggio macchina nel codice compilato potrebbero non essere supportate da questa CPU.
Inoltre, il nuovo sistema operativo potrebbe essere diverso da quello originale e potrebbe anche non riconoscere il file di programma come eseguibile. Ciò è dovuto ai diversi formati di file utilizzati per gli eseguibili in diversi sistemi operativi (come Windows, Linux, MacOS, ecc.).
La portabilità è un problema così grande con le applicazioni native che il semplice aggiornamento del compilatore alla versione successiva può introdurre cambiamenti di rilievo. Potrebbe essere necessario correggere il codice per funzionare con il compilatore più recente. Come tale, schizzando il codice sorgente con quelli che sono noti come ifdef le istruzioni per isolare soluzioni alternative specifiche per hardware, sistema operativo o compilatore sono comuni.
Di seguito è riportato un piccolo frammento di codice di Libreria di compressione BZLib che illustra l'uso di ifdefs per isolare le peculiarità della piattaforma:
#ifdef _WIN32. # includere # ifdef small / * windows.h definisce small to char * / # undef small. # finisci se. # ifdef BZ_EXPORT. # define BZ_API (func) WINAPI func. # definisce BZ_EXTERN esterno. # else / * importa dinamicamente windows dll * / # define BZ_API (func) (WINAPI * func) # definisce BZ_EXTERN. # finisci se. #altro. # define BZ_API (func) func. # definisce BZ_EXTERN esterno. #finisci se.
Portabilità del codice sorgente tra i sistemi operativi
Questa situazione può essere in qualche modo alleviata ricompilando il codice sorgente C / C ++ nella nuova CPU. Tuttavia, il sistema operativo per la nuova CPU potrebbe essere diverso. E il codice sorgente non può essere compilato senza modifiche, sia maggiori che minori. Anche piccole modifiche nelle versioni del sistema operativo potrebbero richiedere alcune modifiche al codice sorgente.
E se si considerano sistemi operativi diversi come Windows e Linux / UNIX, la portabilità è un gioco di palla completamente nuovo. A meno che non si stia utilizzando un toolkit o un framework che ti isola completamente dal sistema operativo, la portabilità del codice sorgente è impossibile. Questo perché l'interfaccia del sistema operativo è completamente diversa tra questi sistemi. Se tu, negli angoli più remoti del tuo codice, usi direttamente qualsiasi primitiva del sistema operativo, il tuo codice non sarà portatile su questi diversi sistemi operativi.
In cosa differisce Java?
È in questo scenario che Java offre un nuovo paradigma, un nuovo modo di creare software. Durante la programmazione in Java, scegli come target a macchina virtuale. Tale macchina esiste come concetto e il linguaggio java fornisce interfacce per la programmazione contro questa macchina. Ad esempio, è possibile interrogare la quantità di memoria disponibile, il numero di CPU, le interfacce di rete, ecc. Della macchina virtuale.
Come sono costruite le applicazioni Java?
Il linguaggio java fornisce un compilatore java che traduce il codice sorgente in codice oggetto. Il codice oggetto viene quindi eseguito da macchina virtuale Java, che è un programma separato dal compilatore. Il sistema operativo, a sua volta, visualizza la macchina virtuale Java come un altro programma in esecuzione su quel sistema operativo.
L'onere della portabilità si è ora spostato dal programmatore dell'applicazione al fornitore di macchine virtuali Java. Il programmatore dell'applicazione scrive il software usando le primitive del linguaggio java e java la macchina virtuale è responsabile della traduzione di queste primitive nel sistema operativo host strutture. Quando viene rilasciata una nuova versione del sistema operativo, è responsabilità del fornitore aggiornare la macchina virtuale Java in modo che funzioni correttamente sul nuovo sistema operativo.
Quali sono i vantaggi della Java Virtual Machine?
Come accennato in precedenza, la macchina virtuale Java fornisce una vista virtuale del sistema operativo e dell'hardware al programmatore dell'applicazione. Questa vista virtuale ha la forma di varie interfacce e metodi e serve a isolare il programmatore dell'applicazione dalle differenze nel sistema operativo host e nell'hardware sottostante. Pertanto, il programmatore dell'applicazione può accedere a servizi come Windowing Toolkit, Networking, grafica 3D, più CPU, ecc. senza dover ricorrere a chiamate di basso livello che finiscono per rendere il programma non portatile.
Viene scritto un programma java che viene compilato usando il compilatore java. Il codice oggetto risultante (chiamato codice byte) può essere trasportato su un diverso sistema operativo host in esecuzione su hardware diverso e dovrebbe funzionare senza problemi.
Compilatore JIT
La macchina virtuale Java utilizza a Compilatore JIT per ottimizzare il codice byte specifico per la CPU di destinazione. JIT sta per Appena in tempo e si riferisce alle ottimizzazioni di runtime che la JVM applica al codice byte per farlo funzionare meglio sulla CPU corrente.
Un altro vantaggio dell'utilizzo della Java Virtual Machine è che può applicare diverse ottimizzazioni per diversi casi d'uso, tutti con lo stesso codice byte. Ad esempio, Oracle JVM offre due opzioni per l'esecuzione del codice byte: una modalità server e una modalità client. La modalità server ottimizza per programmi server a lunga esecuzione, mentre la modalità JVM client ottimizza per tempi di risposta rapidi poiché è probabilmente utilizzata in modalità interattiva.
Per riassumere, viene creata un'applicazione nativa per un hardware e un sistema operativo specifici. Un'applicazione java, d'altra parte, segue a Build Once Run Anywhere filosofia, facendo eseguire a JVM le istruzioni del codice byte compilate. Mentre le applicazioni native sono state tradizionalmente considerate più performanti delle applicazioni java, potrebbe non essere sempre vera a causa dell'uso di un compilatore JIT da parte della JVM.
Hai sviluppato un'applicazione nativa e hai dovuto passare a Java a causa della portabilità? O viceversa a causa di problemi di prestazioni? Fateci sapere nei commenti qui sotto.
Credito di immagine: Profit_Image tramite Shutterstock.com