Paradigm | Procedural |
---|---|
Разработано | Конрадом Цузе |
Впервые появилось | 1948 г.; 72 года назад (1948 г.) - впервые опубликована концепция |
Основные реализации | |
Plankalkül-Compiler FU Berlin в 2000 г. | |
Под влиянием | |
Begriffsschrift | |
Под влиянием | |
Superplan от Heinz Rutishauser,. ALGOL 58 |
Plankalkül (немецкое произношение: ) - это программирование язык, разработанный для инженерных целей Конрадом Цузе между 1942 и 1945 годами. Это был первый язык программирования высокого уровня, разработанный для компьютеров.
Калькюль - это немецкий термин для формальной системы, как в Гильберте-Калькюле, оригинальном названии дедуктивной системы в стиле Гильберта —So Plankalkül относится к формальной системе планирования.
В области создания вычислительных машин Цузе был самоучкой и разработал их, не зная о других механических вычислительных машинах, которые уже существовали. Для описания логических схем Цузе изобрел свою собственную систему диаграмм и обозначений, которую назвал «комбинаторикой условных выражений» (немецкий : Bedingungskombinatorik). После завершения Z1 в 1938 году Цузе обнаружил, что исчисление, которое он независимо разработал, уже существует и было известно как исчисление высказываний. Однако то, что имел в виду Цузе, должно было быть гораздо более мощным (исчисление высказываний не Тьюрингово-полное и не способно описывать даже простые арифметические вычисления). В мае 1939 года он описал свои планы по развитию того, что впоследствии станет Планкалкюль. В записной книжке он написал следующее:
Почти полгода постепенного введения в формальную логику. Я заново открыл там множество своих предыдущих мыслей. (комбинаторика условных выражений = исчисление высказываний ; изучение интервалов = теория решеток ). Сейчас планирую создание «Исчисления планов». Чтобы прояснить это, необходимо уточнить ряд концепций. | Seit etwa einem halben Jahr allmähliches Einführen in die formale Logik. Viele meiner früheren Gedanken habe ich dort wieder gefunden. (Bedingungskombinatorik = Aussagenlogik; Lehre von den Intervallen = Gebietenkalkül). Ich plane jetzt die Aufsetzung des 'Plankalküls'. Hierzu sind eine Reihe von Begriffen zu klären. |
- Блокнот Конрада Цузе |
Работая над докторской диссертацией, Цузе разработал первую известную формальную систему обозначений алгоритмов, способную к обработка ветвей и петель. В 1942 году он начал писать программу шахматы в Планкалкюле. В 1944 году Цузе встретился с немецким логиком и философом Генрихом Шольцем, который выразил признательность Цузе за использование логического исчисления. В 1945 году Цузе описал Планкалкюль в неопубликованной книге. Однако крах нацистской Германии помешал ему представить свою рукопись.
В то время единственными двумя работающими компьютерами в мире были ENIAC и Harvard Mark I, ни один из которых не использовал компилятор, и ENIAC нужно было перепрограммировать для каждой задачи, изменяя подключение проводов.
Хотя большинство его компьютеров было уничтожено бомбами союзников, Цузе смог спасти одну машину, Z4, и переместить ее в альпийскую деревню (часть Бад-Хинделанг ).
Самая первая попытка создания алгоритмического языка была предпринята в 1948 году К. Цузе. Его обозначения были довольно общими, но предложение так и не получило должного рассмотрения.
— Хайнц Рутисхаузер, создатель АЛГОЛАНе может продолжать создавать компьютеры - что также было запрещено союзными державами - - Цузе посвятил свое время разработке модели и языка программирования более высокого уровня. В 1948 году он опубликовал статью в Archiv der Mathematik и представил ее на ежегодном собрании GAMM. Его работы не привлекли особого внимания. В лекции 1957 года Цузе выразил надежду, что Планкалкюль, «через некоторое время в роли Спящей красавицы, все же оживет». Он выразил разочарование тем, что разработчики ALGOL 58 никогда не признавали влияние Планкалкюля на их собственную работу.
Планкалкюль был более полно опубликован в 1972 году. Диссертация 1975 г. Другие независимые реализации последовали в 1998 и 2000 годах в Свободном университете Берлина.
Планкалкюль провел сравнения с языком APL и реляционной алгеброй. Он включает в себя операторы присваивания, подпрограммы, условные операторы, итерацию, арифметику с плавающей запятой, массивы, иерархические структуры записей, утверждения, обработку исключений и другие расширенные функции, такие как. Планкалкюль предоставляет структуру данных, называемую обобщенным графом (verallgemeinerter Graph), которую можно использовать для представления геометрических структур.
Планкалкюль использовал своеобразную нотацию, используя несколько линий с Frege Begriffsschrift 1879 г. (имеет дело с математической логикой ).
Некоторые особенности Plankalkül:
Единственным примитивным типом данных в Plankalkül является единственный бит или логический (немецкий : Ja -Nein-Werte - значение да-нет в терминологии Zuses). Обозначается идентификатором . Все остальные типы данных являются составными и строятся из примитивов. с помощью «массивов» и «записей».
Итак, последовательность Количество восьми бит (которое в современных вычислениях можно рассматривать как байт ) обозначается как , а логическая матрица размер на описывается как . Также существует сокращенная запись, поэтому можно написать вместо .
Тип может иметь два возможных значения: и . Таким образом, 4-битная последовательность может быть записана как L00L, но в случаях, когда такая последовательность представляет собой число, программист может использовать десятичное представление 9.
Запись двух компонентов и записывается как .
Тип (немецкий : Art) в Plankalkül состоит из трех элементов: структурированного значения (немецкий : Struktur), прагматического значения (немецкий : Typ) и возможного ограничения возможных значения (немецкий : Beschränkung). Типы, определяемые пользователем, обозначаются буквой A с номером, например - первый тип, определенный пользователем.
Цузе использовал множество примеров из теории шахмат:
Координата шахматной доски (она имеет размер 8x8, поэтому 3 бита вполне достаточно) | ||
квадрат доски ( например, L00, 00L обозначает е2 в алгебраической записи ) | ||
кусок (например, 00L0 - белый король) | ||
фигура на доске (например, L00, 00L; 00L0 - белый король на e2) | ||
доска (расположение фигур, описывает, какие фигуры находятся в каждом из 64 квадратов) | ||
состояние игры (- доска, - кто ходит, - возможность рокировки (2 для белых и 2 для черных), A2 - информация о ячейке, по которой проходом возможен ход |
Идентификаторы представляют собой буквенно-цифровые символы с числом. Существуют следующие типы идентификаторов для переменных:
Конкретная переменная определенного типа идентифицируется по номеру, указанному под типом. Например:
Программы и подпрограммы отмечены буквой P, за которой следует по номеру программы (и, возможно, подпрограммы). Например, , .
Выходное значение программы сохраненный там в переменной доступен для других подпрограмм под идентификатором , а чтение значения этой переменной также означает выполнение связанной подпрограммы.
Plankalkül разрешает доступ к отдельным элементам переменной с помощью «индекса компонента» (немецкий : Komponenten-Index). Когда, например, программа принимает входные данные в переменной типа (состояние игры), затем - показывает состояние платы, - число на квадрате я и номер бит j этого фрагмента.
В современных языках программирования это описывалось бы нотацией, подобной V0 [0]
, V0 [0] [i]
, V0 [0] [i] [j]
(хотя для доступа к одному биту в современных языках программирования обычно используется битовая маска ).
Поскольку индексы переменных записываются вертикально, каждая инструкция Plankalkül требует для записи нескольких строк.
Первая строка содержит тип переменной, затем номер переменной, помеченный буквой V (немецкий : индекс-переменная), затем индексы подкомпонентов переменных, отмеченные K (немецкий : Komponenten-Index), а затем (немецкий : Struktur-Index) помечены буквой S, которая описывает тип переменной. Тип не требуется, но Цузе отмечает, что это помогает при чтении и понимании программы.
В строке типы и можно сократить до и .
Примеры:
переменная V3 - список пар значений типа | |
Строку K можно пропустить, если она пуста. Следовательно, это выражение означает то же, что и выше. | |
Значение бита восьмерок (индекс 7) первой (индекс 0) пары і-го элемента переменной V3 имеет логический тип (). |
Индексы могут быть не только константами. Переменные могут использоваться в качестве индексов для других переменных, и это отмечается линией, которая показывает, в каком индексе компонента будет использоваться значение переменной:
Z5-й элемент переменной V3. Эквивалентно выражению V3 [Z5] во многих современных языках программирования. |
Цузе ввел в свое исчисление оператор, неизвестный для математики до него - присваивание. Он пометил его «» и назвал знак уступки (немецкий : Ergibt-Zeichen). Использование концепции присваивания - одно из ключевых различий между математикой и информатикой.
Цузе написал это выражение:
аналогично более традиционному математическому уравнению:
Существует мнение, что Конрад Зузе изначально использовал для присвоения знак , и начал использовать под влиянием Хайнца Рутисхаузера. Кнут и Пардо считают, что Цузе всегда писал , а был введен издателями «Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben». На конференции ALGOL 58 в Цюрихе европейские участники предложили использовать для присваивания символ, введенный Цузе, но американская делегация настаивала на :=
.
переменной, которая хранит результат присваивания (l-значение ) записывается справа от оператора присваивания. Первое присвоение переменной считается объявлением.
Левая часть оператора присваивания используется для выражения (немецкий : Ausdruck), которое определяет, какое значение будет присвоено переменной. В выражениях могут использоваться арифметические операторы, логические операторы и операторы сравнения (etc.).
Операция возведения в степень. записывается аналогично операции индексации - с использованием строк в 2d-нотации:
Цузе назвал отдельную программу Rechenplan («план вычислений»). Он представил то, что он назвал Planfertigungsgerät («устройство для сборки чертежей»), которое автоматически переводило бы математическую формулировку программы в машиночитаемый перфорированный пленочный материал.
Первоначальное обозначение было два размерный. Для более поздней реализации в 1990-х годах была разработана линейная запись.
В следующем примере определяется функция max3
(в линейной транскрипции), которая вычисляет максимум трех переменных:
P1 max3 (V0 [: 8.0], V1 [ : 8.0], V2 [: 8.0]) → R0 [: 8.0] макс (V0 [: 8.0], V1 [: 8.0]) → Z1 [: 8.0] макс (Z1 [: 8.0], V2 [: 8.0]) → R0 [: 8.0] КОНЕЦ P2 макс. (V0 [: 8.0], V1 [: 8.0]) → R0 [: 8.0] V0 [: 8.0] → Z1 [: 8.0] (Z1 [: 8.0] < V1[:8.0]) → V1[:8.0] → Z1[:8.0] Z1[:8.0] → R0[:8.0] END