Kto wynalazł wskaźniki?

12

Całkiem proste pytanie, ale czegoś, czego nie byłem w stanie się dowiedzieć. Kto jako pierwszy opisał ideę wskaźnika? Sama abstrakcyjna koncepcja?

Mikrofon
źródło
8
Biorąc pod uwagę, że wskaźniki są tylko odniesieniami do pamięci, zakładam, że wskaźniki (w jakiejś formie lub formie) istniały od początku obliczeń. Jak inaczej przeczytałbyś trochę pamięci?
Rob
3
Nie zapominajmy tutaj o wskaźniku instrukcji (IP) (inaczej Program Counter ). „Rzeczywiście, licznik programu (lub dowolny równoważny blok sprzętu, który służy temu samemu celowi) ma bardzo duże znaczenie dla architektury von Neumanna”.
Scott Whitlock
@Rob - istniały magazyny pamięci, do których uzyskano dostęp (przynajmniej na najniższym poziomie) raczej poprzez synchronizację czasową niż przez adres - linie opóźniające rtęć itp. Zasadniczo możliwe byłoby przetwarzanie informacji bez wymyślania adresów. Ponadto model maszyny Turinga miał tylko taśmę (ups, dlaczego powiedziałem stos?). Możliwe są odpowiedzi na „jak inaczej?”, IOW, choć w prawdziwym życiu myślę, że masz rację.
Steve314,

Odpowiedzi:

4

Bud Lawson otrzymał nagrodę IEEE Computer Pioneer Award kilka lat temu za wynalezienie zmiennej wskaźnika w 1964 roku.

Jaskółka oknówka
źródło
Premier Sherman w 1963 roku poprzedza go. Zobacz jego Programowanie i kodowanie Komputery cyfrowe viii. 152: „Te rejestry indeksów wskazują na lokalizacje w pamięci; stąd nazywane są wskaźnikami, gdy są używane”.
Geremia,
15

Wskaźniki są tak naprawdę pamięcią adresowaną przez zawartość rejestru. W związku z tym wszystkie języki asemblera implementują to w jakiś sposób, a wcześniej cały kod maszynowy na stałe to implementował.

Pojawi się argument dotyczący pierwszego komputera, który to zaimplementował. O ile wiem, system małych skal Uniwersytetu Manchestern jako pierwszy wprowadził pamięć adresowaną przez rejestry sterowane programowo. Być może poprzedziło go system ENIAC, ale miał tak mało pamięci, że pamięć adresowalna stała się kwestią sporną.

James Anderson
źródło
+1 Zakładam, że silnik różnic był zbyt prosty, by wymagać rejestrów, ale czy ktoś wie, czy silnik analityczny by go potrzebował?
@ Mark - może to być problem z definicją. Nawet w celu wykonania pojedynczej operacji arytmetycznej, takiej jak dodawanie, masz dwie wartości wejściowe i dane wyjściowe, które wymagają pewnego rodzaju reprezentacji w maszynie. Przedstawienie to można nazwać rejestrem. Można nawet twierdzić, że liczydło ma rejestr.
Steve314,
@ Steve - Dobra uwaga.
Kluczową kwestią jest tutaj „przechowywanie adresowane przez zawartość rejestru”. tj. możliwość załadowania i przechowywania rejestru z innej pamięci, przy użyciu adresu w innym rejestrze oraz możliwość manipulowania tym adresem.
James Anderson
5

Wskaźniki to szerzej odniesienia. Pierwszym językiem, który miał coś takiego, był ALGOL 60, który można nazwać po imieniu. Ta odpowiedź na SO zawiera pewne szczegóły. PL / Miałem wskaźniki, podobnie jak BCPL, co oznacza, że ​​CPL prawdopodobnie również, chociaż nie znalazłem na to żadnych dowodów. CPL jest bardzo trudna do skonkretyzowania.

Aby bardziej bezpośrednio odpowiedzieć na twoje pytanie „kto” albo DW Barron, Christopher Strachey lub Martin Richards prawdopodobnie ukuli termin „wskaźnik”.

Inżynier świata
źródło
Nie zapomnij o B - miał wskazówki! Również PL / I i jestem pewien, że są jeszcze inni, nie licząc maszyn montażowych i Turinga.
Pubby
To byłby wtedy rok 1966.
World Engineer
ALGOL miał wskaźniki
kevin cline
4

Trudno zgadnąć, kto dokładnie je wymyślił, ale rejestry indeksów w IBM 704 były prawdopodobnie pierwszą implementacją. Z punktu widzenia języka programowania byłby to bez wątpienia język asemblera 704.

Najwyraźniej zajęło to kilka lat po tym, jak języki programowania wyższego poziomu zostały zaprojektowane, aby wykorzystać tę innowację, ale do tego czasu większość wynalazków została zakończona, a przede wszystkim sprowadzono się do wybierania nazw, notatek itp., Aby opisać, jaki sprzęt utrzymany.

Jerry Coffin
źródło
0

Wskaźniki jako podstawowa koncepcja są używane w „adresowaniu pośrednim” funkcji na większości procesorów cofających się co najmniej tak jak 6502.

Commodore używał „jądra” na komputerach VIC 20, C64 i C128. ustalony zestaw oprogramowania adresowego mógłby wywoływać, który byłby następnie przekierowywany do bieżącego kodu. Mogliby następnie zmodyfikować system operacyjny bez uszkodzenia istniejącego oprogramowania.

Myślę, że 8080 i Z80 również miały adres pośredni, ale nie jestem pewien i nie pamiętam tego w 8008.

Jim C.
źródło
1
W rzeczywistości wskaźniki są również używane przez bezpośrednie adresowanie. Są tylko wskaźnikami stałymi w czasie kompilacji - chyba, że ​​oczywiście używasz kodu samomodyfikującego. Jestem też fanem 6502 (a ściślej 6510) - moją pierwszą maszyną była C64 - ale ten układ nie jest tutaj tak naprawdę istotny. Wczesne mikroprocesory konsumenckie nie wymyśliły wiele na drodze nowych zasad - pomysły istniały już od dziesięcioleci. Po prostu te pomysły nie były możliwe do wdrożenia jako pojedyncze przystępne cenowo układy do lat 70. i stały się popularnymi zabawkami konsumenckimi aż do lat 80.
Steve314,
0

Cóż - po raz pierwszy konkretną składnię i semantykę opracowano dla zmiennych wskaźnikowych dla języka programowania PL / I w 1964 r.

Przełomowy artykuł na ten temat ukazał się w 1967 r. W ACM Communications w 1967 r.

użytkownik256131
źródło