lundi 13 juin 2011

Sur la machine de Turing.

J'ai trouvé quelque matière à réflexion dans la ci-nommée "machine de Turing" (ça se trouve partout, sur Wikipédia, sur Google, etc.c'est très connu) à commencer par admirer l'immense talent de son inventeur.

J'ai tenté de voir si l'on ne pouvait pas simplifier la définition d'une telle machine que l'on présente formellement comme le quintuplet :

{Ei, X, Y, Z, Ej}, où
  • Ei est l'état actuel du programme;
  • X, le symbole lu sur un support de travail, à proprement parler : un "registre";
  • Y, le symbole qui remplacera celui qu'on vient de lire;
  • Z, le sens de lecture du support de travail;
  • Ej, le prochain état choisi pour le programme;
avec un état privilégié de départ et un autre qui provoque l'arrêt de la machine.


En considérant que la mise en route comme l'arrêt de tout mécanisme ou processus dépend d'un autre,  j'ai poursuivi ce raisonnement par récurence en réduisant l'ensemble E des états du programme à deux éléments seulement, que je nommais l'étape en cours et la suivante, de telle sorte que l'on restait dans les instructions de l'étape en cours tant que la condition qui devait nous faire passer à l'étape suivante n'avait pas été rencontrée, une "étape" étant un groupe composé d'un à plusieurs n-uplets de ce type.

Pour ce qui est de l'implémentation d'une telle machine, je serais resté minimaliste en utilisant deux appareils quasiment identiques et capables chacun de dérouler à volonté dans un sens ou dans l'autre le rouleau de papier dont ils étaient munis, ainsi que d'inscrire sur l'un seulement de ces deux rouleaux de papier -celui que j'appelle le "registre"- un symbole choisi parmi deux tel que l'aura décidé l'automate qui relie ces deux appareils, selon des "instructions" prises par l'automate lui-même sur l'autre ruban de papier, nommé "programme". Cet automate répèterait à l'envi la séquence suivante :
  1. Avancer d'une case le rouleau de papier ici nommé "programme" : le programme est composé d'étapes, et chacune de ses étapes s'écrit sur quatre cases;
  2. Comparer le symbole qui se trouve dans le guichet de lecture du programme avec celui qui se trouve dans le guichet de lecture du registre, et mémoriser le résultat de cette comparaison;
  3. Avancer le programme d'une case;
  4. Si le résultat mémorisé de la comparaison indiquait une similitude, le symbole qui se trouve maintenant dans le guichet de lecture du programme doit être reporté sur le registre à la place du symbole qui pourrait se trouver dans son guichet;
  5. Avancer le programme d'une case;
  6. Si le résultat mémorisé de la comparaison indiquait une similitude, on devrait faire avancer le rouleau de papier du registre dans le sens indiqué par le symbole qui se trouve maintenant dans le guichet de lecture du programme, à savoir d'une case dans un sens ou d'une case dans l'autre sens;
  7. Avancer le programme d'une case;
  8. Si le résultat mémorisé de la comparaison indiquait une similitude, il faudrait changer d'étape dans le programme en suivant l'indication portée par le symbole visible à présent dans le guichet de lecture du programme, à savoir : ou bien revenir au début de l'étape en cours, ou bien aller à la fin de celle-ci (cette étape sera légèrement impactée par les conventions établies un peu plus loin dans le texte). Dans le cas où le résultat mémorisé de la comparaison n'aurait pas indiqué de similitude, la machine poursuivrait son cours en reprenant ce processus à partir du premier point en veillant à n'omettre aucun des huits points dont il est composé.
Aussi ai-je pensé qu'il fallait adopter la convention faisant considérer toute succession de quatre symboles identiques sur le rouleau de programme comme une condition spéciale indiquant soit le début, soit la fin d'une étape. La programmation de la machine tiendrait nécessairement compte de cette convention que l'on pourrait formuler ainsi :
  1. Toute succession de quatre cases sans symbole constituera la marque d'un début d'étape; elle constituera par la même occasion la marque d'une fin d'étape; il s'agira donc d'un marqueur séparant les différentes étapes d'un programme, lesquelles pourront s'enchaîner dans un sens ou dans l'autre en fonction des données lues dans le rouleau de données comme du programme lui même.
