Qu'est-ce que le «runtime»?


405

J'ai entendu parler de choses comme "C Runtime", "Visual C ++ 2008 Runtime", ".NET Common Language Runtime", etc.

  • Qu'est-ce que " runtime " exactement?
  • De quoi est-ce fait?
  • Comment interagit-il avec mon code? Ou peut-être plus précisément, comment mon code est-il contrôlé par lui?

Lors du codage du langage d'assemblage sous Linux, je pouvais utiliser l'instruction INT pour effectuer l'appel système. Donc, le runtime n'est-il qu'un tas de fonctions préfabriquées qui enveloppent la fonction de bas niveau dans des fonctions plus abstraites et de haut niveau? Mais cela ne ressemble-t-il pas davantage à la définition de la bibliothèque, pas à celle de l'exécution?

Est-ce que "runtime" et " runtime library " sont deux choses différentes?

AJOUTER 1

Ces jours-ci, je pense que Runtime a peut-être quelque chose en commun avec la soi-disant machine virtuelle , telle que JVM. Voici la citation qui conduit à une telle réflexion:

Ce processus de compilation est suffisamment complexe pour être divisé en plusieurs couches d'abstraction, et celles-ci impliquent généralement trois traducteurs: un compilateur, une implémentation de machine virtuelle et un assembleur. --- Les éléments des systèmes informatiques (Introduction, The Road Down To Hardware Land)

AJOUTER 2

Le livre Expert C Programming: Deep C Secrets . Le chapitre 6 Structures de données d'exécution est une référence utile à cette question.


Le runtime contient le runtime libraryplus un code de contrôle et un état (fourni par le système d'exploitation).
Martin York

43
Grande question, toujours remise en question.
contactmatt

Je n'appellerais pas INT une fonction. Veuillez consulter stackoverflow.com/questions/1817577/… pour plus de détails.
Koray Tugay

2
J'ai trouvé un autre post sur un site sœur qui peut être utile: programmers.stackexchange.com/questions/294346/…
CloudyTrees

J'en pense toujours comme un bac à sable pour une infrastructure de niveau inférieur. Vous avez les processus Task Manager / Or sur le kit Unix, toutes les bibliothèques GUI de bas niveau, etc. Tout cela fait partie du runtime. Les fondations sur lesquelles les choses sont construites.
JGFMK

Réponses:


262

Runtime décrit les logiciels / instructions qui sont exécutés pendant l' exécution de votre programme, en particulier les instructions que vous n'avez pas écrites explicitement, mais qui sont nécessaires à la bonne exécution de votre code.

Les langages de bas niveau comme C ont un temps d'exécution très faible (le cas échéant). Les langages plus complexes comme Objective-C, qui permettent le passage dynamique des messages, ont un temps d'exécution beaucoup plus étendu.

Vous avez raison de dire que le code d'exécution est un code de bibliothèque, mais le code de bibliothèque est un terme plus général, décrivant le code produit par n'importe quelle bibliothèque. Le code d'exécution est spécifiquement le code requis pour implémenter les fonctionnalités du langage lui-même.


103

L'exécution est un terme général qui fait référence à toute bibliothèque, infrastructure ou plate-forme sur laquelle votre code s'exécute.

Les runtimes C et C ++ sont des collections de fonctions.

Le runtime .NET contient un interpréteur de langage intermédiaire , un garbage collector, etc.


4
La bibliothèque standard C ++ ne contient pas seulement des fonctions, et en se référant à Matt Ball, le "runtime" C et C ++ sont des bibliothèques d'exécution, le runtime .NET est une bibliothèque d'exécution et un système d'exécution.
smerlin du

1
Ma question est que les bibliothèques statiques sont également exécutables? je suppose que le terme est utilisé principalement pour les objets partagés, n'est-ce pas? considérez libc sous linux. Et qu'en est-il des plateformes et des frameworks? eux aussi sont décomposés en bibliothèques?
Amir Zadeh

3
Mais comment mon code peut-il réellement s'exécuter sur n'importe quelle " bibliothèque, framework ou plateforme "? Il doit fonctionner sur le CPU ou une autre unité de traitement. Pourriez-vous fournir un niveau de détail supplémentaire pour plus de précision?
n611x007

Les runtimes C et C ++ sont des collections de fonctions. -> Quelles fonctions?
Koray Tugay

3
@KorayTugay: Les fonctions de la bibliothèque standard, comme coutou printf.
SLaks le

80

Selon Wikipedia: bibliothèque d'exécution / système d' exécution .

En programmation informatique, une bibliothèque d'exécution est une bibliothèque de programmes spéciale utilisée par un compilateur, pour implémenter des fonctions intégrées dans un langage de programmation, pendant l'exécution (exécution) d'un programme informatique. Cela inclut souvent des fonctions d'entrée et de sortie ou de gestion de la mémoire.


Un système d'exécution (également appelé système d'exécution ou simplement runtime) est un logiciel conçu pour prendre en charge l'exécution de programmes informatiques écrits dans un langage informatique. Le système d'exécution contient des implémentations de commandes basiques de bas niveau et peut également implémenter des commandes de niveau supérieur et peut prendre en charge la vérification de type, le débogage et même la génération et l'optimisation de code. Certains services du système d'exécution sont accessibles au programmeur via une interface de programmation d'application, mais d'autres services (tels que la planification des tâches et la gestion des ressources) peuvent être inaccessibles.


