web-dev-qa-db-fra.com

Qui a créé l'idée ou les idées des premières constructions de boucles?

while (1) {
      if (1+1==2) {
             print "Yes, you paid attention in Preschool!";
      } else {
             print "Wait... I thought 1+1=2";
      }
 }

En tant que développeur, nous tous devons utiliser des boucles très fréquemment. Nous savons que. Ce que je me demandais, c'était qui pensait à l'idée d'avoir des boucles? Quelle langue a introduit les boucles? Quelle a été la première construction de boucle? S'agissait-il d'une boucle while? Une boucle for? etc?

53
Dynamic

Comme mouviciel et Emilio Garavaglia l'ont noté, le concept est antérieur à l'informatique. Cependant, la première instance d'une boucle logicielle était la boucle Ada Lovelace utilisée pour calculer nombres de Bernoulli =, comme décrit dans Note G de sa traduction du Croquis du moteur analytique inventé par Charles Babbage , par LF Menabrea . Menabrea note très tôt la capacité du moteur analytique à boucler:

Ceci étant entendu, plaçons, au début de la série d'opérations que nous voulons exécuter, l'aiguille C sur la division 2, l'aiguille B sur la division 5 et l'aiguille A sur la division 9. Permettons au marteau du cadran C pour frapper; il frappera deux fois, et en même temps l'aiguille B passera sur deux divisions. Ce dernier indiquera alors le chiffre 7, qui succède au chiffre 5 dans la colonne des premières différences. Si nous permettons maintenant au marteau du cadran B de frapper à son tour, il frappera sept fois, pendant lequel l'aiguille A avancera sept divisions; ceux-ci ajoutés aux neuf déjà marqués par lui donneront le nombre 16, qui est le nombre carré consécutif à 9. Si nous recommençons maintenant ces opérations, en commençant par l'aiguille C, qui doit toujours être laissée sur la division 2, nous allons percevoir qu'en les répétant indéfiniment, nous pouvons reproduire successivement la série des nombres entiers carrés au moyen d'un mécanisme très simple.

Le mécanisme de bouclage du moteur analytique est directement hérité de Joseph Marie Jacquardmétier à tisser mécanique (1801), comme indiqué dans les mémoires de Menabrea:

On va maintenant se demander comment la machine peut d'elle-même, et sans avoir recours à la main de l'homme, assumer les dispositions successives adaptées aux opérations. La solution de ce problème a été tirée de l'appareil de Jacquard, utilisé pour la fabrication de produits en brocart, de la manière suivante: -

Deux espèces de fils se distinguent généralement dans les étoffes tissées; l'un est le fil de chaîne ou longitudinal, l'autre le fil de trame ou transversal, qui est véhiculé par l'instrument appelé navette, et qui traverse le fil longitudinal ou chaîne. Lorsqu'une étoffe en brocart est requise, il faut à son tour empêcher certains fils de traverser la trame, et ceci selon une succession qui est déterminée par la nature du dessin à reproduire. Auparavant, ce processus était long et difficile, et il était nécessaire que l'ouvrier, en s'occupant du dessin qu'il devait copier, réglemente lui-même les mouvements que devaient effectuer les fils. De là découle le prix élevé de cette description des étoffes, surtout si des fils de différentes couleurs entrent dans le tissu. Pour simplifier cette fabrication, Jacquard a conçu le plan de connexion de chaque groupe de fils qui devaient agir ensemble, avec un levier distinct appartenant exclusivement à ce groupe. Tous ces leviers se terminent par des tiges, qui sont réunies en un seul faisceau, ayant généralement la forme d'un parallélépipède avec une base rectangulaire. Les tiges sont cylindriques et sont séparées les unes des autres par de petits intervalles. Le processus de remontée des fils est ainsi résolu en celui de déplacement de ces différents bras de levier dans l'ordre requis. Pour ce faire, une feuille rectangulaire de carton est prise, de taille un peu plus grande qu'une section du faisceau de bras de levier. Si cette feuille est appliquée à la base du faisceau, et qu'un mouvement d'avancement est ensuite communiqué à la plaque de carton, ce dernier déplacera avec lui toutes les tiges du faisceau, et par conséquent les fils qui sont liés à chacun d'eux. Mais si le carton, au lieu d'être simple, était percé de trous correspondant aux extrémités des leviers qui le rencontrent, alors, puisque chacun des leviers passerait à travers le carton pendant le mouvement de ce dernier, ils resteraient tous dans leur des endroits. On voit donc qu'il est si facile de déterminer la position des trous dans le carton, qu'à tout moment il y aura un certain nombre de leviers, et par conséquent de paquets de fils, relevés, tandis que les autres resteront où ils étaient. En supposant que ce processus se répète successivement selon une loi indiquée par le motif à exécuter, on perçoit que ce motif peut être reproduit sur le truc. Pour cela, il suffit de composer une série de cartes selon la loi requise et de les disposer les unes après les autres dans un ordre approprié; puis, en les faisant passer sur une poutre polygonale qui est reliée de manière à tourner une nouvelle face à chaque coup de navette, laquelle face doit alors être poussée parallèlement à elle-même contre le faisceau de bras de levier, l'opération consistant à relever le les discussions seront effectuées régulièrement. On voit ainsi que les mouchoirs en brocart peuvent être fabriqués avec une précision et une rapidité autrefois difficiles à obtenir.