Il serait facile d'ajouter ce procédé en amont du dispositif de lecture du programme afin de remettre notre machine en état de poursuivre la lecture du programme enregistré après tout marqueur d'étape rencontré. Aussi ne serait-il pas très compliqué de faire revenir le dispositif de lecture du programme sur la frontière d'étape précédente au cas où cela serait nécessaire, et aussi, dans l'éventualité où le programme aurait spécifié de retourner à l'étape antérieure, la machine pourrait user de ce même dispositif pour revenir d'abord sur la frontière d'étape en cours et plus encore en-deça pour aller jusqu'au début de l'étape antérieure. En absence de spécification contraire, la machine s'arrangerait donc pour rester dans l'étape en cours, c'est-à-dire qu'en rencontrant, dans son avancement normal, un séparateur d'étape sans qu'elle ait reçu l'indication d'aller à l'étape suivante, la machine reviendrait d'elle-même sur le marqueur précedent, pour que le programme ne sorte pas de l'étape où il se trouve.

Ma machine de Turing à moi se définit donc formellement comme le quadruplet suivant :
{X, Y, Z, S} , où
  • X représente le symbole lu sur un support de travail;
  • Y représente le symbole qui remplacera celui qu'on vient de lire;
  • Z représente le sens de lecture du support de travail;
  • S représente la suite à donner au programme;
Pour réaliser cette machine dans le monde réel, nous aurons sans doute besoin d'une représentation adaptée aux symboles X et Y utilisés. Les symboles d'une machine de Turing pouvant être soit une chose, soit son contraire, et encore : quand ils sont significatifs ! cela nous donne à représenter trois cas :
  1. Il n'y a pas de symbole.
  2. Il y a un symbole qui représente une chose.
  3. Le symbole représenté est le contraire du précédent.
Ce qui pourrait s'implémenter facilement en mettant côte-à-côte deux perforations sur un même ruban. En effet, une simple perforation ne pourrait pas représenter plus de deux cas à la fois. Or, il nous faut en représenter trois, et deux perforations permettent d'en représenter quatre. Donc :
  1. 00 : pas de perforation : rien;
  2. 01 : une perforation (à droite) pour un symbole qui représenterait quelque chose, un "0" par exemple, ou encore la commande de déplacement d'un ruban vers la droite.
  3. 10 : une autre perforation (à gauche) pour un autre symbole pour représenter le contraire du précédent, un "1" par exemple, ou encore la commande de déplacement d'un ruban vers la gauche.
  4. 11 : deux perforations qui s'annulent, car une chose ne peut pas être son contraire. Ou encore deux perforations qui signifieraient : "quelle que soit la représentation du symbole considéré". Ou encore deux perforations pour signifier que la chose n'existe plus, comme pour représenter l'effacement d'une donnée par exemple, et dans le cas d'une bande perforée, cet effacement serait sans retour possible... Qu'importe !
