it-swarm.com.de

Wer hat die Idee (n) der ersten Schleifenkonstrukte erstellt?

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

Als Entwickler müssen wir alle häufig Schleifen sehr verwenden. Wir wissen das. Was ich mich fragte war, wer dachte an die Idee, Loops zu haben? Welche Sprache hat Schleifen eingeführt? Was war das erste Schleifenkonstrukt? War es eine while Schleife? Eine for Schleife? usw?

53
Dynamic

Wie mouviciel und Emilio Garavaglia feststellten, ist das Konzept älter als das Rechnen. Die erste Instanz einer Software-Schleife war jedoch die Schleife Ada Lovelace , die zur Berechnung von Bernoulli-Zahlen verwendet wurde =, wie in Anmerkung G ihrer Übersetzung der Skizze der von Charles Babbage erfundenen Analytical Engine , von LF Menabrea beschrieben. Die Fähigkeit der Analytical Engine, Schleifen zu erstellen, wird von Menabrea frühzeitig erkannt:

Nachdem dies verstanden wurde, setzen wir zu Beginn der Reihe von Operationen, die wir ausführen möchten, die Nadel C auf die Abteilung 2, die Nadel B auf die Abteilung 5 und die Nadel A auf die Abteilung 9. Lassen wir die Hammer des Zifferblatts C zu schlagen; es wird zweimal schlagen und gleichzeitig wird die Nadel B über zwei Abteilungen gehen. Letzterer gibt dann die Nummer 7 an, die der Nummer 5 in der Spalte der ersten Differenzen folgt. Wenn wir nun zulassen, dass der Hammer des Zifferblatts B seinerseits schlägt, schlägt er sieben Mal, wobei die Nadel A sieben Teilungen vorrückt; Diese addieren sich zu den bereits durch sie gekennzeichneten neun und ergeben die Zahl 16, die die quadratische Zahl in Folge von 9 ist. Wenn wir diese Operationen nun wieder beginnen, beginnend mit der Nadel C, die immer auf der Division 2 verbleiben soll, werden wir Nehmen Sie wahr, dass wir durch unbegrenzte Wiederholung der Reihe ganzer quadratischer Zahlen nacheinander mithilfe eines sehr einfachen Mechanismus reproduzieren können.

Der Schleifenmechanismus der Analytical Engine ist direkt von Joseph Marie Jacquardsmechanischer Webstuhl (1801) geerbt, wie in den Memoiren von Menabrea erwähnt:

Es wird nun gefragt, wie die Maschine von sich aus und ohne Rückgriff auf die Hand des Menschen die für die Operationen geeigneten aufeinanderfolgenden Dispositionen annehmen kann. Die Lösung dieses Problems wurde aus Jacquards Apparatur entnommen, die zur Herstellung von Brokatwaren auf folgende Weise verwendet wird:

