Ce que tu oublies, ou plutôt que la notion de Turing complet, ne met pas en exergue, c'est que ton langage peut être Turing complet mais ne pas pouvoir tel quel faire n'importe quel programme informatique.
Typiquement, je crois que SQL est Turing complet dans certaines version, tu ne pourras pas créer des pages Web, dessiner des interfaces graphique ou faire un OS en te reposant uniquement sur ce langage.
Un système d'exploitation, surtout le noyau, demande de faire des choses assez inhabituelles que de nombreux langages ne peuvent pas faire naturellement. Par exemple, faire de l'assembleur, accéder à une zone mémoire physique précise (registres de composants ou une adresse mémoire particulière).
Certains langages sont de toute façon assez inaptes à faire cela car ils dépendent par exemple d'un Garbadge Collector non prédictible (que ce soit le moment où il s'exécute comme la durée) ce qui n'est pas souhaitable lors du traitement d'interruptions par exemple.
Beaucoup de langages, surtout les langages jouets ou petits, ne peuvent pas non plus faire certaines applications car ils n'ont aucune possibilité d'utiliser l'API du système sur lequel ils sont.
Donc si d'un point de vue théorique la notion de Turing complet permet de tout faire, en pratique cela n'est pas vrai. Car notre ordinateur n'est pas une vraie machine de Turing d'une part (la RAM n'est pas infinie), et que pour exploiter la machine il y a des contraintes que n'a pas la machine théorique.
[^] # Re: Donc pour résumer...
Posté par Renault (site web personnel) . En réponse à la dépêche C++17, Genèse d’une version mineure. Évalué à 5.
Ce que tu oublies, ou plutôt que la notion de Turing complet, ne met pas en exergue, c'est que ton langage peut être Turing complet mais ne pas pouvoir tel quel faire n'importe quel programme informatique.
Typiquement, je crois que SQL est Turing complet dans certaines version, tu ne pourras pas créer des pages Web, dessiner des interfaces graphique ou faire un OS en te reposant uniquement sur ce langage.
Un système d'exploitation, surtout le noyau, demande de faire des choses assez inhabituelles que de nombreux langages ne peuvent pas faire naturellement. Par exemple, faire de l'assembleur, accéder à une zone mémoire physique précise (registres de composants ou une adresse mémoire particulière).
Certains langages sont de toute façon assez inaptes à faire cela car ils dépendent par exemple d'un Garbadge Collector non prédictible (que ce soit le moment où il s'exécute comme la durée) ce qui n'est pas souhaitable lors du traitement d'interruptions par exemple.
Beaucoup de langages, surtout les langages jouets ou petits, ne peuvent pas non plus faire certaines applications car ils n'ont aucune possibilité d'utiliser l'API du système sur lequel ils sont.
Donc si d'un point de vue théorique la notion de Turing complet permet de tout faire, en pratique cela n'est pas vrai. Car notre ordinateur n'est pas une vraie machine de Turing d'une part (la RAM n'est pas infinie), et que pour exploiter la machine il y a des contraintes que n'a pas la machine théorique.