Short Code

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 15:19, 8 июня 2016.
Short Code
Спроектировано Джон Мокли, Вильгельм Шмидт
Первый   появившийся 1950 (1950)
Портал: https://en.support.wordpress.com/shortcodes/
Влияние
Intermediate programming language, OMNIBAC Symbolic Assembler

Short Code (Короткий код, произносится ʃɔːt kəʊd ) — один из первых языков программирования высокого уровня из когда-либо разрабатываемых для вычислительных машин. Short Code представляет собой уже не набор машинных кодов, как это было раньше, а полноценные математические выражения, которые затем интерпретируются в машинный код.

История

Как язык программирования Short Code был предложен Джоном Мокли в 1949 году. Оригинальное название языка - Brief Code. Первая реализация была написана Вильгельмом Шмидтом для компьютера BINAC в 1949 году. Во время работы над UNIVAC I у Мокли возникла идея научить компьютер воспринимать алгебраические уравнения в их традиционном виде. На следующий год Шмидтом была разработана новая версия для UNIVAC I, где уже язык получил название Short Code. Однако в полной мере реализовать её не удалось, потому что знаки математических действий по-прежнему приходилось заменять на их численные коды. Конечный же вариант Short Code был предложен в 1952 году для компьютера Univac II А.Б. Тоником и Дж. Р. Логаном.

Отсутствие ранних данных о разработке Short Code указывает на то, что это был не мгновенный успех, несмотря на его последующую историческую значимость. Причиной недостаточной популярности служило то, что оборудование UNIVAC пользовалось небольшое число научных работников.

Удивительно, что такой алгебраический язык не был первоначально разработан в математических компьютерных вычислительных центрах. Возможно, причина в том, что математикам была так важна скорость выполнения программы, и они не могли себе позволить терять больше вычислительного времени на то, что может сделать программист.

Обзор

Для использования Short Code каждое математическое выражение должно быть вручную преобразовано в последовательность байт. В BINAC и UNIVAC одно слово соответствует 12 байтам. Поэтому каждое выражение разделяется кортежами по 6 элементов. Каждый элемент кортежа представляется двумя байтами.

Пример программы

Рассмотрим выражение:

a = (b + c) / b * c

Так будет выглядеть процесс ручного преобразования математического выражения в Short Code:

X3 =  (  X1 +  Y1 )  /  X1 * Y1     замена переменных
X3 03 09 X1 07 Y1 02 04 X1   Y1     замена операторов и круглых скобок
                                    Замечание: умножение описывается простым размещением рядом переменных
07 Y1 02 04 X1 Y1                   группировка в слова по 12 байт
00 00 X3 03 09 X1

Пример алгоритма TPK

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

Переменные:

i = W0, t = T0, y = Y0.

Входные параметры:

U0, T9, T8, ..., T0.

Константы:

Z0 = 000000000000
Z1 = 010000000051 (= 1.0)
Z2 = 010000000052 (= 10.0)
Z3 = 040000000053 (= 400.0)
Z4 = ΔΔΔTOOΔLARGE
Z5 = 050000000051 (= 5.0)

Метки строк:

0 = line 01, 1 = line 06, 2 = line 07

Short Code:

                      Уравнения                                 Код
                              
00        i = 10                                       00  00  00  W0  03  Z2
01    0:  y = (sqrt abs t) + 5 cube t                  T0  02  07  Z5  11  T0
02                                                     00  Y0  03  09  20  06
03        y 400     if  1                             00  00  00  Y0  Z3  41
04        i print, 'TOO LARGE' print-and-return        00  00  Z4  59  W0  58
05        0   0     if = 2                             00  00  00  Z0  Z0  72
06    1:  i print, y print-and-return                  00  00  Y0  59  W0  58
07    2:  T0 U0 shift                                  00  00  00  T0  U0  99
08        i = i - 1                                    00  W0  03  W0  01  Z1
09        0   i     if  0                             00  00  00  Z0  W0  40
10        stop                                         00  00  00  00  ZZ  08

Каждое слово соответствует определенному значению или выражению:

Слово Значение
01 -
02 )
03 =
04 /
06 abs
07 +
08 pause
09 (
1n возведение в степень (n + 2)
2n взятие корня (n + 2)
4n условие (if ≤ n)
58 печать и табуляция
59 печать и переход на новую строку
7n условие (if = n)
99 циклический сдвиг памяти (cyclic shift to memory)
Sn Tn, ..., Zn переменная

Выражение "i = 10" кодируется как слово "00 00 00 03 W0 Z2". Слова 00 слева используются для заполнения слова. Умножение описывается простым размещением рядом переменных. Переводчик обрабатывает каждое слово справа налево, так чтобы увидеть знак "=" в конце. Этот факт необходимо иметь в виду, программистам, которые должны будут разделить длинные уравнения соответствующим в нескольких словах (см. линий 01 и 02); см также инструкции по печати на линиях 04 и 06, где коды работают справа налево.

Литература

  • Wexelblat, Richard L. (Ed.) (1981). "History of Programming Languages", p. 9. New York: Academic Press. ISBN 0-12-745040-8
  • J. Howlett, Gian Carlo Rota, Nicholas Metropolis (Ed.) (1980). "History of Computing in the Twentieth Century", p. 213. New York: Academic Press. ISBN 0-12-491650-3

Ссылки

  1. https://ru.wikipedia.org/wiki/Short_Code