ДЖОРДЖ (Генератор общего порядка) - это язык программирования, изобретенный Чарльзом Леонардом Хамблином в 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
) поместить на верх стека аккумулятора; Функция Multiply ( ×
) вызвала удаление двух верхних значений, а именно, x
и x
, которые были удалены (извлечены) и умножены, возвращая произведение на вершину стека аккумулятора. Затем вторая функция multiply ( ×
) вызвала извлечение и умножение двух верхних значений в стеке (а именно, a
и x**2
), а также помещение product ( a×x**2
) в верхнюю часть стека аккумулятора. И так по остальным компонентам выражения. Заключительная операция, а именно (y
), вернул значение выражения в хранилище без изменения состояния стека аккумулятора.
Предполагая, что значение в верхней части стека аккумулятора не требуется немедленно, оно будет удалено (очищено) с помощью оператора ( ;
).
Следующая программа считывает восемь значений и формирует их сумму:
0,1, 8 повтор. (J) R +](П)
- Первая строка инициализирует сумму, помещая нулевое значение в верхнюю часть стека аккумулятора.
- Вторая строка вводит цикл, произносится как «от 1 до 8 повторений для j» и заканчивается квадратной скобкой.
- В третьей строке R заставляет одно число считываться и помещаться в верхнюю часть стека аккумулятора, а знак плюс (+) заставляет это значение добавляться к (частичной) сумме, оставляя только частичную сумму на верх аккумуляторной батареи.
- После того, как цикл завершается, (P) заставляет окончательную сумму быть перфорированной на карте.
Манипуляции с векторами и матрицами требуют записи в нижнем индексе. В GEORGE нижний индекс (и) предшествует имени вектора или матрицы. Таким образом было записано A (j) j | A
. Следующая программа считывает в векторе a 10 значений, затем формирует квадраты этих значений и, наконец, печатает эти значения.
1, 10 R1 (а)1, 10 повтор. (J) j | дубликат * j | (а);]1, 10 П1 (а)
- В программе первая строка - это вектор, считывающий десять значений от (1) до (10).
- Вторая строка вводит цикл для просмотра десяти значений j.
- Третья строка извлекает a (j), дублирует его, умножает эти два значения, получая квадрат, а затем сохраняет его в a (j). Обратите внимание на точку с запятой (;), которая очищает (или отменяет) верхнюю запись в стеке аккумулятора. Если бы этого не было сделано, аккумулятор постепенно заполнялся бы квадратами значений.
- Последняя строка - это векторный штамп (т. Е. Печать) для записи десяти квадратов.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 15 | ||
---|---|---|---|---|---|---|---|---|---|---|
0 | / | 0 | 16 | а | q | а) | (q) | бревно | р | |
1 | , | // | 1 | 17 | б | р | (б) | (р) | exp | (П) |
2 | ; | ~ | 2 | 18 | c | s | (c) | (s) | бух | |
3 | * | & | 3 | 19 | d | т | (г) | (т) | rem | |
4 | ∨ | 4 | 20 | е | ты | (е) | (u) | sqrt | ||
5 | + | ] | 5 | 21 год | ж | v | (е) | (v) | грех | |
6 | - | ↓ | 6 | 22 | грамм | ш | (грамм) | (ш) | потому что | |
7 | × | ↑ | 7 | 23 | час | Икс | (час) | (Икс) | ||
8 | ÷ | представитель | 8 | 24 | я | y | (я) | (у) | R1 | |
9 | негр | я | 9 | 25 | j | z | (j) | (z) | P1 | |
10 | мод | 10 | 26 год | k | α | (k) | (α) | R11 | ||
11 | Максимум | 11 | 27 | л | β | (l) | (β) | P11 | ||
12 | обман | 12 | 28 год | м | γ | (м) | (γ) | |||
13 | rev | 13 | 29 | п | λ | (п) | (λ) | |||
14 | знак равно | 14 | 30 | Θ | μ | (Θ) | (μ) | |||
15 | > | 15 | 31 год | п | ω | (п) | (ω) |
Приведенная выше таблица кодирования GEORGE помогла записать программу на перфокарты.
Условные операции были записаны как переходы следующим образом: если a> 0 перейти к 5 (который переходит в метку 5, если a больше нуля), будет записано
0 а> 5 ↑
Метка 5 была обозначена включением * 5 в другом месте программы. Написаны безусловные переводы 5 ↑
Вызов подпрограмм был сделан с помощью стрелки вниз, .g., Чтобы вызвать подпрограмму с меткой 17, напишите 17 ↓, где метка 17 была закодирована с использованием столбца 3 вышеприведенной таблицы.
Историческая справка [ править ]
В первой версии, запущенной к маю 1957 года на английском Electric DEUCE , все значения хранились в двоичной форме с фиксированной точкой в 32-битном слове с 16 двоичными разрядами.
Во второй версии, представленной в 1958 году, значения содержались в форме с плавающей запятой, по одному значению на слово: 22 бита для мантиссы и 10 бит для экспоненты.
Некоторая форма таблицы кодирования была необходима, потому что печатное оборудование того времени давало только 26 букв алфавита, десятичную точку, знак плюс, минус и косую черту.
Ссылки [ править ]
- ^ Хамблин, Чарльз Леонард (май 1957). Схема безадресного кодирования, основанная на математической нотации (машинописный текст). Технологический университет Нового Южного Уэльса .
- ^ Хэмблин, Чарльз Леонард (июнь 1957 г.). «Схема безадресного кодирования, основанная на математической нотации». Труды Первой австралийской конференции по вычислениям и обработке данных . Солсбери, Южная Австралия: Центр исследования оружия .
- ^ Хэмблин, Чарльз Леонард (1957). «Компьютерные языки». Австралийский научный журнал (20?): 135–139; Хэмблин, Чарльз Леонард (ноябрь 1985). «Компьютерные языки». Австралийский компьютерный журнал (переиздание). 17 (4): 195–198.
- ^ Хэмблин, Чарльз Леонард (1958). GEORGE IA и II: Схема полупереводного программирования для DEUCE: Руководство по программированию и эксплуатации (PDF) . Школа гуманитарных наук, Университет Нового Южного Уэльса, Кенсингтон, Новый Южный Уэльс. Архивировано (PDF) из оригинала 2020-04-04 . Проверено 27 июля 2020 .
- ^ Борода, Боб (осень 1997) [1996-10-01]. «Компьютер KDF9 - 30 лет спустя» (PDF) . Воскресение - Бюллетень Общества Сохранения Компьютеров . № 18. Общество сохранения компьютеров (CCS). С. 7–15. ISSN 0958-7403 . Архивировано (PDF) из оригинала 27.07.2020 . Проверено 27 июля 2020 .
[…]
KDF9
примечателен тем, что считается первым компьютером с форматом команд с нулевым адресом, о котором было объявлено (в 1960 году). Впервые он был доставлен примерно в то же время (в начале 1963 года), что и другой знаменитый компьютер с нулевым адресом,
Burroughs B5000.
в Америке. Как и многие современные карманные калькуляторы, машина с нулевым адресом позволяет использовать обратную польскую арифметику; это дает определенные преимущества разработчикам компиляторов. Считается, что внимание команды English Electric было впервые привлечено к концепции нулевого адреса благодаря контакту с Джорджем (Генератором общего порядка), системой программирования автокода, написанной для компьютера Deuce Сиднейским университетом , Австралия, в последнем. половина 1950-х гг. Джордж использовал Reversed Polish , и команда KDF9 была привлечена к этому соглашению по прагматической причине, желая повысить производительность за счет минимизации доступа к основному магазину. Это можно противопоставить более "теоретической" линии, взятой независимо Берроузом.. Помимо аппаратного вложения хранилища или стека - основного механизма компьютера с нулевым адресом - KDF9 имел другие группы центральных регистров для повышения производительности, что придавало ему интересную внутреннюю структуру. […]
[1] (NB. Это отредактированная версия выступления Северо-Западной группы общества в Музее науки и промышленности, Манчестер, Великобритания, 01.10.1996.) - ^ Курс программирования . Школа электротехники Университета Нового Южного Уэльса . ндп 24.