Qui a inventé les pointeurs?


12

Question assez simple, mais quelque chose que je n'ai pas pu découvrir. Qui a été la première personne à décrire l'idée d'un pointeur? Le concept abstrait lui-même?


8
Considérant que les pointeurs ne sont que des références à la mémoire, je suppose que les pointeurs (sous une forme ou une autre) existent depuis le début de l'informatique. Sinon, comment liriez-vous un peu de mémoire?
Rob

3
N'oublions pas le pointeur d'instruction (IP) ici (aka Program Counter ). "En effet, le compteur de programmes (ou tout bloc équivalent de matériel qui sert le même but) est très central dans l'architecture von Neumann."
Scott Whitlock

@Rob - il y a eu des magasins de mémoire accessibles (au moins au niveau le plus bas) par synchronisation plutôt que par adresse - lignes de retard au mercure, etc. En principe, il serait possible de faire certains types de traitement de l'information sans inventer des adresses. De plus, le modèle de la machine Turing n'avait qu'une bande (oups, pourquoi ai-je dit pile?). Il y a des réponses possibles à "comment d'autre?", IOW, bien que dans la vraie vie j'imagine que vous avez raison.
Steve314

Réponses:


4

Bud Lawson a reçu le Computer Pioneer Award de l'IEEE il ya quelques années pour avoir inventé la variable pointeur en 1964.


Le Premier ministre Sherman, en 1963, le précède. Voir sa programmation et codage des ordinateurs numériques viii. 152: "Ces registres d'index pointent vers les emplacements en mémoire; ils sont donc appelés pointeurs lorsqu'ils sont ainsi utilisés."
Geremia

15

Les pointeurs sont en réalité du stockage adressé par le contenu d'un registre. En tant que tels, tous les langages d'assembleur implémentent cela d'une manière et, avant cela, tout le code machine codé en dur l'a implémenté.

Il y aura un argument quant au premier ordinateur qui a implémenté cela. Autant que je sache, le système à petite échelle de l'Université Manchestern a été le premier à inclure un stockage adressé par des registres contrôlés par programme. Il a peut-être été précédé par le système ENIAC, mais il avait si peu de stockage au point de faire du stockage adressable un point discutable.


+1 Je suppose que le moteur de différence était trop simple pour exiger des registres, mais quelqu'un sait-il si le moteur analytique en aurait eu besoin?

@Mark - cela pourrait être un problème de définition. Même pour effectuer une seule opération arithmétique comme un ajout, vous avez deux valeurs d'entrée et une sortie qui nécessitent une sorte de représentation dans la machine. Cette représentation pourrait être appelée un registre. Même un boulier pourrait prétendre avoir un registre.
Steve314

@Steve - Bon point.

Le point clé ici est "le stockage adressé par le contenu d'un registre". c'est-à-dire la possibilité de charger et de stocker un registre à partir d'un autre morceau de mémoire, en utilisant l'adresse dans un autre registre, et, la possibilité de manipuler cette adresse.
James Anderson

5

Les pointeurs sont plus largement des références. La première langue à avoir quelque chose comme ça était ALGOL 60 qui pouvait appeler par son nom. Cette réponse sur SO entre dans les détails. PL / J'avais des pointeurs comme BCPL, ce qui signifie que CPL en avait probablement aussi, même si je n'en ai trouvé aucune preuve. CPL est très difficile à concrétiser.

Pour répondre plus directement à votre question sur le "qui", DW Barron, Christopher Strachey ou Martin Richards ont probablement inventé le terme "pointeur".


N'oubliez pas B - il y avait des pointeurs! Aussi PL / I, et je suis sûr qu'il y en a d'autres avant, sans compter les machines d'assemblage et de Turing.
Pubby

Ce serait donc 1966 alors.
World Engineer

ALGOL avait des pointeurs
Kevin Cline

4

Il est difficile de deviner exactement qui les a créés, mais les registres d'index de l'IBM 704 étaient probablement la première implémentation. Du point de vue du langage de programmation, il aurait donc sans aucun doute été le langage d'assemblage du 704.

Apparemment, il a fallu quelques années après que les langages de programmation de niveau supérieur aient été conçus pour tirer parti de cette innovation, mais à ce moment-là, la majeure partie de l'invention a été faite, et cela s'est principalement résolu à choisir des noms, des notations, etc. pour décrire ce que le matériel prise en charge.


0

Les pointeurs en tant que concept de base sont utilisés dans "l'adressage indirect", une fonction sur la plupart des CPU remontant au moins au 6502.

Commodore a utilisé le "kernal" sur ses ordinateurs VIC 20, C64 et C128. un ensemble fixe de logiciels d'adresse pourrait appeler qui serait ensuite redirigé vers le code actuel. Ils pourraient alors modifier le système d'exploitation sans casser le logiciel existant.

Je pense que le 8080 et le Z80 avaient également une adresse indirecte, mais je ne suis pas certain et je ne m'en souviens pas dans le 8008.


1
En fait, les pointeurs sont également utilisés pour l'adressage direct. Ce ne sont que des pointeurs à constante de compilation - à moins que vous n'utilisiez du code à modification automatique, bien sûr. Je suis aussi fan du 6502 (ou strictement du 6510) - ma première machine était un C64 - mais cette puce n'est pas vraiment pertinente ici. Les premiers microprocesseurs grand public n'ont pas beaucoup inventé de nouveaux principes - les idées existaient déjà depuis des décennies. C'est juste que ces idées n'étaient pas réalisables en tant que puces uniques et abordables jusque dans les années 70, et ne sont devenues des jouets grand public que dans les années 80.
Steve314

0

Eh bien - La première fois qu'une syntaxe et une sémantique concrètes ont été développées pour les variables de pointeur, c'était pour le langage de programmation PL / I en 1964.

Le papier séminal à ce sujet est paru en 1967 dans ACM Communications en 1967.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.