Планкалкюль
Шаблон:Мова програмування Планкалкюль (Шаблон:Lang-de) — перша у світі мова програмування високого рівня, створена німецьким інженером Конрадом Цузе в 1943—1945 роках і вперше опублікована в 1948 році.
Історія
У справі створення обчислювальних машин Цузе був самоуком, і розробляв їх без знання про інші механічні машини, що існували на той час. Для опису логічних схем Цузе винайшов свої власні діаграми і систему нотації, яку він назвав комбінаторикою умов (Шаблон:Lang-de). У 1938-му, після закінчення роботи над Z1, Цузе з'ясував, що числення, яке він незалежно вигадав, уже існує і називається пропозиційним численнямШаблон:Sfn .Проте Цузе мав на меті дещо виразніше (пропозиційне числення не повне за Тюрінгом і не здатне описувати навіть прості арифметичні обчислення[1]). Тому в травні 1939 року він описав свій задум розробити те, що невдовзі стане «Численням планів»Шаблон:Sfn. У своєму нотатнику Цузе залишив такий запис:

Працюючи над своєю докторською дисертацією, Цузе розробив першу відому формальну систему запису алгоритмівШаблон:Sfn, здатну описати розгалуження і циклиШаблон:SfnШаблон:Sfn У 1942 році він почав писати на Plankalkül програму гри в шахиШаблон:Sfn. У 1944 році Цузе зустрічався з німецьким логіком і філософом Шаблон:Iw, який висловив захоплення тим, як Цузе застосував численняШаблон:Sfn. У 1945 році Цузе описав Plankalkül в однойменній книжціШаблон:Sfn, проте поразка Німеччини в Другій світовій війні завадила йому опублікувати рукописШаблон:Sfn.
Оригінальний опис мови вражає виразними конструкціями і схожістю на сучасні мови, тому складається враження, що вона створена набагато пізніше 1945 року. Єдиними на час створення Plankalkül працюючими комп'ютерами були ENIAC та Harvard Mark I, жоден з яких не використовував компілятор чи транслятор, а ENIAC треба було перепрограмовувати на кожну нову задачу, переставляючи з'єднання кабелів.Шаблон:Sfn
Хоча більшість комп'ютерів Цузе було знищено під час бомбардувань, йому вдалося врятувати один[2]. У травні 1945 Конрад Цузе зі своїм релейним комп'ютером Z4 переїхав із Берліна в альпійське село Шаблон:IwШаблон:Sfn. Не маючи змоги продовжувати конструювання комп'ютерів, учений перейшов до суто теоретичних досліджень і присвятив час розробці високорівневої моделі програмування і необхідної для цього мовиШаблон:Sfn. У 1948 році він опублікував статтю в Шаблон:Iw та виступив із доповіддю на щорічній зустрічі GAMMШаблон:Sfn.
Робота у відриві від інших фахівців Європи і США призвела до того, що лише незначна частина його роботи стала відомою. Повністю роботу Цузе було видано лише в 1972 році.
Сам Цузе не створив жодних програмно-апаратних засобів під реалізацію розробленої ним мови. Перший компілятор мови Планкалкюль (див. Plankalkül 2000) було створено у Вільному університеті Берліна тільки в 2000 роціШаблон:Sfn, через п'ять років після смерті Конрада Цузе.
Опис
Планкалкюль мала низку особливостей, притаманних сучасним мовам програмування високого рівня:
- операції присвоєння
- виклик підпрограм (але не рекурсію)
- умовні переходи
- цикли
- арифметику з рухомою комою
- масиви та ієрархічні структури даних
- оброблення винятків.Шаблон:Fact
Типи даних
Єдиним примітивним типом даних у Plankalkül є булевий (в авторській термінології Шаблон:Lang-de, так-ні значення). Він позначається ідентифікатором . Всі інші типи є композитними і будуються з примітивного за допомогою «масивів» і «записів». Так, послідовність із восьми біт (яку в сучасній термінології можна вважати байтом) позначається як , а булева матриця розміром на — Шаблон:Sfn.
Допускається також скорочена форма запису замість Шаблон:Sfn.
Допустимими значеннями типу є і . Послідовність із 4 біт можна записати, наприклад, як L00L, але коли вона позначає числа, можна використовувати десяткове позначення 9Шаблон:Sfn.
Запис із двох компонентів і записується як Шаблон:Sfn.
Тип (Шаблон:Lang-de) у Plankalkül складається з трьох елементів: структури і її складових (Шаблон:Lang-de), прагматичного змісту (Шаблон:Lang-de) і можливого обмеження (Шаблон:Lang-de) для значень типуШаблон:Sfn.
Конрад Цузе наводить багато прикладів із шахової теоріїШаблон:Sfn:
| Булеве значення (біт) | ||
| Послідовність із n біт | ||
| Координата дошки | ||
| Клітинка дошки (наприклад L00, 00L позначає e2 в алгебраїчній нотації) | ||
| Фігура (наприклад 00L0 — білий король) | ||
| Фігура на дошці (наприклад, L00, 00L; 00L0 — білий король стоїть на клітинці e2) | ||
| Стан дошки (розташування фігур, послідовний опис стану всіх 64 клітинок дошки) | ||
| Ігрова ситуація ( — розташування фігур, — чий хід, — можливість здійснити кожну з 4 рокіровок, A2 — дані про клітинку на яку можна робити взяття на проході |
Ідентифікатори
Ідентифікатор — це буква за якою йде числоШаблон:Sfn. Ідентифікатори для змінних бувають таких видівШаблон:Sfn:
- вхідні дані (Шаблон:Lang-de) — їх позначають буквою V;
- проміжні дані (Шаблон:Lang-de) — позначають буквою Z;
- константи (Шаблон:Lang-de) — позначають буквою С;
- вихідні дані (Шаблон:Lang-de) — позначають буквою R.
Конкретна змінна певного типу унікально ідентифікується за номером, який записується під неюШаблон:Sfn. Наприклад:
- , , і т. ін.
Програми і підпрограми позначаються буквою P. Наприклад , Шаблон:Sfn.
Результат роботи підпрограми збережений нею в змінну доступний для інших підпрограм в змінній , і читання цієї змінної також передбачає виклик відповідної підпрограмиШаблон:Sfn.
Доступ до компонентів даних
Plankalkül дає змогу отримати доступ до окремих елементів змінної, використовуючи «індекс компоненти» (Шаблон:Lang-de). Якщо програма, наприклад, отримує на вхід у змінній значення типу (ігрова ситуація), то — дає стан дошки, — фігуру на i-й клітинці, а j-й біт і-ї фігуриШаблон:Sfn.
У сучасних мовах програмування це відповідає нотації V0[0], V0[0][i], V0[0][i][j] (хоча для доступу до окремого біта в сучасних мовах програмування зазвичай використовують бітові маски).
Двовимірний синтаксис
Через те що тип змінної, її номер та індекси компонентів записуються один над одними, для запису кожної інструкції в Plankalkül потрібно кілька рядків.
У першому рядку завжди вказано тип змінної, далі — номер змінної, позначений буквою V (Шаблон:Lang-de), далі індекси підкомпонентів, позначені K (Шаблон:Lang-de), а потім індекс структури (Шаблон:Lang-de), позначений літерою S, який описує тип змінної. Тип не обов'язково вказувати, але Цузе зазначає що це полегшує читання і розуміння програмиШаблон:Sfn.
У рядку типи і можна скорочувати до і відповідноШаблон:Sfn.
Приклади:
| змінна V3 — це список з пар значень типу | |
| Можна також не наводити рядок K, якщо він порожній. Тому цей запис еквівалентний наведеному вище. | |
| Значення восьмого біта (7), першої (нульової) пари, і-того елементу змінної V3, має булевий тип (). |
Індексом може бути не тільки константа, а й інша змінна; це позначається за допомогою ліній, що вказують, у який індекс компонентів треба підставити значення змінної:
|
Z5-тий елемент змінної V3. Еквівалентно виразу V3[Z5] в сучасних мовах програмування.Шаблон:Sfn |
Присвоєння
Цузе ввів у своє числення невідомий для математики символ — присвоєння (Шаблон:Lang-de), «». Саме використання поняття присвоєння означає перехід від математичного мислення до інформатикиШаблон:Sfn.
Цузе писав, що запис
аналогічний більш традиційній для математики рівності:
Заведено вважати, що Конрад Цузе спочатку використовував для присвоєння символ
, і почав використовувати під впливом Шаблон:IwШаблон:Sfn. Кнут і Пардо вважають що Конрад Цузе завжди писав , а
впровадили видавці твору «Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben»Шаблон:Sfn. На конференції Шаблон:Iw у Цюриху учасники з Європи пропонували використати для оператора присвоєння символ, впроваджений Цузе, але американська делегація наполягла на :=Шаблон:Sfn.
Також варто звернути увагу на те, що змінна для результату операції присвоєння, на відміну від більшості сучасних мов, записується справа від оператораШаблон:Sfn. Перше присвоєння значення змінній вважається оголошеннямШаблон:Sfn.
Оператори
Зліва від оператора присвоєння записується вираз (Шаблон:Lang-de), що описує значення, яке треба присвоїти змінній. Вирази можуть використовувати арифметичні оператори, булеві оператори й оператори порівняння ( тощо)Шаблон:Sfn.
Булеві оператори застосовуються до типу Шаблон:Sfn:
- — заперечення
- — диз'юнкція
- — кон'юнкція
- — обернення
- — Шаблон:Iw
- — виняткова диз'юнкція
Операція піднесення до степеня позначається подібно до операції індексування — за допомогою лінійШаблон:Sfn:
Виклик підпрограм
Опис програми
Plankalkül 2000
Для мови Plankalkül важко написати компілятор чи редактор, тому що вона використовує незвичну для сучасних мов двовимірну нотацію, а також опис мови містить деякі логічні суперечності. Тому команда дослідників Вільного університету Берліна під керівництвом Рауля Рохаса розробила підмножину мови Plankalkül та компілятор для неї, яку вони назвали «Plankalkül 2000»Шаблон:Sfn.
Примітки
Література
- Шаблон:Cite book
- Zuse, Konrad (1948/49). «Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben». Arch. Math. 1, pp. 441—449, 1948/49.
- Der Plankalkül. / Zuse, Konrad / Gesellschaft für Mathematik und Datenverarbeitung. / BMBW — GMD — 63 — 1972. — Nr.63.Шаблон:Ref-de
- Шаблон:Cite journal(HTML версія)
- Шаблон:Cite book
- Шаблон:Cite book
- Шаблон:Cite journal
- Шаблон:Cite book
- Шаблон:Cite book
- Шаблон:Cite book
- Шаблон:Cite book
- ENCYCLOPEDIA OF COMPUTERS AND COMPUTER HISTORY http://page.mi.fu-berlin.de/rojas/pub/computer_history/m_z/plankalkuel.pdf
Посилання
- Берлінський центр інформатики ім. Конрада ЦузеШаблон:Ref-de
- Список літератури з мови ПланкалкюльШаблон:Ref-de
- Опис мови Планкалкюль на сайті Хорнста Цузе в Технічному університеті м. Берлін Шаблон:Ref-en
- https://github.com/timfel/plankalkul2ruby
- https://github.com/Hovestar/Plankalkul
- https://www.chessprogramming.org/Konrad_Zuse#Plankalk.C3.BCl_and_Chess
- http://www.cs.ru.nl/bachelors-theses/2010/Bram_Bruines___0213837___Plankalkul.pdf
- ↑ Шаблон:Cite web
- ↑ Помилка цитування: Неправильний виклик тегу
<ref>: для виносок під назвоюThe Plankalkülне вказано текст

