2016-05-25 3 views
6

Il existe des compilateurs pour prolog mais d'autres sites web disent que la langue elle-même est une langue interprétée. Je suis confus si prolog est vraiment un langage interprété. Quelqu'un peut-il clarifier si la langue est vraiment? Langue compilée ou langue interprétée?Prolog: un langage compilé ou interprété ou les deux?

+2

Cela dépend de la mise en œuvre Prolog bien sûr –

+4

Le langage lui-même est juste un Lanugage: Vous pouvez compiler, interpréter, lire, l'analyser, traduire dans d'autres langues, etc ... – mat

Répondre

6

Pour répondre à cela, clouons quelques définitions.

Un langage compilé est un langage qui convertit les fichiers de code source en un formulaire (binaire, code octet, etc.) pour l'exécution autonome ou dans une bibliothèque pour la liaison avec d'autres programmes. Les constructions sont fixes et ne peuvent pas être modifiées.

Un langage interprété est celui qui convertit une construction en une forme qui peut être exécutée après la conversion. Chaque construction convertie est généralement placée dans un magasin qui peut être référencé par des constructions ultérieures.

Maintenant, beaucoup de langages de programmation peuvent être compilés et interprétés, il n'y a pas de règle qui dit qu'un langage de programmation ne peut être que l'un ou l'autre.

Au début, la plupart des langages de programmation étaient l'un ou l'autre, par ex. C++ - compilé, BASIC - interprété.

Maintenant, pour répondre à votre question:

Prolog: un langage compilé ou interprété ou les deux?

Le langage Prolog peut être compilé et peut être interprété pour que la réponse soit les deux. La raison pour laquelle vous voyez des réponses différentes pour différents sites est que vous posez des questions sur la langue, pensez au langage Prolog comme un abstract concept, mais en regardant des implémentations spécifiques, pensez aux sites comme faisant référence à un concrete implementation. Donc certaines entités font l'une ou l'autre et d'autres font les deux. Au cours des dernières années, selon moi, le consensus est que si vous avez un langage de programmation principal, il faut un compilateur pour générer du code efficace et un REPL qui utilise un interpréteur pour un développement rapide des constructions.

Typiquement, la tendance est de développer et de tester des constructions de programmation de base en utilisant le REPL, puis de les déplacer dans des fichiers de code source qui seront compilés pour construire des bibliothèques. Les bibliothèques sont ensuite référencées à partir du REPL; rincez et répétez.

Intéressant Prolog a été la première langue que j'ai utilisé qui avait les deux, et c'était dans les années 1980.

Si vous lisez ISO/IEC 13211 Information technology -- Programming languages -- Prolog -- Part 1: General core il déclare:

La langue est originaire du travail au début des années 1970 par Robert A. Kowalski alors à l'Université d'Edimbourg (et depuis à l'Imperial College , Londres) et Alain Colmerauer à l'Université de Aix-Marseille en France. Leurs efforts ont conduit en 1972 à l'utilisation de la logique formelle comme base d'un langage de programmation. La recherche de Kowalski a fourni le cadre théorique, tandis que Colmerauer a donné au langage de programmation Prolog. Colmerauer et son équipe puis construit le premier interprète, et David Warren au Département AI, Université d'Edimbourg, a produit le premier compilateur.

8

La plupart des implémentations sont compilées en code octet et s'exécutent sur une machine virtuelle Prolog. Les implémentations utilisent leurs propres machines virtuelles avec différents choix de conception et compromis. GNU-Prolog a commencé en tant que Prologue à C "transpiler", maintenant il est compilé en code natif.

Vous avez également Logtalk (OOP avec Prolog), qui, si je comprends bien, réécrit la source Logtalk à Prolog. Il peut utiliser tout un ensemble d'implémentations Prolog comme backend, il peut donc être utilisé comme couche de compatibilité entre les implémentations Prolog.

Cette question ne peut vraiment pas être résolue; vous devriez lire la documentation de chaque implémentation Prolog qui vous intéresse. La meilleure réponse que vous pouvez obtenir est cependant comment une implémentation Prolog particulière le fait. Prolog le langage est juste cela: un langage de programmation, pas un runtime ou une VM ou un compilateur et ainsi de suite.

+5

Vous avez raison. W.r.t. Logtalk, son compilateur est un compilateur à trois étapes, la troisième et dernière étape appelant le compilateur Prolog backend sur les fichiers Prolog intermédiaires générés. Ce qui se passe ici dépend, bien sûr, du compilateur Prolog backend choisi. Ce n'est pas une approche inhabituelle (par exemple C++ et Cfront dans les premiers jours). –