Код
#статьи

Plankalkül: злой язык для вундерваффе

О первом в мире высокоуровневом языке программирования, а также о хитром переплетении людских судеб и идей в нацистской Германии и послевоенном мире.

Иллюстрация: Denis Apel / Huhu Uet / Kinsme / Sammlung der Medien und Wissenschaft / Morris J D C (Sgt) / Wikimedia Commons / Edan Cohen / Unsplash / Дима Руденок для Skillbox Media

Современным разработчикам, живущим в мире Open Source, глобального рынка, открытых границ и свободного обмена идеями, наверное, трудно представить, что всего век назад всё было иначе.

Кибернетики (так раньше называли айтишников) работали не просто в полной изоляции друг от друга — они буквально участвовали в войне на выживание. Что, впрочем, не мешало им совершать удивительные открытия, которые заложили основы нынешних IT.

Об одном из них, Алане Тьюринге, мы много писали в предыдущих статьях. Сегодня поговорим о представителе противоположного лагеря, чьи достижения, пожалуй, не менее глобальны, но, к сожалению, гораздо менее известны. О создателе первого в мире языка программирования высокого уровня — Plankalkül (читается как «планкалкюль»).

Конрад Цузе и его университеты

Если бы Цузе родился в другое время и в другом месте, его имя, скорее всего, было бы известно не только в узкопрофессиональной среде — оно гремело бы на весь мир. Однако судьбе было угодно иначе.

Конрад Цузе со своими разработками
Фото: Wikimedia Commons

Наш герой родился в 1910 году в Берлине. С раннего возраста он проявлял огромные способности к изобретательству. Например, ещё школьником сконструировал действующий аппарат по размену мелочи (для сравнения, советские инженеры введут нечто подобное в массовый оборот только через полвека) и спроектировал город с населением 37 млн человек (это, на минутку, полтора современных Пекина, три Москвы или четыре Нью-Йорка). В 1935 году Цузе окончил Берлинскую высшую техническую школу — культовый по тем временам вуз.

Помимо авторитетной научной базы Школа славилась толерантным отношением к объектам студенческих исследований. Один из моих университетских преподавателей, которому посчастливилось учиться в Берлине примерно в те же годы поглядывал на наши лабораторные работы снисходительно, время от времени вздыхая: «Вот у нас были лабы так лабы: получение героина ацетилированием морфина, синтез цианидов из карбидов…»

Это неудивительно, если учесть, что химфак Школы в разное время окончили, например, Антон Кёлиш, придумавший MDMA, более известный как «экстази» (это была его дипломная работа), и Фриц Габер — нобелевский лауреат, подаривший миру азотные удобрения и «Циклон Б».

Вообще, знаменитостей в Берлине училось немало. Из одних только обладателей Нобелевки можно составить несколько футбольных команд.

Типичное выпускное фото любого курса Берлинской высшей технологической школы в первой половине ХХ века
Изображение: обложка альбома Sgt. Pepper’s Lonely Hearts Club Band / The Beatles

Остановимся, однако, на однокашниках Цузе, с которыми так или иначе будет связана вся его работа с окончания Школы и вплоть до 1945 года:

  • Альберт Шпеер — архитектор и по совместительству министр вооружений в Третьем рейхе, автор идеи принудительного выселения евреев, куратор проекта концентрационных лагерей;
  • Вернер фон Браун — ракетостроитель, создатель первых в мире баллистических ракет;
  • Гельмут Греттруп — инженер-ракетчик, ближайший сподвижник фон Брауна;
  • Вальтер Дорнбергер — администратор, генерал-майор вермахта, непосредственный руководитель Греттрупа и фон Брауна, подчинённый Шпеера.

Тройка последних с конца 1930-х составляла костяк ракетного исследовательского центра в Пенемюнде, где и были придуманы все немецкие вундерваффе — от летающей бомбы V-1 до первой в мире БРДД ФАУ-2.

«Ни одно частное лицо или государственное учреждение не могло позволить себе трату миллионов марок на создание больших ракет, если это ограничивалось бы исключительно интересами чистой науки. Перед нами человечеством, согласным на любые затраты, была поставлена задача решить великую цель и сделать в этом отношении первый практический шаг. И мы открыли дверь в будущее…»

Вальтер Дорнбергер,
«Выстрел в космос», 1952 год

