Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 17
Текст из файла (страница 17)
приналлежашем Королевскому научнг -исследовательскому обшеству Вооруженных Сил (Коуа) Аппапзепгв Кезеагс)л ЕлгаЫ)з)згпепг). В рабочем состоянии компилятор был с сентября 1952 года. Но Джон Бэк)с (Иехе1Ыац 1981) прилержнвается мнения. что созданный Гленни компилятор Ацгосоде был настолько низкоуровневым и машинно-ориентированным, что его нельзя считать в полной мере системой компиляции. Бэкус считает. что первыми авторами компилятора нужно считать Ленннга (Еап(п8) и Цирлера (Бег!ег) из Массачусетского технологического института (М!Т вЂ” Маззаспцзепз 1пзцшге оГ ТесЛпо!ойу).
Система Ленинга и Цирлера (Еап(пй апг) 2(ег)ег, 1954) была первой алгебраической системой трансляции. созданной лля реализации. (1од словом "алгебраическая" мы полразуиеваем то. что эта система транслировала арифметические выражения, используя вызовы математических функций. а также содержала индексированные ссылки на переменные. Реализована эта система была на принадлежащем институту М1Т компьютере И Ыг)ит!пд. который летом 1952 гола существовал в форме экспериментального прототипа. а к маю 1953 года принял форму, более пригодную для использования. Для колировання каждой формулы или выражения, встречаюшихся в программе, описываемый транслятор генерировал вызов подпрограммы.
Исходный язык был легкочитаемым. и единственными действительно машинными командами были команды ветвления. Несмотря на то что работа по созданию этого транслятора предшествовала работе по созданию языка ГОКТКА)л), она так и не вышла за рамки Массачусетского технологическо- ~ о института. Несмотря на эти ранние работы, первым компилируемым языком высокого уровня, получившим широкое распространение. стал язык ГОКТКА)л), хронология развития которого приводится в следуюших подразделах. 2.3.2. Процесс разработки Планы по разработке языка ГОКТКА)л) сушествовали еше до извешения о создании систел1ы 1ВМ 704 в мае 1954 года. Работавшие в корпорации 1ВМ Джон Бэкус н его группа в ноябре 1954 года опубликовали отчет, озаглавленный "Тпе 1ВМ Ма!легла!)са! ГОКпа1а ТКА)чз(а!(п Бузге~п: ГОКТКАИ" (1ВМ, 1954). В этом документе описывается первая версия языка ГОКТКАН, которую мы называем ГОКТКА)л) О, и которая предшествовала его реализашш.
В работе смело утверждатось. что язык ГОКТКА)4 так же эффективен. как программы. закодированные вручную, и программировать на нем так же просто. как в системе интерпретируемых псевдокодов. Еше одной вспышкой оптимизма в данном лак)менте было утверждение. что язык ГОКТКА)Ч булет устранять ошибки программирования и содержать систему отлалки.
На основе этих предпосылок в первом Глава 2. Обзор основных языков программирования компиляторе языка ГОКТКАН предусматривалась лишь незначительная проверка наличия синтаксических ошибок. Язык ГОКТКАХ разрабатывался в следующей обстановке. 1. Компьютеры все еше были небольшими. медленными и относительно ненадежными. 2. Использовались кочпьютеры в основном для научных расчетов. 3. Не сушествовачо эффективных способов программирования компьютеров. 4. Из-за относительно высокой стоимости компьютеров по сравнению с оплатой работы программистов основной задачей первых компиляторов языка ГОКТКА1Ч была высокая скорость выполнения сгенерированного объектного кола. В такой среде и формировались характеристики ранних версий языка ГОКТКАН.
2.3.3. Обзор языка ГОкТвеАН! Язык ГОКТКАХ 0 вилоизк1енялся на протяжении всего периола реализации. начавшегося в январе ! 955 года и завершившегося выходом компилятора в апреле 1957 года. Реализованный язык. который мы называем ГОКТКАХ 1, описан в первом руководстве пользователя "Ргоягаттег'з ЯеГегепсе Мапцар'. опубликованном в октябре 1956 года (!ВМ, 1956). В языке ГОКТКАН! солержалось форматирование ввода-вывода. имена переменных.
которые не должны были превышать шести символов (в ГОКТКА)ч 0— двух), определяемые пользователем подпрограммы, которые, правда, не могли компилироваться раздельно, условный оператор 1 Г и цикл 00. Язык ГОКТКАХ 0 содержал логический оператор 'Г, оперировавший с булевскими выражениями. в которых операторы отношений записывались в их алгебраической форме,— например. использовался знак ">" для обозначения отношения 'больше". Поскольку алфавит компьютера 1ВМ 704 не содержал таких символов, как ">", то в лальнейшем от этих операторов отношения нужно было отказаться. Машина содержала трех- вариантную команду ветвления, основанную на сравнении величины из ячейки памяти с величиной в регистре.
поэтому исходный логический оператор 1 Г был заменен арифметическим, имевшим форму: 1Г (арифметическое выражение) !ч1, Л2, 1!3 Здесь с помошью ы1, л!2 и ЛЗ обозначены метки операторов. Если значение выражения оказывалось отрицательным. то выполнялся переход на мегкч Б1. если оно равнялось нулю — на метку К2, а если было положительным — на метку НЗ. Этот оператор и по сегодняшний день является частью языка ГОКТКАЛ1. Оператор цикла языка ГОКТКАХ 1 имел следуюшую структуру: 00 Л11 переменнвл =. гервое значение, госледнее значение Здесь г!1 — метка последнего оператора цикла, а первым считался оператор. следуюший за оператором 00.
Помимо оператора 1Г. компьютер 1ВМ 704 имел отдельную команду лля реализации оператора 00. Поскольку эта команда бьша создана лля циклов с последуюшей проверкой условия, оператор 00 языка ГОКТКАХ 1 также был сконструирован полобным образом. Цикл с предварительной проверкой условия мог быть реачизован на компьютере 1ВМ 704. но это потребовало бы введения дополнительной машинной команлы. что вви- 2.3. Компьютер! ВМ 704 и язык ГОКТКАй) ду ориентированности структуры языка ГОКТКА)Ч на л~аксимальную эффективность и стало причиной отказа от его реализации.
Все управляющие операторы языка ГОКТКА)Ч 1 основывались на командах компьютера 1ВМ 704. Сейчас уже не ясно, была ли форма управляющих структур языка ГОКТКА)Ч 1 навязана конструкторами компьютера 1ВМ 704, или же разработчики языка ГОКТКА)Ч 1 предложили использовать такую форму команд в компьютере 1ВМ 704. В языке ГОКТКА)Ч 1 не существовало операторов, определяющих типы данных. Считалось. что переменные, начинавшиеся с букв 1, ~, К, Ь, М и ь', принадлежат к типу целых чисел, тогла как все остальные подразумевались числами с плавающей точкой. Такая условность при выборе букв связана с тем, что тогда целые числа использовались преимущественно в качестве индексов, а ученые, как правило, использовали для этой цели буквы /,7' и 1. Еше трн буквы были щедро добавлены разработчиками языка ГОКТКА)Ч. Наиболее дерзким заявлением группы разработчиков языка ГОКТКА)Ч в процессе работы над языком было то, что машинные коды.
порождаемые компилятором, будут почти столь же эффективными, что и написанные вручную. Эти заявления более, чем чтолибо другое, способствовали скептическому отношению со стороны потенциальных пользователей и препятствовали возникновению значительного интереса к языку до его фактического выпуска. Тем не менее, всех удивило то, что создатели языка ГОКТКА)Ч практически достигли поставленной цели с точки зрения эффективности. Большая часть 18 человеко-лет напряженной работы по созданию первого компилятора была посвящена оптимизации, но результаты были в высшей степени эффективными. Первый успех языка ГОКТКА)Ч отражен в обзоре, датированном апрелем 1958 года. К этому времени около половины команд, написанных для компьютеров 1ВМ 704, были реализованы в языке ГОКТКА)Ч, и это несмотря на то, что годом ранее отношение к языку со стороны вычислительного сообщества было крайне скептическим.
2.3.4. Обзор языка ГОНТАМ П Компилятор ГОКТКАХ В начал распространяться весной 1958 года. Он исправил множество ошибок системы компиляции языка ГОКТКА)Ч 1, а также добавил в язык несколько существенных свойств, важнейшим из которых была независимая компиляция подпрограмм. При отсутствии такого свойства любое изменение требовало перекомпиляции всей программы.
Отсутствие в языке ГОКТКА)Ч 1 возможности независимой компиляции вместе с низкой надежностью компьютера 1ВМ 704 ограничивало объем программы, который ие должен был превышать 300-400 строк (Феле!Ыац 1981). Программы. имевшие больший объем, имели мало шансов завершить компиляцию до сбоя в работе машины.
Возможность включения в программу подпрограмм, предварительно откомпилированных на машинных языках, значительно сокращала процесс компиляции. 2.3.5. Языки РОЙТЯАМ вЧ, в ОКТАВАМ 77 и ЮВТЯАМ 90 Язык ГОКТКА)Ч Ш был разработан, но так никогда и не получил широкого распространения. Язык ГОКТКА)Ч!Ч, напротив. стаз одним из самых используемых в то время языков программирования.