Publicité
Envisagez-vous actuellement d'utiliser Java pour votre prochaine application ou d'utiliser des outils et des frameworks natifs? Souhaitez-vous savoir quels avantages java offre par rapport à la programmation native pour une application? Continuez à lire pour le découvrir!
Qu'est-ce qu'une application native?
Une application native est un programme écrit spécifiquement pour un système d'exploitation (OS) et éventuellement pour le matériel spécifique exécutant ce système d'exploitation. Il est principalement écrit dans un langage tel que C / C ++. Le code source C / C ++ est compilé dans un formulaire objet à l'aide d'un compilateur, qui est ensuite assemblé en un exécutable en reliant les bibliothèques requises. Un programme construit de cette façon s'exécutera sur le matériel et le système d'exploitation spécifiques pour lesquels il est conçu, mais peut ne pas fonctionner correctement sur d'autres systèmes.
Pourquoi les applications natives ne sont-elles pas portables?
Un compilateur pour un langage tel que C / C ++ traduit les instructions de code source en langage machine pour le CPU ciblé. Lorsque vous essayez d'exécuter ce code sur un autre processeur, le programme peut ne pas fonctionner correctement (ou fonctionner du tout) car les instructions du langage machine dans le code compilé peuvent ne pas être prises en charge par ce processeur.
En outre, le nouveau système d'exploitation peut être différent de celui d'origine et peut même ne pas reconnaître le fichier programme comme un exécutable. Cela est dû aux différents formats de fichiers utilisés pour les exécutables sur différents systèmes d'exploitation (tels que Windows, Linux, MacOS, etc.).
La portabilité est un gros problème avec les applications natives que la simple mise à niveau du compilateur vers la prochaine version peut introduire des changements de rupture. Votre code devra peut-être être corrigé pour fonctionner avec le nouveau compilateur. En tant que tel, éclabousser le code source avec ce qu'on appelle ifdef Les instructions pour isoler les solutions de contournement spécifiques au matériel, au système d'exploitation ou au compilateur sont courantes.
Voici un petit extrait de code de Bibliothèque de compression BZLib qui illustre l'utilisation de ifdefs pour isoler les particularités de la plateforme:
#ifdef _WIN32. # comprendre # ifdef small / * windows.h définit small en char * / # undef petit. # fin si. # ifdef BZ_EXPORT. # définir BZ_API (func) WINAPI func. # définir BZ_EXTERN extern. # else / * importation dynamique de la DLL dll * / # définir BZ_API (func) (WINAPI * func) # définir BZ_EXTERN. # fin si. #autre. # définir BZ_API (func) func. # définir BZ_EXTERN extern. #fin si.
Portabilité du code source sur tous les systèmes d'exploitation
Cette situation peut être atténuée dans une certaine mesure en recompilant le code source C / C ++ sur le nouveau processeur. Cependant, le système d'exploitation du nouveau processeur peut être différent. Et le code source peut ne pas être compilé sans modifications, majeures ou mineures. Même des modifications mineures dans les versions du système d'exploitation peuvent nécessiter certaines modifications du code source.
Et lorsque vous envisagez des systèmes d'exploitation différents tels que Windows et Linux / UNIX, la portabilité est un tout nouveau jeu de balle. À moins que vous n'utilisiez une boîte à outils ou un cadre qui vous isole complètement du système d'exploitation, la portabilité du code source est impossible. En effet, l'interface du système d'exploitation est complètement différente entre ces systèmes. Si vous, dans les coins les plus reculés de votre code, utilisez directement des primitives de système d'exploitation, votre code ne sera pas portable sur ces divers systèmes d'exploitation.
En quoi Java est-il différent?
C'est dans ce scénario que java propose un nouveau paradigme, une nouvelle façon de construire des logiciels. Lors de la programmation en java, vous ciblez un machine virtuelle. Une telle machine existe en tant que concept, et le langage java fournit des interfaces pour la programmation contre cette machine. Par exemple, vous pouvez interroger la quantité de mémoire disponible, le nombre de CPU, les interfaces réseau, etc. de la machine virtuelle.
Comment sont construites les applications Java?
Le langage java fournit un compilateur java qui traduit le code source en code objet. Le code objet est ensuite exécuté par le machine virtuelle java, qui est un programme distinct du compilateur. Le système d'exploitation, à son tour, considère la machine virtuelle java comme simplement un autre programme exécuté sur ce système d'exploitation.
La charge de la portabilité est désormais passée du programmeur d'application au fournisseur de machine virtuelle java. Le programmeur d'application écrit le logiciel à l'aide des primitives du langage java et du java la machine virtuelle est responsable de la traduction de ces primitives vers le système d'exploitation hôte installations. Lorsqu'une nouvelle version du système d'exploitation sort, il est de la responsabilité du vendeur de mettre à jour la machine virtuelle java afin qu'elle fonctionne correctement sur le nouveau système d'exploitation.
Quels sont les avantages de la machine virtuelle Java?
Comme mentionné précédemment, la machine virtuelle java fournit une vue virtuelle du système d'exploitation et du matériel au programmeur d'application. Cette vue virtuelle se présente sous la forme de diverses interfaces et méthodes et sert à isoler le programmeur d'application des différences entre le système d'exploitation hôte et le matériel sous-jacent. Ainsi, le programmeur d'application peut accéder à des installations telles qu'une boîte à outils de fenêtrage, la mise en réseau, des graphiques 3D, plusieurs processeurs, etc. sans avoir à recourir à des appels de bas niveau qui finissent par rendre le programme non portable.
Un programme java est écrit et est compilé à l'aide du compilateur java. Le code objet résultant (appelé code d'octet) peut être transporté vers un autre système d'exploitation hôte exécuté sur un matériel différent et doit s'exécuter sans problème.
Compilateur JIT
La machine virtuelle java utilise un Compilateur JIT pour optimiser le code octet spécifiquement pour le CPU cible. JIT signifie Juste à temps et fait référence aux optimisations d'exécution que la JVM applique au code d'octet pour qu'elle s'exécute mieux sur le CPU actuel.
Un autre avantage de l'utilisation de la machine virtuelle Java est qu'elle peut appliquer différentes optimisations pour différents cas d'utilisation, toutes avec le même code d'octet. Par exemple, la JVM Oracle offre deux options pour exécuter le code d'octet: un mode serveur et un mode client. Le mode serveur est optimisé pour les programmes serveur de longue durée, tandis que le mode JVM client est optimisé pour les temps de réponse rapides car il est probablement utilisé en mode interactif.
Pour résumer, une application native est conçue pour un matériel et un système d'exploitation spécifiques. En revanche, une application java suit un Construisez une fois n'importe où la philosophie, en faisant exécuter par JVM les instructions de code d'octets compilés. Bien que les applications natives soient traditionnellement considérées comme plus performantes que les applications java, cela peut ne pas toujours être vrai en raison de l'utilisation d'un compilateur JIT par la JVM.
Avez-vous développé une application native et avez-vous dû passer à java en raison de la portabilité? Ou vice versa en raison de problèmes de performances? Faites-le nous savoir dans les commentaires ci-dessous.
Crédit d'image: Profit_Image via Shutterstock.com