Zwei Arten von Fäden werden normalerweise in gewebten Stoffen unterschieden; Einer ist der Kett- oder Längsfaden, der andere der Schuss oder der Querfaden, der von dem als Shuttle bezeichneten Instrument befördert wird und den Längsfaden oder die Kette kreuzt. Wenn ein brokatiertes Material benötigt wird, muss wiederum verhindert werden, dass bestimmte Fäden den Schuss überqueren, und dies gemäß einer Abfolge, die durch die Art des zu reproduzierenden Designs bestimmt wird. Früher war dieser Prozess langwierig und schwierig, und es war erforderlich, dass der Arbeiter, indem er sich um das Design kümmerte, das er kopieren sollte, selbst die Bewegungen regulieren sollte, die die Fäden ausführen sollten. Daraus ergab sich der hohe Preis dieser Stoffbeschreibung, insbesondere wenn Fäden verschiedener Farben in den Stoff eindrangen. Um diese Herstellung zu vereinfachen, entwickelte Jacquard den Plan, jede Gruppe von Fäden, die zusammenwirken sollten, mit einem bestimmten Hebel zu verbinden, der ausschließlich zu dieser Gruppe gehört. Alle diese Hebel enden in Stäben, die zu einem Bündel zusammengeschlossen sind und üblicherweise die Form eines Parallelrohrs mit rechteckiger Basis haben. Die Stäbe sind zylindrisch und in kleinen Abständen voneinander getrennt. Der Vorgang des Anhebens der Gewinde ist somit in den Vorgang des Bewegens dieser verschiedenen Hebelarme in der erforderlichen Reihenfolge aufgelöst. Zu diesem Zweck wird ein rechteckiges Blatt Pappe genommen, das etwas größer ist als ein Abschnitt des Bündels von Hebelarmen. Wenn dieses Blatt auf die Basis des Bündels aufgebracht wird und dann eine fortschreitende Bewegung auf die Pappe übertragen wird, bewegt diese alle Stangen des Bündels und folglich die mit jedem von ihnen verbundenen Fäden mit sich. Wenn die Pappe jedoch nicht glatt, sondern mit Löchern durchbohrt wäre, die den Enden der Hebel entsprechen, die auf sie treffen, würden sie alle in ihrer Pappe bleiben, da jeder der Hebel während der Bewegung der letzteren durch die Pappe gehen würde setzt. Wir sehen also, dass es einfach ist, die Position der Löcher in der Pappe zu bestimmen, dass zu einem bestimmten Zeitpunkt eine bestimmte Anzahl von Hebeln und folglich von Fadenpaketen angehoben werden muss, während der Rest dort bleibt, wo sie bleiben wurden. Angenommen, dieser Vorgang wird nacheinander nach einem Gesetz wiederholt, das durch das auszuführende Muster angegeben ist, dann nehmen wir an, dass dieses Muster auf dem Material reproduziert werden kann. Zu diesem Zweck müssen wir lediglich eine Reihe von Karten gemäß den gesetzlichen Bestimmungen zusammenstellen und sie in geeigneter Reihenfolge nacheinander anordnen. dann, indem sie über einen polygonalen Balken laufen, der so verbunden ist, dass er für jeden Hub des Shuttles eine neue Fläche dreht, die dann parallel zu sich selbst gegen das Bündel von Hebelarmen getrieben wird, wird der Vorgang des Anhebens der Threads werden regelmäßig durchgeführt. So sehen wir, dass brokatierte Gewebe mit einer Präzision und Schnelligkeit hergestellt werden können, die früher schwer zu erhalten waren.

Jacquards Webstuhl ist eine sehr frühe Anwendung einer Schleife im Kontext von Befehl an eine Maschine, eine wiederholte Ausgabe zu erzeugen :

Die Idee hinter dem Jacquard-Webstuhl war ein System aus Lochkarten und Haken. Die Karten waren sehr dick und hatten rechteckige Löcher. Die beim Weben verwendeten Haken und Nadeln wurden von diesen Löchern im Karton geführt. Als die Haken mit der Karte in Kontakt kamen, wurden sie stationär gehalten, es sei denn, sie stießen auf eines der gestanzten Löcher. Dann konnte der Haken mit einer Nadel, die einen anderen Faden einführte, durch das Loch gehen und so das gewünschte Muster bilden. Komplizierte Muster wurden erreicht, indem viele Karten nacheinander angeordnet und/oder wiederholt verwendet wurden.

Jacquards Webstuhl wird auch als eine sehr frühe Form eines gespeicherten Programms erkannt:

