Сторінка 1 з 2

Історія винайдення Pointers

Додано: 19 липня 2023, 19:35
Сенсей
Історія винайдення Pointers
(опосередкованої адресації вищих рангів),
спискових ланцюжків та складних ієрархічних структур

.
... Доповнюється ... Доповнюється ... Доповнюється ... Доповнюється ... Доповнюється ... Доповнюється ... Доповнюється ... Доповнюється

.
Орієнтовано для програмістів та ІТ-фахівців, які знайомі з програмуванням та мають уяву про Pointers
Дуже цікава тема для програмістів та надзвичайно важлива для людства, оскільки детально пояснює причини та процес винайдення Pointers, які являють собою найважливіший засіб для ІТ та, зокрема, для програмування.
Зміст
  • 1. Вступ: значення Pointers для людства.
  • 2. Визначення Pointers та інших понять.
    - Адресація 2-ого рангу (Pointers) та адресація вищих рангів.
    - «Штрих-операція» або розіменування Pointers.
    - Багатократне розіменування Pointers (multiple indirection).
    - Команда додавання команд.
    - Плаваюча адресації (floating addressing) та її розбіжність від адресації 2-ого рангу (Pointers).
    - Особливості бібліотечного програмування в комп’ютері МЕОМ.
    - Змінно-спаяна пам’ять та бібліотечне програмування в комп’ютера «Київ».
  • 3. Кроки появи Pointers.
  • 3.1. Модулювання Pointers в комп’ютері МЕОМ.
    - задача перебору значень.
    - реалізація імперативною мовою програмування.
    - складнощі реалізації командами комп’ютері МЕОМ.
    - Перша програма з адресацією 2-ого рангу (Pointers).
-- алгоритми/машини А.М. Колмогорова та В.А. Успенського з адресацією 2-ого рангу (Pointers; 1953 та 1958р.).
  • 3.2. Народження Pointers (опосередкованої адресації вищих рангів).
    - перший СТЕК з адрес для повернення керування вкладеними підпрограмами смінно-спаяної пам'яті.
    - опосередкована адресація вищих рангів та "штрих-операція":
    • апаратна реалізація в архітектурі комп'ютера "Київ";
    • в Адресній мові програмування;
    - застосування опосередкованої адресації вищих рангів Pointers для:
    • побудови ланцюжків даних та для маніпуляцій з множинами;
    • складних ієрархічних структур (деревоподібних форматів).
  • 4. Два відношення слідування як універсальний засіб групування та з'єднання даних та програм.
  • 1. Вступ: значення Pointers для людства
Вагомість для людства винайдення Pointers (Вказівників) зрозуміла кожному програмісту та її порівнюють з вагомістю винаходу колеса.
Вказівники необхідні в базах даних, в штучному інтелекті, застосовуються в Інтернет технологіях, та взагалі: використовуються як найпотужніший засіб у всіх сучасних технологіях програмування.
Усі додатки які завантажуються в комп’ютери, планшети, смартфони, тощо, розроблено з використанням Pointers (Вказівників) та без них не обходиться жодний сучасний засіб програмування.

У 2000р. міжнародний Інститут інженерів з електротехніки та електроніки (Institute of Electrical and Electronics Engineers, IEEE) вручив найпрестижнішу нагороду в галузі ІТ - медаль "Комп'ютерний Піонер" - американському вченому Гарольду Лоусону (Harold Lawson) саме за винайдення Pointers у мові програмування PL/1, хоча їх було винайдено українцями на 9 років раніше.
Harold Lawson.jpg
Існує багато беззаперечних доказів випередження українців у винайдені Pointers. Найбільш вагомими подтверждениями є апаратна реалізація маніпуляцій з Pointers, зокрема операції їх розіменування (Dereference operator) та, навіть, багатократного розіменування (Multiple indirection of Pointers) в системі команд комп'ютера "Київ" (1956р.) та наявність опосередкованої адресації вищих рангів в Адресній мові програмування (1955р.). Систему команд комп'ютера "Київ" та Адресна мова програмування описано в монографії: Глушков В.М., Ющенко Е.Л. Вычислительная машина «Киев»: математическое описание. : (рус.) / — Техн. лит., 1962. — 183 с. .
У 1966р. цю монографію було перекладено англійською мовою та видано у США: The Kiev Computer; a Mathematical Description / V. M. Glushkov, E. L. Yushchenko // Translation Division, Foreign Technology Div., Wright-Pattenon AFB, Ohio, Mar 1966 – 234 p. – 1966, ASIN: ‎B0007G3QGC, FTD-TT-65-972, TT-66-62056. – (Англійською).

