Chi ha inventato i puntatori?


12

Domanda piuttosto semplice, ma qualcosa che non sono stato in grado di scoprire. Chi è stato il primo a descrivere l'idea di un puntatore? Il concetto astratto stesso?


8
Considerando che i puntatori sono solo riferimenti alla memoria, presumo che i puntatori (in qualche forma o forma) siano esistiti sin dall'inizio dell'informatica. In quale altro modo leggeresti un po 'di memoria?
Rob

3
Non dimentichiamo il puntatore di istruzioni (IP) qui (aka Program Counter ). "In effetti, il contatore del programma (o qualsiasi blocco equivalente di hardware che serve allo stesso scopo) è molto centrale nell'architettura von Neumann."
Scott Whitlock,

@Rob - ci sono stati archivi di memoria a cui si accedeva (almeno al livello più basso) per tempismo piuttosto che per indirizzo - linee di ritardo del mercurio ecc. In linea di principio, sarebbe possibile eseguire alcuni tipi di elaborazione delle informazioni senza inventare indirizzi. Inoltre, il modello di macchina Turing aveva solo un nastro (whoops, perché ho detto stack?). Ci sono possibili risposte a "come altro?", IOW, anche se nella vita reale immagino che tu abbia ragione.
Steve314,

Risposte:


4

Bud Lawson ha ricevuto il Computer Pioneer Award dell'IEEEalcuni anni fa, per aver inventato la variabile pointer nel 1964.


Il primo ministro Sherman, nel 1963, lo precede. Vedi la sua programmazione e codifica Computer digitali viii. 152: "Questi registri indice puntano alle posizioni in memoria; quindi sono chiamati puntatori quando utilizzati."
Geremia,

15

I puntatori sono in realtà degli archivi indirizzati dai contenuti di un registro. Come tale tutti i linguaggi assembler implementano questo in qualche modo e, prima ancora, tutto il codice macchina hard coded lo ha implementato.

Ci saranno alcuni argomenti sul primo computer che lo ha implementato. Per quanto ne so, il sistema su piccola scala della Manchestern University è stato il primo a includere la memoria indirizzata dai registri controllati dal programma. Potrebbe essere stato preceduto dal sistema ENIAC ma aveva così poca memoria da rendere la memorizzazione indirizzabile un punto controverso.


+1 Suppongo che il motore delle differenze fosse troppo semplice per richiedere i registri, ma qualcuno sa se il motore analitico ne avrebbe avuto bisogno?

@Mark - questo potrebbe essere un problema di definizione. Anche per eseguire una singola operazione aritmetica come un'aggiunta, hai due valori di input e un output che richiedono un qualche tipo di rappresentazione nel macchinario. Tale rappresentazione potrebbe essere definita un registro. Persino un abaco potrebbe essere affermato di avere un registro.
Steve314,

@Steve - Buon punto.

Il punto chiave qui è "l'archiviazione indirizzata dal contenuto di un registro". cioè la capacità di caricare e memorizzare un registro da qualche altro pezzo di memoria, usando l'indirizzo in un altro registro, e la capacità di manipolare questo indirizzo.
James Anderson,

5

I puntatori sono riferimenti in senso lato. La prima lingua ad avere qualcosa del genere fu ALGOL 60 che poteva chiamare per nome. Questa risposta su SO entra in qualche dettaglio. PL / I aveva puntatori come BCPL, il che significa che probabilmente anche CPL ha fatto, anche se non ho trovato alcuna prova per questo. CPL è molto difficile fornire informazioni concrete.

Per rispondere più direttamente alla tua domanda sul "chi" DW Barron, Christopher Strachey o Martin Richards probabilmente hanno coniato il termine "puntatore".


Non dimenticare B - aveva puntatori! Anche PL / I, e sono sicuro che ce ne sono altri prima, senza contare le macchine di assemblaggio e Turing.
Pubblicazione

Quindi sarebbe il 1966 allora.
Ingegnere mondiale,

ALGOL aveva puntatori
kevin cline,

4

È difficile indovinare esattamente chi li ha inventati, ma i registri indice nell'IBM 704 sono stati probabilmente la prima implementazione. Da un punto di vista del linguaggio di programmazione, quindi, sarebbe stato senza dubbio il linguaggio assembly del 704.

Sembra che ci siano voluti alcuni anni prima che i linguaggi di programmazione di livello superiore fossero progettati per trarre vantaggio da questa innovazione, ma a quel punto la maggior parte dell'invenzione è stata fatta, e per lo più è dipeso da nomi, notazioni, ecc. Per descrivere quale hardware supportato.


0

I puntatori come concetto di base vengono utilizzati nell'indirizzamento indiretto di una funzione sulla maggior parte delle CPU che risale almeno al 6502.

Commodore usava il "kernal" sui suoi computer VIC 20, C64 e C128. un set fisso di software di indirizzo potrebbe chiamare che verrebbe quindi reindirizzato al codice corrente. Potrebbero quindi modificare il sistema operativo senza rompere il software esistente.

Penso che anche l'8080 e lo Z80 avessero un indirizzo indiretto, ma non ne sono certo e non me lo ricordo nell'8008.


1
In realtà, anche i puntatori vengono utilizzati dall'indirizzamento diretto. Sono solo puntatori costanti in fase di compilazione, a meno che tu non stia usando un codice di auto-modifica, ovviamente. Sono anche un fan del 6502 (o rigorosamente il 6510) - la mia prima macchina era una C64 - ma qui il chip non è molto rilevante. I primi microprocessori dei consumatori non inventarono molto in termini di nuovi principi: le idee erano già in circolazione da decenni. È solo che quelle idee non erano implementabili come singoli chip a prezzi accessibili fino agli anni '70 e non sono diventate giocattoli di consumo tradizionali fino agli anni '80.
Steve314,

0

Bene - La prima volta che una sintassi e una semantica concrete sono state sviluppate per le variabili puntatore è stata per il linguaggio di programmazione PL / I nel 1964.

L'articolo fondamentale su questo apparve nel 1967 in ACM Communications nel 1967.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.