Est-il théoriquement possible de spécifier un langage de programmation pour lequel aucune implémentation ne pourrait exister? Un langage de programmation est un moyen de définir des fonctions. Une implémentation signifie une méthode pour exécuter un programme donné dans ce langage sur une entrée donnée à la sortie de la fonction correspondant au programme sur cette entrée.
Quelles sont les exigences minimales d'une telle langue?
Réponses:
Habituellement, l'implémentation d'un langage de programmation donne au moins un interprète dans un langage (ou un compilateur à un langage) qui n'est rien de plus que Turing-complete.
En utilisant cette "définition", nous pouvons spécifier un langage de programmation comme celui-ci:
il n'y a qu'un seul programme possible qui est
HALT
;spécification de
HALT
: c'est une fonction qui résout le problème d'arrêt .L'implémentation de ce langage de programmation nécessite de résoudre le problème d'arrêt de l'implémentation. (Ce qui est impossible car notre implémentation ne devrait pas être plus puissante qu'une machine de Turing).
La spécification gère la logique et peut donc en demander beaucoup plus. Une autre spécification qui sera impossible à mettre en œuvre est "fausse". (Ou toute phrase contradictoire dans la spécification) Mais cela ne ressemble pas à une spécification, c'est pourquoi j'ai utilisé l'exemple du problème d'arrêt.
la source
1/0
let loop = loop in loop
Juste une note curieuse: le moteur de modèle C ++ est Turing-complet
Théorème 1: En l'absence de limites d'instanciation, les modèles C ++ sont Turing-complete.
Corollaire 1: En l'absence de limites d'instanciation, le fait qu'un compilateur C ++ s'arrête lors de la compilation d'un programme donné est indécidable.
... pour que le C ++ lui-même puisse être considéré comme un langage de programmation pour lequel aucune "implémentation" ne pourrait exister ... :-D
la source
On ne sait pas exactement ce que vous entendez par «langage de programmation» et «implémentation d'un langage». Vous devez fournir des définitions rigoureuses de ces deux pour obtenir une réponse.
Mais ce n'est pas le genre de langage de spécification que les gens entendent lorsqu'ils utilisent l'expression "langage de programmation". Un langage de programmation est généralement destiné à être un langage pour exprimer des fonctions calculables (processus, ...) et pour communiquer les instructions à une machine et il existe donc une MT qui peut simuler ces programmes et produire leurs résultats. Donc, dans un sens, avoir un langage de programmation qui ne peut pas être implémenté n'a pas de sens.
(Je suppose que vous confondez probablement les langages de programmation avec les langages de spécification ou avec les langages formels . Dans tous les cas, nous pouvons définir des langages qui ne sont pas calculables.)
la source
De nombreux langages ont été spécifiés sans implémentation, par exemple l'Algol 60 était censé être un langage d'écriture d'algorithmes, à ne pas implémenter. Certains des nombreux langages "juste pour le plaisir" ont été spécifiés bien avant l'implémentation, vient à l'esprit Intercal.
la source