Хто винайшов покажчики?


12

Досить просте запитання, але щось я так і не зміг з’ясувати. Хто першим описав ідею вказівника? Сама абстрактна концепція?


8
Вважаючи, що покажчики - це лише посилання на пам'ять, я припускаю, що вказівники (у якійсь формі чи формі) існують з початку обчислень. Як ще ти прочитав би трохи пам’яті?
Роб

3
Не будемо забувати тут вказівник інструкцій (IP) (він же лічильник програм ). "Дійсно, програмний лічильник (або будь-який еквівалентний апарат апаратного забезпечення, який відповідає одній цілі) є дуже важливим для архітектури фон Неймана"
Скотт Вітлок

@Rob - існували сховища пам’яті, до яких можна було отримати доступ (принаймні на найнижчому рівні) тимчасово, а не за адресою - рядки затримки ртуті тощо. В принципі, можна було б зробити деякі види обробки даних, не вигадуючи адреси. Також модель машини Тюрінга мала лише стрічку (ну, чому я сказав стек?). Є можливі відповіді "як інакше?", ЯК, хоча в реальному житті я думаю, що ти маєш рацію.
Steve314

Відповіді:


4

Буд Лоусон отримав нагороду IEEE Computer Pioneer Award за кілька років тому за винахід змінної вказівника в 1964 році.


Прем'єр-міністр Шерман в 1963 році передував йому. Дивіться його програмування та кодування Digital Computers viii. 152: "Ці індексні регістри вказують на місця в пам'яті; отже, вони називаються покажчиками при використанні".
Геремія

15

Покажчики - це справді сховище, на яке звертається вміст регістра. Як такі, усі мови асемблера реалізують це певним чином, і до цього всі жорстко закодовані машинні коди реалізували це.

Буде якийсь аргумент щодо першого комп’ютера, який реалізував це. Наскільки я знаю, система малих масштабів університету Манчестера першою включила сховище, адресоване регістрами, керованими програмами. Це, можливо, передувало системі ENIAC, але у нього було так мало місця для зберігання, щоб зробити адресне зберігання точкою суперечки.


+1 Я припускаю, що двигун різниці був надто простим, щоб вимагати регістрів, але хтось знає, чи потрібен був би він аналітичному двигуну?

@Mark - це може бути проблема визначення. Навіть для виконання однієї арифметичної операції, як доповнення, у вас є два вхідних значення та вихід, які потребують певного представлення в апараті. Це представництво можна назвати реєстром. Навіть у абакуса може бути заявлено, що він має реєстр.
Steve314

@Steve - Гарний момент.

Ключовим моментом тут є "зберігання, адресоване вмістом регістра". тобто можливість завантаження та зберігання реєстру з якогось іншого фрагмента пам'яті, використовуючи адресу в іншому регістрі, та можливість маніпулювати цією адресою.
Джеймс Андерсон

5

Покажчики - більш широкі посилання. Першою мовою, що мала щось подібне, був ALGOL 60, який можна було назвати по імені. Ця відповідь на SO деталізується. PL / У мене були вказівники, як і BCPL, що означає, що CPL, ймовірно, теж робив, хоча я не знайшов жодних доказів для цього. Конкретна інформація про CPL дуже складна.

Щоб більш прямо відповісти на ваше запитання щодо того, хто "DW" Баррон, Крістофер Страчі або Мартін Річардс, ймовірно, придумав термін "покажчик".


Не забувайте B - на ньому були вказівники! Також PL / I, і я впевнений, що перед цим є інші, не рахуючи машин для складання та тюрінга.
Паббі

Так було б тоді 1966 рік.
Світовий інженер

ALGOL мав покажчики
кевін клайн

4

Важко здогадатися, хто саме їх придумав, але індексні регістри в IBM 704 були, мабуть, першою реалізацією. З точки зору мови програмування, таким чином, це, безперечно, була мовою складання 704 року.

Мабуть, пройшло кілька років після цього, перш ніж мови програмування вищого рівня були розроблені, щоб скористатися цим нововведенням, але до того часу більшість винаходів було зроблено, і це здебільшого дійшло до вибору імен, позначень тощо, щоб описати, що таке апаратне забезпечення підтримується.


0

Покажчики як основна концепція використовуються при "непрямому адресації" функції для більшості процесорів, що повертаються принаймні як 6502.

Commodore використовував "ядро" на своїх комп'ютерах VIC 20, C64 та C128. фіксований набір адресного програмного забезпечення може викликати, який потім буде перенаправлений на поточний код. Потім вони могли модифікувати ОС, не порушуючи існуючого програмного забезпечення.

Я думаю, що 8080 та Z80 також мали непряму адресу, але я не впевнений, і я не пам’ятаю цього в 8008 році.


1
Насправді вказівники використовуються і при прямій адресації. Вони є лише постійними покажчиками часу компіляції - якщо, звичайно, ви не використовуєте код, що змінюється. Я теж шанувальник 6502 (або строго 6510) - моєю першою машиною був C64 - але цей чіп тут не дуже актуальний. Ранні споживчі мікропроцесори не дуже придумували нові принципи - ідеї існували вже десятиліттями. Просто ці ідеї не були реалізовані як єдині доступні фішки до 70-х, і не стали основними іграшками для споживачів до 80-х.
Steve314

0

Ну - вперше конкретний синтаксис та семантика, де розроблені для змінних покажчиків, були для мови програмування PL / I в 1964 році.

Навчальний документ про це з'явився в 1967 році в Комунікаціях ACM в 1967 році.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.