Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 16
Текст из файла (страница 16)
Подобная проблема возникает и при удалении команды. Правда. в этом случае в машинных языках часто используется команда "холостая операция", которой можно заменить удаленную команду, не нарушив при этом обшей структуры программы. Эти стандартные проблемы. существующие во всех машинных языках. и были основной причиной изобретения ассемблеров и языков ассемблера. Кроме того. в то время задачи, связанные с программированием, были в основнол~ вычислительнылш. Для их решения требовалось выполнять арифметические операции над числами с плавающей точкой, а также операции индексации лля более удобного использования массивов. Теи не менее, ни одна из указанных возможностей не была включена в архитектуру компьютеров конца 1940-х и начала 1950-х голов.
Для устранения этих недостатков, естественно. нужно было разрабатывать языки более высокого уровня. 2.2.1. Язык ЗЬогФ Соде Первый из этих новых языков, названный Бпоа Соде. был разработан Джоном Мочли ()о!зп Мацсп(у) в 1949 году для компьютера В!НАС. Позднее язык %оп Соде был перснесен на компьютер (ЛЯ!ЧАС! и в течение нескольких лет был одним из основных средств программирования этих машин.
Несмотря на то что об исходном языке Б1юп Соде известно очень мало (полное его описание никогда не публиковазось). сохранилось руководство по программированию для версии ()Н)ЧАС! (Кепппй1оп-Кап4. 1952!. Разумным будет предположить, что эти две версии были очень похожи. Слова языка ()Х!ЧАС! состояли из 72 бит. сгруппированных в !2 шестибитовых байт. Язык $!зоп Соде состоял из закодированных версий математических выражений. которые затем предстояло вычислять. Команды представляли собой двухбайтовые вели- 2.2. Минимапьнов программированив на аппаратном уровнв: псевдокоды 61 чины. и большинство выражений умещались в одном слове.
Вот несколько примеров команд языка Бпоп Соде: Об модуль 07 08 пауза С9 ( 1п (и+2)-я степень 2п корень (п+2)-й степени 4п если <= п 58 печать и табуляция 24 l Переменные. или ячейки памяти, именовались двухбайтовыми кодами, так как ячейки памяти должны были использоваться как константы. Например, величины ХО и уО могли быть переменными.
Оператор хс = 8()йт(дйб (УО) ) можно было закодировать в слово 00 ХО 03 20 Об уО. Заглавный код 00 использовался в качестве пополнения лля заполнения слова. Интересно, что команды умножения не существовало; на эту операцию указывало простое размещение двух операторов рядом. как это принято записывать в алгебре. Язык 5)!оп Соде не был перевелен в машинные коды; он был реализован с помощью чистого интерпретатора.
Со временем подобный процесс был назван автоматическим программированием. Он сильно упростил процесс программирования, правда, за счет времени. затрачиваемого на выполнение програл1мы. Интерпретация языка Бпоп Соде была приблизительно в 50 раз медленнее, чем интерпретация машинных кодов. 2.2.2. Система Зреедсайззе 62 Глава 2. Обзор основных языков программирования В это время в лругих местах были разработаны императивные системы, которые расширяли машинный язык, пополняя его действиями над числами с плавающей точкой. Примером такой системы может служить система Бреедсод(пя, разработанная Джоном Бэкусом для компьютера 1ВМ 70! (Бэкус, 1954).
Интерпретатор системы Бреедсод)пй эффективно преобразовывая 701-й компьютер в виртуальную трехадресную вычислительную машину, выполняющую действия над числами с плавающей точкой. Система включала в себя псевдокоманды, выполняющие четыре арифметические операции нал числами с плавающей точкой, а также такие операции, как извлечение квадратного корня. вычисление синуса, арктангеиса, экспоненты и логарифма. Условные и безусловные переходы и преобразования авала-вывода также являлись частью виртуальной архитектуры.
Для того чтобы прелставить себе ограниченность подобной системы, примите во внимание то, что после загрузки интерпретатора оставалось всего 700 слов доступной оперативной памяти, и команда сложения двух чисел требовала 4,2 миллисекунды на ее выполнение. С другой стороны. система Бреедсод(пя солержала такую новую возможность. как автоматическое увеличение индексных регистров. В аппаратном обеспечении эта возможность не реализовывалась вплоть до появления в 1982 году компьютеров ())ч)ЧАС 1 ! 07. Благодаря наличию таких свойств умножение матриц в системе Бреедсод(пй можно было выполнить. затратив всего 12 команд. Бэкус утверждал, что задача.
на программирование которой в машинных кодах уйдет две недели, при использовании системы Бреедсойпл может быть решена за несколько часов. 2.2.3. Система "компиляции" ЦМ!ЧАС Межлу 195! и !953 годал>и команда. возглавляемая Грейс Хоппер (Огасе Норрег). создала на компьютере (ЛЧ!ЧАС серию "компилирующих" систем. названных А-О. А-! и А-2, в основе которых лежали машинные колы. реализующие псевлоколь>.
аналогич»о тому, как язык ассемблера рватизует макросы. Исходная программа. написанная на псевдокоде для этих "компиляторов", была еше слишком примитивной. хотя э>о уже было значительным усовершенствованием по сравнению с машинным колом. поскольк! сделало исходные программы короче. Независимо от этой команды в 1952 голу подобный подход был прелложен Уилксом (%!й>ез). 2.2.4. Смежная работа Практически в то же время были разработаны и др>тие средства облегчения программирования. В Кембриджском университете Дэвид Дж.
Уилер (Рак!д ). %(>ее!сг) разработал метод использования блоков перемещаемых адресов для частичного решения задачи абсолютной адресации (%)>ее1ег. ! 950), а позднее Морис В. Уилкис (Маоксе Ч. '>ч"!йсез) (также в Кембрилже) осуществил эту идею при разработке программы ассемблера, которая могла бы объединять избранные подпрограммы и распределять память (%Жез е! а1., 1951. 1957). Это было действительно важное и фундаментальное достижение. Кроме того, мы должны упомянуть, что языки ассемблера.
совершенно отличавшиеся от описанных псевлоколов, хотя и эволюционировали на протяжении начала 1950-х годов, но на разработку языков высокого уровня не оказали существенного влияния. 2.3. Компьютер 1ВМ 704 и язык ГОВТВАН Безусловно. одно из величайших постижений в вычислительной технике обязано своим появлением внедрению в 1954 году кол>пьютера 1ВМ 704.
поскольку возможности именно этой машины полтолкнули к разработке языка гОКТКАХ. Мо.кно утвержла>ь. что если бы не корпорация 1ВМ со своим компьютером 1ВМ 704 и языком гОКТРАК, то очень скоро появилась бы какая-нибудь другая организация, имеющая подобный компьютер и соответствующий язык высокого уровня. Тем не к>енее. первой была все .ке ь рпорация 1ВМ, которая не только предвидела такое развитие событий, но и на>п а рос> !- сы для того, чтобы взяться за это пело. 2.3.1.
Историческая ретроспектива Одной из основных причин того, что императивные системы с конца 1940-х до середины 1950-х голов считались вполне приемлемыми. было отсутствие на существ)ю>них компьютерах аппаратных средств, выполняющих действия над числами с плаваюшси точкой. Подобные действия должны были моделироваться на программнол> уровне. по значительно увеличивало время их выполнения. Из-за того. что на программн!ю обработку чисел с плавающей точкой уходило очень большое время работы процессора. затраты на интерпретацию и молелирование индексной адресации были относительно несущественными.
Пока действия нал числами с плавающей точкой выполнялнсь на программном уровне, расходы на интерпретацию были допустимыми. Впрочем. мноп>с программисты того времени никогда не использовали системы интерпреташш. отдавая 63 2.3. Компьютер! ВМ 704 и язык гОкТкАг( предпочзение эффективному ручному программированию на машинных кодах. Сообщение о появлении системы 1ВМ 704. нмеюшей на аппаратном уровне как индексную адресацию. так и команды для работы с плаваюшей точкой, возвестило о конце эры интерпретации (по крайней мере. в области научных вычислений).
1)ссмотря на то что язык ГОКТКА)Ч считается первым компилируемым языком высокого уровня. вопрос о том. кто действительно заслуживает чести быть названным создазс.юм первого подобного языка. все еше остается открытым. Кнут (Кпцгп) и Пардо ! Рагдо) (1977) приписывают эту честь Алику Гленни (Айсй Е. 61епие) за создание компилятора Ацгосог)е для компьютера Магй 1 в Манчестере. Гленни разработал этот компиля гор в британском Форт-Холстеле (Гоп На1згеад).