Адресне програмування
Адресна мова програмування | |
---|---|
Дата появи | 1955 |
Розробник | Ющенко Катерина Логвинівна |
Адресне програмування (також адресна мова) — математичний формалізм (формальна мова), що ставить за мету опис деяких комп'ютерних операцій, передусім пов'язаних з адресами. Перша публікація з адресного програмування (приблизно у 1955—1956 роках) належить українським вченим В. Королюку і К. Ющенко.
У адресному програмуванні формалізуються такі основні операції, як «виділення вмісту адреси», у тому числі вищих рангів (вказівник на вказівник) і «засилання за адресою». У формулах опису мови можуть бути не лише змінні величини, а й функції.
Основний новаторський принцип, запропонований Ющенко і її колегами — принцип адресності. Щодо даних, якими оперує програма, принцип сформульовано так:
У програмі вказуються не власне числа, а адреси комірок пам'яті, ініціалізовані потрібними числами.[2]:241 |
Операцію з адресами чисел (аргументів), на противагу операції з самими числами (англ. immediates), можна проілюструвати такими фрагментами на мові асемблера процесорів x86. У першому прикладі ми передаємо функції SomeFunc
безпосередньо число 5 (мається на увазі, що аргументи передаються через стек):
; Використовуємо операцію «push immediate», тобто «помістити у стек безпосереднє значення»
push 5
call SomeFunc
У другому ж випадку передавання значення 5 до функції відбувається шляхом попереднього зчитування з деякої комірки пам'яті, ініціалізованої заздалегідь числом 5:
; Секція даних. Тут розташовуються всі числа, з якими працюватиме програма
section .data
SomeVal DD 5
; Секція програмного коду
section .text
push dword [SomeVal] ; Квадратні дужки означають «взяти значення за адресою SomeVal»
call SomeFunc
Очевидно, що хоча друга програма працюватиме трохи повільніше, ніж перша (через наявність додаткового звернення до пам'яті), вона надає гнучкість у визначенні початкових даних: програмний код змінювати не треба, змінюються лише означення даних у відповідній секції. У книзі «Елементи програмування» ця перевага зазначається явно:
Завдяки опису програми в адресному вигляді є можливість за однією і тією ж програмою розв'язувати різні задачі, змінюючи заповнення комірок пам'яті (параметри задач).[2]:241 |
Енциклопедія кібернетики дає стислий опис адресних операцій.[3]
«Штрих-операція», або у сучасній термінології операція розіменування вказівника, надає змінній значення, що зберігається у комірці пам'яті за адресою . Операція записується так: .
У випадку, якщо — функція, то штрих-операція повертає вміст адреси, що є результатом функції:
У наведеній нижче таблиці показано синтаксис розіменування вказівників (1-го і 2-го порядків, як приклад), і для порівняння наведено аналогічні операції у сучасних мовах програмування.
Адресна мова | Pascal | C (мова програмування) |
---|---|---|
b := a^;
|
b = *a;
| |
, або |
c := a^^;
|
c = **a;
|
b := f^;
|
b = *f();
|
Нехай — деяке число. Тоді операція («мінус-штрих-операція») [4] повертає адресу комірки пам'яті, у який міститься значення . Через те, що у пам'яті може бути багато таких значень, наведена операція (де — лише одна адреса), взагалі-то, не має особливого сенсу: правильніше було б визначити операцію, що повертає множину всіх комірок пам'яті, у яких міститься значення .
Прямого еквіваленту дана операція у сучасних мовах програмування не має.[джерело?] Її можна виразити у вигляді такого псевдокоду:
a = 0 A = порожній масив цикл: якщо значення за адресою a дорівнює b: додати новий елемент а до масиву А a = a + 1 кінець циклу повернути A
Операція «засилання за адресою» призначається для запису у пам'ять. Опис мови вказує, що дана операція визначена як для чисел, так і для функцій.
: значення записується у пам'ять за адресою . Еквіваленти у сучасних мовах:
Адресна мова | Pascal | C (мова програмування) |
---|---|---|
a := b;
|
a = b;
|
Якщо і — функції, операція «засилання» працює наступним чином:
- обчислюється результат функції ;
- цей результат записується за адресою, що відповідає обчисленому значенню функції
У сучасних термінах дану операцію приблизно можна виразити наступним чином (як взято функцію синуса):
Адресна мова | Pascal | C (мова програмування) |
---|---|---|
(* Адресна функція: повертає адресу, за якою треба зберегти значення синуса у головній програмі *) function a: ^real; var ptr: ^real begin (* обчислюємо потрібне значення адреси: ptr := ... *) return ptr; end (* Головна програма *) begin a^ := sin(0.14); end |
float *a() { float *ptr; /* обчислюємо потрібне значення: ptr = ... */ return ptr; } /* Головна програма */ main() { float *addr = a(); *addr = sin(0.14); } |
Природно, як у функції також можуть бути присутні адресні операції. Вираз , де і де — адресні функції, називається адресною формулою перетворення, або «формулою засилання».[3]
Програма є послідовністю адресних формул, у якій вказується, як ці формули застосовуються. Порядок застосування формул задається за допомогою операторів циклу, умовного і безумовного переходів, виклику підпрограм і повернення з них та інших.[уточнити]
У описі мови згадуються «ступені опису програми». Елементи початкових даних і мітки визначаються на «першому ступені». Коли вмістом комірок можуть бути адреси — це «другий ступінь». Нарешті, «третій ступінь» дозволяє «символи одно- і двомісних операцій» як вміст адрес.[3]
Зазначається, що кроки програми (оператори) можуть записуватися як у стовпчик, так і у рядок; у випадку рядкового запису роздільником операторів слугує крапка з комою . У книзі «Елементи програмування» дається важливе зауваження щодо порядку обчислення формул: «Може трапитися, що у програмі деякі формули можуть діяти у довільному порядку. Тоді при запису програми у стовпчик будемо такі формули записувати у рядок, а при запису програми у рядок — запишемо їх у стовпчик». Наприклад, записуючи
ми явно вказуємо у програмі, що порядок обчислення функцій f, g і θ не має значення; їхні результати мають бути готовими до початку виконання функції γ. Можна порівняти дану функціональність з аналогічною у мові occam (що з'явилася на 25 років пізніше):
PAR
f(...)
g(...)
θ(...)
SEQ
γ(...)
ψ(...)
Перед функцією може бути вказана мітка; у публікаціях зустрічаються як мітки з крапкою у кінці (приклад: ), так і без неї.[5]. Мітка може використовуватись у операторах умовного або безумовного переходу — таким чином реалізуються, зокрема, цикли.
Якщо у програмі зустрічається оператор ост.
(рос. останов), обчислення і програма завершується. Дія оператора аналогічна, наприклад, STOP
у Sinclair BASIC[en].
Оператор B (перевернута літера B (латиниця) або В (кирилиця)) виконує таку саму роль (зупинка), якщо він стоїть у головній програмі. Якщо ж B присутній у підпрограмі, то він означає «кінець підпрограми». Оператор B еквівалентний оператору return
у мовах Pascal і C.
Вводиться термін «оператор розпізнавання», під яким розуміються умовні оператори («оператори розгалуження»). Загальна форма його наступна: , де — деяка предикатна функція (тобто, така, що повертає булеве значення), — формула, що виконується якщо істинне, а — якщо хибне.[6] У сучасних термінах: if P then α; else β
.
Умова, результатом якої може бути «істина» або «хиба» (0 або 1), записується після символа у фігурних дужках. Приклад: . Еквівалент мовою Паскаль: if α^ < β^ then f(...) else g(...);
Вираз «формула входження» у адресному програмуванні означає виклик підпрограми і позначається літерою , поряд з якою можуть стояти одна або дві адреси. У першому випадку це звичайний виклик підпрограми; після закінчення роботи підпрограми програма продовжується з наступного оператора. Приклад:
# Підпрограма k12 f(...) g(...) B # Кінець підпрограми # Основна програма start π k12 m(...) B # Кінець програми
Цей розділ статті ще не написано. |
Адресна мова реалізована на більшості радянських комп'ютерів першого та другого поколінь: «Київ», «М-20», «Урал», «Дніпро», «Мінськ»[7][8].
Цей розділ потребує доповнення. |
Машина «М-20» (ВЕОМ-3, ВЕОМ-3М, ВЕОМ-4)[1]
[ред. | ред. код]Цей розділ потребує доповнення. (червень 2019) |
Цей розділ містить текст, що не відповідає енциклопедичному стилю. (червень 2019) |
Наявність у мові програмування можливостей обробки адрес (вказівників) дозволила складати та виконувати програми обробки алгебраїчних виразів, використовувати агрегати даних різного типу, структури та абстрактні типи даних. У книжках з адресного програмування можна знайти приклади програм, в яких використовуються об'єкти (поруч з самими даними записуються та зберігаються процедури їхньої обробки). В адресному програмуванні описано та реалізовано алгоритми обробки списків та інших структур, зокрема обробка та перетворення алгебраїчних виразів. На підставі можливостей адресної мови програмування щодо списків та їхньої обробки, адресну мову програмування можна віднести не лише до мов програмування високого рівня, а й до функціональних мов програмування. Як і в функціональних мовах програмування, програма на адресній мові програмування та дані програми по суті є списками.
Адресна мова програмування була реалізована на всіх комп'ютерах першого та другого покоління, що виготовлялися в Радянському Союзі. Адресна мова програмування вплинула на архітектуру комп'ютерів «Київ», «М-20» (ВЕОМ-3, ВЕОМ-3М, ВЕОМ-4), «Урал», «Мінськ», «Дніпро» тощо. Для розв'язку задач народного господарства, включаючи авіацію, космонавтику, машинобудування, військовий комплекс, зокрема, для розрахунку траєкторій польоту балістичних ракет у 1950-1960-х роках, використовувалась виключно адресна мова програмування. Реалізації адресної мови програмування використовувались протягом майже 20 років.
Книжку з адресної мови програмування, що була написана у 1957[14], було перекладено французькою мовою та видано у Франції у 1974 році.
Адресна мова програмування вплинула не тільки на розвиток економіки СРСР, а й на інформаційні технології та програмування. Абстрактні типи даних, об'єктно-орієнтоване програмування, функціональне програмування, бази даних та засоби штучного інтелекту базуються на ідеях та засобах, які були вперше запропоновані та реалізовані в адресній мові програмування, зокрема списки та інші абстрактні типи даних, які будуються з використанням.[15]
- Енциклопедія кібернетики : у 2 т. / за ред. В. М. Глушкова. — Київ : Гол. ред. Української радянської енциклопедії, 1973.
- Відео на YouTube. Гордість України. Українка, яка першою створила мову програмування. 24 Канал. 13.11.2015
- Пам'яті К. Л. Ющенко[недоступне посилання з вересня 2019] // Вісник Національної Академії Наук України, 2001. — N 9. — С. 72
- Советская школа: адресный язык программирования [Архівовано 19 січня 2019 у Wayback Machine.](рос.)
- Киевские ведомости. № 235 от 17 декабря 2009. Оксана ГРИШИНА, «Женщина, которая научила компьютер понимать людей».[недоступне посилання з Сентябрь 2018]
- История развития информационных технологий на Украине. Екатерина Логвиновна Ющенко — основоположник теоретического программирования на Украине
- История развития информационных технологий на Украине. Дочь «врага народа» (Жизнь Ющенко Е. Л.)
- Научно-техническая библиотека. К 90-летию со дня рождения Екатерины Логвиновны Ющенко (Рвачевой)
- Реферат. Роль женщин в развитии вычислительной техники.
- Ющенко Ю. О. Деревоподібні формати Адресного програмування / Ющенко Ю. О. // Наукові записки НаУКМА. – 2021. – Т. 4 : Комп’ютерні науки. К. : – 2021. – С.78-87.
- Ющенко Ю.О. Розробка архітектури комп’ютера "Київ" за концепцією адресного методу програмування / Ю.О. Ющенко // Проблеми програмування. — 2021. — № 4. — С. 103-118. — Бібліогр.: 46 назв. — укр.
- Ющенко Ю.О., Катерина Логвинівна Ющенко – винахідниця Pointers та авторка однієї з перших в світі мов програмування високого рівня // Газета «Світ», № 5-6, 10.02.2021 р., Видав-во НАНУ та МОНУ. К. : – 2021. – С.2-3.
- Ющенко Ю.О., Окремі аспекти декларативності «мінус штрих-операції» // Наукові записки НаУКМА. – Т. 3 : Комп'ютерні науки. – К. : – 2020. – С.19–26.
- 15.08.2001: The famous Ukrainian scientist Kateryna Yushchenko ended her earthly journey.
- A brief overview of the little-known but unique computer "Kyiv".
- Емулятор унікального комп'ютера "Київ". Історично-науковий семінар
- Створила одну з перших у світі високорівневих мов програмування. Історія української науковиці Катерини Ющенко. / інтерв’ю з Ющенко Ю.О. журналістки Елеонори Бурдіної // Веб-портал dou.ua. К. : – 07.02.2022/.
- ↑ а б в г д е Ющенко К. Л. Адресное программирование. — Київ : Державне видавництво технічної літератури, 1963. — 288 с.
- ↑ а б Гнеденко Б.В., Королюк В.С., Ющенко Е.Л. Элементы программирования. — Москва : Физматгиз, 1961. — 348 с.
- ↑ а б в Адресна мова. с. 68. Архів оригіналу за 4 березня 2016. Процитовано 19 червня 2019.
{{cite book}}
: Проігноровано|work=
(довідка) [Архівовано 4 березня 2016 у Wayback Machine.] - ↑ Ющенко Ю.О. Окремі аспекти декларативності «мінус штрих-операції». — Київ : Наукові записки НаУКМА. Комп'ютерні науки, 2020. — Т. 3.
- ↑ Гнеденко, Б. В.; Королюк, В. С.; Ющенко, Е. Л. (1963). Элементы программирования (PDF) (рос.). Москва: Государственное издательство физико-математической литературы. Архів оригіналу (PDF) за 13 квітня 2018. Процитовано 22 червня 2019.
- ↑ Н. С. Никитченко (2009). Композиционно-номинативные аспекты адресного программирования (PDF). Кибернетика и системный анализ (рос.) (6). ISSN 0023-1274. Архів оригіналу (PDF) за 20 червня 2019. Процитовано 20 червня 2019.
- ↑ Історія наукової школи теоретичного програмування. К.Л.Ющенко, Б.В.Гнеденко, О.Л.Перевозчикова, Г.Е.Цейтлін. www.icfcst.kiev.ua. Архів оригіналу за 2 червня 2021. Процитовано 2 червня 2021.
- ↑ Т. П. Курінная (2014). "Наука і освіта", №3, 2014 (Українська) . с. 82—86.
- ↑ Глушков, В. М.; Ющенко, Е. Л. (1962. — 183 с.). Вычислительная машина «Киев»: математическое описание (рос.). Київ: Техн. лит.
- ↑ Ющенко, Е.Л. (1960). М. М. Бушко-Жук (ред.). Адресное программирование и особенности решения задач на машине "Урал". Киев: Киевское высш. инженерное радиотехн. училище Войск противовоздуш. обороны страны.
- ↑ Ющенко, Е. Л.; Гринченко, Т.А. (1964). Программирующая программа с входным адресным языком для машины Урал-1 (рос.). Киев: Наук. думка. с. 107.
- ↑ Ющенко, Екатерина Логвиновна (1962). Адресный язык (PDF). Заочный семинар, Тема 5 (рос) . Киев: Дом научно-технической пропаганды. с. 32. Архів оригіналу (PDF) за 26 серпня 2021. Процитовано 26.08.2021.
- ↑ Ющенко, Е.Л.; Малиновский, Б.М.; Полищук, Г. А.; Ядренко, Э. К.; Никитин, А. Н. (1964). Управляющая машина широкого назначения «Дніпро» и программирующая программа к ней. Справочник программиста (рос.). Киев: Наукова Думка.
- ↑ Ядренко М. Й., Михайло Йосипович (1997). Борис Володимирович Гнеденко – фундатор кафедри теорії імовірностей в Київському університеті (PDF). https://probability.knu.ua/ (Українська) . Архів оригіналу (PDF) за 2 червня 2021. Процитовано 02.05.2021.
- ↑ Alvaro Videla. Kateryna L. Yushchenko — Inventor of Pointers (Dec 8, 2018). — A Computer of One’s Own Pioneers of the Computing Age, 2018.
Це незавершена стаття про програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |