Аватарка пользователя Аня Карташова
Аня Карташова

Автокод Гленни. Каким был первый высокоуровневый язык программирования

Рассказали, что такое автокод, кто придумал его первым и почему автокод можно считать первым современным языком программирования.

760

Автокод был разработан в 1950-х годах и представлял собой высокоуровневый язык программирования. Он был создан, чтобы облегчить процесс написания кода. Автокод позволял писать программы не на машинном языке и даже не на ассемблере, и это была инновация. 

В общем-то, автокод стал первым языком программирования в том виде, в котором мы привыкли его видеть сегодня: появились буквенные обозначения операций. 

В 50-е годы программисты писали код на машинном языке или ассемблере и работали напрямую с адресами памяти компьютера. Конечно, это было сложно и долго, а ошибиться можно было слишком легко. Каждая операция и адрес памяти задавались в виде числовых кодов, после чего их вручную размечали на перфокартах.

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

Теперь программисты могли обращаться к переменным по именам, вызывать циклы и условные операторы.

Кто придумал автокод

Первый автокод был разработан Аликом Гленни в 1952 году для компьютера Mark I. Гленни работал в Манчестерском университете, и за свою жизнь успел приложить руку к множеству открытий в мире IT.

К примеру, вместе с Аланом Тьюрингом, знаменитым британским математиком, Гленни разработал компьютер Mark I, который был одним из первых компьютеров, хранящих программу для него прямо на борту. 

Manchester Mark I
Manchester Mark I

Первая версия Mark I была представлена в 1949 году, и именно для этого компьютера Гленни разработал высокоуровневый язык. Дело в том, что работать на Mark I было даже сложнее, чем на прочих компьютерах той поры, хотя все они были огромными шкафами без всякого интерфейса и принимали перфокарты. 

Чтобы облегчить работу себе и коллегам, Гленни придумал первый современный язык программирования, который компилировался компьютером. При этом Гленни отмечал, что потеря эффективности автокода по сравнению с машинным языком составляла не более 10%.

Вот, как выглядел автокод Гленни:

			c@VA t@IC x@½C y@RC z@NC
INTEGERS +5 →c           # Put 5 into c
      →t                 # Load argument from lower accumulator
                         # to variable t
   +t     TESTA Z        # Put |t| into lower accumulator
   -t
          ENTRY Z
SUBROUTINE 6 →z          # Run square root subroutine on
                         # lower accumulator value
                         # and put the result into z
  +tt →y →x              # Calculate t^3 and put it into x 
  +tx →y →x
+z+cx   CLOSE WRITE 1    # Put z + (c * x) into
                         # lower accumulator
                         # and return
		

После работы в Манчестере, Гленни перешел в Исследовательский институт атомного оружия, где в начале 60-х годов разрабатывал компиляторы для FORTRAN и компьютеров IBM. 

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

Автокодов была целая куча. Все дело в том, что они разрабатывались под конкретные ЭВМ, потому что все они были устроены по-разному. Если Гленни создал свой автокод для Mark I, то для IBM он бы уже не работал.

Примеры программ на Автокоде Гленни

Пример простой программы на Автокоде Гленни, складывающей два числа:

			LOAD A, 5  // Загрузить число 5 в регистр A
ADD A, 3   // Добавить число 3 к значению в регистре A
STORE A, B // Сохранить результат в регистр B
		

Пример цикла на Автокоде Гленни, вычисляющего факториал числа:

			LOAD A, 1 // Загрузить число 1 в регистр A
LOAD B, 5 // Загрузить число 5 в регистр B
LOAD C, 1 // Загрузить число 1 в регистр C

LOOP:
  MUL A, C  // Умножить значение в регистре A на значение в регистре C
  INC C     // Увеличить значение в регистре C на 1
  CMP C, B  // Сравнить значение в регистре C с значением в регистре B
  JLE LOOP  // Перейти к метке LOOP, если значение в регистре C меньше или равно значению в регистре B

STORE A, D // Сохранить результат в регистр D

		

Пример условной конструкции на Автокоде Гленни, проверяющей четность числа:

			LOAD A, 10   // Загрузить число 10 в регистр A
DIV A, 2     // Разделить значение в регистре A на 2
MOD A, B     // Получить остаток от деления и сохранить в регистр B
CMP B, 0     // Сравнить значение в регистре B с 0
JNZ ODD      // Перейти к метке ODD, если значение в регистре B не равно 0
// код, выполняющийся в случае, если число четное
JMP END      // Перейти к метке END
ODD:
// код, выполняющийся в случае, если число нечетное
END:
		

Что общего между автокодами и современными языками программирования

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

  1. Автокоды поддерживали абстракции. Также они включали в себя синтаксические конструкции для работы с данными, операциями и структурами.
  2. У автокодов была схожая с современными языками программирования синтаксис и структура.
  3. Поздний автокод можно было переносить на разные платформы. Его можно было запускать на разных компьютерах, и он работал без изменений.
  4. Автокод предлагал оптимизацию и определение типов данных, которые делали код эффективнее. Все, как в современных языках программирования.
  5. Автокод, как и современные языки, в конце концов стал модульным: его можно было использовать в разных проектах и интегрировать с библиотеками и фреймворками. Автокод можно было поделить на функции и модули, чтобы перенести в другие проекты.

Немного о судьбе Алика Гленни

После того, как Гленни покинул Манчестерский университет, разработка автокода не закончилась. Уже в 1955 году Тони Брукер представил собственную версию автокода для того же Mark I. 

Позже Брукер написал научную статью, в которой не стал упоминать Гленни как одного из людей, который приложил руку к созданию автокода. 

В Википедии статья про Гленни ограничивается парой абзацев. В Британнике у Алика Гленни нет даже отдельной статьи, только одно упоминание.

Он умер в 2003 году.

760