Також винайдення Null-Pointer помилково приписують іншому відомому американському вченому Тоні Гоару (Tony Hoare) у 1965р., хоча значення "0" для визначення того, що вказівник не має значення використовувалась киянами значно раніше в комп'ютерах "Київ", "М-20", "Дніпро" тощо. Про вказівник (адресу) зі значенням "0" багатократно згадується в описі Адресної мови програмування, зокрема для визначення кінцевого елементу спискового ланцюжка.
Tony Hoare.jpg
Помилковість визнання винаходу Pointers полягає у тому, що у часи холодної війни залізна завіса не сприяла обміну науковими досягненнями, досягнення українців публікувались російською та українською мовами та не були доступні закордонним вченим.
Окрім цього партійно номенклатурні керівники науки були зацікавлені у замовчуванні та приховуванні цих досягнень, оскільки це сприяло приниженню їхнього особистого внеску.

Суттєвою перепоною у поширенні досягнень українців відіграла розбіжність термінів введених українськими вченими у 50-х роках з термінами запропонованими американціми через 9 років та які були прийняті світовою спільнотою та дотепер використовуються у сучасному програмуванні.
Для прозорості розуміння у наступному пункті наводиться відповідність між термінами, які були введені в Адресній мові, з сучасними термінами.

Наступний пункт спростить розуміння термінів Адресної мови програмістам, які побажають ознайомитись з цією мовою по першоджерелам.
2. Визначення Pointers та інших понять
Адресація 2-ого рангу (Pointers) та адресація вищих рангів

Re: Історія винайдення Pointers

Додано: 26 серпня 2023, 17:25
monoxrom
Вказівники це що, мітки? на які можна переходити при певній умові?

Re: Історія винайдення Pointers

Додано: 26 серпня 2023, 18:11
Mak7ym
Ні, це адреса памяті в якій лежать дані. Наприклад, є число 125, воно лежить в памяті за адресою #8000. То вказівник, це змінна, яка має значення #8000, тобто адрес за яким лежать дані. Якось так.


Sent from my iPhone using Tapatalk

Re: Історія винайдення Pointers

Додано: 29 серпня 2023, 13:36
monoxrom
Mak7ym писав: 26 серпня 2023, 18:11 Ні, це адреса памяті в якій лежать дані. Наприклад, є число 125, воно лежить в памяті за адресою #8000. То вказівник, це змінна, яка має значення #8000, тобто адрес за яким лежать дані. Якось так.

Sent from my iPhone using Tapatalk
Ага зрозуміло ніби... Цікаво яке програмування було без цієї штуки, що її треба було придумати.
От як було до того, це важко уявити :dull:
Були у вас якісь дані, а ви не знали де вони у памяті, то як до них звертатися?

Re: Історія винайдення Pointers

Додано: 29 серпня 2023, 13:41
Mak7ym
Тут скоріше про інше, що вказівник може бути змінною. Тобто помінявши значення вказівника на #8010, код просто буде працювати з іншими данними. Раніше адреси данних хардкодилися, тобто адрес не розглядався як змінна, але як константа. Це накладувало великі ліміти на алгоритми і загрузку вигрузку данних, що на той час було буже затратною операцією.


Sent from my iPhone using Tapatalk

Re: Історія винайдення Pointers

Додано: 29 серпня 2023, 14:02
monoxrom
А не можна було до вказівника додати потрібне зміщення відносно старого адреса і отримати те що треба?

цікаво було б глянути на якийсь кусочок коду на асемблері х86 який використовує ці вказівники і який робить те саме але не використовує. Я колись знав асемблер але майже все забув ((( Хоч думаю якщо побачу кусочок коду то зможу зрозуміти що він робить.

Re: Історія винайдення Pointers

Додано: 29 серпня 2023, 14:36
Mak7ym
Самий простий приклад на асмі:

Адреса повністю динамічна
;HL=addr of structure
LD HL, #8000
LD BC,FIELD_OFFSET ;=10
ADD HL,BC
; Now you can work with data at this location dynamically
LD E,(HL)
INC HL
LD D,(HL)
; it loads word to DE

Проти статичного доступу
LD DE,(#8010)
Це буде вкомпільовано в код і поміняти адресу не можна динамічно

Або індексного

LD IX,#8000
LD E,(IX+FIELD_OFFSET)
LD D,(IX+FIELD_OFFSET+1)


Sent from my iPhone using Tapatalk

Re: Історія винайдення Pointers

Додано: 29 серпня 2023, 14:42
Mak7ym
Ще одна супер фіча поінтерів - можна перевикористовувати ті самі адреси для зберігання інших данних і не привязуватися до конкретних адрес.

Re: Історія винайдення Pointers

Додано: 29 серпня 2023, 14:49
monoxrom
Ну це не асемблер х86 )))) Але здається я зрозумів приклад

Хоча не розумію чому до зміщення не можна було додати окрему змінну і змінювати її значення і тоді відповідно ми будемо рухатися по пам'яті

типу замісь INC HL, робити

mov ax, FIELD_OFFSET
inc ax (або інша арифметична операція, яка треба)
mov FIELD_OFFSET, ax

Re: Історія винайдення Pointers

Додано: 29 серпня 2023, 14:51
monoxrom
"можна перевикористовувати ті самі адреси для зберігання інших данних "
так в любу змінну можна писати любі дані, це ж те саме?