¿Quién inventó los punteros?

12

Pregunta bastante simple, pero algo que no he podido descubrir. ¿Quién fue la primera persona en describir la idea de un puntero? ¿El concepto abstracto en sí mismo?

Miguel
fuente
8
Teniendo en cuenta que los punteros son solo referencias a la memoria, supongo que los punteros (de alguna forma o forma) han existido desde el comienzo de la informática. ¿De qué otra forma leerías un poco de memoria?
Rob
3
No olvidemos el puntero de instrucción (IP) aquí (también conocido como Contador de programas ). "De hecho, el contador del programa (o cualquier bloque de hardware equivalente que sirva para el mismo propósito) es fundamental para la arquitectura de von Neumann".
Scott Whitlock
@Rob: ha habido almacenes de memoria a los que se accedió (al menos en el nivel más bajo) por tiempo en lugar de por dirección: líneas de retraso de mercurio, etc. En principio, sería posible realizar algunos tipos de procesamiento de información sin inventar direcciones. Además, el modelo de máquina de Turing solo tenía una cinta (whoops, ¿por qué dije stack?). Hay posibles respuestas a "¿de qué otra manera?", IOW, aunque en la vida real me imagino que tienes razón.
Steve314

Respuestas:

4

Bud Lawson recibió el premio Computer Pioneer Award del IEEEhace unos años, por inventar la variable puntero en 1964.

Martín
fuente
El primer ministro Sherman, en 1963, es anterior a él. Vea su Programación y codificación de computadoras digitales viii. 152: "Estos registros de índice apuntan a las ubicaciones en la memoria; por lo tanto, se denominan punteros cuando se usan así".
Geremia
15

Los punteros son realmente almacenamiento dirigido por el contenido de un registro. Como tal, todos los lenguajes de ensamblador implementan esto de alguna manera y, antes de eso, todo el código de máquina codificado lo implementaba.

Habrá algún argumento sobre la primera computadora que implementó esto. Hasta donde yo sé, el Sistema de pequeña escala de la Universidad de Manchestern fue el primero en incluir almacenamiento dirigido por registros controlados por el programa. Es posible que haya sido precedido por el sistema ENIAC, pero tenía tan poco espacio de almacenamiento como para hacer del almacenamiento direccionable un punto discutible.

James Anderson
fuente
+1 Supongo que el motor de diferencia era demasiado simple para requerir registros, pero ¿alguien sabe si el motor analítico los habría necesitado?
@ Mark - esto podría ser un problema de definición. Incluso para realizar una sola operación aritmética como una suma, tiene dos valores de entrada y una salida que necesitan algún tipo de representación en la maquinaria. Esa representación podría llamarse un registro. Incluso se puede afirmar que un ábaco tiene un registro.
Steve314
@ Steve - Buen punto.
El punto clave aquí es "almacenamiento dirigido por el contenido de un registro". es decir, la capacidad de cargar y almacenar un registro desde algún otro trozo de memoria, utilizando la dirección en otro registro, y la capacidad de manipular esta dirección.
James Anderson el
5

Los punteros son más ampliamente Referencias. El primer idioma en tener algo así fue ALGOL 60, que podía llamar por su nombre. Esta respuesta en SO entra en algunos detalles. PL / I tenía indicadores al igual que BCPL, lo que significa que CPL probablemente también lo hizo, aunque no he encontrado ninguna evidencia de ello. La CPL es muy difícil de concretar información.

Para responder más directamente a su pregunta sobre el "quién", ya sea DW Barron, Christopher Strachey o Martin Richards, probablemente acuñaron el término "puntero".

Ingeniero mundial
fuente
No olvides a B: ¡tenía punteros! También PL / I, y estoy seguro de que hay otros antes, sin contar máquinas de ensamblaje y Turing.
Pubby
Entonces eso sería 1966 entonces.
Ingeniero mundial
ALGOL tenía punteros
kevin cline
4

Es difícil adivinar exactamente quién se les ocurrió, pero los registros de índice en el IBM 704 fueron probablemente la primera implementación. Desde el punto de vista del lenguaje de programación, por lo tanto, sin duda habría sido el lenguaje ensamblador del 704.

Al parecer, pasaron algunos años después de que los lenguajes de programación de nivel superior se diseñaron para aprovechar esta innovación, pero para entonces la mayor parte de la invención se realizó, y se redujo principalmente a elegir nombres, anotaciones, etc. para describir el hardware soportado.

Jerry Coffin
fuente
0

Los punteros como concepto básico se utilizan en el "direccionamiento indirecto" de una función en la mayoría de las CPU que se remontan al menos al 6502.

Commodore usó el "kernal" en sus computadoras VIC 20, C64 y C128. podría llamar un conjunto fijo de software de direcciones que luego sería redirigido al código actual. Luego podrían modificar el sistema operativo sin romper el software existente.

Creo que el 8080 y el Z80 también tenían una dirección indirecta, pero no estoy seguro y no lo recuerdo en el 8008.

Jim C
fuente
1
En realidad, los punteros también se usan mediante direccionamiento directo. Son solo punteros constantes en tiempo de compilación, a menos que esté usando código de auto modificación, por supuesto. Soy fanático del 6502 (o estrictamente del 6510) también, mi primera máquina fue una C64, pero ese chip no es realmente relevante aquí. Los primeros microprocesadores de consumo no inventaron mucho en la forma de nuevos principios: las ideas ya habían existido durante décadas. Es solo que esas ideas no fueron implementables como chips asequibles individuales hasta los años 70, y no se convirtieron en juguetes de consumo convencionales hasta los años 80.
Steve314
0

Bueno, la primera vez que se desarrolló una sintaxis y semántica concretas para las variables de puntero fue para el lenguaje de programación PL / I en 1964.

El documento seminal sobre esto apareció en 1967 en ACM Communications en 1967.

usuario256131
fuente