планрасчет
Парадигма | процедурный |
---|---|
Разработано | Конрад Цузе |
Впервые появился | 1948 год | — впервые опубликована концепция.
Основные реализации | |
Plankalkül-Compiler от ФУ Берлина в 2000 г. | |
Под влиянием | |
Суперплан , Алгол 58 [ 1 ] |
планрасчет ( Немецкое произношение: [ˈplaːnkalkyːl] ) — язык программирования в инженерных целях , разработанный Конрадом Цузе в период с 1942 по 1945 год. Это был первый язык программирования высокого уровня , разработанный для компьютера.
Kalkül (от латинского исчисления ) — это немецкий термин, обозначающий формальную систему (например, Hilbert-Kalkül , оригинальное название системы дедукции в стиле Гильберта ), поэтому Plankalkül относится к формальной системе планирования. [ 2 ]
История программирования
[ редактировать ]В области создания вычислительных машин Цузе был самоучкой и разработал их, не зная о других уже существовавших механических вычислительных машинах, хотя позднее (построение Z3 ) он был вдохновлен книгой Гильберта и Аккермана по элементарной математике. логика (см. Основы математической логики ). [ 3 ] : 113, 152, 216 Для описания логических схем Цузе изобрел собственную диаграмму и систему обозначений, которую назвал «комбинаторикой кондиционалов» ( нем . Bedingungskombinatorik ). Закончив Z1 в 1938 году, Цузе обнаружил, что исчисление, которое он независимо разработал, уже существует и известно как исчисление высказываний . [ 4 ] : 3 Однако то, что имел в виду Цузе, должно было быть гораздо более мощным (исчисление высказываний не является полным по Тьюрингу и не способно описать даже простые арифметические вычисления). [ 5 ] ). В мае 1939 года он описал свои планы развития того, что впоследствии стало Планкалкюлем. [ 3 ] : 113, 152, 216 В своем блокноте он записал следующее:
Постепенное знакомство с формальной логикой около полугода. Там я нашел многие из своих ранних мыслей. (Условная комбинаторика = логика высказываний; теория интервалов = исчисление площадей). Сейчас я планирую создать «Планкалкюль». В связи с этим необходимо уточнить ряд терминов. |
Почти полгода постепенного внедрения в формальную логику. Там я заново открыл для себя многие из своих прежних мыслей. (комбинаторика кондиционалов = исчисление высказываний ; изучение интервалов = теория решеток ). На эту тему я сейчас планирую принятие «Исчисления планов». Для этого необходимо уточнить ряд понятий. |
—Записная книжка Конрада Цузе [ 4 ] : 3 |