ФАУ-2: предстартовая проверка
Фото: Wikimedia Commons

Как мы видим, недостатка в средствах, мотивации и конструкторских идеях у немецких ракетостроителей не было. Однако любой ракетой нужно как-то управлять. Кроме того, для проектирования требуются сложнейшие расчёты, которые под силу только ЭВМ. Настало время вернуться к нашему главному герою.

ЭВМ на букву Z

Идея сделать машину для рутинных расчётов пришла к Цузе ещё в студенческие годы. Причём она настолько его охватила, что юный изобретатель, проработав на авиазаводе всего год после получения диплома, перешёл на полставки и вплотную занялся её осуществлением.

Через три года была готова первая модель, которую Цузе назвал по первой букве своей фамилии (Zuse) — Z1. Устройство весило полтонны и было собрано буквально из подручных средств. Работало оно на моторе от старого пылесоса, данные вводились с помощью клавиатуры от печатной машинки, а переключателями служили 20 000 металлических пластин, которые Цузе с друзьями вручную выпилили лобзиками.

Несмотря на такую монструозность, Z1 обладала памятью на 64 слова по 22 бита и умела складывать числа за пять секунд и перемножать за 10.

Вдохновлённый первым успехом, Цузе тут же взялся за более совершенную модель Z2. После двух лет поисков он, наконец, нашёл заинтересованных инвесторов — ими как раз и стали геноссен из Пенемюнде.

Проекты Цузе и Дорнбергера — Греттрупа — фон Брауна плотно переплелись до самого конца Второй мировой. За Z2 последовал первый в мире работоспособный программируемый компьютер Z3, на котором рассчитывались параметры ФАУ. А позже — единственный на тот момент в Европе цифровой компьютер Z4.

Операторы за панелью управления Z4, 1955 год
Фото: Швейцарский федеральный технологический институт в Цюрихе

Z4, по сути, был прототипом современных ПК. Чтобы он нормально функционировал, одного умения выпиливать лобзиком было недостаточно. Цузе приступил к созданию собственного языка программирования.

К этой работе, как и ко всему остальному, инженер подошёл фундаментально. Он исходил из того, что новый язык должен быть готов к применению не только на Z4, но и на любом другом компьютере. Кроме того, Цузе изначально строил логическую систему числовых и символьных обозначений, пригодную для решения какой угодно задачи.

Его концепция программирования понятна уже из названия, которое он придумал для своего языка, — Plankalkül (в переводе с немецкого — «запланированные вычисления»).

Цузе предложил разделить работу компьютера на две составляющие: программу, то есть план работы вычислительного устройства, и собственно вычисления, которые это устройство будет производить. Таким образом, он предвосхитил современные понятия hardware и software.

«Plankalkül родился исключительно как результат теоретической работы, без всякой связи с тем, появятся или нет в обозримом будущем машины, подходящие к программам на Plankalkül».

Конрад Цузе о своих изначальных предпосылках.
Источник: Язык компьютера / пер. с англ. К. Г. Батаева, под ред. и с предисл. В. М. Курочкина. М.: Мир, 1990. 240 с.

Результат был ошеломляющим: немецкий кибернетик опередил конкурентов на десятки лет. И вот почему.

Язык для modern talking

Plankalkül стал первым в мире высокоуровневым языком программирования с собственной символьной лексикой (термина «алгоритмический язык» ещё не существовало) и техникой трансляции адресов.

Переменные записывались сочетанием «буква-число», где буква обозначала их вид. Например:

  • V — параметр ввода;
  • Z — промежуточное значение;
  • R — результирующее значение;
  • C — константа.

Цузе придумал оператор присваивания , аналогичный сегодняшнему => или, в американской раскладке, : =. Приведём типичный пример его использования для сравнения переменных V1 и V2. Если они равны, в результат R1 заносится значение TRUE, в противном случае — FALSE. Записывалось это так:

V1 = V2 => R1

Для числовых переменных использовалась запись S1.n, где n — размерность в битах (значение n = 0 соответствовало размерности в 1 бит).

Кортеж указывался в скобках — допустим, запись (2.0, 5.0) обозначала кортеж из двух переменных в 2 и 5 битов соответственно.

Аналогично, структура из трёх компонентов записывалась как (A2, S1.4, A3), где A2 и A3 — объекты, определённые в программе.