Wenn der Anstoß für einen Großteil der bisher diskutierten Entwicklung von Rechenmaschinen aus der numerischen Berechnung hervorgegangen war, sollte die Motivation, die zur frühesten Form des "gespeicherten Programms" führte, aus einer ganz anderen Quelle stammen: der Textilindustrie. Wir haben bereits früher gesehen, dass einer der grundlegenden Aspekte von Computersystemen das Konzept der Darstellung von Informationen ist, und obwohl wir dies nicht explizit getan haben, kann die Anwendung dieser Idee in allen Artefakten erkannt werden, die wir bisher untersucht haben: bei der Entwicklung schriftlicher Darstellungen für numerische Werte und der daraus entstehenden mechanischen Parallelen. Die Ausrichtung von Kieselsteinen auf einem Abakusrahmen, das Nebeneinander von sich bewegenden Schuppen auf einem Rechenschieber und die Konfiguration von Zahnrädern auf den Geräten von Schickard, Pascal und Leibniz sind Beispiele für Darstellungstechniken, die den Komplex vereinfachen sollen verarbeitet zugrunde liegende arithmetische Aufgaben. Es gibt jedoch andere Kategorien von Informationen und Darstellungen davon als die Anzahl, anhand derer Rechenprozesse ausgeführt werden können. Die 1801 von Joseph-Marie Jacquard entwickelte Webtechnik veranschaulicht ein Beispiel für eine solche Kategorie.

Charles Babbage passte auch Jacquards Speicherverfahren an die Analytical Engine an. Das Vorhandensein oder Fehlen eines Lochs übermittelte der Maschine einen einfachen Ein-Aus-Befehl:

Die Analytical Engine verfügt über viele wesentliche Funktionen des modernen Digitalcomputers. Es war mit Lochkarten programmierbar, eine Idee, die aus dem Jacquard-Webstuhl entlehnt wurde, mit dem komplexe Muster in Textilien gewebt wurden. Die Engine hatte einen "Speicher", in dem Zahlen und Zwischenergebnisse gespeichert werden konnten, und eine separate "Mühle", in der die arithmetische Verarbeitung durchgeführt wurde. Es hatte ein internes Repertoire der vier arithmetischen Funktionen und konnte eine direkte Multiplikation und Division durchführen. Es war auch in der Lage, Funktionen zu verwenden, für die wir moderne Namen haben: bedingte Verzweigung, Schleifen (Iteration), Mikroprogrammierung, Parallelverarbeitung, Iteration, Latching, Polling und Pulsformung, obwohl Babbage diese Begriffe nirgends verwendete. Es gab eine Vielzahl von Ausgaben, darunter Ausdrucke in Papierform, Lochkarten, grafische Darstellung und die automatische Herstellung von Stereotypen - Schalen aus weichem Material, in die Ergebnisse eingeprägt wurden, die als Formen für die Herstellung von Druckplatten verwendet werden konnten.

Die bedingten Zweige der Analytical Engine in Kombination mit den von Jacquard inspirierten mechanischen Schleifen und dem Speicherverfahren ähneln (konzeptionell) Ihrem Beispiel auf erschreckende Weise, insbesondere wenn wir Babbages Drucker zum Mix hinzufügen, für print "..."; Teile.

Offensichtlich sind mechanische Schleifen älter als Jacquards Webstuhl. Das erste bekannte Gerät, das in einer Schleifenform arbeitet, ist der Antikythera-Mechanismus (100 v. Chr.), Und wenn wir noch weiter in die Geschichte schauen (und wagen schrecklich vom Thema ab), Sonnenuhren sind wahrscheinlich die ältesten von Menschen geschaffenen Mechanismen, bei denen ein Verständnis der Schleifen offensichtlich ist, natürlich nach dem sich wiederholenden Muster der Umlaufbahnen der Sonne und anderer Sternkörper.

Ich denke jedoch, dass im Zusammenhang mit dem Rechnen (und nicht mit dem Rechnen oder irgendetwas anderem) der Berechnungsalgorithmus der Analytical Engine und Adas Bernoulli-Zahlen für die Einführung von Schleifen gutgeschrieben werden kann, wobei zumindest ein Teil des Kredits mit Jacquards Webstuhl geteilt wird, nachdem das Konzept direkt angepasst wurde es.

102
yannis

Schleifen sind älter als das Rechnen. Sie finden sie in Notenschrift bereits im Gregorianischen Gesang:

repeat sign

51
mouviciel

Das Konzept von "mach es noch einmal" ist irgendwie "primitiv" für die menschliche Wahrnehmung. Sie können dies einem Kind erzählen, das gerade ein minimales Verständnis der natürlichen Sprache entwickelt hat.

