====== Modèles de traduction-exécution de programmes ====== ===== Langage interprété (PHP, JavaScript) ===== {{:bloc2:prog:gen:interpretation.png?nolink&600 |}} * Une traduction pour chaque exécution ; * Un programme n'est pas nécessairement traduit (donc testé) en totalité lors d'une exécution ; * Deux exécutions distinctes du même programme peuvent ne pas traduire les mêmes lignes et, par exemple, témoigner d'anomalies différentes ; * Il n'y a pas d'analyse globale du code (cohérence + couverture) ; * Il faut un traducteur sur la machine de l'utilisateur ; * Le processus de mise au point est délicat car on n'est jamais certain d'avoir tout testé ; * Le fichier source est accessible à l'utilisateur (cybersécurité) ; ===== Langage compilé (C, C++) ===== {{:bloc2:prog:gen:compilation.png?nolink&600 |}} * Analyse globale du code (cohérence + couverture) systématique ; * Une seule traduction pour n exécutions ; * Un programme est nécessairement traduit en totalité avant toute exécution ; * Le processus de mise au point est surprenant mais efficace : une erreur de traduction peut en cacher plusieurs dizaines d'autres ; * Le fichier exécutable est spécifique à une plateforme (Linux, Windows, etc.), il en existe donc plusieurs ; * Il faut une compilation distincte pour chaque plateforme cible ; * Le fichier source n'est pas accessible à l'utilisateur (cybersécurité) ; ===== Langage hybride (Java, C#) ===== {{:bloc2:prog:gen:hybride.png?nolink&600 |}} * Analyse globale du code (cohérence + couverture) systématique ; * Une seule traduction en ByteCode pour n exécutions ; * Un programme est nécessairement traduit en totalité avant toute exécution ; * Le processus de mise au point est surprenant mais efficace : une erreur de traduction peut en cacher plusieurs dizaines d'autres ; * Le fichier exécutable est spécifique à une VMet son ByteCode ; * Il faut une seule compilation pour toutes les plateforme cibles car la VM est unique ; * Le fichier source n'est pas accessible à l'utilisateur (cybersécurité) ; * Il existe une dépendance à la VM(présence et tenue à jour) qui peut être contraignante ; * La performance de la VM conditionne l'intérêt d'ensemble ; **Java ** * Les fichiers ByteCode sont des fichiers à extension ".class" ; * Le déploiement s'effectue en embarquant tous les fichiers nécessaires dans une archive compressée dont la structure est connue. Le fichier compressé a une extension ".jar", pour Java ARchive ; * La VM Java est communément nommée JVM, pour Java Virtual Machine ; **C# ** * Les fichiers ByteCode sont des fichiers à extension "." ; * Le déploiement s'effectue en ; * La VM C# est commune à plusieurs langages et porte le nom du framework sous-jacent nommé .Net ou DotNet.