Первый язык программирования высокого уровня — Планкалкюль ★
Планкалкюль (Plankalkül) — первый в мире язык программирования высокого уровня, разработанный немецким инженером Конрадом Цузе между 1942 и 1946 годами для его компьютера «Z4».
Шла Вторая Мировая Война, Цузе работал в отрыве от учёных других стран, совершенно самостоятельно. За это время он создал не только язык программирования, но и написал на нём 49 страниц программ для оценки шахматных позиций. Полностью его работа была опубликована много позже, в 1972.
Только в 1957 году (работы были начаты в 1954) появился Фортран — язык, который большинство считает первым языком высокого уровня.
«Z4» был
Диалект, который реализуется, назван
Язык довольно богатый, на мой взгляд, для сороковых
Все переменные делятся на четыре вида.
- Variablen (Входные переменные) — это входные переменные подпрограмм, доступны только для чтения начинаются с буквы V и номера;
- Zwischenwert (Значения промежуточные), доступны для чтения и записи, предназначены для хранения промежуточных вычисляемых значения, начинаются с Z и номера;
- Resultatwerte (Результат) — в этих переменных возвращается результат вычисления, начинаются с R и номера;
- Indizes (Индексы) — переменные цикла (аналога for), начинаются с i, дальше может быть номер, номер необходим для организации вложенных циклов.
Доступны три типа переменных. Несмотря на то, что «Z4» умел оперировать числами с плавающей точкой, интерпретатор этого не умеет.
Для целого неотрицательного указывается размерность в битах. Есть две формы записи 0 — один бит, n.0 — «n» бит, например, 8.0 — один байт (8 бит). Кортеж указывается в скобках, например (3.0, 4.0) — это две переменные в три и четыре бита, кортеж должен иметь более одного элемента. Массив записывается через точку, к примеру: 4.5.0 — массив из четырёх элементов по пять бит в каждом, 32.(0, 8.0, 16.0) — 32 кортежа, в каждом из которых три переменных: один бит, восемь и шестнадцать.
«Планкалкюль» явно можно сильно упростить по синтаксису, но современный диалект почти в точности копирует ту запись, которую использовал Цузе, я полагаю, что такой синтаксис родился
Одна из них вычисляет указанное (по порядку) число Фибоначчи:
P0 FactEvgenyStepanischev (V0[:4.0]) => (R0[:10.0])
(0, 1) => (Z0[:10.0], Z1[:10.0])
W1 (V0[:4.0]) [
i > 0 -> (Z0[:10.0] + Z1[:10.0], Z1[:10.0] - Z0[:10.0]) => (Z1[:10.0], Z0[:10.0])
]
Z1[:10.0] => R0[:10.0]
ENDЗапускать следует так: открываете страницу с интерпретатором, копируете в окно мою программу, нажимаете «Compile», открывается отдельное окно
Подпрограммы в языке начинаются с символа P и уникального номера, дальше идёт имя, по которому её можно будет вызвать, у меня подпрограмма называется FactEvgenyStepanischev, заканчивается подпрограмма ключевым словом END (в оригинальном Планкалкюле его не было).
У подпрограммы описываются принимаемые и возвращаемые значения, у меня используется одна переменная на вход, размерностью 4 бита и одна на выход, размерность в 10. Первой строкой присваиваются значения «ноль» и «один» промежуточным переменным Z0 и Z1. Тип переменных приходится указывать при каждом их использовании, преобразовать переменную в другой тип нельзя.
Ниже идёт цикл for (W1), поскольку номер переменной цикла я не указал (указывается в первых квадратных скобках, которые тут опущены), используется переменная цикла i, без номера. В круглых скобках указывается количество повторений, а в последующих квадратных — тело цикла. Подробности можно найти в описании.
Операция «стрелка» (->) — условная конструкция, часть справа будет выполнена, если выражение слева истинно. В диалекте работают только самые простые выражения, например цикл туда подставить можно, но кнопка «Run» в аплете у меня не появилась, поэтому я ограничился присваиванием внутри цикла.
Я тут использовал комплексное присваивание, которое хорошо знакомо тем, кто использует Перл, Пайтон или ПХП, но работает оно иначе — присваивания выполняются последовательно, слева направо, поэтому я не могу ограничиться,
(Z0[:10.0] + Z1[:10.0], Z1[:10.0]) => (Z1[:10.0], Z0[:10.0])результат будет не тот, который ожидается.
В конце я присваиваю промежуточное значение результирующему значению подпрограммы.
Кроме этого в языке почти ничего и нет. Обращение к элементам массива, вызов функции и цикл while описывать отдельно смысла не имеет, они выглядят достаточно естественно в рамках этого синтаксиса. Все операции, поддерживаемые языком (их немного — логические операции, битовые операции и четыре арифметические действия) выглядят привычно.
Всякая мелочь одним постом-6
Интересное видео — что будет с пиявкой если её поместить в воду, оставшуюся от кальяна. Задумайтесь, чем дышат курящие кальян.
Появился прибор «СПИДометр», использующий «неинвазивный, скрининговый метод диагностики», чтобы определять наличие СПИДа. Некоторые люди совсем потеряли совесть. В пользовательском соглашении написано: «использование Пользователем сервисов сайта не налагает на Администрацию сайта
Другое видео — диктор «РенТВ», читая текст про Барака Обаму, показывает в эфире средний палец. Что это было?
Для желающих понастальгировать девятого декабря выходит ремейк знаменитой игры для «Спектрума», главным героем которой является Диззи. Это ремейк шестой части, которая называется «Dizzy. Prince of The YolkFolk», игра будет выпущена под «Андроид», «Айпад» и «Айфон». Я куплю.
«Старое радио» — уникальный проект по оцифровке старых передач, аудиоплёнок и пластинок. В ЖЖ «Оттенки серого» великолепный рассказ об авторе этого проекта.
Будущее (а может уже и прошлое, кто знает) шпионажа — использование датчиков смартфона, лежащего рядом с ноутбуком или клавиатурой компьютера, для угадывания что печатает пользователь. Для английских фраз вероятность правильного распознавания с использованием только гироскопа и акселерометра (без микрофона, который может улучшить картину) — 80%.