Автокодирование - Autocode
Автокодирование это название семейства «упрощенных систем кодирования», позже названного языки программирования, разработанный в 1950-х и 1960-х годах для серии цифровые компьютеры в университетах Манчестер, Кембридж и Лондон. Автокод был общим термином; автокоды для разных машин не обязательно были тесно связаны, как, например, разные версии одного языка Фортран.
Сегодня этот термин используется для обозначения семьи ранних языков, произошедших от Манчестер Марк 1 системы автокодирования, которые в целом были похожи. В 1960-е годы термин автокодеры использовался в более общем смысле для обозначения любого язык программирования высокого уровня с помощью компилятор.[1] Примеры языков, называемых автокодами: КОБОЛ и Фортран.[2]
Автокод Гленни
Первый автокод и его компилятор были разработаны Алик Гленни в 1952 году для компьютера Mark 1 в Манчестерском университете и считается некоторыми первым составлен язык программирования. Его основная цель заключалась в повышении понятности программирования машин Mark 1, которые были известны своим особенно сложным машинным кодом. Хотя полученный язык был намного понятнее, чем машинный код, он все еще сильно зависел от машины.[3]
Ниже приведен пример функции автокода Гленни, которая вычисляет формулу: . В примере отсутствует необходимая инструкция масштабирования, необходимая для помещения целых чисел в переменные, и предполагается, что результаты умножения помещаются в нижний аккумулятор.
c @ VA t @ IC x @ ½C y @ RC z @ NCINTEGERS +5 → c # Поместите 5 в c → t # Загрузить аргумент из младшего аккумулятора # в переменную t + t TESTA Z # Положить | t | в нижний аккумулятор -t ENTRY ZSUBROUTINE 6 → z # Запустить подпрограмму извлечения квадратного корня на # нижнем значении аккумулятора # и поместить результат в z + tt → y → x # Вычислить t ^ 3 и поместить его в x + tx → y → x + z + cx CLOSE WRITE 1 # Поместите z + (c * x) в # нижний аккумулятор # и верните
В руководстве пользователя Glennie's Autocode Compiler упоминается, что «потеря эффективности составляет не более 10%».[4]
Влияние автокода Гленни на привычки программирования других пользователей Манчестера было незначительным. Об этом даже не упоминалось в статье Брукера 1958 года под названием «Программы автокода, разработанные для компьютеров Манчестерского университета».
Отметить 1 автокод
Второй автокод для Mark 1 планировался в 1954 году и был разработан компанией Р. А. Брукер в 1955 году и назывался «Автокод Марк 1». В отличие от первого, язык был почти машинно-независимым и имел арифметику с плавающей запятой. С другой стороны, он допускал только одну операцию на строку, предлагал несколько мнемонических имен и не имел возможности определять пользовательские подпрограммы.[5]
Пример кода, который загружает из входных данных массив чисел с плавающей запятой размером 11, будет выглядеть так:
n1 = 1 1 vn1 = I считывает ввод в v [n [1]] n1 = n1 + 1 j1,11 ≥ n1 переходит в 1, если n [1] ≤ 11
Автокод Брукера устранил две основные трудности программиста Mark 1: масштабирование и управление двухуровневым хранилищем. В отличие от своего предшественника он активно использовался.[6]
Более поздние автокоды
Брукер также разработал автокод для Ферранти Меркьюри в 1950-х годах совместно с Манчестерским университетом.Автокод Меркурия имел ограниченный репертуар переменные a-z и a'-z 'и в некотором роде напоминали ранние версии более поздних Дартмутский ОСНОВНОЙ язык. Это было раньше АЛГОЛ, не имея понятия о стеки и, следовательно, нет рекурсия или динамически распределяемый массивы. Чтобы преодолеть относительно небольшой размер магазина, доступного на Mercury, большие программы были написаны в виде отдельных «глав», каждая из которых представляла собой наложение. Требовались определенные навыки, чтобы свести к минимуму длительную передачу управления между главами. Эта концепция оверлеев от барабан под контролем пользователя стали обычным явлением, пока виртуальная память стали доступны и в более поздних машинах. Несколько другие диалекты Mercury Autocode были реализованы для Ферранти Атлас (в отличие от более поздних Атлас Автокод ) и ИКТ 1300 и 1900 ассортимент.
Версия для EDSAC 2 был разработан Дэвид Хартли из Математическая лаборатория Кембриджского университета в 1961 году. Известный как EDSAC 2 Autocode, он был непосредственной разработкой Mercury Autocode, адаптированной к местным условиям, и был известен своей оптимизацией объектного кода и диагностикой исходного языка, которые были продвинутыми для того времени. Для преемника была разработана версия Титан (прототип компьютера Атлас 2) в качестве временной остановки, в то время как более продвинутый язык, известный как CPL разрабатывался. CPL так и не был завершен, но породил BCPL (разработанный М. Ричардсом), что, в свою очередь, привело к B и в конечном итоге C. Современная, но отдельная ветка развития, Атлас Автокод был разработан для Манчестерского университета Атлас 1 машина.
использованная литература
- ^ Лондон, Кит (1968). «4, Программирование». Введение в компьютеры (1-е изд.). 24 Russell Square London WC1: Faber and Faber Limited. п. 184. SBN 571085938.
Языки программирования «высокого» уровня часто называют автокодами, а программу процессора - компилятором.
CS1 maint: location (ссылка на сайт) - ^ Лондон, Кит (1968). «4, Программирование». Введение в компьютеры (1-е изд.). 24 Russell Square London WC1: Faber and Faber Limited. п. 186. SBN 571085938.
Два языка программирования высокого уровня, которые могут быть использованы здесь в качестве примеров для иллюстрации структуры и назначения автокодов, - это COBOL (Common Business Oriented Language) и FORTRAN (Formular Translation).
CS1 maint: location (ссылка на сайт) - ^ Кнут, стр. 42-43
- ^ Кнут, стр. 48
- ^ Кнут, стр. 63–64
- ^ Кнут, стр. 65
Источники
- Кэмпбелл-Келли, Мартин (1980). «Programming the Mark 1: Early Programming Activity в Манчестерском университете». Анналы истории вычислительной техники. IEEE. 2 (2): 130–167. Дои:10.1109 / MAHC.1980.10018.
- Гарсия Камареро, Эрнесто (1961). AUTOCODE un sistema simpleificado de codificacion para la computadora MERCURY (на испанском). Университет Буэнос-Айреса. п. 70.
- Лондон, Кит (1968). Введение в компьютеры. п. 261.
- Knuth, Donald E .; Пардо, Луис Трабб (1976). «Раннее развитие языков программирования». Стэнфордский университет, факультет компьютерных наук.
дальнейшее чтение
- Автокоды: взгляд пользователя
- Брукер, Р. А. (1958-01-01). «Программы Autocode, разработанные для компьютеров Манчестерского университета». Компьютерный журнал. 1 (1): 15–21. Дои:10.1093 / comjnl / 1.1.15. ISSN 0010-4620.
- Брукер, Р. А. (1958-03-01). «Дополнительные возможности автокодирования для компьютера Manchester (Mercury)». Компьютерный журнал. 1 (3): 124–127. Дои:10.1093 / comjnl / 1.3.124. ISSN 0010-4620.
- Кларк, Б. (1959-04-01). "Автокод Пегаса". Компьютерный журнал. 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. SBN 356-02201-3. (viii + 64 страницы)