Сбер вакансии Backend
Сбер вакансии Backend
Сбер вакансии Backend
Написать пост

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

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

942 открытий3К показов

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

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

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

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

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

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

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

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

Автокод Гленни. Каким был первый высокоуровневый язык программирования 1
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 году.

Следите за новыми постами
Следите за новыми постами по любимым темам
942 открытий3К показов