Планкалкюль () — перша у світі мова програмування високого рівня, створена німецьким інженером Конрадом Цузе в 1943—1945 роках і вперше опублікована в 1948 році.

Історія У справі створення обчислювальних машин Цузе був самоуком, і розробляв їх без знання про інші механічні машини, що існували на той час. Для опису логічних схем Цузе винайшов свої власні діаграми і систему нотації, яку він назвав комбінаторикою умов (). У 1938-му, після закінчення роботи над Z1, Цузе з'ясував, що числення, яке він незалежно вигадав, уже існує і називається пропозиційним численням. Проте Цузе мав на меті дещо виразніше (пропозиційне числення не повне за Тюрінгом і не здатне описувати навіть прості арифметичні обчислення). Тому в травні 1939 року він описав свій задум розробити те, що невдовзі стане «Численням планів». У своєму нотатнику Цузе залишив такий запис:

Працюючи над своєю докторською дисертацією, Цузе розробив першу відому формальну систему запису алгоритмів, здатну описати розгалуження і цикли У 1942 році він почав писати на Plankalkül програму гри в шахи. У 1944 році Цузе зустрічався з німецьким логіком і філософом , який висловив захоплення тим, як Цузе застосував числення. У 1945 році Цузе описав Plankalkül в однойменній книжці, проте поразка Німеччини в Другій світовій війні завадила йому опублікувати рукопис.

Оригінальний опис мови вражає виразними конструкціями і схожістю на сучасні мови, тому складається враження, що вона створена набагато пізніше 1945 року. Єдиними на час створення Plankalkül працюючими комп'ютерами були ENIAC та Harvard Mark I, жоден з яких не використовував компілятор чи транслятор, а ENIAC треба було перепрограмовувати на кожну нову задачу, переставляючи з'єднання кабелів.

Хоча більшість комп'ютерів Цузе було знищено під час бомбардувань, йому вдалося врятувати один. У травні 1945 Конрад Цузе зі своїм релейним комп'ютером Z4 переїхав із Берліна в альпійське село . Не маючи змоги продовжувати конструювання комп'ютерів, учений перейшов до суто теоретичних досліджень і присвятив час розробці високорівневої моделі програмування і необхідної для цього мови. У 1948 році він опублікував статтю в та виступив із доповіддю на щорічній зустрічі GAMM.

Робота у відриві від інших фахівців Європи і США призвела до того, що лише незначна частина його роботи стала відомою. Повністю роботу Цузе було видано лише в 1972 році.

Сам Цузе не створив жодних програмно-апаратних засобів під реалізацію розробленої ним мови. Перший компілятор мови Планкалкюль (див. Plankalkül 2000) було створено у Вільному університеті Берліна тільки в 2000 році, через п'ять років після смерті Конрада Цузе.

Опис

Планкалкюль мала низку особливостей, притаманних сучасним мовам програмування високого рівня: операції присвоєння виклик підпрограм (але не рекурсію) умовні переходи цикли арифметику з рухомою комою масиви та ієрархічні структури даних оброблення винятків.

Типи даних Єдиним примітивним типом даних у Plankalkül є булевий (в авторській термінології , так-ні значення). Він позначається ідентифікатором . Всі інші типи є композитними і будуються з примітивного за допомогою «масивів» і «записів». Так, послідовність із восьми біт (яку в сучасній термінології можна вважати байтом) позначається як , а булева матриця розміром на  — .

Допускається також скорочена форма запису замість .

Допустимими значеннями типу є і . Послідовність із 4 біт можна записати, наприклад, як L00L, але коли вона позначає числа, можна використовувати десяткове позначення 9.

Запис із двох компонентів і записується як .

Тип () у Plankalkül складається з трьох елементів: структури і її складових (), прагматичного змісту () і можливого обмеження () для значень типу.

Конрад Цузе наводить багато прикладів із шахової теорії:

