Автокод — название семейства «упрощенных систем кодирования», позже названных языками программирования , разработанных в 1950-х и 1960-х годах для ряда цифровых компьютеров в университетах Манчестера , Кембриджа и Лондона . Автокод был общим термином; автокоды для разных машин не обязательно были тесно связаны, как, например, разные версии одного языка Fortran .
Сегодня этот термин используется для обозначения семейства ранних языков, произошедших от систем автокодеров Manchester Mark 1 , которые в целом были похожи. В 1960-х годах термин автокодеры использовался в более общем смысле, как для обозначения любого языка программирования высокого уровня, использующего компилятор . [1] Примерами языков, называемых автокодами, являются COBOL и Fortran . [2]
Первый автокод и его компилятор были разработаны Аликом Гленни в 1952 году для компьютера Mark 1 в Манчестерском университете и, по мнению некоторых, являются первым компилируемым языком программирования. Его главной целью было повышение понятности программирования машин Mark 1, которые были известны своим особенно сложным машинным кодом. Хотя полученный язык был намного понятнее машинного кода, он все еще был очень машинно-зависимым. [3]
Ниже приведен пример функции Autocode Гленни, которая вычисляет формулу: . В примере опущена необходимая инструкция масштабирования, необходимая для помещения целых чисел в переменные, и предполагается, что результаты умножения помещаются в нижний аккумулятор.
c@VA t@IC x@½C y@RC z@NCЦЕЛЫЕ ЧИСЛА +5 →c # Помещаем 5 в c →t # Загрузить аргумент из нижнего аккумулятора # к переменной t +t TESTA Z # Поместить |t| в нижний аккумулятор -т ВХОД ZПОДПРОГРАММА 6 →z # Запустить подпрограмму квадратного корня # меньшее значение аккумулятора # и поместить результат в z +tt →y →x # Вычислить t^3 и подставить его в x +тх →у →х+z+cx ЗАКРЫТЬ ЗАПИСЬ 1 # Поместить z + (c * x) в # нижний аккумулятор # и вернуться
В руководстве пользователя Glennie's Autocode Compiler указано, что «потеря эффективности не превышает 10%» [4] .
Влияние Autocode Гленни на привычки программирования других пользователей Манчестера было незначительным. Он даже не был упомянут в статье Брукера 1958 года под названием «Программы Autocode, разработанные для компьютеров Манчестерского университета».
Второй автокод для Mark 1 был запланирован в 1954 году и разработан RA Brooker в 1955 году и назывался "Mark 1 Autocode". Язык был почти машинно-независимым и имел арифметику с плавающей точкой, в отличие от первого. С другой стороны, он допускал только одну операцию на строку, предлагал мало мнемонических имен и не имел возможности определять пользовательские подпрограммы. [5]
Пример кода, который загружает массив размером 11 чисел с плавающей точкой из входных данных, будет выглядеть следующим образом:
н1 = 1 1 vn1 = I считывает входные данные в v[n[1]] н1 = н1 + 1 j1,11 ≥ n1 переходит к 1, если n[1] ≤ 11
Автокод Брукера устранил две основные трудности программиста Марка 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 Манчестерского университета .
Языки программирования «высокого» уровня часто называют автокодами, а программу процессора — компилятором.
Два языка программирования высокого уровня, которые можно использовать здесь в качестве примеров для иллюстрации структуры и назначения автокодов, — это COBOL (общий бизнес-ориентированный язык) и FORTRAN (формульный перевод).