Re: votre édition , "runtime" et "runtime library" sont deux noms différents pour la même chose.


69
Wikipédia n'est pas une bonne source de citations. C'est un bon endroit pour commencer à chercher des sources faisant autorité mais lui-même ne doit pas être considéré comme faisant autorité et en tant que tel, le citer n'est pas fiable. (Selon les déclarations de M. Wales, le créateur de Wikipédia).
Martin York

5
À quoi fait référence "pendant l'exécution" dans la première citation (supposément à propos de la bibliothèque d'exécution)? Une interprétation [mal] facile pourrait être la suivante: "pendant que le programme s'exécute, le compilateur, en parallèle, utilise une bibliothèque (pour lui-même) pour implémenter (c'est-à-dire générer du code supplémentaire au moment de l'exécution)" promis "(par la spécification du langage ) fonctions du programme ". Cela peut être faux et / ou facilement plié en cas de défaillance d'un système d'exécution.
n611x007

2
Pour continuer d'où Loki est parti, surtout quand aucun des articles ne fournit de référence (ce n'est pas une citation, c'est juste quelque chose que je ferais mieux de dire)
arsaKasra

1
@MartinYork, non seulement une encyclopédie ne fait pas autorité, elle se concentre également sur la documentation et non sur l'explication. Celles-ci peuvent être très différentes.
Roy Prins

59

L' exécution ou l' environnement d' exécution est la partie d'une implémentation du langage qui exécute le code et est présent à l' exécution ; la partie à la compilation de l'implémentation est appelée l' environnement de traduction dans la norme C.

Exemples:

  • le runtime Java se compose de la machine virtuelle et de la bibliothèque standard

  • un runtime C commun se compose du chargeur (qui fait partie du système d'exploitation) et de la bibliothèque runtime, qui implémente les parties du langage C qui ne sont pas intégrées dans l'exécutable par le compilateur; dans les environnements hébergés, cela inclut la plupart des parties de la bibliothèque standard


2
Merci, je pense que c'est la meilleure réponse dans ce sujet.
Koray Tugay

1
J'apprécie nommer «environnement d'exécution», mais je pense que l'utilisation de «runtime» comme alias pour le premier est une mauvaise idée (ce qui, d'après mes observations, fait ce que font beaucoup de programmeurs), «environnement d'exécution» est plus précis. Je suis d'accord avec @ MichałTrybus que "runtime" signifie "l'heure à laquelle le programme est exécuté".
WloHu

32

À ma connaissance, l' exécution est exactement ce que cela signifie - l'heure à laquelle le programme est exécuté. Vous pouvez dire que quelque chose se produit à l' exécution / au moment de l' exécution ou à la compilation.

Je pense que le runtime et la bibliothèque d'exécution devraient être (s'ils ne le sont pas) deux choses distinctes. "C runtime" ne me semble pas juste. Je l'appelle "bibliothèque d'exécution C".

Réponses à vos autres questions: Je pense que le terme runtime peut être étendu pour inclure également l'environnement et le contexte du programme lors de son exécution, donc:

  • il se compose de tout ce qui peut être appelé "environnement" pendant la durée d'exécution du programme, par exemple d'autres processus, l'état du système d'exploitation et des bibliothèques utilisées, l'état d'autres processus, etc.
  • il n'interagit pas avec votre code dans un sens général, il définit simplement dans quelles circonstances votre code fonctionne, ce qui est disponible pendant l'exécution.

Cette réponse est dans une certaine mesure juste mon opinion, pas un fait ou une définition.


29

Matt Ball a répondu correctement. Je dirais à ce sujet avec des exemples.

Envisagez d'exécuter un programme compilé dans le compilateur Turbo-Borland C / C ++ (version 3.1 de l'année 1991) et laissez-le s'exécuter sous une version 32 bits de fenêtres comme Win 98/2000, etc.

C'est un compilateur 16 bits. Et vous verrez que tous vos programmes ont des pointeurs 16 bits. Pourquoi en est-il ainsi lorsque votre système d'exploitation est en 32 bits? Parce que votre compilateur a configuré l'environnement d'exécution de 16 bits et que la version 32 bits d'OS l'a pris en charge.

Ce qui est communément appelé JRE (Java Runtime Environment) fournit un programme Java avec toutes les ressources nécessaires à son exécution.

En fait, l'environnement d'exécution est le produit du cerveau de l'idée de machines virtuelles. Une machine virtuelle implémente l' interface brute entre le matériel et ce dont un programme peut avoir besoin pour s'exécuter. L'environnement d'exécution adopte ces interfaces et les présente à l'usage du programmeur. Un développeur de compilateur aurait besoin de ces fonctionnalités pour fournir un environnement d'exécution pour ses programmes.


