Environnement d'exécution
# Environnement d'exécution

Un environnement d'exécution ou runtime est un logiciel responsable de l'exécution des programmes informatiques écrits dans un langage de programmation donné. Un runtime offre des services d'exécution de programmes tels que les entrées-sorties, l'arrêt des processus, l'utilisation des services du système d'exploitation, le traitement des erreurs de calcul, la génération d'événements, l'utilisation de services offerts dans un autre langage de programmation, le débogage, le profilage et le ramasse-miette.

Contrairement à un logiciel de développement permettant de programmer et développer son application, un runtime ne permet que l'exécution d'un programme. Un runtime peut être vu comme une machine virtuelle : de la même manière qu'un code natif est exécuté par le processeur, un code objet est exécuté par le runtime. Le runtime sert alors à exécuter du code objet en mettant le code natif ad hoc à disposition du processeur pour exécution.

La définition est informelle, par exemple le livre IWarp anatomy définit un runtime comme suit : « nous définissons le runtime comme étant le composant logiciel responsable de l'exécution des programmes sur les systèmes iWarp, il facilite l'exécution des programmes en cachant les détails bassement matériels de la machine. ».

## Technique

Un runtime met en œuvre un langage de programmation en permettant l'exécution des programmes écrits dans ce langage. Il offre des services tels que les entrées-sorties, l'arrêt des processus, l'utilisation des services du système d'exploitation, le traitement des erreurs de calcul, la génération d'événements, l'utilisation de services offerts dans un autre langage de programmation, le débogage, le profilage et le ramasse-miettes.

Un des premiers langages de programmation fonctionnant avec un runtime a été PL/1 en 1972. Lors de la compilation du programme, les instructions simples en langage PL/1 étaient traduites en les instructions correspondantes en langage machine, tandis que les instructions complexes étaient traduites en des utilisations des fonctions du runtime. Cette construction permettait de diminuer la taille du programme en langage machine.

### Langages interprétés

Le runtime est l'interpréteur : il interprète le code source, manipule les variables, réserve de la mémoire et prend en charge les erreurs d'exécution.

### Langages compilés

Les limites du runtime sont moins nettes : le code est exécuté directement par le processeur ; cependant ce code peut parfois avoir besoin de certaines fonctionnalités mises à disposition par le runtime, par exemple la création d'objets, le contrôle des types et le ramasse-miettes des langages de programmation orientés objet.

## Exemples

Traditionnellement différents langages de programmation utilisent différents runtimes, par exemple la bibliothèque standard du C, l'environnement d'exécution Java, et le Common Language Runtime. Le runtime peut être accompagné d'une bibliothèque standard à disposition du programmeur. Le runtime met en œuvre les fonctionnalités élémentaires du langage, tandis que la bibliothèque standard est typiquement écrite dans le langage lui-même.

La bibliothèque standard du C est un runtime normalisé par ANSI et largement inspiré du système d'exploitation Unix. Avant la normalisation chaque compilateur du langage C offrait sa propre bibliothèque de fonctions, et les programmes écrits pour un compilateur donné ne pouvait pas être compilé avec un autre compilateur, bien qu'il soit dans le même langage de programmation.

Le Common Language Runtime contrôle l'exécution des programmes dans différents langages de programmation et fournit des services. Les services sont exposés de manière différente selon le langage de programmation concerné, cependant la palette de fonctions est la même dans tous les langages et ils sont mis en œuvre par le même logiciel: le Common Language Runtime accompagné d'une bibliothèques de classes de plus de 2500 modules.

Dans les langages de programmation Lisp, Smalltalk, ML et Prolog, l'essentiel des fonctionnalités du langage sont offertes par le runtime accompagné d'une bibliothèque standard à disposition du programmeur.