В Plankalkül было впервые введено понятие объекта. Он мог быть примитивным, то есть основанным на двоичных числах произвольной длины. Логическая единица обозначалась символом L — например, двоичное число 101101 записывалось как L0LL0L. Или составным — к таким объектам относились массивы, структуры и так далее.

В строчке выше нет опечатки — язык действительно позволял работать с массивами. Массив размерности [n] x [m] обозначался как n.m.S0 (индексация всегда начиналась с 0). К примеру, запись 4.5.0 обозначала массив из четырёх элементов по 5 бит в каждом. А запись 32. (0, 8.0, 16.0) — массив из 32 кортежей, в каждом из которых по три переменных размерностью 1, 8 и 16 бит.

Предусматривались и операции с многомерными массивами: например, трёхмерный массив V [i] [j] [k] указывался матрицей V [i] и вектором V [j] [k].

Программы и подпрограммы в Plankalkül считались переменными и обозначались префиксом P. Скажем, запись P3.7 означала вызов седьмой программы третьей программной группы.

Синтаксис, изобретённый Цузе, для современных разработчиков выглядит странновато. Все записи были многомерными: в верхней строке записывалось само выражение, а в нижних — его аргументы (индексы, типы переменных и так далее). В соответствующей статье «Википедии» приведён пример с присваиванием на языке Plankalkül:

[5] = A [4] + 1:

| A + 1 => A

V | 4 5

S | 1.n. 1.n.

V в данном случае — это строка для индексов, S — строка для задания типов данных, 1.n — целое число размером n бит. Как предполагают многие исследователи, такие архитектурные излишества были связаны с необходимостью переводить всё на перфокарты и перфоленты, бывшие тогда чуть ли единственным способом хранения информации для ЭВМ.

Как это работало

Исторически сложилось, что Plankalkül разрабатывался для электромеханических устройств, а потому не предполагал компилятора. В 2000 году инженеры Свободного университета Берлина восполнили этот пробел и создали интерпретатор Plankalkül-2000 — по сути, модернизированный и слегка упрощённый диалект оригинала.

Таким образом, любой желающий мог почувствовать дух той эпохи, скачав интерпретатор на свой компьютер, и поупражняться в написании программ.

К сожалению, на данный момент ссылка выдаёт ошибку 404, но кое-какие примеры в Сети всё-таки остались. Например, та же статья в «Википедии» содержит код программы для вычисления максимума трёх переменных с помощью программы max3 и подпрограммы max:

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

Как мы видим, все программы и подпрограммы записываются с помощью символа P, уникального номера и имени, по которому они вызываются. Их конец обозначается командой END — как вы понимаете, это уже придумка наших современников, в изначальном языке Цузе её не было и быть не могло.

В каждой подпрограмме описываются входные и результирующие значения. В нашем случае это три входных переменных V0, V1 и V2 размерностью 8 бит каждая и одна выходная R0, тоже на 8 бит.

Подпрограмма max находит максимум из переменных V0 и V1. Вначале за максимум берётся V0, значение которой присваивается вспомогательной переменной Z1. Потом Z1 сравнивают с V1. Если последняя оказывается больше, то переменной Z1 присваивают её значение и найденный таким образом максимум присваивается результирующей R0.

Затем программа max3 ищет максимум из переменных Z1 и V2 посредством вызова подпрограммы max.

Что было дальше

Plankalkül мог стать настоящим прорывом в 1940–1950-е годы. Нигде больше не было условных конструкций, двух видов циклов (аналогов современных while и for), массивов и кортежей, возможности описывать и вызывать подпрограммы (правда, справедливости ради надо сказать, что рекурсии в Plankalkül не было).

По мощности он приближался к Algol 68, разработанному почти четверть века спустя, и при этом существенно превосходил его в надёжности.

Но, к сожалению, хитом он не стал. Компьютер Z4 был окончательно готов лишь к декабрю 1944 года, когда войска союзников уже воевали на территории Германии и дальнейшие разработки утратили для Третьего рейха всякий смысл.

Гитлер, до этого относившийся к ракетной программе скептически, осознал свою ошибку, но было, к счастью для человечества, поздно. Появись ФАУ-2 на вооружении у вермахта, например, году в 1942-м — неизвестно, сколько бы ещё продлилась Вторая мировая.