Cette définition conviendra parfaitement au sous-ensemble {X,Y} de notre quadruplet, mais pour ce qui est du sens de lecture à adopter pour le support de travail et pour ce qui est de la suite à donner au programme, on comprendra que la double perforation constituerait ici un cas d'erreur, car on ne pourrait pas faire avancer le ruban dans un sens et dans l'autre à la fois. Nous déciderons donc ici de notre seconde convention qui stipulera que :
  •  Toute double-perforation concernant le sens de lecture du ruban de travail constitue un dilemne touchant aux données, puisque faire avancer un ruban dans un sens en même temps que dans l'autre en provoquerait immanquablement la rupture; on pourrait assimiler ce dilemne à une anomalie, voire à une erreur et, cela mériterait que l'on sonne l'alarme voire que l'on alerte l'expérimentateur ou toute autre forme d'autorité susceptible de sortir du marasme dans lequel l'oeuvre en cours de réalisation se trouverait immanquablement plongée si tant est qu'elle puisse jamais se poursuivre dans de ces conditions lamentables. Donc nous dirons qu'une double-perforation concernant le sens de lecture du ruban de travail représente une condition d'erreur. Elle aura pour conséquence d'arrêter la machine et d'alerter l'opérateur qui pourra la remettre en route après avoir éventuellement corrigé la-dite erreur.
  • Toute double-perforation concernant la suite à donner au programme constitue de même un dilemne car on ne peut pas à la fois passer à l'étape suivante et rester dans l'étape en cours. Ce dilemne pourrait alors être exceptionnellement assimilé à la fameuse condition de fin qui provoque l'arrêt programmé de la machine que l'académie souhaite avec une insistance raisonnable. Nous en profitons pour ajouter la possibilité -précieuse- que nous offre cette combinaison pour donner comme suite au programme la possibilité de s'en retourner à l'étape précédente. Ainsi pourrons-nous jongler avec trois étapes de programme : celle en cours, la suivante et la précédente, avec la possibilité de naviguer en avant comme en arrière dans le programme, au lieu que d'aller toujours en avant, sauf à rester sans cesse à la même étape.
