Pourquoi le concept de bytecode n'est pas aussi pertinent qu'auparavant


Présentation


Les langages compilés du type interprété sont les langages de programmation qui sont compilés en une sorte de représentation intermédiaire (parfois appelée " bytecode "). L'exemple le plus frappant est la JVM (Java Virtual Machine).


Cet article expose mes réflexions sur le concept d'une machine virtuelle pour les langages de programmation dans les réalités actuelles. Dans les réalités, où la plupart des services fonctionnent sur Internet, et les programmes de bureau sont progressivement supprimés.


Causes d'occurrence


Au moment où le World Wide Web est né, la technologie Java est apparue qui a d'abord popularisé l'utilisation d'une machine virtuelle comme environnement d'exécution pour les langages de programmation de haut niveau.


Sun Microsystems a essayé de combiner la fiabilité et la vitesse élevée des langages compilés avec la portabilité et la facilité d'utilisation des langages interprétés. Dans une certaine mesure, l'idée a été réalisée, car Java est toujours devenu la technologie la plus courante dans la construction de serveurs très chargés.


Entre autres choses, l'une des principales exigences de la plate-forme a été mise en avant, qui est devenue plus tard le slogan - "Compiler une fois, exécuter partout!" . Cela signifiait que le programmeur ne devait compiler qu'une seule fois le code source dans le soi-disant bytecode, capable de fonctionner sur n'importe quel système où la JVM est installée.


Cela est devenu le moteur de la technologie, jetant de nombreuses langues en arrière-plan. Ce fut une sorte de révolution dans le monde de l'informatique numérique, car avant tout le monde ne pouvait pas atteindre un niveau similaire de multiplateforme. Désormais, les utilisateurs peuvent télécharger la même version du programme sur de nombreux systèmes d'exploitation et architectures de processeur, et être sûr que cela fonctionnera certainement exactement comme le souhaitaient les développeurs.


Mais les temps changent et la technologie avec eux. Le World Wide Web gagne de plus en plus en popularité, évinçant certaines choses qui nous sont familières.


L'ère des services à distance


"Pourquoi offrir des programmes aux utilisateurs si vous pouvez simplement créer un site Web?" - Cette question a été posée par de grands entrepreneurs, ce qui a entraîné par la suite une émigration à grande échelle de services vers le World Wide Web. Les programmes de bureau standard ont commencé à perdre de leur popularité, car il est beaucoup plus facile et plus efficace de créer un site Web simple (ou pas).


Par conséquent, la nécessité de télécharger des programmes à partir d'Internet a si souvent disparu. Ouvrez un site et prenez les mesures nécessaires beaucoup plus rapidement que le téléchargement de mégaoctets de données binaires.


Pendant ce temps, Java a gagné en popularité dans la construction de ces sites, car rien de plus pratique à l'époque (à ce jour) n'existait. Les fichiers sources ont commencé à être compilés uniquement pour une architecture de serveur spécifique, par conséquent, le principe "Compiler une fois, exécuter partout!" a cessé d'avoir son ancienne signification . Les utilisateurs ont cessé de télécharger des programmes et les développeurs ont commencé à compiler uniquement pour une architecture spécifique.


Evolution du langage


Auparavant, les langages de programmation compilés avaient une fonctionnalité plutôt médiocre de la bibliothèque standard, à cause de laquelle il était nécessaire d'utiliser beaucoup de fonctions dépendant de la plate-forme même pour une application simple qui ne fait rien de surnaturel.


Les langages de programmation ne sont pas restés immobiles, et des langages comme Rust et Golang , tous deux compilés, sont apparus, et tous deux disposent d'une bibliothèque standard et de nombreuses bibliothèques tierces qui fournissent des fonctionnalités indépendantes de l'architecture et du système d'exploitation. De plus, l'écosystème C / C ++ ne s'est pas non plus arrêté.


En conséquence, il s'est avéré que les bibliothèques standard modernes et les machines virtuelles remplissent le même rôle - elles traduisent le code multiplateforme en fonctions dépendantes de la plate-forme.


Le reste de


Certains pourraient faire valoir qu'il existe toujours une demande pour les programmes de bureau. Fondamentalement, il s'agit de programmes fermés destinés à un usage interne dans les entreprises, ainsi que d'un petit nombre d'applications accessibles au public.


Dans les deux cas, la compilation pour des centaines de plates-formes différentes n'a pas de sens, car dans la grande majorité des cas, seuls trois systèmes d'exploitation bien connus ( GNU / Linux , Microsoft Windows et Mac OS ) et une famille d'architectures de processeurs ( x86 ) sont utilisés.


Conclusion


Au total, nous avons des machines virtuelles qui ralentissent leur travail (en tant qu'exécutions de bytecode), qui ont perdu leurs principaux avantages en raison des deux facteurs ci-dessus:


  1. La nécessité d'exécuter le programme sur des centaines d'architectures différentes n'a pas de sens, car la plupart des programmes fonctionnent sur des serveurs et il n'y a pas tellement d'architectures utilisateur et de systèmes d'exploitation.
  2. Les langues compilées ne sont pas restées immobiles et leurs bibliothèques standard ont acquis les fonctionnalités de base nécessaires pour le code multiplateforme.

Les discussions dans les commentaires sont les bienvenues, j'espère que l'article vous a incité à réfléchir sur le choix de la bonne langue pour vos tâches.


Ajouts


Comme indiqué dans les commentaires , le code managé présente certains avantages qui ne sont pas disponibles pour le code compilé, notamment la réflexion et les annotations.

Source: https://habr.com/ru/post/fr454562/


All Articles