Tout d'abord, un langage de programmation peut être à la fois ininterprété et compilé. L'interprétation et la compilation ne sont que des méthodes pour générer du code exécutable à partir du code source. Avec un interprète, le code source est lu et interprété par un interprète qui exécute ensuite le code tel qu'il l'interprète. Un compilateur, d'autre part, lit le code source et génère un fichier binaire exécutable à partir du code source - afin que le programme puisse être exécuté en tant que processus séparé indépendamment.
Maintenant, avant que quiconque ne se demande ... Oui, C / C ++ / C # / Java peut être interprété, et oui, les scripts JavaScript et Bash peuvent être compilés. Qu'il y ait des interprètes ou des compilateurs qui travaillent pour ces langues est une autre question.
Maintenant, pour répondre à la question, nous allons utiliser le "langage interprété" plutôt que le "langage compilé". La question elle-même est quelque peu confuse, mais je suppose que cela signifie quand préférer l'interprétation à la compilation. L'un des inconvénients de la compilation est qu'elle génère des frais généraux en raison du processus de compilation - le code source doit être compilé en code machine exécutable, il n'est donc pas adapté aux tâches qui nécessitent un délai minimal lors de l'appel du code source pour exécuter un programme. D'un autre côté, le code source compilé est presque toujours plus rapide que le code source interprété équivalent en raison de la surcharge causée par l'interprétation du code. Les interprètes d'autre part peuvent invoquer et exécuter le code source avec très peu de frais d'appel, mais au détriment des performances d'exécution.
En fin de compte, il est presque impossible de mentionner des cas d'utilisation définis quand préférer l'un après l'autre, mais par exemple un cas (à mon sens très irréaliste) serait lorsque le code source du programme change dynamiquement entre les invocations de programme et la surcharge de compilation est trop élevé pour qu'il soit un choix viable. Dans ce cas, l'interprétation du code source au lieu de la compilation serait probablement souhaitable.
Cependant, il y a quelque chose qui peut être considéré comme un exemple réel: le code source hidnig lors du déploiement. Avec nativementcode compilé le développeur déploie le code macine exécutable du programme et des données. Avec du code interprété, le code source lui-même doit être déployé, qui peut ensuite être inspecté et rétroconçu avec beaucoup moins d'efforts que ce qu'il en est pour la rétro-ingénierie du code machine natif. Une exception à cela est les langages comme C # et Java qui se compilent en langage / bytecode immédiat (MSIL pour C # et Java bytecode pour Java) qui sont ensuite déployés et compilés "juste à temps" au moment de l'exécution, un peu comme un interprète. Cependant, il existe des soi-disant décompilateurs pour MSIL et Java Bytecode qui peuvent reconstruire le code source d'origine avec une précision relativement bonne et, en tant que tels, la rétro-ingénierie de tels produits est beaucoup plus triviale que les produits de rétro-ingénierie déployés dans du code machine natif.