Pour autant que je sache, les compilateurs sont destinés aux développeurs qui compilent leur code dans des fichiers exécutables (code machine). Les compilateurs ne s'étendent pas à la machine d'un client ou au système de l'utilisateur final.
Au lieu de cela, les développeurs utilisent simplement le compilateur pour convertir leur code en code machine, qui est ensuite transporté vers les autres machines pour être utilisé comme applications.
Les compilateurs ont-ils une fonction en dehors de ce processus? Si oui, quand sont-ils utilisés?
Réponses:
Oui et non. Oui, le scénario classique est un développeur utilisant un compilateur pour générer du code machine à partir du code source, et le code machine est ensuite distribué aux utilisateurs.
Il y a cependant quelques exceptions. Tout d'abord, de nombreux projets open source sont distribués principalement (ou même exclusivement) sous forme de code source, et attendent de l'utilisateur final qu'il les installe en tapant quelques commandes comme
make
, puismake intall
. Cela invoquera le compilateur, l'éditeur de liens, etc., pour générer le code machine à partir du code source de l'ordinateur de cet utilisateur. Dans ces cas, cependant, le processus de construction et d'installation est (au moins destiné à être) automatisé au point que l'utilisateur a rarement besoin de beaucoup de connaissances au-delà du fait que s'il n'a jamais installé un package de code source uniquement auparavant , leur gestionnaire de packages répertorie généralement certains packages de "développement" comme une condition préalable à l'installation de l'application qui leur tient vraiment à cœur (bien que certains considèrent toujours cela comme hostile pour les utilisateurs finaux).Une autre exception (à laquelle on a fait allusion, mais qui n'est pas très bien expliquée dans les autres réponses que j'ai vues) concerne les compilateurs juste à temps (JIT). Quelques exemples évidents de compilateurs JIT sont le Microsoft Common Language Runtime (CLR) et la machine virtuelle Java (JVM). Dans ces cas, il y a normalement deux compilateurs entièrement distincts impliqués dans la traduction du code source en code machine. L'un est utilisé par le développeur. Cependant, plutôt que de générer directement du code machine, il génère un code octet indépendant de la machine. Le CLR / JVM comprend ensuite un deuxième compilateur, entièrement distinct du premier, qui convertit ces codes d'octets en code machine pour l'ordinateur cible.
Je dois ajouter que le deuxième compilateur n'est pas strictement nécessaire. Les premières versions de la JVM (par exemple) venaient d'interpréter les codes d'octets au lieu de les compiler. Cependant, cela entraîne souvent une pénalité de performances assez grave, de sorte que la plupart des machines virtuelles Java relativement récentes destinées à la production incluent un compilateur JIT.
la source
Oui, les compilateurs sont principalement utilisés par les développeurs, à quelques exceptions notables près. Les utilisateurs finaux utilisent parfois des compilateurs pour compiler et installer les derniers logiciels open source, même s'ils n'apportent aucune modification au code. De plus, certains langages de programmation n'ont pas de compilateurs. Ils utilisent plutôt des interprètes qui "compilent" à la volée. Dans ce cas, les utilisateurs finaux doivent avoir installé l'interpréteur sur leurs machines.
la source
Oui
Un compilateur est défini comme un programme qui traduit le code d'une langue dans une autre (voir Wikipedia ). L'utilisation la plus courante des compilateurs est de traduire le langage source en code machine, mais cela définit le mot "compilateur".
Par exemple, Python génère du code d'octet lorsqu'il importe un module et correspond ainsi à la définition d'un compilateur (car il convertit du langage source, Python, en langage cible, le code d'octet Python).
Un autre exemple est le moteur JavaScript V8. Il convertit JavaScript en code machine x86 , et s'inscrit donc également dans la définition d'un compilateur. Non seulement V8 correspond à la définition d'un compilateur, mais il est inclus dans Chrome et est très largement utilisé sur les machines clientes.
la source
Un cas serait pour une application qui a généré dynamiquement du code lors de l'exécution, puis a exécuté le code généré. Ce code devrait être compilé au moment de l'exécution.
Edit: Il existe d'autres exceptions, mais elles avaient déjà été mentionnées dans d'autres réponses.
la source
Je dirais que "les compilateurs sont destinés principalement aux développeurs ...". Mais j'ai vu des exemples où des programmes génèrent du nouveau code de langage de programmation à la volée et ont donc besoin d'un compilateur à installer sur la machine des utilisateurs finaux. Cela ne signifie pas que l'utilisateur final doit travailler seul avec le compilateur.
Raisons possibles de cette conception de programme:
performances: pensez à une application pilotée par des règles où les règles sont stockées dans une sorte de magasin de données d'utilisateur final et vous avez des données de masse à traiter par ces règles. Au lieu d'interpréter les règles encore et encore, un programme génère d'abord le code de traitement, le compile et l'exécute par rapport aux données à traiter
pensez à un programme où l'utilisateur final peut ajouter une sorte de formule mathématique et le développeur du programme ne veut pas implémenter son propre analyseur / interprète pour cela. Au lieu de cela, le programme prend cette formule, fait quelques ajouts pour le transformer en un morceau de code de programme valide, laissez le compilateur le compiler et l'exécuter ensuite.
la source
C'est vrai - les compilateurs compilent le code source sous forme exécutable, qui est ensuite lié dans un fichier binaire exécutable par un éditeur de liens. Le code source peut également être exécuté directement par un interpréteur tel que l'un des nombreux shells en ligne de commande (shell C, bash, zsh, etc.), awk, sed, etc.
Il peut être difficile de tracer une ligne claire entre «développeur» et «utilisateur final», sauf si vous limitez votre discussion à un produit spécifique. Les développeurs sont tous des "utilisateurs finaux" des outils qu'ils utilisent, et les "utilisateurs finaux" peuvent avoir des outils de développement tels que des compilateurs et des interprètes installés sur leurs machines.
la source
Les administrateurs peuvent également avoir besoin d'utiliser des langages de programmation pour écrire des scripts afin d'effectuer diverses tâches automatisées. Par exemple, avoir un script qui supprime les anciens fichiers journaux d'un serveur après 90 jours pour libérer de l'espace disque. Le langage utilisé pour écrire le script doit être interprété ou compilé pour pouvoir être exécuté sur le système.
la source
Certains programmes sont des méta-programmes : en cours d'exécution, ils peuvent générer un autre programme (ou du code source) et le compiler puis l'exécuter d'une manière ou d'une autre. Lisez aussi la programmation en plusieurs étapes .
Donc, pour utiliser ce genre de programmes, un compilateur serait nécessaire, même si l'utilisateur ne sait pas se programmer lui-même (car l'ordinateur générerait du code qui doit être compilé).
Pour un exemple, voir MELT (qui génère du code C ++ pour étendre GCC ) ou le système d'intelligence artificielle CAIA de J.Pitrat (qui génère du code C - notamment son propre code - pour résoudre les problèmes combinatoires).
De plus, certains langages et certaines implémentations nécessitent presque qu'un compilateur soit présent partout (dans chaque programme codé dans ce langage et implémentation). Premièrement, plusieurs navigateurs Web contiennent un moteur Javascript JIT (comme V8 ). De plus, la plupart des implémentations Common Lisp -eg SBCL - contiennent un compilateur (même utile pour exécuter des applications, qui peuvent générer et évaluer des expressions). Lisez aussi les langues homoiconiques et les programmes Qine .
la source