Планкалкюль

Матеріал з testwiki
Перейти до навігації Перейти до пошуку

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

Історія

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

Шаблон:Цитата


Табличка на будинку в Шаблон:Iw в якому Цузе працював над розробкою Plankalkül

Працюючи над своєю докторською дисертацією, Цузе розробив першу відому формальну систему запису алгоритмівШаблон: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, через п'ять років після смерті Конрада Цузе.

Опис

Планкалкюль мала низку особливостей, притаманних сучасним мовам програмування високого рівня:

Типи даних

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

Допускається також скорочена форма запису S1n замість n×S0Шаблон:Sfn.

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

Запис із двох компонентів σ і τ записується як (σ,τ)Шаблон:Sfn.

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

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

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

Ідентифікатори

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

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

V0, Z2, C31 і т. ін.

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

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

Доступ до компонентів даних

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

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

Двовимірний синтаксис

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

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

У рядку S типи S0 і S1 можна скорочувати до 0 і 1 відповідноШаблон:Sfn.

Приклади:

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

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

Використання змінної як індекса іншої змінної, записане в синтаксисі Plankalkül Z5-тий елемент змінної V3. Еквівалентно виразу V3[Z5] в сучасних мовах програмування.Шаблон:Sfn

Присвоєння

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

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

Z+1ZV11

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

Z+1=ZV11Kii+1

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

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

Оператори

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

Булеві оператори застосовуються до типу S0Шаблон:Sfn:

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

Піднесення до степеня в Plankalkül Шаблон:Section-stub

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

Шаблон:Section-stub


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

Шаблон:Section-stub

Plankalkül 2000

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

Примітки

Шаблон:Reflist

Література

Посилання

Шаблон:Мови програмування

Шаблон:Бібліоінформація

  1. Шаблон:Cite web
  2. Помилка цитування: Неправильний виклик тегу <ref>: для виносок під назвою The Plankalkül не вказано текст