Une machine virtuelle implémente l'interface "brute" entre le matériel et ce dont un programme peut avoir besoin pour s'exécuter. -> Je n'en suis pas sûr.
Koray Tugay

7

Exécutez le temps exactement où votre code prend vie et vous pouvez voir beaucoup de choses importantes que votre code fait.

Le Runtime a la responsabilité d'allouer de la mémoire, de libérer de la mémoire, d'utiliser le sous-système du système d'exploitation comme (Services de fichiers, Services IO .. Services réseau, etc.)

Votre code sera appelé "TRAVAILLER EN THÉORIE" jusqu'à ce que vous exécutiez pratiquement votre code. et Runtime est un ami qui aide à y parvenir.


3

un runtime pourrait indiquer la phase actuelle de la vie du programme (runtime / temps de compilation / temps de chargement / temps de liaison) ou cela pourrait signifier une bibliothèque d'exécution, qui forment les actions basiques de bas niveau qui s'interfacent avec l'environnement d'exécution. ou cela pourrait signifier un système d'exécution, qui est identique à un environnement d'exécution.

dans le cas des programmes C, le runtime est le code qui configure la pile, le tas etc. qui est une exigence attendue par l'environnement C. il met en place essentiellement l'environnement promis par la langue. (il pourrait avoir un composant de bibliothèque d'exécution, crt0.lib ou quelque chose comme ça en cas de C)


3

J'ai trouvé que la structure de dossiers suivante constitue un contexte très perspicace pour comprendre ce qui runtimeest:

Runtimes de Mozilla XulRunner

Vous pouvez voir qu'il y a la « source », il y a le « SDK » ou le «Kit de développement logiciel» et puis il y a Runtime, par exemple. ce qui est exécuté - au moment de l'exécution. Son contenu est comme:

contenu du dossier runtimes

Le zip win32 contient .exe -s et .dll -s.

Donc par exemple. le runtime C serait les fichiers comme celui-ci - bibliothèques d'exécution C, .so-s ou .dll -s - que vous exécutez au moment de l'exécution, rendus spéciaux par leur inclusion (ou leur contenu "ou à des fins") dans la définition de la Langage C (sur «papier»), puis implémenté par l'implémentation C de votre choix. Et puis vous obtenez le temps d'exécution de cette implémentation, pour l'utiliser et pour en tirer parti.

C'est-à-dire, avec un peu de polarisation, les fichiers exécutables dont les utilisateurs de votre nouveau programme basé sur C auront besoin. En tant que développeur d'un programme basé sur C, vous aussi, mais vous avez également besoin du compilateur C et des en-têtes de bibliothèque C; les utilisateurs n'en ont pas besoin.


1
un autre pour contextualiser le runtime, est cet article sans rapport avec le mythe 6 de la section mythes de python , où vous pouvez voir la distinction entre le runtime et le langage de programmation , dans le premier paragraphe du mythe 6.
n611x007

3

L'exécution signifie essentiellement lorsque le programme interagit avec le matériel et le système d'exploitation d'une machine. C n'a pas son propre runtime mais au lieu de cela, il demande au runtime d'un système d'exploitation (qui fait essentiellement partie de ram) de s'exécuter.


1

Si ma compréhension de la lecture des réponses ci-dessus est correcte, le runtime est essentiellement des `` processus d'arrière-plan '' tels que la récupération de place, l'allocation de mémoire, essentiellement tous les processus qui sont invoqués indirectement, par les bibliothèques / frameworks dans lesquels votre code est écrit, et en particulier ceux processus qui se produisent après la compilation, alors que l'application est en cours d'exécution.


-1

Ces sections de la documentation MSDN répondent à la plupart de vos questions: http://msdn.microsoft.com/en-us/library/8bs2ecf4(VS.71).aspx

J'espère que ça aide.

Merci, Damian


3
En fait, ce n'est pas le cas; il ne pose pas seulement des questions sur .Net.
SLaks

@Matt: Encore une fois. Cependant 2/3 de ses temps d'exécution ont été pris en charge par .Net, la moitié de ses balises traitent de .Net et j'ai juste pensé que les liens seraient utiles.
Damian Schenkelman

Je dirais que "3/4 des langues supportent .NET". .NET ne prend pas beaucoup en charge, il est conçu pour maintenir la fracture entre Unix et Windows au niveau du middleware.
Matt Joiner

@MattJoiner - Cela aurait pu être vrai en 2010, mais c'est monumentalement faux aujourd'hui avec .NET Standard et les implémentations open source comme .NET Core, etc.
rory.ap

-2

Le temps d'exécution est l'instance où vous ne savez pas quel type d'objets crée lors de son exécution, la création d'objets est basée sur certaines conditions ou sur certains travaux de calcul. En revanche, le temps de compilation est l'instance où les objets requis sont définis par vous avant ses exécutions.


-3

L'exécution est quelque peu opposée à la conception et à la compilation / à la liaison. Historiquement, cela vient d'un environnement mainframe lent où le temps machine était cher.


1
Cela ne répond pas à la question et la complique davantage.
cglotr
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.