Plankalkül ( немецкое произношение: [ˈplaːnkalkyːl] ) - это язык программирования, разработанный для инженерных целей Конрадом Цузе между 1942 и 1945 годами. Это был первый язык программирования высокого уровня, разработанный для компьютера.
Парадигма | Процедурный |
---|---|
Разработано | Конрад Зузе |
Впервые появился | 1948 | - впервые опубликована концепция
Основные реализации | |
Plankalkül-Compiler от FU Berlin в 2000 г. | |
Под влиянием | |
Begriffsschrift [1] | |
Под влиянием | |
Superplan от Heinz Rutishauser , АЛГОЛа 58 [2] |
Kalkül - это немецкий термин, обозначающий формальную систему, как в Hilbert-Kalkül , первоначальное название дедуктивной системы в стиле Гильберта, - поэтому Plankalkül относится к формальной системе планирования. [3]
История
В области создания вычислительных машин Цузе был самоучкой и разрабатывал их, не зная о других механических вычислительных машинах, которые уже существовали, хотя позже (при создании Z3 ), вдохновляясь книгой Гильберта и Аккермана по элементарным знаниям. математическая логика (ср. Принципы математической логики ). [4] Для описания логических схем Цузе изобрел свою собственную систему диаграмм и обозначений, которую назвал «комбинаторикой условных выражений » ( нем . Bedingungskombinatorik ). После завершения Z1 в 1938 году Цузе обнаружил, что исчисление, которое он независимо разработал, уже существует и известно как исчисление высказываний . [5] Однако то, что имел в виду Цузе, должно было быть гораздо более мощным (исчисление высказываний не является полным по Тьюрингу и не способно описывать даже простые арифметические вычисления [6] ). В мае 1939 года он описал свои планы по развитию того, что впоследствии станет Планкалкюль. [4] Он написал в своей записной книжке следующее:
Почти полгода постепенного введения в формальную логику. Я заново открыл для себя многие из моих предыдущих мыслей. (комбинаторика условных выражений = исчисление высказываний ; изучение интервалов = теория решеток ). Сейчас планирую создание «Исчисления планов». Чтобы прояснить это, требуется ряд концепций. | 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. |
- Блокнот Конрада Цузе [5] |
Работая над докторской диссертацией, Цузе разработал первую известную формальную систему обозначений алгоритмов [7], способную обрабатывать ветви и циклы. [8] [9] В 1942 году он начал писать шахматную программу в Планкалкюле. [10] В 1944 году Цузе встретился с немецким логиком и философом Генрихом Шольцем , который выразил признательность Цузе за использование логического исчисления . [11] В 1945 году Цузе описал Планкалкюль в неопубликованной книге. [12] Крах нацистской Германии , однако, помешал ему представить свою рукопись. [8]
В то время единственными двумя рабочими компьютерами в мире были ENIAC и Harvard Mark I , ни один из которых не использовал компилятор, и ENIAC нужно было перепрограммировать для каждой задачи, меняя подключение проводов. [13]
Хотя большая часть его компьютеров была уничтожена бомбами союзников, Цузе смог спасти одну машину, Z4 , и перевезти ее в альпийскую деревню Хинтерштайн [14] (часть Бад-Хинделанга ).
Самая первая попытка создания алгоритмического языка была предпринята в 1948 г. К. Цузе. Его обозначения были довольно общими, но предложение так и не получило должного рассмотрения.
- Хайнц Рутисхаузер , создатель ALGOL
Не имея возможности продолжать производство компьютеров - что также было запрещено союзными державами [15], Цузе посвятил свое время разработке модели программирования и языка более высокого уровня. [8] В 1948 году он опубликовал статью в Archiv der Mathematik и представил ее на ежегодном собрании GAMM . [16] Его работа не привлекла особого внимания. [ необходима цитата ] В лекции 1957 года Цузе выразил надежду, что Планкалкюль, «через некоторое время в роли Спящей красавицы , все же оживет». [ необходима цитата ] Он выразил разочарование тем, что разработчики ALGOL 58 никогда не признавали влияние Планкалкюля на их собственные работы. [8] [17]
Планкалкюль был более подробно опубликован [ неопределенно ] в 1972 году. Первый компилятор был реализован Иоахимом Хоманом в его диссертации 1975 года. [18] Другие независимые реализации последовали в 1998 [19] и 2000 годах в Свободном университете Берлина . [20]
Описание
Планкалкюль провел сравнения с языком APL и реляционной алгеброй . Он включает операторы присваивания, подпрограммы , условные операторы, итерацию, арифметику с плавающей запятой , массивы, иерархические структуры записей, утверждения, обработку исключений и другие расширенные функции, такие как целенаправленное выполнение . Plankalkül предоставляет структуру данных, называемую обобщенным графом ( verallgemeinerter Graph ), которую можно использовать для представления геометрических структур. [21]
Планкалкюль поделился особенные нотациями с использованием нескольких строк с Фрегом «S Begriffsschrift 1879 г. (дело с математической логикой ). [ требуется разъяснение ]
Некоторые особенности Plankalkül: [22]
- только локальные переменные
- функции не поддерживают рекурсию
- поддерживает только вызов по значению
- составные типы - это массивы и кортежи
- содержит условные выражения
- содержит цикл for и цикл while
- нет goto
Типы данных
Единственный примитивный тип данных в Plankalkül - однобитовый или логический ( немецкий : Ja-Nein-Werte - значение да-нет в терминологии Zuses). Обозначается идентификатором. Все остальные типы данных являются составными и строятся из примитивов с помощью «массивов» и «записей». [23]
Итак, последовательность из восьми бит (которые в современных вычислениях можно рассматривать как байты ) обозначается как, и логическая матрица размера от описывается . Также существует сокращенная запись, чтобы можно было написать вместо . [23]
Тип может иметь два возможных значения а также . Таким образом, 4-битная последовательность может быть записана как L00L, но в случаях, когда такая последовательность представляет собой число, программист может использовать десятичное представление 9. [23]
Запись двух компонентов а также записывается как . [23]
Тип ( немецкий : Art ) в Plankalkül состоит из трех элементов: структурированного значения ( немецкий : Struktur ), прагматического значения ( немецкий : Typ ) и возможного ограничения возможных значений ( немецкий : Beschränkung ). [23] Типы, определяемые пользователем, обозначаются буквой A с номером, например - первый определяемый пользователем тип.
Примеры
Цузе использовал множество примеров из теории шахмат: [24]
Координата шахматной доски (размер 8х8, 3 бита вполне достаточно) | ||
квадрат доски (например, L00, 00L обозначает e2 в алгебраической записи ) | ||
фигура (например, 00L0 - белый король) | ||
фигура на доске (например L00, 00L; 00L0 - белый король на e2) | ||
доска (расположение фигур, описывает, какая фигура находится в каждом из 64 квадратов) | ||
состояние игры ( - доска, - кто двигается, - возможность рокировки (2 для белых и 2 для черных), A2 - информация о ячейке, на которую возможен проход на проходе |
Идентификаторы
Идентификаторы представляют собой буквенно-цифровые символы с числом. [23] Существуют следующие виды идентификаторов переменных: [25]
- Входные значения ( немецкий : Eingabewerte, Variablen ) - отмечены буквой V.
- Промежуточные временные значения ( нем . Zwischenwerte ) - обозначаются буквой Z.
- Константы ( нем . Constanten ) - обозначаются буквой С.
- Выходные значения ( немецкий : Resultatwerte ) - отмечены буквой R.
Конкретная переменная того или иного типа идентифицируется по номеру, указанному под видом. [23] Например:
- , , и т.п.
Программы и подпрограммы отмечены буквой P, за которой следует номер программы (и, возможно, подпрограммы). Например, . [23]
Выходное значение программы сохранен там в переменной доступен для других подпрограмм под идентификатором , и чтение значения этой переменной также означает выполнение связанной подпрограммы. [24]
Доступ к элементам по индексу
Plankalkül позволяет получить доступ к отдельным элементам переменной с помощью «индекса компонентов» ( нем . Komponenten-Index ). Когда, например, программа получает ввод в переменную типа (состояние игры), то - выдает состояние платы, - фигура на квадрате номер i, и бит номер j этого фрагмента. [24]
В современных языках программирования, которые будут описаны обозначениями подобных V0[0]
, V0[0][i]
, V0[0][i][j]
(хотя доступ один бит в современных языках программирования битовой маска обычно используется).
Двумерный синтаксис
Поскольку индексы переменных записываются вертикально, каждая инструкция Plankalkül требует записи нескольких строк.
Первая строка содержит вид переменной, затем номер переменной, отмеченный буквой V ( немецкий : Variablen-Index ), затем индексы подкомпонентов переменных, отмеченные K ( немецкий : Komponenten-Index ), а затем ( немецкий : Struktur-Index ), отмеченные S, который описывает тип переменной. Тип не требуется, но Цузе отмечает, что это помогает при чтении и понимании программы. [26]
В соответствии типы а также можно было бы сократить до а также . [26]
Примеры:
переменная V3 - список пары значений типа | |
Строку K можно пропустить, если она пуста. Следовательно, это выражение означает то же, что и выше. | |
Значение бита восьмерок (индекс 7) первой (индекс 0) пары і-го элемента переменной V3 имеет логический тип (). |
Индексы могут быть не только константами. Переменные могут использоваться в качестве индексов для других переменных, и это отмечается линией, которая показывает, в каком индексе компонента будет использоваться значение переменной:
Z5-й элемент переменной V3. Эквивалентно выражению V3[Z5] во многих современных языках программирования. [26] |
Операция присвоения
Цузе ввел в свое исчисление неизвестный до него в математике оператор - присваивание. Он отметил это знаком «», И назвал это знаком уступки ( нем . Ergibt-Zeichen ). Использование концепции задания - одно из ключевых различий между математикой и информатикой. [27]
Цузе написал это выражение:
аналогично более традиционному математическому уравнению:
Есть утверждения, что Конрад Цузе изначально использовал глиф как знак назначения, и начал использовать под влиянием Хайнца Рутисхаузера . [26] Кнут и Пардо считают, что Цузе всегда писал, и это был представлен издателями «Über den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben» в 1948 году. [27] На конференции по Алголу 58 в Цюрихе европейские участники предложили использовать для присваивания характер, введенный Цузе, но американская делегация настояла на том, чтобы на :=
. [26]
Переменная, в которой хранится результат присваивания ( l-значение ), записывается справа от оператора присваивания. [27] Первое присвоение переменной считается объявлением. [26]
Левая часть оператора присваивания используется для выражения ( нем . Ausdruck ), которое определяет, какое значение будет присвоено переменной. Выражения могут использовать арифметические операторы, логические операторы и операторы сравнения (так далее.). [28]
Операция возведения в степень записывается аналогично операции индексации - с использованием строк в 2-мерной записи: [29]
Поток управления
Терминология
Цузе назвал единственную программу Rechenplan («план вычислений»). Он задумал то, что он назвал Planfertigungsgerät («устройство для сборки чертежей »), которое автоматически переводило бы математическую формулировку программы в машиночитаемую перфоленту . [30]
Пример
Первоначальные обозначения были двумерными. [ требуется пояснение ] Для более поздней реализации в 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]Z1 [: 8.0] → R0 [: 8.0]КОНЕЦ
Смотрите также
- История языков программирования
- Хронология языков программирования
- Список языков программирования
Заметки
- ^ «Ранние языки программирования / CS208e: великие идеи в области компьютерных наук» (PDF) .
- ^ Рохас, Рауль; Хашаген, Ульф (2002). Первые компьютеры: история и архитектура . MIT Press. п. 292. ISBN. 978-0262681377. Проверено 25 октября 2013 года .
- ^ Гектор Зенил (редактор), 2012. Вычислимая Вселенная: Понимание и изучение природы как вычисления с предисловием сэра Роджера Пенроуза . Сингапур: Всемирная научная издательская компания. Стр.791.
- ^ а б Ганс Дитер Хеллиге, изд. (2004). Geschichten der Informatik. Visionen, Paradigmen, Leitmotive (на немецком языке). Берлин: Springer. стр. 113n 152, 216. ISBN 978-3-540-00217-8.
- ^ а б Рохас и др. 2004 , стр. 3.
- ^ «Почему логика высказываний не является полной по Тьюрингу?» .
- ^ Knuth & Pardo 1976 , стр. 9
- ^ а б в г Гилой 1997
- ^ Hans Dieter Hellige (ред.): Geschichten дер Informatik . Visionen, Paradigmen, Leitmotive. Берлин, Springer 2004 г., ISBN 3-540-00217-0 . п. 56.
- ^ Hans Dieter Hellige (ред.): Geschichten дер Informatik . Visionen, Paradigmen, Leitmotive. Берлин, Springer 2004 г., ISBN 3-540-00217-0 . п. 216 217.
- ^ Хартмут Петцольд, Moderne Rechenkünstler. Die Industrialisierung der Rechentechnik в Германии . München. CH Бек Верлаг 1992
- ^ (полный текст рукописи 1945 г.)
- ^ Рохас и др. 2000 , стр. 3.
- ^ Knuth & Pardo 1976 , стр. 8
- ^ Проф. Вольфганг Кой: Была ли это информатика? Zur Entstehung des Faches an den deutschen Universitäten , в: Hans Dieter Hellige (ed.): Geschichten der Informatik . Visionen, Paradigmen, Leitmotive. Берлин, Springer 2004 г., ISBN 3-540-00217-0 . п. 474.
- ^ Hans Dieter Hellige (ред.): Geschichten дер Informatik. Visionen, Paradigmen, Leitmotive. Берлин, Springer 2004 г., ISBN 3-540-00217-0 . п. 89.
- ^ Knuth & Pardo 1976 , стр. 15
- ↑ Иоахим Хоманн: Der Plankalkül im Vergleich mit algorithmischen Sprachen . Reihe Informatik und Operations Research, S. Toeche-Mittler Verlag, Дармштадт, 1979 г., ISBN 3-87820-028-5 .
- ^ Описание Plankalkül-Compiler Вольфгангом Мауэрером
- ^ Рохас и др. 2000 , стр. 2.
- ^ Профессор Вольфганг Giloi : Конрад Zuses планкалкюль ALS Vorläufer Moderner Programmiermodelle, ноябрь 1990
- ^ Hans Dieter Hellige (ред.): Geschichten дер Informatik. Visionen, Paradigmen, Leitmotive. Берлин, Springer 2004 г., ISBN 3-540-00217-0 . п. 217.
- ^ a b c d e f g h Bauer & Wössner 1972 , стр. 679.
- ^ a b c Bauer & Wössner 1972 , стр. 680.
- Перейти ↑ Zuse 1945 , p. 10.
- ^ Б с д е е Bauer & Wössner 1972 , с. 681.
- ^ a b c Knuth & Pardo 1976 , стр. 14.
- ^ Bauer & Wössner 1972 , стр. 682.
- Перейти ↑ Zuse 1945 , p. 45.
- ^ Hellige, Hans Dieter, Geschichten дер Informatik . Visionen, Paradigmen, Leitmotive. Берлин, Springer 2004 г., ISBN 3-540-00217-0 . стр.45, 104, 105
Рекомендации
- Гилой, Вольфганг (1997). "Планкалкюль Конрада Цузе: первый высокоуровневый" язык программирования не фон Неймана " . IEEE Annals of the History of Computing . 19 (2): 17–24. DOI : 10.1109 / 85.586068 .
- Кнут, Дональд Эрвин; Пардо, Луис Трабб (1976), Раннее развитие языков программирования (PDF) , Стэнфордский университет, факультет компьютерных наук, архивировано из оригинала (PDF) 12 сентября 2017 г. , получено 28 декабря 2017 г.CS1 maint: ref дублирует значение по умолчанию ( ссылка )
- Цузе, Конрад (1943), "Ansätze einer Theorie des allgemeinen Rechnens unter besonderer Berücksichtigung des Aussagenkalküls und dessen Anwendung auf Relaisschaltungen", (т.е. начало универсальной теории вычислений с особым вниманием к исчислению высказываний и его применению к релейным схемам ). неопубликованная рукопись, документы Цузе 045/018.
- Зузе, Конрад (1948/49). "Uber den allgemeinen Plankalkül als Mittel zur Formulierung schematisch-kombinativer Aufgaben". Arch. Математика. 1. С. 441–449, 1948/49.
- Цузе, Конрад (1972). "Der Plankalkül". Gesellschaft für Mathematik und Datenverarbeitung. № 63, BMBW - GMD - 63, 1972 г.
- Бауэр, Фридрих Л .; Весснер, Ганс (1972). «Планкалкюль» Конрада Цузе: предшественник современных языков программирования » (PDF) . Архивировано из оригинала (PDF) на 2009-02-20. Цитировать журнал требует
|journal=
( помощь )( HTML версия ) - Рохас, Рауль ; Göktekin, Cüneyt; Фридланд, Джеральд; Крюгер, Майк (2000). Планкалкюль: первый язык программирования высокого уровня и его реализация (PDF) . Архивировано из оригинала на 2006-05-01.
- Рохас, Рауль ; Göktekin, Cüneyt; Фридланд, Джеральд; Крюгер, Майк; Шарф, Людмила (2004). Конрад Зусес Планкалкюль - Seine Genese und eine moderne Implementierung (PDF) . DOI : 10.1007 / 978-3-642-18631-8_9 . Архивировано из оригинального (PDF) 01.05.2006.
Внешние ссылки
- «Планкалкюль» Конрад Цузе: предвестник сегодняшних языков программирования на Friedrich Л. Бауэр ( альтернативный источник )
- Рохас, Рауль и др. (2000). «Планкалкюль: первый язык программирования высокого уровня и его реализация». Институт информатики, Свободный университет Берлина, Технический отчет B-3/2000. (полный текст) (в архиве)
- Мауэрер, Вольфганг (03.06.2016). "Der Plankalkül von Konrad Zuse" (на немецком языке). Реализация на немецком языке. Архивировано из оригинала на 2016-06-03 . Проверено 3 октября 2017 .
- «Планкалкюль» . Интернет-архив Конрада Цузе . Заархивированная страница с Java-апплетами Plankalkül (не работает) и несколькими документами (немецкий / английский). 2014-08-21. Архивировано из оригинала на 2014-08-21 . Проверено 4 октября 2017 .CS1 maint: другие ( ссылка )
- Bram Bruines: Plankalkul (2010) - Планкалкюль описан формально