ДЖОРДЖ (язык программирования)
ДЖОРДЖ (генератор общего порядка) — язык программирования, изобретенный Чарльзом Леонардом Хэмблином в 1957 году. [1] [2] [3] [4] Он был разработан на основе раскрывающегося стека всплывающих окон для арифметических операций и использовал обратную польскую нотацию . [5] Язык включал циклы , подпрограммы , условные выражения , векторы и матрицы .
Описание
[ редактировать ]Алгебраические выражения записывались в обратной польской записи; таким образом, было написано a b +
и аналогично для других арифметических операций вычитания, умножения и деления.
Алгебраическое выражение было написано a x dup × × b x × + c +
, где ' dup
означало «дублировать значение».
После обратной польской формы следует оператор присваивания для вычисления формулы. было написано как a x dup × × b x × + c + (y)
.
Компьютер оценил выражение следующим образом: значения a
, затем x
, были помещены на вершину стека аккумуляторов ; ' dup
' вызвал копию самого верхнего значения ( x
) для установки на верхнюю часть аккумуляторной батареи; Умножить ( ×
) вызвало два верхних значения, а именно, x
и x
, который нужно удалить (вытолкнуть) и умножить, вернув произведение на вершину стека аккумуляторов. Второе умножение ( ×
) затем вызывал два верхних значения в стеке (а именно, a
и x**2
) для извлечения и умножения, а произведение ( a×x**2
), который нужно поместить на вершину стека аккумуляторов. И так по остальным компонентам выражения. Заключительная операция, а именно ( y
), вернул значение выражения в хранилище, не меняя состояния стека аккумуляторов.
Если предположить, что значение в верхней части стека аккумуляторов не требуется немедленно, оно будет удалено (очищено) с помощью оператора ( ;
).
Следующая программа считывает восемь значений и формирует их сумму:
0, 1, 8 rep (j) R + ] (P)
- Первая строка инициализирует сумму, помещая нулевое значение на вершину стека аккумуляторов.
- Вторая строка представляет собой цикл, произносится как «повторение от 1 до 8 для j» и заканчивается квадратной скобкой.
- В третьей строке R заставляет одно число считываться и помещаться на вершину стека аккумуляторов, а знак плюс (+) вызывает добавление этого значения к (частичной) сумме, оставляя только частичную сумму в верхняя часть аккумуляторного стека.
- После завершения цикла (P) окончательная сумма записывается на карту.
Манипулирование векторами и матрицами требует индексной записи. В GEORGE индекс(ы) предшествовал имени вектора или матрицы. Таким образом, A(j) было записано j | A
.
Следующая программа считывает вектор a из 10 значений, затем формирует квадраты этих значений и, наконец, печатает эти значения.
1, 10 R1 (a) 1, 10 rep (j) j | a dup * j | (a) ; ] 1, 10 P1 (a)
- В программе первая строка представляет собой векторное чтение, которое считывает десять значений в значения от a(1) до a(10).
- Вторая строка представляет цикл для прохождения десяти значений j.
- Третья строка извлекает a(j), дублирует его, умножает эти два значения, давая квадрат, а затем сохраняет его в a(j). Обратите внимание на точку с запятой (;), которая очищает (или отменяет) верхнюю запись в стеке аккумуляторов. Если бы этого не было сделано, аккумулятор постепенно заполнялся бы квадратами значений.
- Последняя строка представляет собой векторную печать (т. е. печать) для записи десяти квадратов.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 15 | ||
---|---|---|---|---|---|---|---|---|---|---|
0 | / | 0 | 16 | а | д | (а) | (к) | бревно | Р | |
1 | , | // | 1 | 17 | б | р | (б) | (р) | опыт | (П) |
2 | ; | ~ | 2 | 18 | с | с | (с) | (с) | бах | |
3 | * | & | 3 | 19 | д | т | (г) | (т) | рем | |
4 | ∨ | 4 | 20 | и | в | (и) | (в) | кврт | ||
5 | + | ] | 5 | 21 | ж | v | (е) | (v) | грех | |
6 | - | ↓ | 6 | 22 | г | В | (г) | (В) | потому что | |
7 | × | ↑ | 7 | 23 | час | х | (час) | (х) | ||
8 | ÷ | представитель | 8 | 24 | я | и | (я) | (и) | Р1 | |
9 | нег | я | 9 | 25 | дж | С | (к) | (С) | П1 | |
10 | против | 10 | 26 | к | а | (к) | (а) | Р11 | ||
11 | Макс | 11 | 27 | л | б | (л) | (б) | P11 | ||
12 | обман | 12 | 28 | м | с | (м) | (с) | |||
13 | оборот | 13 | 29 | н | л | (н) | (л) | |||
14 | = | 14 | 30 | че | м | (Я) | (м) | |||
15 | > | 15 | 31 | п | ой | (п) | (ой) |
Приведенная выше таблица кодирования ДЖОРДЖА помогла записать программу на перфокарты.
Условные операции были записаны в виде переходов следующим образом: если a > 0, перейдите к 5 (который переходит к метке 5, если a больше нуля) будет написано
0 a > 5 ↑
Метка 5 обозначалась включением *5 в другом месте программы. Безусловные переводы были написаны 5↑
Вызов подпрограммы производился с помощью стрелки вниз, например, для вызова подпрограммы с меткой 17 напишите 17↓, где метка 17 была закодирована с использованием столбца 3 приведенной выше таблицы.
Историческая справка
[ редактировать ]В первой версии, запущенной к маю 1957 года на English Electric DEUCE , все значения хранились в двоичной форме с фиксированной запятой в 32-битном слове с 16 двоичными разрядами.
Во второй версии, представленной в 1958 году, значения хранились в форме с плавающей запятой, по одному значению на слово: 22 бита для мантиссы и 10 бит для показателя степени.
Была необходима некая форма таблицы кодирования, поскольку печатное оборудование того времени обеспечивало только 26 букв алфавита, десятичную точку, знак плюс, знак минус и косую черту.
Ссылки
[ редактировать ]- ^ Хэмблин, Чарльз Леонард (май 1957 г.). Схема безадресного кодирования, основанная на математической записи (машинописный текст). Технологический университет Нового Южного Уэльса .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Хэмблин, Чарльз Леонард (июнь 1957 г.). «Схема безадресного кодирования, основанная на математической записи». Материалы Первой австралийской конференции по вычислительной технике и обработке данных . Солсбери, Южная Австралия: Исследовательский центр вооружений .
- ^ Хэмблин, Чарльз Леонард (1957). «Компьютерные языки». Австралийский научный журнал (20?): 135–139; Хэмблин, Чарльз Леонард (ноябрь 1985 г.). «Компьютерные языки». Австралийский компьютерный журнал (перепечатка). 17 (4): 195–198.
- ^ Хэмблин, Чарльз Леонард (1958). ДЖОРДЖ IA и II: Полупереводная схема программирования для DEUCE: Руководство по программированию и эксплуатации (PDF) . Школа гуманитарных наук Университета Нового Южного Уэльса, Кенсингтон, Новый Южный Уэльс. Архивировано (PDF) из оригинала 4 апреля 2020 г. Проверено 27 июля 2020 г.
- ^ Борода, Боб (осень 1997 г.) [1996-10-01]. «Компьютер KDF9 — 30 лет спустя» (PDF) . Воскресение — Бюллетень Общества охраны компьютеров . № 18. Общество охраны компьютеров (CCS). стр. 7–15. ISSN 0958-7403 . Архивировано (PDF) из оригинала 27 июля 2020 г. Проверено 27 июля 2020 г.
[…] KDF9 примечателен тем, что считается первым анонсированным компьютером с форматом инструкций с нулевым адресом (в 1960 году). Впервые он был поставлен примерно в то же время (начало 1963 года), что и другой знаменитый компьютер с нулевым адресом, Burroughs B5000 , в Америке. Как и многие современные карманные калькуляторы, машина с нулевым адресом позволяет использовать обратную польскую арифметику; это дает определенные преимущества авторам компиляторов. Считается, что внимание команды English Electric было впервые привлечено к концепции нулевого адреса благодаря контакту с George (General Order Generator), системой программирования автокода, написанной для Deuce компьютера Сиднейским университетом , Австралия, в последнем половина 1950-х годов. Джордж использовал Reversed Polish и команда KDF9 были привлечены к этому соглашению по прагматической причине: желание повысить производительность за счет минимизации доступа к основному хранилищу. Это можно противопоставить более «теоретической» линии, независимо выдвинутой Берроузом . Помимо аппаратного хранилища или стека - основного механизма компьютера с нулевым адресом - KDF9 имел другие группы центральных регистров для повышения производительности, что придавало ему интересную внутреннюю структуру. […]
[1] (Примечание. Это отредактированная версия выступления, прочитанного перед Северо-Западной группой Общества в Музее науки и промышленности, Манчестер, Великобритания, 1 октября 1996 г.) - ^ Курс программирования . Школа электротехники Университета Нового Южного Уэльса . НДП 24.