Булеве значення (біт) Послідовність із n біт Координата дошки Клітинка дошки (наприклад L00, 00L позначає e2 в алгебраїчній нотації) Фігура (наприклад 00L0 — білий король) Фігура на дошці (наприклад, L00, 00L; 00L0 — білий король стоїть на клітинці e2) Стан дошки (розташування фігур, послідовний опис стану всіх 64 клітинок дошки) Ігрова ситуація ( — розташування фігур,  — чий хід,  — можливість здійснити кожну з 4 рокіровок, A2 — дані про клітинку на яку можна робити взяття на проході

Ідентифікатори Ідентифікатор — це буква за якою йде число. Ідентифікатори для змінних бувають таких видів:

вхідні дані () — їх позначають буквою V; проміжні дані () — позначають буквою Z; константи () — позначають буквою С; вихідні дані () — позначають буквою R.

Конкретна змінна певного типу унікально ідентифікується за номером, який записується під нею. Наприклад:

, , і т. ін.

Програми і підпрограми позначаються буквою P. Наприклад , .

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

Доступ до компонентів даних Plankalkül дає змогу отримати доступ до окремих елементів змінної, використовуючи «індекс компоненти» (). Якщо програма, наприклад, отримує на вхід у змінній значення типу (ігрова ситуація), то  — дає стан дошки,  — фігуру на i-й клітинці, а j-й біт і-ї фігури.

У сучасних мовах програмування це відповідає нотації V0, V0[i], V0[i][j] (хоча для доступу до окремого біта в сучасних мовах програмування зазвичай використовують бітові маски).

Двовимірний синтаксис Через те що тип змінної, її номер та індекси компонентів записуються один над одними, для запису кожної інструкції в Plankalkül потрібно кілька рядків.

У першому рядку завжди вказано тип змінної, далі — номер змінної, позначений буквою V (), далі індекси підкомпонентів, позначені K (), а потім індекс структури (), позначений літерою S, який описує тип змінної. Тип не обов'язково вказувати, але Цузе зазначає що це полегшує читання і розуміння програми.

У рядку типи і можна скорочувати до і відповідно.

Приклади:

змінна V3 — це список з пар значень типу Можна також не наводити рядок K, якщо він порожній. Тому цей запис еквівалентний наведеному вище. Значення восьмого біта (7), першої (нульової) пари, і-того елементу змінної V3, має булевий тип ().

Індексом може бути не тільки константа, а й інша змінна; це позначається за допомогою ліній, що вказують, у який індекс компонентів треба підставити значення змінної:

Z5-тий елемент змінної V3. Еквівалентно виразу V3[Z5] в сучасних мовах програмування.

Присвоєння Цузе ввів у своє числення невідомий для математики символ — присвоєння (), «». Саме використання поняття присвоєння означає перехід від математичного мислення до інформатики.

Цузе писав, що запис

аналогічний більш традиційній для математики рівності:

Заведено вважати, що Конрад Цузе спочатку використовував для присвоєння символ , і почав використовувати під впливом . Кнут і Пардо вважають що Конрад Цузе завжди писав , а впровадили видавці твору «Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben». На конференції у Цюриху учасники з Європи пропонували використати для оператора присвоєння символ, впроваджений Цузе, але американська делегація наполягла на :=.

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

Оператори Зліва від оператора присвоєння записується вираз (), що описує значення, яке треба присвоїти змінній. Вирази можуть використовувати арифметичні оператори, булеві оператори й оператори порівняння ( тощо).

Булеві оператори застосовуються до типу :  — заперечення  — диз'юнкція  — кон'юнкція  — обернення  —  — виняткова диз'юнкція

Операція піднесення до степеня позначається подібно до операції індексування — за допомогою ліній:

Виклик підпрограм

Опис програми

Plankalkül 2000 Для мови Plankalkül важко написати компілятор чи редактор, тому що вона використовує незвичну для сучасних мов двовимірну нотацію, а також опис мови містить деякі логічні суперечності. Тому команда дослідників Вільного університету Берліна під керівництвом Рауля Рохаса розробила підмножину мови Plankalkül та компілятор для неї, яку вони назвали «Plankalkül 2000». Примітки

Література

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. (HTML версія)

ENCYCLOPEDIA OF COMPUTERS AND COMPUTER HISTORY http://page.mi.fu-berlin.de/rojas/pub/computer_history/m_z/plankalkuel.pdf

Посилання Берлінський центр інформатики ім. Конрада Цузе Список літератури з мови Планкалкюль Опис мови Планкалкюль на сайті Хорнста Цузе в Технічному університеті м. Берлін 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