stringtranslate.com

Автокод

Автокод — название семейства «упрощенных систем кодирования», позже названных языками программирования , разработанных в 1950-х и 1960-х годах для серии цифровых компьютеров в университетах Манчестера , Кембриджа и Лондона . Автокод был общим термином; автокоды для разных машин не обязательно были тесно связаны, как, например, разные версии одного языка Фортран .

Сегодня этот термин используется для обозначения семейства ранних языков, произошедших от систем автокодирования Manchester Mark 1 , которые в целом были похожи. В 1960-х годах термин «автокодеры» использовался в более общем смысле для обозначения любого языка программирования высокого уровня, использующего компилятор . [1] Примерами языков, называемых автокодами, являются COBOL и Fortran . [2]

Автокод Гленни

Первый автокод и его компилятор были разработаны Аликом Гленни в 1952 году для компьютера Mark 1 в Манчестерском университете и, по мнению некоторых, являются первым компилируемым языком программирования. Его главной целью было повышение понятности программирования машин Mark 1, которые были известны своим особенно сложным машинным кодом. Хотя полученный язык был намного понятнее, чем машинный код, он все же сильно зависел от машины. [3]

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

c@VA t@IC x@½C y@RC z@NCЦЕЛЫЕ ЧИСЛА +5 →c # Поместите 5 в c →t # Загрузка аргумента из нижнего аккумулятора # в переменную t +t ТЕСТА Z # Поместите |t| в нижний аккумулятор ВХОД ZПОДПРОГРАММА 6 →z # Запустить подпрограмму извлечения квадратного корня # нижнее значение аккумулятора # и поместим результат в z +tt →y →x # Вычисляем t^3 и помещаем его в x +tx →y →x+z+cx CLOSE WRITE 1 # Поместите z + (c * x) в # нижний аккумулятор # и вернуться

В руководстве пользователя компилятора Autocode Glennie указано, что «потеря эффективности составляет не более 10%». [4]

Влияние Autocode Гленни на привычки программирования других пользователей из Манчестера было незначительным. Об этом даже не упоминалось в статье Брукера 1958 года под названием «Программы автокодирования, разработанные для компьютеров Манчестерского университета».

Марк 1 Автокод

Второй автокод для Mark 1 был запланирован в 1954 году и разработан Р. А. Брукером в 1955 году и назывался «Автокод Mark 1». Язык был почти машинонезависимым и имел арифметику с плавающей запятой, в отличие от первого. С другой стороны, он допускал только одну операцию в строке, предлагал мало мнемонических имен и не имел возможности определять пользовательские подпрограммы. [5]

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

 п1 = 1 1 vn1 = я читаю ввод в v[n[1]] п1 = п1 + 1 j1,11 ≥ n1 переходит в 1, если n[1] ≤ 11

Autocode Брукера устранил две основные трудности программиста Марка 1: масштабирование и управление двухуровневым хранилищем. В отличие от своего предшественника, он активно использовался. [6]

Более поздние автокоды

Брукер также разработал автокод для Ferranti Mercury в 1950-х годах совместно с Манчестерским университетом.Mercury Autocode имел ограниченный набор переменных az и a'-z' и в некотором смысле напоминал ранние версии более позднего языка Dartmouth BASIC . Он предшествовал ALGOL , не имел понятия стеков и, следовательно, не имел рекурсии или динамически выделяемых массивов . Чтобы преодолеть относительно небольшой размер хранилища, доступного на Mercury, большие программы были написаны как отдельные «главы», каждая из которых представляла собой наложение . Требовались определенные навыки, чтобы свести к минимуму трудоемкую передачу контроля между отделениями. Эта концепция наложения барабана под контролем пользователя стала распространенной, пока виртуальная память не стала доступна в более поздних машинах. Немного другие диалекты Mercury Autocode были реализованы для Ferranti Atlas (в отличие от более позднего Atlas Autocode ) и диапазонов ICT 1300 и 1900 .

Версия для EDSAC 2 была разработана Дэвидом Хартли из математической лаборатории Кембриджского университета в 1961 году. Известная как EDSAC 2 Autocode, она была прямой разработкой Mercury Autocode, адаптированной к местным условиям, и была известна своей оптимизацией объектного кода и исходным кодом. языковая диагностика, которая была передовой для того времени. Версия была разработана для преемника Titan (прототип компьютера Atlas 2) в качестве временной меры, пока разрабатывался более продвинутый язык, известный как CPL . CPL так и не был завершен, но дал начало BCPL (разработанному М. Ричардсом), который, в свою очередь, привел к B и, в конечном итоге , C. Atlas Autocode — современное, но отдельное направление разработки, разработанное для машины Atlas 1 Манчестерского университета.

Рекомендации

  1. ^ Лондон, Кейт (1968). «4. Программирование». Введение в компьютеры (1-е изд.). Лондон: Фабер и Фабер Лимитед. п. 184. СБН 571085938. Языки программирования «высокого» уровня часто называют автокодами, а процессорную программу — компилятором.
  2. ^ Лондон, Кейт (1968). «4. Программирование». Введение в компьютеры (1-е изд.). Лондон: Фабер и Фабер Лимитед. п. 186. СБН 571085938. Два языка программирования высокого уровня, которые можно использовать здесь в качестве примеров для иллюстрации структуры и назначения автокодов, — это COBOL (общий бизнес-ориентированный язык) и FORTRAN (формальный перевод).
  3. ^ Кнут, с. 42-43
  4. ^ Кнут, с. 48
  5. ^ Кнут, с. 63-64
  6. ^ Кнут, с. 65

Источники

дальнейшее чтение