Chaque élément d'un tel programme serait donc formé par la succession de quatre doublets d'une représentation binaire; cette suite offrirait 4x4x4x4 combinaisons possibles, à savoir 256 possibilités, et rien ne serait plus facile que d'implémenter cette machine sur un ordinateur construit autour d'une unité de mémoire à octet (8 position binaires, ou 8 poses (POSitions binairES), ou 8 pobs (POsitions BinaireS), au choix, sauf à préférer 8 "bits" (BInary digiTS)) comme le sont la plupart des ordinateurs actuels du commerce. Toutefois, quand bien même on n'aurait pas honte d'employer autant de moyens pour une si faible réalisation, force est de constater que l'ensemble des possibilités évoquées ci-dessus n'est pas tellement significatif qu'on puisse en faire des choux gras. Que l'on en juge par soi-même avec leur petit inventaire suivant :
  1. 00 00 00 00 : rien (en fait, utilisé comme un séparateur d'étapes).
  2. 00 00 00 01 : s'il n'y a pas de donnée, passer à l'étape suivante.
  3. 00 00 00 10 : s'il n'y a pas de donnée, revenir à l'étape précédente.
  4. 00 00 00 11 : s'il n'y a pas de donnée, fin du programme.
  5. 00 00 01 00 : s'il n'y a pas de donnée, avancer les données par la droite et rester dans cette étape.
  6. 00 00 01 01 : idem, sauf qu'on passe à l'étape suivante.
  7. 00 00 01 10 : idem, sauf qu'on revient à l'étape précédente.
  8. 00 00 01 11 : idem, sauf qu'on arrête ici le programme après avoir avancé les données par la droite.
  9. 00 00 10 00 : s'il n'y a pas de donnée, avancer les données par la gauche et rester dans cette étape.
  10. 00 00 10 01 : idem, sauf qu'on passe à l'étape suivante.
  11. 00 00 10 10 : idem, sauf qu'on revient à l'étrape précédente.
  12. 00 00 10 11 : idem, sauf qu'on arrête ici le progamme.
  13. 00 00 11 00 : erreur ! On restera dans l'étape une fois cette erreur corrigée.
  14. 00 00 11 01 : erreur ! On passera à l'étape suivante une fois l'erreur corrigée.
  15. 00 00 11 10 : erreur ! On reviendra à l'étape précédente une fois l'érreur corrigée.
  16. 00 00 11 11 : erreur ! On arrêtera le programme une fois l'erreur corrigée.
  17. 00 01 00 00 : s'il n'y a pas de donnée, en mettre une et rester dans cette étape.
  18. 00 01 00 01 : idem sauf qu'on passe à l'étape suivante.
  19. 00 01 00 10 : idem, sauf qu'on revient à l'étape précédente.
  20. 00 01 00 11 : s'il n'y a pas de donnée, en mettre une et s'arrêter là.
  21. 00 01 01 00 : s'il n'y a pas de donnée, en mettre une et avancer les données par la droite en restant dans cette étape.
  22. 00 01 01 01 : idem, sauf qu'on passe à l'étape suivante.
  23. 00 01 01 10 : idem, sauf qu'on revient à l'étape précédente.
  24. 00 01 01 11 : idem, sauf qu'on s'arrête là.
  25. 00 01 10 00 : s'il n'y a pas de donnée, en mettre une et avancer les données par la gauche en restant dans cette étape.
  26. 00 01 10 01 : idem, sauf qu'on passe à l'étape suivante.
  27. 00 01 10 10 : idem, sauf qu'on revient à l'étape précédente.
  28. 00 01 10 11 : idem, sauf qu'on en reste là pour ce programme.
  29. 00 01 11 00 : s'il n'y a pas de donnée, on en met une et on décrête qu'il y a une erreur.
  30. 00 01 11 01 : idem, sauf qu'on passera à l'étape suivante une fois l'erreur corrigée.
  31. 00 01 11 10 : idem, sauf qu'on reviendra à l'étape précédente une fois l'erreur corrigée.
  32. 00 01 11 11 : itou, avec arrêt du programme en sus.
  33. 00 10 00 00 : s'il n'y a pas de donnée, invalider la donnée en cours et rester dans l'étape actuelle.
  34. 00 10 00 01 : idem, sauf qu'on passe à l'étape suivante.
  35. 00 10 00 10 : idem, sauf qu'on revient à l'étape précédente. Ne trouvez-vous pas que cette liste fastidieuse ressemble à la table d'instruction du fameux Z80 ?
  36. 00 10 00 11 : idem, sauf qu'on en reste là pour cette fois : arrêt du programme.
  37. 00 10 01 00 : s'il n'y a pas de donnée, invalider la donnée en cours et faire avancer les données par la droite; rester dans l'étape actuelle.
  38. 00 10 01 01 : idem, sauf que l'on passe à l'étape suivante.
  39. 00 10 01 10 : idem, sauf que l'on passe à l'étape précédente.
  40. 00 10 01 11 : idem, sauf que l'on en reste là : fin du programme.
  41. 00 10 10 00 : s'il n'y a pas de donnée, invalider la donnée en cours et faire avancer les données par la gauche; rester dans l'étape actuelle.
  42. 00 10 10 01 : idem, sauf que l'on passe à l'étape suivante.
  43. 00 10 10 10 : idem, sauf que l'on revient à l'étape précédente.
  44. 00 10 10 11 : idem, sauf que l'on n'ira pas plus loin cette fois-ci.
  45. 00 10 11 00 : s'il n'y a pas de donnée, on invalide la donnée en cours et l'on provoque une erreur.
  46. 00 10 11 01 : idem, sauf qu'on passera à l'étape suivante une fois l'erreur corrigée.
  47. 00 10 11 10 : idem, sauf qu'on reviendra à l'étape précédente une fois l'erreur corrigée.
  48. 00 10 11 11 : idem, sauf qu'en plus on s'arrête. Voilà.
  49. 00 11 00 00 : s'il n'y a pas de donnée, on en met une qu'on invalide et on reste dans cette étape sans faire avancer le ruban de données (on se demande bien à quoi ça peut servir ???)
  50. 00 11 00 01 : idem, sauf qu'on passe à l'étape suivante (on y fera peut-être bien quelque chose de plus "parlant").
  51. 00 11 00 10 : idem, sauf gqu'on revient à l'étape précédente (quelque chose nous aurait-il échappé ?)
  52. 00 11 00 11 : idem, sauf qu'on a décidé d'en rester là pour cette fois. Terminé.
  53. 00 11 01 00 : s'il n'y a pas de donnée, on en met une qu'on invalide et on fait avancer le ruban de données vers la droite; on reste dans cette étape.
  54. 00 11 01 01 : idem, sauf qu'on passe à l'étape suivante.
  55. 00 11 01 10 : idem, sauf qu'on revient à l'étape précédente.
  56. 00 11 01 11 : idem sauf que le programme n'ira pas plus loin.
  57. 00 11 10 00 : s'il n'y a pas de donnée, on en met une qu'on invalide (c'est une obsession), on fait avancer le ruban des données par la gauche et on reste dans cette étape.
  58. 00 11 10 01 : idem, sauf qu'on passe à l'étape suivante.
  59. 00 11 10 10 : idem, sauf qu'on revient à l'étape précédente.
  60. 00 11 10 11 : idem, sauf qu'on n'ira pas plus loin avec ce programme qui se termine ici.
  61. 00 11 11 00 : s'il n'y a pas de donnée, on en met une qu'on invalide et l'on signale une erreur.
  62. 00 11 11 01 : idem, sauf qu'on passera à l'étape suivante une fois l'erreur corrigée.
  63. 00 11 11 10 : idem, sauf qu'on reviendra à l'étape précédente une fois l'erreur corrigée.
  64. 00 11 11 11 : idem, sauf qu'en fait, on va s'arrêter là.
  65. 01 00 00 00 : s'il y a une donnée, on ne fait rien, et on reste dans cette étape.
  66. 01 00 00 01 : idem, sauf qu'on passe à l'étape suivante.
  67. 01 00 00 10 : idem, sauf qu'on revient à l'étape précédente.
  68. 01 00 00 11 : idem, sauf que le programme s'arrête là : on a trouvé une donnée !
  69. 01 00 01 00 : s'il y a une donnée, on ne fait rien qu'avancer le ruban vers la droite, et on reste dans cette étape.
  70. 01 00 01 01 : idem, sauf qu'on passe à l'étape suivante.
  71. 01 00 01 10 : idem, sauf qu'on passe à l'étape précédente.
  72. 01 00 01 11 : idem, sauf qu'on s'arrête là.
  73. 01 00 10 00 : s'il y a une donnée, on ne fait rien qu'avancer le ruban vers la gauche, et on reste dans cette étape.
  74. 01 00 10 01 : idem, sauf qu'on passe à l'étape suivante.
  75. 01 00 10 10 : idem, sauf qu'on revient à l'étape précédente.
  76. 01 00 10 11 : idem, sauf que cela provoque l'arrêt programmé de la machine. Eh oui !
  77. 01 00 11 00 : s'il y a une donnée, on signale une erreur et on reste dans cette étape.
  78. 01 00 11 01 : idem, sauf qu'on passe à l'étape suivante.
  79. 01 00 11 10 : idem, sauf qu'on revient à l'étape précédente
  80. 01 00 11 11 : idem, avec en plus l'arrêt programmé de la machine.
  81. 01 01 00 00 : s'il y a une donnée, on la recopie et on reste dans cette étape.
  82. 01 01 00 01 : idem, sauf qu'on passe à l'étape suivante.
  83. 01 01 00 10 : idem, sauf qu'on revient à l'étape précédente.
  84. 01 01 00 11 : idem, sauf qu'on arrête le programme là.
  85. 01 01 01 00 : s'il y a une donnée, on la recopie et on avance le ruban de données par la droite; on reste dans cette étape.
  86. 01 01 01 01 : idem, sauf qu'on passe à l'étape suivante.
  87. 01 01 01 10 : idem, sauf qu'on revient à l'étape précédente.
  88. 01 01 01 11 : idem, sauf qu'on s'arrête là.
  89. 01 01 10 00 : s'il y a une donnée, on la recopie et on avance le ruban de données par la gauche; on reste dans cette étape.
  90. 01 01 10 01 : idem, sauf qu'on passe à l'étape suivante.
  91. 01 01 10 10 : idem, sauf qu'on revient à l'étape précédente.
  92. 01 01 10 11 : idem, sauf qu'on s'arrête : fin du programme.
  93. 01 01 11 00 : s'il y a une donnée, on la recopie et on signale une erreur; puis on reste dans cette étape.
  94. 01 01 11 01 : idem, sauf qu'on passe à l'étape suivante une fois l'erreur corrigée.
  95. 01 01 11 10 : idem, sauf qu'on revient à l'étape précédente une fois l'erreur corrigée.
  96. 01 01 11 11 : idem, sauf qu'après la correction d'erreur, le programme prendra fin.
  97. 01 10 00 00 : s'il y a une donnée, on invalide la donnée, et on reste dans cette étape de programme.
  98. 01 10 00 01 : idem, sauf qu'on passe à l'étape suivante.
  99. 01 10 00 10 : idem, sauf qu'on revient à l'étape précédente.
  100. 01 10 00 11 : idem, sauf qu'on met fin à l'exécution du programme.
  101. 01 10 01 00 : s'il y a une donnée, on l'invalide et on fait avancer le ruban de données par la droite; on reste dans cette étape.
  102. 01 10 01 01 : idem, sauf qu'on passe à l'étape suivante.
  103. 01 10 01 10 : idem, sauf qu'on revient à l'étape précédente.
  104. 01 10 01 11 : idem, sauf que c'est la fin du programme.
  105. 01 10 10 00 : s'il y a une donnée, on l'invalide et on fait avancer le ruban de données par la gauche; on reste dans cette étape.
  106. 01 10 10 01 : idem, sauf qu'on passe à l'étape suivante.
  107. 01 10 10 10 : idem, sauf qu'on revient à l'étape précédente.
  108. 01 10 10 11 : idem, sauf que c'est là que le programme prend fin.
  109. 01 10 11 00 : s'il y a une donnée, on l'invalide et on provoque une erreur; puis on reste dans cette étape.
  110. 01 10 11 01 : idem, sauf qu'on passe à l'étape suivante.
  111. 01 10 11 10 : idem, sauf que l'on revient à l'étape précédente.
  112. 01 10 11 11 : idem, sauf que là encore, on arrête le programme une fois l'erreur corrigée (on se demande à quoi servirait de la corriger : il y a là moyen d'améliorer l'implémentation réelle de cette machine).
  113. 01 11 00 00 : s'il y a une donnée, on la recopie en l'invalidant et on reste dans cette étape.
  114. 01 11 00 01 : idem, sauf qu'on passe à l'étape suivante.
  115. 01 11 00 10 : idem, sauf qu'on revient à l'étape précédente.
  116. 01 11 00 11 : idem, sauf que c'est ici que s'achève le programme.
  117. 01 11 01 00 : s'il y a une donnée, on la recopie en l'invalidant avant d'avancer le ruban de données par la droite; puis on reste dans cette étape.
  118. 01 11 01 01 : idem, sauf que l'on passe à l'étape suivante.
  119. 01 11 01 10 : idem, sauf que l'on revient à l'étape précédente.
  120. 01 11 01 11 : idem, sauf que le programme prend fin ici.
  121. 01 11 10 00 : s'il y a une donnée, on la recopie en l'invalidant avant d'avancer le ruban de données par la gauche; puis on reste dans cette étape.
  122. 01 11 10 01 : idem, sauf qu'on passe à l'étape suivante.
  123. 01 11 10 10 : idem, sauf qu'on revient à l'étape précédente.
  124. 01 11 10 11 : idem, sauf qu'ici prend fin le programme.
  125. 01 11 11 00 : s'il y a une donnée, on la recopie en l'invalidant et on signale une erreur; une fois l'erreur corrigée, on reste dans l'étape en cours.
  126. 01 11 11 01 : idem, sauf qu'on passe à l'étape suivante une fois l'erreur corrigée.
  127. 01 11 11 10 : idem, sauf qu'on passe à l'étape précédente une fois l'erreur corrigée.
  128. 01 11 11 11 : idem sauf qu'on arrêtera quand même le programme ici quand l'erreur aura été corrigée.