Работая над докторской диссертацией, Цузе разработал первую известную формальную систему записи алгоритмов. [ 6 ] : 9 способен обрабатывать ветвления и циклы. [ 7 ] : 18 [ 3 ] : 56 В 1942 году он начал писать шахматную программу в Планкалкюле. [ 3 ] : 216–217 В 1944 году Цузе встретился с немецким логиком и философом Генрихом Шольцем , который выразил признательность за использование Цузе логического исчисления . [ 8 ] В 1945 году Цузе описал Планкалкюля в неопубликованной книге. [ 9 ] Однако распад нацистской Германии помешал ему представить свою рукопись. [ 7 ] : 18
В то время единственными двумя работающими компьютерами в мире были ENIAC и Harvard Mark I , ни один из которых не использовал компилятор, и ENIAC нужно было перепрограммировать для каждой задачи, меняя способ подключения проводов. [ 4 ] : 3
Хотя большинство его компьютеров было уничтожено бомбами союзников, Цузе смог спасти одну машину, Z4 , и перевезти ее в альпийскую деревню Хинтерштайн. [ 6 ] : 8 (часть Бад-Хинделанга ).
Самая первая попытка создания алгоритмического языка была предпринята в 1948 г. К. Цузе. Его замечания были весьма общими, но это предложение так и не получило того внимания, которого оно заслуживало.
—Хайнц Рутисхаузер , создатель АЛГОЛА
Невозможно продолжать создавать компьютеры, что также было запрещено союзными державами. [ 10 ] – Цузе посвятил свое время разработке модели и языка программирования более высокого уровня. [ 7 ] : 18 В 1948 году он опубликовал статью в Archiv der Mathematik и представил ее на ежегодном собрании GAMM . [ 3 ] : 89 Его работа не привлекла большого внимания. [ нужна ссылка ] В лекции 1957 года Цузе выразил надежду, что Планкалкюль, «после некоторого времени, проведенного в роли Спящей красавицы , все же оживет». [ 4 ] : 3 Он выразил разочарование тем, что разработчики Алгола 58 так и не признали влияние Планкалкула на их собственные работы. [ 7 ] : 18 [ 6 ] : 15
Планкалкюль был переиздан с комментариями в 1972 году. [ 11 ] Первый компилятор Plankalkül был реализован Иоахимом Хоманном в его диссертации 1975 года. [ 12 ] Другие независимые реализации последовали в 1998 году. [ 13 ] и 2000 г. в Свободном университете Берлина . [ 4 ] : 2
Описание
[ редактировать ]Планкалкюль провел сравнения с языком APL и реляционной алгеброй . Он включает в себя операторы присваивания, подпрограммы , условные операторы, итерацию, арифметику с плавающей запятой , массивы, иерархические структуры записей, утверждения, обработку исключений и другие расширенные функции, такие как целенаправленное выполнение . Plankalkül предоставляет структуру данных, называемую обобщенным графом ( verallgemeinerter Graph ), которую можно использовать для представления геометрических структур. [ 14 ]
Многие функции Plankalkül вновь появляются в более поздних языках программирования; Исключением является своеобразное двумерное обозначение, использующее несколько строк.
Некоторые особенности Plankalkül: [ 3 ] : 217
- только локальные переменные
- функции не поддерживают рекурсию
- поддерживает только вызов по значению
- составные типы — это массивы и кортежи
- содержит условные выражения
- содержит цикл for и цикл while
- нет перехода
Типы данных
[ редактировать ]Единственный примитивный тип данных в Plankalkül — это однобитовый или логический тип ( нем . Ja-Nein-Werte — значение «да-нет» в терминологии Цузе). Обозначается идентификатором . Все дальнейшие типы данных являются составными и строятся из примитивов с помощью «массивов» и «записей». [ 15 ] : 679
Итак, последовательность из восьми бит (которую в современных вычислениях можно рассматривать как байт ) обозначается и булева матрица размера к описывается . Существует также сокращенная запись, поэтому можно написать вместо . [ 15 ] : 679
Тип может иметь два возможных значения и . Таким образом, 4-битная последовательность может быть записана как L00L, но в тех случаях, когда такая последовательность представляет число, программист может использовать десятичное представление 9. [ 15 ] : 679
Запись двух компонентов и написано как . [ 15 ] : 679
Тип ( нем . Art ) в Plankalkül состоит из 3 элементов: структурированного значения ( нем . Struktur ), прагматического значения ( нем . Typ ) и возможного ограничения возможных значений ( нем . Beschränkung ). [ 15 ] : 679 Типы, определяемые пользователем, обозначаются буквой A с номером, например – первый определяемый пользователем тип.
Примеры
[ редактировать ]Цузе использовал множество примеров из теории шахмат: [ 15 ] : 680
Координата шахматной доски (размер 8x8, поэтому 3 бита вполне достаточно) | ||
квадрат доски (например, L00, 00L обозначает e2 в алгебраической записи ) | ||
фигура (например, 00L0 — белый король) | ||
фигура на доске (например L00, 00L; 00L0 — белый король на e2) | ||
доска (расположение фигур, описывает, какую фигуру содержит каждый из 64 квадратов) | ||
состояние игры ( - доска, — игрок для перемещения, — возможность рокировки (2 за белых и 2 за чёрных), — информация о ячейке, по которой на проходе возможен проход |
Идентификаторы
[ редактировать ]Идентификаторы представляют собой буквенно-цифровые символы с номером. [ 15 ] : 679 Существуют следующие виды идентификаторов переменных: [ 9 ] : 10
- Входные значения ( нем . inputvalues,variables ) — отмечены буквой V.
- Промежуточные, временные значения ( нем . Zwischenwerte ) — обозначаются буквой Z.
- Константы ( нем . Constanten ) — обозначаются буквой С.
- Выходные значения ( нем . Resultatwerte ) — отмечены буквой R.
Конкретная переменная определенного типа идентифицируется номером, написанным под типом. [ 15 ] : 679 Например:
- , , и т. д.
Программы и подпрограммы обозначаются буквой P, за которой следует номер программы (и, возможно, подпрограммы). Например , . [ 15 ] : 679
Выходное значение программы сохранено там в переменной доступен для других подпрограмм под идентификатором , и чтение значения этой переменной также означает выполнение соответствующей подпрограммы. [ 15 ] : 680
Доступ к элементам по индексу
[ редактировать ]Plankalkül обеспечивает доступ к отдельным элементам переменной с помощью «индекса компонента» ( нем . KomComponenten-Index ). Например, когда программа получает входные данные в переменную типа (состояние игры), затем — дает состояние доски, — фигура на клетке номер i, и бит номер j этой части. [ 15 ] : 680
В современных языках программирования это будет описываться обозначениями, подобными V0[0]
, V0[0][i]
, V0[0][i][j]
(хотя для доступа к одному биту в современных языках программирования битовая маска обычно используется ).
Двумерный синтаксис
[ редактировать ]Поскольку индексы переменных записываются вертикально, каждая инструкция Plankalkül требует записи нескольких строк. [ нужна ссылка ]
Первая строка содержит тип переменной, затем номер переменной, отмеченный буквой V ( немецкий : Variablen-Index ), затем индексы переменных подкомпонентов, отмеченные буквой K ( немецкий : KomComponenten-Index ), а затем ( немецкий : Struktur-Index ), отмеченные буквой S. который описывает тип переменной. Тип не обязателен, но Цузе отмечает, что это помогает при чтении и понимании программы. [ 15 ] : 681
В линии типы и можно было бы сократить до и . [ 15 ] : 681
Примеры:
переменная V3 — список пары значений типа | |
Строку K можно пропустить, если она пуста. Следовательно, это выражение означает то же самое, что и выше. | |
Значение бита восьмерок (индекс 7), первой (индекс 0) пары, і-го элемента переменной V3, имеет логический тип ( ). |
Индексы могут быть не только константами. Переменные могут использоваться в качестве индексов для других переменных, и это отмечено линией, которая показывает, в каком индексе компонента будет использоваться значение переменной:
![]() |
Z5-й элемент переменной V3. Эквивалентно выражению V3[Z5] во многих современных языках программирования. [ 15 ] : 681
|
Операция присвоения
[ редактировать ]Цузе ввел в свое исчисление оператор присваивания, до него неизвестный в математике. Он отметил это надписью « » и назвал его знаком уступчивости ( нем . Ergibt-Zeichen ). Использование концепции задания является одним из ключевых различий между математикой и информатикой. [ 6 ] : 14
Цузе писал, что выражение:
аналогично более традиционному математическому уравнению:
Есть утверждения, что изначально этот глиф использовал Конрад Цузе. в качестве знака назначения и начал использовать под влиянием Хайнца Рутисхаузера . [ 15 ] : 681 Кнут и Пардо считают, что Цузе всегда писал , и это
был введен издателями «Об исчислении общего плана как средстве постановки схематически-комбинативных задач» в 1948 году. [ 6 ] : 14 На конференции ALGOL 58 в Цюрихе европейские участники предложили использовать символ присваивания, введенный Цузе, но американская делегация настояла на
:=
. [ 15 ] : 681
Переменная, в которой хранится результат присваивания ( l-значение ), записывается справа от оператора присваивания. [ 6 ] : 14 Первое присвоение переменной считается объявлением. [ 15 ] : 681
Левая часть оператора присваивания используется для выражения ( нем . Ausdruck ), которое определяет, какое значение будет присвоено переменной. В выражениях могут использоваться арифметические операторы, логические операторы и операторы сравнения ( и т. д.). [ 15 ] : 682
Операция возведения в степень записывается аналогично операции индексации — с использованием строк в двумерной записи: [ 9 ] : 45
Поток управления
[ редактировать ]Логические значения были представлены как целые числа с FALSE=0
и TRUE=1
. Условный поток управления принял форму защищенного оператора. A -> B
, который выполнил блок B
если A
было правдой. Также существовал оператор итерации вида W { A -> X; B -> Y
}, который повторяется до тех пор, пока все охранники не станут ложными. [ 16 ]
Терминология
[ редактировать ]Цузе назвал одну программу Rechenplan («план вычислений»). Он представил себе то, что он назвал Planfertigungsgerät («устройство для сборки планов»), которое автоматически переводило математическую формулировку программы в машиночитаемую перфорированную пленку , то, что сегодня назвали бы транслятором или компилятором . [ 3 ] : 45, 104, 105
Пример
[ редактировать ]Исходное обозначение было двумерным. [ нужны разъяснения ] Для более поздней реализации в 1990-х годах была разработана линейная запись.
В следующем примере определяется функция max3
(в линейной транскрипции), вычисляющая максимум три переменные:
P1 max3 (V0[:8.0],V1[:8.0],V2[:8.0]) → R0[:8.0] max(V0[:8.0],V1[:8.0]) → Z1[:8.0] max(Z1[:8.0],V2[:8.0]) → R0[:8.0] END P2 max (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
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Рохас, Рауль ; Хашаген, Ульф [на немецком языке] (2002). Первые компьютеры: история и архитектура . МТИ Пресс . п. 292. ИСБН 978-0-26268137-7 . Проверено 25 октября 2013 г.
- ^ Зенил, Гектор [в Викиданных] , изд. (2012). Вычислимая Вселенная: понимание и исследование природы как вычисления - с предисловием сэра Роджера Пенроуза . Сингапур: Всемирная научная издательская компания . п. 791.
- ^ Jump up to: а б с д и ж г Хеллиге, Ханс Дитер, изд. (январь 2004 г.) [ноябрь 2002 г.]. Написано в Бремене, Германия. Истории информатики. Видения, парадигмы, лейтмотивы (на немецком языке) (1-е изд.). Берлин / Гейдельберг, Германия: Springer-Verlag . стр. 45, 56, 89, 104–105, 113, 152, 216–217. дои : 10.1007/978-3-642-18631-8 . ISBN 978-3-540-00217-8 . ISBN 3-540-00217-0 . (xii+514 страниц)
- ^ Jump up to: а б с д и Рохас, Рауль ; Гёктекин, Джюнейт; Фридланд, Джеральд; Крюгер, Майк; Шарп, Людмила; Кунис, Денис; Лангмак, Олаф (январь 2004 г.) [ноябрь 2002 г.]. «Планкалкюль Конрада Цузе — его происхождение и современная реализация» (PDF) . В Хеллиге, Ганс Дитер (ред.). Истории информатики. Видения, парадигмы, лейтмотивы. Часть 3: Основные идеи и парадигмы разработки языков программирования и программирования (на немецком языке) (1-е изд.). Берлин / Гейдельберг, Германия: Springer-Verlag . С. 215–235 [2–4]. дои : 10.1007/978-3-642-18631-8_9 . ISBN 978-3-642-62208-3 . Архивировано из оригинала (PDF) 1 мая 2006 г. (21 [24] страницы)
- ^ «Почему пропозициональная логика не является полной по Тьюрингу?» . Математика. СтекExchange . 01 апреля 2013 г. Архивировано из оригинала 2 ноября 2023 г. Проверено 2 ноября 2023 г.
- ^ Jump up to: а б с д и ж Кнут, Дональд Эрвин ; Пардо, Луис Исидоро Трабб [на португальском языке] (август 1976 г.). «Раннее развитие языков программирования» (PDF) . Стэнфордский университет, факультет компьютерных наук. стр. 8, 9, 14, 15. Архивировано из оригинала (PDF) 12 сентября 2017 г. Проверено 28 декабря 2017 г.
- ^ Jump up to: а б с д Гилой, Вольфганг К. [на немецком языке] (апрель – июнь 1997 г.). «Plankalkül Конрада Цузе: первый язык программирования высокого уровня, не являющийся фон Нейманом» . IEEE Анналы истории вычислений . 19 (2). IEEE : 17–24. дои : 10.1109/85.586068 . (8 страниц)
- ^ Петцольд, Хартмут [на немецком языке] (1992). Современные художники-арифметики. Индустриализация вычислительной техники в Германии (на немецком языке). Мюнхен, Германия: CH Beck Verlag .
- ^ Jump up to: а б с Цузе, Конрад (1946) [1945]. Рохас, Рауль ; Вагнер, Г.; Шарп, Людмила; Шётткер-Зёль [Шётке-Зуль], Сюзанна (ред.). Планкалкюль (В версии 1945 года) (Рукопись) (на немецком языке). Интернет-архив Конрада Цузе. С. 10, 45. Идентификатор ZIA: 0233. Архивировано из оригинала 16 апреля 2015 г. Проверено 1 ноября 2023 г. (1+1+180 страниц)
- ^ Кой, Вольфганг [на немецком языке] (январь 2004 г.) [ноябрь 2002 г.]. «Что такое информатика? О появлении предмета в немецких университетах» . В Хеллиге, Ганс Дитер (ред.). Истории информатики. Видения, парадигмы, лейтмотивы. Часть 5: Изменение руководящих понятий в научной дисциплине информатика (на немецком языке) (1-е изд.). Берлин / Гейдельберг, Германия: Springer-Verlag . С. 473–498 [474]. дои : 10.1007/978-3-642-18631-8_17 . ISBN 978-3-540-00217-8 . ISBN 3-540-00217-0 . [1]
- ^ Цузе, Конрад (1972). Плановый расчет. Аннотированная перепечатка версии 1945 года (на немецком языке). Том 63. Санкт-Августин, Германия: Общество математики и обработки данных (GMD) / Федеральное министерство образования и науки (BMBW). БМВВ-GMD-63.
- ^ Хоманн, Иоахим (1979). ПЛАНКАЛКУЛ в сравнении с алгоритмическими языками . Серия исследований информатики и операций (на немецком языке). Том 7 (1-е изд.). Дармштадт, Германия: С. Тёхе-Миттлер-Верлаг (stmv). ISBN 3-87820-028-5 . (136 страниц) Содержание
- ^ Описание компилятора Plankalkül Вольфганга Мауэрера ; Мауэрер, Вольфганг (3 июня 2016 г.). «Планкалкюль Конрада Цузе» (на немецком языке). Реализация на немецком языке. Архивировано из оригинала 3 июня 2016 г. Проверено 3 октября 2017 г.
- ^ Гилой, Вольфганг К. [на немецком языке] (ноябрь 1990 г.), Plankalkül Конрада Цузе как предшественник современных моделей программирования (на немецком языке)
- ^ Jump up to: а б с д и ж г час я дж к л м н тот п д р Бауэр, Фридрих Л .; Весснер, Ганс (1972). «Планкалкюль» Конрада Цузе: предшественник современных языков программирования» (PDF) . Коммуникации АКМ . 15 (7): 678–685. дои : 10.1145/361454.361515 . S2CID 17681101 . Архивировано из оригинала (PDF) 20 февраля 2009 г. ( HTML )
- ^ Рохас, Рауль (2001). «Планисчисление» (PDF) . Энциклопедия компьютеров и компьютерной истории . Чикаго / Лондон: Издательство Fitzroy Dearborn . п. 634. ИСБН 1-57958235-4 . Проверено 26 мая 2023 г.
Дальнейшее чтение
[ редактировать ]- Цузе, Конрад (1943). Подходы к теории общих вычислений с особым рассмотрением исчисления высказываний и его применения к релейным схемам [ Создание универсальной теории вычислений с особым рассмотрением исчисления высказываний и его применения к релейным схемам ] (неопубликованная рукопись) (на немецком языке) . Документы Цузе 045/018.
- Цузе, Конрад (1948-12-06) [ноябрь 1948]. Написано в Хопферау-бай-Фюссен, Германия. «Об исчислении общего плана как средстве постановки схематически-комбинативных задач». Архив математики (на немецком языке). 1 (6). Карлсруэ / Штутгарт / Базель, Германия: Birkhäuser Verlag : 441–449. дои : 10.1007/BF02038459 . eISSN 1420-8938 . ISSN 0003-889X . (9 страниц)
- Рохас, Рауль ; Гёктекин, Джюнейт; Фридланд, Джеральд; Крюгер, Майк; Кунис, Денис; Лангмак, Олаф (февраль 2000 г.). Plankalkül: первый язык программирования высокого уровня и его реализация (PDF) . Берлин, Германия: Институт компьютерных наук, Свободный университет Берлина и Feinarbeit.de. Технический отчет B-3/2000. Архивировано из оригинала 1 мая 2006 г. [2] (22 страницы)
- Брюинс, Брэм (8 января 2010 г.). «Планкалкюль» (PDF) (Диссертация). Архивировано (PDF) из оригинала 2 ноября 2023 г. Проверено 2 ноября 2023 г. (24 страницы)
Внешние ссылки
[ редактировать ]- «Программа Планкалкюль» . Интернет-архив Конрада Цузе (на немецком и английском языках). 21 августа 2014 г. Архивировано из оригинала 21 августа 2014 г. Проверено 4 октября 2017 г. (Примечание. Java-апплеты и документы Plankalkül.)