Le métier à tisser de Jacquard est une application très précoce d'une boucle dans le contexte de ordonner à une machine de produire une sortie répétée :

L'idée derrière le métier Jacquard était un système de cartes perforées et de crochets. Les cartes étaient très épaisses et percées de trous rectangulaires. Les crochets et aiguilles utilisés pour le tissage étaient guidés par ces trous dans le carton. Lorsque les crochets sont entrés en contact avec la carte, ils ont été maintenus immobiles à moins qu'elle ne rencontre l'un des trous perforés. Ensuite, le crochet a pu passer à travers le trou avec une aiguille insérant un autre fil, formant ainsi le motif souhaité. Des motifs complexes ont été obtenus en ayant de nombreuses cartes disposées les unes après les autres et/ou utilisées à plusieurs reprises.

Le métier à tisser de Jacquard est également reconnu comme une forme très précoce de programme stocké :

Si l'impulsion derrière une grande partie du développement des machines à calculer discutées jusqu'ici était née du calcul numérique, la motivation qui a conduit à la première forme de "programme stocké" devait provenir d'une source très différente: l'industrie textile. Nous avons vu précédemment que l'un des aspects fondamentaux des systèmes informatiques est le concept de représentation de l'information et, bien que nous ne l'ayons pas fait explicitement, l'application de cette idée peut être discernée dans tous les artefacts que nous avons examinés jusqu'à présent: dans le développement de représentations écrites pour les valeurs numériques et les parallèles mécaniques qui en découlaient. Ainsi, l'alignement des cailloux sur un cadre de boulier, la juxtaposition d'échelles mobiles sur une règle à calcul, et la configuration des engrenages à crémaillère sur les appareils de Schickard, Pascal et Leibniz, sont tous des exemples de techniques de représentation qui cherchent à simplifier le complexe traite les tâches arithmétiques sous-jacentes. Il existe cependant des catégories d'informations et des représentations de celles-ci, autres que le nombre sur lequel les processus de calcul peuvent être effectués. La technologie de tissage développée par Joseph-Marie Jacquard en 1801 illustre un exemple d'une telle catégorie.

Charles Babbage a également adapté la procédure de stockage de Jacquard dans le Moteur Analytique , la présence ou l'absence d'un trou communiquait une simple commande marche/arrêt à la machine:

Le moteur analytique possède de nombreuses fonctionnalités essentielles trouvées dans l'ordinateur numérique moderne. Il était programmable à l'aide de cartes perforées, une idée empruntée au métier Jacquard utilisé pour tisser des motifs complexes dans les textiles. Le moteur avait un "magasin" où les chiffres et les résultats intermédiaires pouvaient être conservés, et un "moulin" distinct où le traitement arithmétique était effectué. Il avait un répertoire interne des quatre fonctions arithmétiques et pouvait effectuer une multiplication et une division directes. Il était également capable de fonctions pour lesquelles nous avons des noms modernes: ramification conditionnelle, boucle (itération), microprogrammation, traitement parallèle, itération, verrouillage, interrogation et mise en forme d'impulsion, entre autres, bien que Babbage n'ait utilisé nulle part ces termes. Il avait une variété de sorties, y compris l'impression sur papier, les cartes perforées, le tracé de graphiques et la production automatique de stéréotypes - des plateaux de matériau souple dans lesquels les résultats étaient imprimés et qui pouvaient être utilisés comme moules pour la fabrication de plaques d'impression.

Les branches conditionnelles du moteur analytique combinées aux boucles mécaniques inspirées de Jacquard et à la procédure de stockage sont incroyablement similaires (conceptuellement) à votre exemple, surtout si nous ajoutons imprimante Babbage au mélange, pour le print "..."; les pièces.

