Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Автокод Гленни [ править ]

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

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

c @ VA t @ IC x @ ½C y @ RC z @ NCЦелые числа +5 → c # Поместите 5 в c → t # Загрузить аргумент из нижнего аккумулятора # к переменной t + t TESTA Z # Положить | t | в нижний аккумулятор -t ЗАПИСЬ ZПОДПРОГРАММА 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 году и назывался «Автокод Mark 1». В отличие от первого, язык был почти машинно-независимым и имел арифметику с плавающей запятой. С другой стороны, он допускал только одну операцию на строку, предлагал несколько мнемонических имен и не имел возможности определять пользовательские подпрограммы. [5]

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

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

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

Более поздние автокоды [ править ]

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

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

Ссылки [ править ]

  1. ^ Лондон, Кейт (1968). «4, Программирование». Введение в компьютеры (1-е изд.). 24 Russell Square London WC1: Faber and Faber Limited. п. 184. СБН. 571085938. Языки программирования «высокого» уровня часто называют автокодами, а программу процессора - компилятором.CS1 maint: location (link)
  2. ^ Лондон, Кейт (1968). «4, Программирование». Введение в компьютеры (1-е изд.). 24 Russell Square London WC1: Faber and Faber Limited. п. 186. СБН. 571085938. Два языка программирования высокого уровня, которые могут быть использованы здесь в качестве примеров для иллюстрации структуры и назначения автокодов, - это COBOL (Common Business Oriented Language) и FORTRAN (Formular Translation).CS1 maint: location (link)
  3. ^ Кнут, стр. 42-43
  4. ^ Кнут, стр. 48
  5. ^ Кнут, стр. 63–64
  6. ^ Кнут, стр. 65

Источники [ править ]

  • Кэмпбелл-Келли, Мартин (1980). «Programming the Mark 1: Early Programming Activity в Манчестерском университете». Анналы истории вычислительной техники . IEEE. 2 (2): 130–167. DOI : 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. DOI : 10.1093 / comjnl / 1.1.15 . ISSN  0010-4620 .
    • Брукер, Р.А. (1958-03-01). «Дополнительные средства автокода для компьютера Manchester (Mercury)» . Компьютерный журнал . 1 (3): 124–127. DOI : 10.1093 / comjnl / 1.3.124 . ISSN  0010-4620 .
    • Кларк, Б. (1959-04-01). "Автокод Пегаса" . Компьютерный журнал . 1 (4): 192–195. DOI : 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 страницы)