# Exécution (informatique)

En informatique, l'exécution est le processus par lequel un ordinateur ou une machine virtuelle met en œuvre les instructions d'un programme.
Les instructions du programme entraînent des séquences d'actions élémentaires sur la machine d'exécution. Les effets qu'entraînent ces actions sont conformes à la sémantique des instructions du programme.
Un programme en cours d'exécution est appelé un processus.
L’exécution symbolique permet d'explorer les chemins d'exécution possibles d'un programme informatique à partir des symboles contenus dans son code source. Elle diffère de l’exécution concrète qui ne suit qu'un seul des chemins possibles. Alors que l’exécution concrète met directement à jour les variables en mémoire, l’exécution symbolique enregistre les formules logiques liant les variables entre elles. Le but est d'analyser statiquement un programme pour trouver des bugs ou prouver certaines propriétés du programme. Il s'agit d'une interprétation abstraite d'un programme.

## Cadre de l'exécution

Le contexte dans lequel l'exécution se déroule est crucial. Très peu de programmes s'exécutent sur une machine qui exécute directement les programmes sans l'intervention d'un système d'exploitation. Les programmes contiennent généralement des hypothèses implicites et explicites sur les ressources disponibles au moment de l'exécution. La plupart des programmes sont exécutés avec l'appui d'un système d'exploitation et des bibliothèques d'exécution spécifiques au langage source qui fournissent des services essentiels non fournis par l'ordinateur lui-même. Ce contexte favorable, par exemple, découple généralement un programme de la manipulation directe des périphériques de l'ordinateur, fournissant un service plus général et plus abstrait à la place.

## Processus
### Code source

Avant l'exécution, un programme doit d'abord être écrit. Cela se fait généralement dans le code source, qui est ensuite compilé au moment de la compilation (et lié statiquement au moment de la liaison) à un fichier exécutable. Ce fichier exécutable est alors invoqué, le plus souvent, par un système d'exploitation, qui charge le programme dans la mémoire (temps de chargement) et éventuellement effectue la liaison dynamique, et alors commence l'exécution en déplaçant le contrôle au point d'entrée du programme.
Toutes ces étapes dépendent de l'Application Binary Interface du système d'exploitation.

### Temps d’exécution ou runtime

À ce stade, l'exécution commence et le programme entre dans son temps d'exécution (ou runtime en anglais).
Une erreur d'exécution est détectée pendant ou après l'exécution (état de marche) d'un programme, alors que les erreurs de compilation sont toujours détectées par le compilateur, avant l'exécution du programme. La vérification de type, l'allocation de registres, la génération de code et l'optimisation de code sont généralement effectués au moment de la compilation, mais peuvent être effectués au moment de l'exécution en fonction du langage indiqué et du compilateur. De nombreuses autres erreurs d'exécution existent et sont gérées différemment par différents langages de programmation, telles que les erreurs de division par zéro, les erreurs de domaine, les erreurs d'indice de tableau hors limites, les erreurs de dépassement arithmétique (par borne inférieure, de type entier ou réel), et de nombreuses autres erreurs d'exécution généralement considérées comme des bogues logiciels qui peuvent ou non être détectés et traités par un langage informatique particulier.
Certains débogages de programmes ne peuvent être effectués que (ou sont plus efficaces ou plus précis lorsqu'ils sont effectués) au moment de l'exécution. Les erreurs logiques et la vérification des limites du tableau en sont des exemples. Pour cette raison, certains bogues de programmation ne sont pas découverts tant que le programme n'est pas testé dans un environnement de production avec des données réelles, malgré une vérification sophistiquée au moment de la compilation et des tests de version préliminaire. Dans ce cas, l'utilisateur final peut rencontrer un message « erreur d'exécution ».
Ensuite, le programme s'exécute jusqu'à ce qu'il se termine, soit normalement, soit par un plantage.

### Gestion des exceptions

La gestion des exceptions est une fonctionnalité de langage conçue pour gérer les erreurs d'exécution, fournissant un moyen structuré de gérer des situations inattendues ainsi que des erreurs prévisibles ou des résultats inhabituels sans nécessiter une vérification de chaque erreur possible. Des avancées plus récentes dans les moteurs d'exécution permettent la gestion automatisée des exceptions qui fournit des informations de débogage hiérarchisée mentionnant la « cause première » pour chaque exception d'intérêt, de telles mécanismes sont implémentés indépendamment du code source, en attachant un produit logiciel spécial au moteur d'exécution.

## Interprète

Un système qui exécute un programme est appelé un interprète du programme. Grosso modo, un interprète ne fait que ce que le programme dit de faire. Cela contraste avec un traducteur de langue qui convertit un programme à partir d'un langage vers un autre. Les traducteurs les plus courants sont des compilateurs. Les traducteurs convertissent généralement le code source à partir d'un langage de haut niveau, lisible par l'homme, vers un langage de bas niveau (parfois aussi bas que le code machine) qui est plus simple et plus rapide à exécuter pour le processeur. L'idée est que le ratio d'exécutions pour les traductions d'un programme sera grand; c'est-à-dire qu'un programme aura besoin d'être compilé une fois et sera exécuté un grand nombre de fois. Cela peut fournir un grand avantage pour la traduction par rapport à l'interprétation directe de la langue source. Un inconvénient est que le temps de développement est rallongé, en raison de la compilation. Dans certains cas, seuls les fichiers modifiés doivent être recompilés. Ensuite l'exécutable doit être réédité. Pour certains changements, l'exécutable doit être reconstruit à partir de zéro. À mesure que les ordinateurs et les compilateurs deviennent plus rapides, cela est de moins en moins un obstacle. Cependant, la vitesse du produit final est généralement plus importante pour l'utilisateur que le temps de développement.
Les traducteurs produisent généralement un résumé de résultat qui n'est pas complètement prêt à s'exécuter. Souvent, le système d'exploitation se charge de convertir le code objet du traducteur en un fichier exécutable, juste avant que l'exécution du programme commence.