Автокод
Автокод — название семейства «упрощенных систем кодирования», позже названных языками программирования , разработанных в 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 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
В руководстве пользователя компилятора Autocode Glennie указано, что «потеря эффективности составляет не более 10%». [4]
Влияние Autocode Гленни на привычки программирования других пользователей из Манчестера было незначительным. Об этом даже не упоминалось в статье Брукера 1958 года под названием «Программы автокодирования, разработанные для компьютеров Манчестерского университета».
Марк 1 Автокод
[ редактировать ]Второй автокод для Mark 1 был запланирован в 1954 году и разработан Р. А. Брукером в 1955 году и назывался «Автокод Mark 1». Язык был почти машинонезависимым и имел арифметику с плавающей запятой, в отличие от первого. С другой стороны, он допускал только одну операцию в строке, предлагал мало мнемонических имен и не имел возможности определять пользовательские подпрограммы. [5]
Пример кода, который загружает массив чисел с плавающей запятой размером 11 из входных данных, будет выглядеть так:
n1 = 1 1 vn1 = I reads input into v[n[1]] n1 = n1 + 1 j1,11 ≥ n1 jumps to 1 if 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 Манчестерского университета .
Ссылки
[ редактировать ]- ^ Лондон, Кейт (1968). «4. Программирование». Введение в компьютеры (1-е изд.). Лондон: Фабер и Фабер Лимитед. п. 184. СБН 571085938 .
Языки программирования «высокого» уровня часто называют автокодами, а процессорную программу — компилятором.
- ^ Лондон, Кейт (1968). «4. Программирование». Введение в компьютеры (1-е изд.). Лондон: Фабер и Фабер Лимитед. п. 186. СБН 571085938 .
Два языка программирования высокого уровня, которые можно использовать здесь в качестве примеров для иллюстрации структуры и назначения автокодов, — это COBOL (общий бизнес-ориентированный язык) и FORTRAN (формальный перевод).
- ^ Кнут, с. 42-43
- ^ Кнут, с. 48
- ^ Кнут, с. 63-64
- ^ Кнут, с. 65
Источники
[ редактировать ]- Кэмпбелл-Келли, Мартин (1980). «Программирование Mark 1: раннее программирование в Манчестерском университете». Анналы истории вычислительной техники . 2 (2). ИИЭР: 130–167. дои : 10.1109/MAHC.1980.10018 . S2CID 10845153 .
- Гарсиа Камареро, Эрнесто (1961). AUTOCODE — упрощенная система кодирования для компьютера MERCURY (на испанском языке). Университет Буэнос-Айреса. п. 70.
- Лондон, Кейт (1968). Введение в компьютеры . п. 261.
- Кнут, Дональд Э.; Пардо, Луис Трабб (1976). «Раннее развитие языков программирования». Стэнфордский университет, факультет компьютерных наук.
Дальнейшее чтение
[ редактировать ]- Автокоды: взгляд пользователя
- Брукер, РА (1 января 1958 г.). «Программы автокодирования, разработанные для компьютеров Манчестерского университета» . Компьютерный журнал . 1 (1): 15–21. дои : 10.1093/comjnl/1.1.15 . ISSN 0010-4620 .
- Брукер, Р.А. (1 марта 1958 г.). «Дальнейшие возможности автокодирования для компьютера Manchester (Mercury)» . Компьютерный журнал . 1 (3): 124–127. дои : 10.1093/comjnl/1.3.124 . ISSN 0010-4620 .
- Кларк, Б. (1 апреля 1959 г.). «Автокод Пегаса» . Компьютерный журнал . 1 (4): 192–195. дои : 10.1093/comjnl/1.4.192 . ISSN 0010-4620 .
- Бэррон, Дэвид Уильям ; и др. (1967). Руководство по программированию Titan Autocode . Кембридж, Математическая лаборатория университета.
- Бэррон, Дэвид Уильям (1968) [1967]. «1.5. Рекурсия в функциональном программировании». В Гилл, Стэнли (ред.). Рекурсивные методы в программировании . Компьютерные монографии Макдональда (1-е изд.). Лондон: Macdonald & Co. (Publishers) Ltd., с. 8. СБН 356-02201-3 . (viii+64 страницы)