C'est la même chose pour la série de 129 à 255, mais avec en plus la considération qu'on a lu une donnée dite "contraire" sur le ruban (ce serait par exemple un "0" si l'autre donnée avait était prise pour un "1").

Mais je crois qu'il faut reconnaître ici que loin de simplifier la machine de Turing, nous l'avons rendue plus compliquée.
La machine de Turing, telle qu'elle était définie à l'origine, aurait pu s'implémenter de manière très simple avec les moyens les plus répandus de l'époque (n'oublions pas qu'on était alors en temps de guerre) : quelques relais et une grosse boîte de conserve entraînée par un bête phonogramme servirait d'unité de lecture du programme et l'unité servant de registre, quant à lelle, pourait être réalisée tout aussi facilement au moyen de quelques relais, des interrupteurs et des voyants lumineux.
Notre boîte cylindrique entrainerait un rouleau perforé refermé sur lui-même de sorte à tourner en boucle, mais pas d'inquiétude ! car pour sortir de cette boucle infinie, il y a le fameux état de "fin" de programme.
Le rouleau de papier perforé comporte sur un de ses deux bords un jeu de performations qui indiquent l'état dans lequel se trouve le programme, puis, au milieu, un deuxième jeu de perforations indiquant dans quel état doit se trouver le registre pour que notre automate, étant dans cette étape de programme, lui applique les changements spécifiés par un troisième jeu de perforations, sur l'autre bord du rouleau, lequel troisième jeu, par une combinaison de perforations similaires à celles du premier jeu de perforations rencontré sur l'autre bord du rouleau, spécifie aussi dans quel état le programme devra se poursuivre, c'est-à-dire la combinaison de perforations que la machine devra trouver sur l'autre bord du ruban de programme afin de poursuivre les opérations.
Et voilà que nous avons ici le véritable ancêtre de l'ordinateur, officiellement donné pour être le Harvard Mark 1 (qu'il faut prononcer "harouade makouane"). Bien sûr, il ne faudra pas s'encombrer de l'embrayage du "markouane" qui permettrait de passer d'un "rouleaux" de calcul à un autre, mais nous avons ici un véritable prototype, quelque chose qui montre à quoi doit ressembler l'objet final et en démontrer le fonctionnement.

Qui d'autre que les américains peuvent continuer à prétendre que leur "markouane" est l'ancêtre de l'ordinateur, puisqu'il est évident à présent qu'il s'agit de la machine de Turing ? Mais comme les états-uniens sont de plus mauvaise foi que leur modèle britannique, on continuera pendant longtemps encore à diffuser aux ignorants du monde entier que les américains ont tout inventé, y compris l'eau chaude et la poudre à canon.
Mais surtout la poudre à canon.
Nota Bene : ce que l'on nomme aujourd'hui "architecture d'Harvard" (séparation physique du programme et des données) par opposition à l'architecture de von Neumann (dans laquelle programme et données se trouvent sur le même support), n'est en fait rien d'autre qu'une architecture de Turing. Les britanniques ne l'ignorent pas, qui ont nommé "Turing manual" leur page web dédiée au manuel de programmation de la Machine Mark II de Manchester (c'est leur markouane à eux, britanniques, alliés des ricains mais britanniques avant tout, et tellement fiers d'avoir - eux aussi mais avant tout le monde - tout inventé, de l'eau chaude à la poudre à canon.

Mais surtout l'eau chaude (forcément : pour le thé...)


Aucun commentaire:

Enregistrer un commentaire