De toute évidence, les boucles mécaniques sont antérieures au métier à tisser de Jacquard, le premier appareil connu à fonctionner en mode boucle étant le mécanisme d'Anticythère (100 AEC), et si nous regardons encore plus loin dans l'histoire (et s'aventurer horriblement hors sujet), les cadrans solaires sont probablement les mécanismes les plus anciens créés par l'homme où la compréhension des boucles est évidente, en suivant bien sûr le motif répétitif des orbites du Soleil et des autres corps stellaires.

Cependant, je pense que dans le contexte de l'informatique (et non du calcul ou de toute autre chose), le moteur analytique et l'algorithme de calcul de Bernoulli d'Ada peuvent être crédités pour l'introduction de boucles, partageant au moins une partie du crédit avec le métier à tisser de Jacquard, ayant directement adapté le concept à partir de il.

102
yannis

Les boucles sont antérieures à l'informatique. Vous pouvez les trouver dans notation musicale dès le chant grégorien:

repeat sign

51
mouviciel

Le concept de "recommence" est en quelque sorte "primitif" à la perception humaine. Vous pouvez le dire à un enfant qui vient d'élaborer une compréhension minimale du langage naturel.

Dans les systèmes discrets, des boucles se trouvent dans toutes les machines à états finis lorsque vous admettez que vous pouvez atteindre un état que vous déjà connu auparavant.

La boucle la plus simple est le cycle entre deux états (une horloge). Etant donné qu'un nombre supérieur d'états peut en résulter d'un comptage, chaque machine plus complexe est construite sur un "compteur" incrémenté d'une horloge qui peut faire "sauter" sur certains drapeaux représentant certaines opérations combinatoires. C'est le cœur d'une machine Von Neumann sur laquelle est basé chaque ordinateur à microprocesseur.

En code machine, un saut est codé JP-Z-nnnn (où Z est le drapeau whatefer sur lequel basez votre condition). Dans une langue de niveau supérieur, cela se traduit presque immédiatement en

if(z) goto x;

Une boucle n'est rien de plus qu'un goto où l'étiquette x précède l'instruction goto elle-même.

Toutes les autres formulations (for, do, while, etc.) ne sont que du "sucre syntaxique" pour mieux domestiquer le sauvage goto dans les cas très courants de répétition jusqu'à ce que quelque chose se passe

33

Le concept de boucle est l'une des choses qui distinguent un ordinateur à part entière d'une simple machine à calculer. Si un système ne prend pas en charge le bouclage, ce n'est pas turing-complete et donc pas un ordinateur.

La première conception complète de Turing fut Babbage's Analytical Engine , donc elle devait avoir un concept de boucle. Cependant, il existe des systèmes qui ont une boucle mais qui ne sont pas complets (car ils omettent autre chose). Le travail de Babbage est probablement un bon point de départ, cependant.

4
GordonM

En supposant que vous entendiez des langages de programmation informatique de texte modernes.

ALGOL6 a "FOR", "DO", "UNTIL" et "WHILE", donc c'était avant 1960.

Le Retro Computing Museum a quelques langues avant 1960.

Kvikkalkul , le langage des années 50 pour la programmation des sous-marins nucléaires suédois n'a que GOTO. (Cependant, Kvikkalkul est presque certainement un canular des années 90, pas une vraie langue historique.)

Plankalkül par Konrad Zuse est le plus ancien que j'ai pu trouver. Il a une construction "für".

3
Chad Brewbaker

Le travail de Liebniz et de Newton contient des algorithmes avec des constructions en boucle. Liebniz a construit une calculatrice mécanique et a spéculé (comme Lovelace l'a fait des années plus tard) sur une machine pour effectuer une analyse plus sophistiquée. Ses notes sur ces idées sont sommaires, mais elles décrivent une logique structurée avec des boucles.

Cependant, l'idée de séquences de répétition et de comptage de boucles contrôlées, ainsi que ce que nous appellerions tandis que les boucles sont discutées dans le travail de l'homme pour lequel les algorithmes sont nommés: Muhammad ibn Musa al-Khwarizmi du IXe siècle. Son deuxième livre, al-Kitab al-mukhtasar fi hisab al-jabr wa'l-muqabala (الكتاب المختصر في حساب الجبر والمقابلة) (A Compendium on Calculation by Completion and Balancing) était connu de Newton, Liebnace, Babbage, Lov .

Bien sûr, al-Khwarizmi dépendait en partie des anciens Grecs. À un moment donné, nous revenons probablement à la version de rinçage d'Adam et Eve, faites mousser, répétez.

Pour en savoir plus sur Al-Khwārizmī et son travail, voir:

http://www-groups.dcs.st-andrews.ac.uk/history/Mathematicians/Al-Khwarizmi.html

2
Chuck Herbert