In diskreten Systemen werden Schleifen in allen endlichen Zustandsmaschinen gefunden, wenn Sie zugeben, dass Sie einen Zustand erreichen können, den Sie bereits zuvor hatten.

Die einfachste Schleife ist der Zyklus zwischen zwei Zuständen (einer Uhr). Angesichts der Tatsache, dass eine höhere Anzahl von Zuständen aus einer Zählung daraus resultieren kann, wird jede komplexere Maschine auf einen "Zähler" aufgebaut, der durch eine Uhr erhöht wird, die auf bestimmte Flags "springen" kann, die bestimmte kombinatorische Operationen darstellen. Dies ist der Kern einer Von Neumann-Maschine, auf der jeder mikroprozessorbasierte Computer basiert.

Im Maschinencode wird ein Sprung codiert JP-Z-nnnn (wobei Z die Whatefer-Flagge ist, auf der Ihre Bedingung basiert). In einer höheren Sprache wird dies fast sofort übersetzt

if(z) goto x;

Eine Schleife ist nichts anderes als ein goto, bei dem das x-Label vor der goto-Anweisung selbst steht.

Jede andere Formulierung (für, tun, während usw.) ist nur "syntaktischer Zucker", um die besser zu domestizieren wild gehe in den sehr häufigen Fällen von Wiederholung, bis etwas passiert

33

Das Konzept der Schleife ist eines der Dinge, die einen vollwertigen Computer von einer einfachen Rechenmaschine unterscheiden. Wenn ein System keine Schleifen unterstützt, ist es nicht turing-complete und daher kein Computer.

Das erste Turing-vollständige Design war Babbages Analytical Engine , also muss es ein Konzept der Schleife gehabt haben. Es gibt jedoch Systeme, die eine Schleife haben, aber nicht vollständig sind (weil sie etwas anderes weglassen). Babbages Arbeit ist jedoch wahrscheinlich ein guter Ausgangspunkt.

4
GordonM

Angenommen, Sie meinen moderne Programmiersprachen für Textcomputer.

ALGOL6 hat "FOR", "DO", "UNTIL" und "WHILE", also war es vor 1960.

Das Retro Computing Museum hat vor 1960 einige Sprachen.

Kvikkalkul , die Sprache aus den 50er Jahren für die Programmierung schwedischer Atom-U-Boote hat nur GOTO. (Kvikkalkul ist jedoch mit ziemlicher Sicherheit ein Scherz aus den 90er Jahren, keine echte historische Sprache.)

Plankalkül von Konrad Zuse ist das früheste, das ich finden konnte. Es hat ein "für" Konstrukt.

3
Chad Brewbaker

Die Arbeit von Liebniz und Newton enthält Algorithmen mit Schleifenkonstrukten. Liebniz baute einen mechanischen Taschenrechner und spekulierte (wie Lovelace Jahre später) über eine Maschine, um anspruchsvollere Analysen durchzuführen. Seine Notizen zu diesen Ideen sind lückenhaft, aber sie beschreiben strukturierte Logik mit Schleifen.

Die Idee von Wiederholungssequenzen und zählgesteuerten Schleifen sowie das, was wir while-Schleifen nennen würden, werden jedoch in der Arbeit des Mannes diskutiert, nach dem Algorithmen benannt sind: Muhammad ibn Musa al-Khwarizmi aus dem 9. Jahrhundert. Sein zweites Buch, al-Kitab al-Mukhtasar fi hisab al-jabr wa'l-muqabala (Ein Kompendium über die Berechnung durch Fertigstellung und Ausgleich), war Newton, Liebniz, Babbage, Lovelace usw. Bekannt .

Natürlich stützte sich al-Khwarizmi teilweise auf die alten Griechen. Irgendwann kehren wir wahrscheinlich zu Adams und Evas Version von Spülen, Schäumen und Wiederholen zurück.

Weitere Informationen über Al-Khwārizmī und seine Arbeit finden Sie unter:

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

2
Chuck Herbert