«За всю свою жизнь мне пришлось извиняться только перед двумя людьми. Первым был фельдмаршал фон Браухич. Я не слушал его, когда он снова и снова повторял мне, насколько важны ваши исследования. Второй человек — это вы. Я никогда не верил, что ваша работа будет успешной».

Адольф Гитлер,
официальные извинения перед Вальтером Дорнбергером, 8 июля 1944 года

Более того: Z4 едва не был уничтожен в результате бомбардировок Берлина. В марте 1945-го Цузе был вынужден разобрать его и вывезти в глухую альпийскую деревушку, где и хранил три года.

После войны судьба его коллег сложилась по-разному. Шпеера признали военным преступником. Нюрнбергский трибунал осудил его на 20 лет тюремного заключения. Выйдя на свободу, он кормился мемуарами.

Альберт Шпеер на Нюрнбергском процессе
Фото: Wikimedia Commons

Дорнбергер был арестован американскими войсками в мае 1945 года. Получил два года тюрьмы за использование рабского труда при производстве ФАУ-2. После освобождения работал советником министра обороны США, стал одним из основателей американской ПРО и программы космических челноков. Выйдя на пенсию, жил в Мексике, потом перебрался в Германию, где и оставался до самой смерти.

Вернер фон Браун, арестованный вместе с Дорнбергером, почти сразу был переправлен в США. Он считается одним из отцов американской космической программы.

Дорнбергер и фон Браун в момент ареста
Фото: Wikimedia Commons

Греттруп оказался в зоне советской оккупации. С 1946 года — руководитель группы немецких специалистов по баллистическим и управляемым ракетам в «шарашке» на острове Городомля, озеро Селигер. После возвращения в ГДР в 1953 году занялся вычислительной техникой и стал одним из авторов современных смарт-карт.

Цузе к ответственности не привлекался и даже остался в ФРГ. В 1950 году он восстановил свой Z4, работавший с частотой 30 Гц и обрабатывавший числа с плавающей точкой. ЭВМ умела выполнять арифметические действия, извлекать квадратный корень и обрабатывать исключения. Но всё это, по большому счёту, интересовало уже только немцев. Z4 использовали для вычислений до 1960 года. Сегодня он находится в Немецком музее в Мюнхене.

Руководство по Plankalkül опубликовали лишь в 1972 году, когда уже были и Fortran, и Lisp, и COBOL, и две версии Algol (1960 и 1968 годов). Язык остался на обочине мировой кибернетики, вызвав некоторое любопытство лишь у небольшой группы профессионалов.

Тем не менее карьера Цузе сложилась успешно. В 1946 году он основал компанию по производству компьютеров Zuse-Ingenieurbüro Hopferau. Ещё через три года — фирму Zuse KG. За 17 лет она поставила 251 компьютер бренда Z на сумму около 100 млн дойчмарок — последней моделью была Z31. С 1967 года, продав свой бизнес Siemens AG, Цузе работал в ней консультантом, а также занимался наукой.

Он был почётным доктором и профессором многих университетов Европы. В 1999 году его имя внесли в Книгу славы калифорнийского Музея компьютерной истории, а в 2003-м даже признали величайшим из немцев за всю историю по результатам опроса на общенациональном телеканале ZDF.

К своей работе на Третий рейх Цузе относился философски:

«Слишком часто изобретатель становится фаустовским идеалистом, который мечтает улучшить мир, но проигрывает суровой реальности. Если он хочет воплотить идеи в жизнь, то должен взаимодействовать с силами, чьи взгляды выражены резко и категорично. В наше время эти силы — в основном армия и государственный управленческий аппарат».

Конрад Цузе,
из воспоминаний

После ухода на пенсию Цузе посвятил себя любимому хобби — живописи. Умер в возрасте 85 лет. Его именем названы улицы и здания, а также школа в Хюнфельде.

Памятник Конраду Цузе в Бад-Херсфельде
Фото: Wikimedia Commons

Что интересно, Цузе всю жизнь был убеждённым социалистом и даже стремился поставить ЭВМ на службу идеям всеобщего равенства, справедливости и плановой экономики. В частности, он много лет работал над проектом «компьютерного социализма», в котором все мировые проекты будут управляться объединённой сетью мощнейших ЭВМ.

Кто знает — возможно, когда-нибудь и эта его идея будет успешно реализована? Пусть, как и все его предыдущие проекты, с некоторым опозданием.

Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Архитектор ПО Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована