Wer hat die Zeiger erfunden?


12

Ziemlich einfache Frage, aber etwas, das ich nicht herausfinden konnte. Wer hat als erster die Idee eines Zeigers beschrieben? Das abstrakte Konzept selbst?


8
Da Zeiger nur Verweise auf das Gedächtnis sind, gehe ich davon aus, dass Zeiger (in irgendeiner Form oder Gestalt) seit Beginn der Datenverarbeitung existieren. Wie sonst würdest du ein bisschen Gedächtnis lesen?
Rob

3
Vergessen wir nicht den Instruction Pointer (IP) hier (aka Program Counter ). "In der Tat ist der Programmzähler (oder ein äquivalenter Hardwareblock, der den gleichen Zweck erfüllt) für die von Neumann-Architektur von zentraler Bedeutung."
Scott Whitlock

@Rob - Es gab Speicher, auf die (zumindest auf der niedrigsten Ebene) eher durch Timing als durch Adress-Quecksilber-Verzögerungsleitungen usw. zugegriffen wurde. Im Prinzip wäre es möglich, einige Arten der Informationsverarbeitung durchzuführen, ohne Adressen zu erfinden. Außerdem hatte das Turing-Maschinenmodell nur ein Band (whoops, warum habe ich Stack gesagt?). Es gibt mögliche Antworten auf "wie sonst?", IOW, obwohl ich mir im wirklichen Leben vorstelle, dass Sie Recht haben.
Steve314

Antworten:


4

Bud Lawson erhielt voreinigen Jahrenden Computer Pioneer Award des IEEEfür die Erfindung der Zeigervariable im Jahr 1964.


1963 war Premierminister Sherman älter als er. Siehe seine Programmier- und Codieranleitung für Digitalcomputer viii. 152: "Diese Indexregister zeigen auf die Positionen im Speicher; daher werden sie Zeiger genannt, wenn sie so verwendet werden."
Geremia

15

Zeiger sind wirklich Speicher, die durch den Inhalt eines Registers adressiert werden. Als solches implementieren alle Assembler-Sprachen dies auf irgendeine Weise, und davor implementierte jeder fest codierte Maschinencode dies.

Es wird einige Argumente für den ersten Computer geben, der dies implementiert hat. Soweit ich weiß, enthielt das Small Scale System der Universität Manchestern als erstes einen Speicher, der von programmgesteuerten Registern adressiert wurde. Möglicherweise ging das ENIAC-System voraus, es verfügte jedoch über so wenig Speicher, dass adressierbarer Speicher zu einem strittigen Punkt wurde.


+1 Ich gehe davon aus, dass die Difference Engine zu einfach war, um Register anzufordern, aber weiß jemand, ob die Analytical Engine sie benötigt hätte?

@Mark - Dies könnte ein Definitionsproblem sein. Selbst wenn Sie eine einzelne arithmetische Operation wie eine Addition ausführen möchten, stehen Ihnen zwei Eingabewerte und ein Ausgabewert zur Verfügung, die in der Maschine dargestellt werden müssen. Diese Darstellung könnte als Register bezeichnet werden. Sogar ein Abakus könnte ein Register haben.
Steve314

@Steve - Guter Punkt.

Der entscheidende Punkt ist hier "Speicherung durch den Inhalt eines Registers angesprochen". dh die Fähigkeit, ein Register aus einem anderen Teil des Speichers zu laden und zu speichern, wobei die Adresse in einem anderen Register verwendet wird, und die Fähigkeit, diese Adresse zu manipulieren.
James Anderson

5

Zeiger sind allgemeinere Verweise. Die erste Sprache, die so etwas hatte, war ALGOL 60, das beim Namen nennen konnte. Diese Antwort auf SO geht ins Detail. PL / Ich hatte Zeiger wie BCPL, was bedeutet, dass CPL wahrscheinlich auch Zeiger hatte, obwohl ich keine Beweise dafür gefunden habe. CPL ist sehr schwer zu konkretisieren.

Um Ihre Frage nach dem "Wer" direkter zu beantworten, haben DW Barron, Christopher Strachey oder Martin Richards wahrscheinlich den Begriff "Zeiger" geprägt.


Vergiss B nicht - es hatte Zeiger! Auch PL / I, und ich bin mir sicher, dass es noch andere gibt, die Montage- und Turing-Maschinen nicht mitzählen.
Pubby

Das wäre dann also 1966.
Weltingenieur

ALGOL hatte Zeiger
Kevin Cline

4

Es ist schwer zu erraten, wer genau auf sie gekommen ist, aber die Indexregister in der IBM 704 waren wahrscheinlich die erste Implementierung. Aus programmiersprachlicher Sicht wäre es daher zweifellos die Assemblersprache des 704 gewesen.

Es hat anscheinend ein paar Jahre gedauert, bis höhere Programmiersprachen entwickelt wurden, um diese Innovation zu nutzen, aber bis dahin war der größte Teil der Erfindungen erledigt, und es kam hauptsächlich darauf an, Namen, Notationen usw. auszuwählen, um die Hardware zu beschreiben unterstützt.


0

Zeiger als Grundkonzept werden bei der "indirekten Adressierung" einer Funktion auf den meisten CPUs verwendet, die mindestens der 6502 entsprechen.

Commodore verwendete das "kernal" auf seinen VIC 20-, C64- und C128-Computern. Ein fester Satz von Adresssoftware könnte anrufen, der dann zum aktuellen Code umgeleitet würde. Sie könnten dann das Betriebssystem ändern, ohne die vorhandene Software zu beschädigen.

Ich glaube, der 8080 und der Z80 hatten auch eine indirekte Adresse, aber ich bin mir nicht sicher, und ich erinnere mich nicht daran beim 8008.


1
Tatsächlich werden Zeiger auch durch direkte Adressierung verwendet. Es handelt sich lediglich um Zeiger auf Konstanten zur Kompilierungszeit - es sei denn, Sie verwenden selbstmodifizierenden Code. Ich bin auch ein Fan des 6502 (oder genau gesagt des 6510) - meine erste Maschine war ein C64 - aber dieser Chip ist hier nicht wirklich relevant. Die frühen Consumer-Mikroprozessoren erfanden nicht viel nach neuen Prinzipien - die Ideen gab es bereits seit Jahrzehnten. Es ist nur so, dass diese Ideen erst in den 70er Jahren als einzelne, erschwingliche Chips umgesetzt werden konnten und erst in den 80er Jahren zum Mainstream-Spielzeug für Verbraucher wurden.
Steve314

0

Nun - Das erste Mal, dass eine konkrete Syntax und Semantik für Zeigervariablen entwickelt wurde, war für die PL / I-Programmiersprache im Jahr 1964.

Das wegweisende Papier dazu erschien 1967 in der ACM Communications im Jahr 1967.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.