Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 24
Текст из файла (страница 24)
Исторические предпосылки 11озобно языку РОЙТЙАХ язык Р).Л разрабатывался как продукт корпорации 1ВМ. В начале 1960-х голах промышленные пользователи компьютеров сформировали два отшльиых лагеря. С точки зрения корпорации 1ВМ научные программисты могли исполь«шаз ь либо универсальный компьютер 7090, либо компьютер с ограниченными возможное ~ ями 1620. козорые выпускались указанной корпорацией. Эта группа в значительной ~специ использовала тип данных с плавающей точкой и массивы. Основным языком в их раооте был язык РОКТЙА!9. хотя параллельно рассматривались и некоторые языки а сечблера. Эти пользователи имели собственную группу 5НАКЕ и поддерживали сла«ые связи с программисзами, работавшими над коммерческими приложениями.
Для коммерческих приложений использовались большие или малые компьютеры, 1ВМ 7080 и 1ВМ 1401. Для этих приложений требовались типы данных для десятичных чисел и символьных сзрок, а также детально разработанные и эффективные свойства «вода-вывода. Данная группа пользователей использовала язык СОВО)., хотя в начале 1чоЗ гола переход с языков ассемблера на язык СОВОЕ был далек от завершения.
Эта ла1е~ ория пользователей также имела свою собственную группу пользователей О1)1ОЕ и и ~1зедка налаживала контакты с научными пользователями. В начале 1963 года проектировщики корпорации 1ВМ почувствовали, что ситуация начинаез меняться. Указанные группы двигались навстречу друг другу по путям, которые неизбежно должны были привести к возникновению проблем. Ученые начачи собиратьь большие файлы данных. требующих обработки.
Для этого нужны были изощренные и ~ффективные средства ввода-вывода, Люли же, занимавшиеся коммерческими приложениями. для построения сне~ем управления информацией начали использовать регрес«ионный анализ. что требовало чисел с плавающей точкой и массивов. Стало казаться, ч~ > внедрение комныозерной техники вскоре потребует двух отдельных компьютеров, ~«кьзерживающих два значительно отличающихся языка программирования. '>ти предчувствия вполне естественно привели к возникновению концепции разра6 1~ ки единого универсального компьютера. который бы мог выполнять как действия над числами с плавающей точкой, так и над над десятичными числами, и, следовательно, оыл бы применим и в на> ке.
и в коммерции. Так зародилась концепция серии компьютеров 1ВМ 5утлспз,'360. Наряду с этой концепцией возникла идея о языке программирования. который был бы применим и лля коммерческих, и для научных приложений. В значн|ельной степени в язык были включены возможности системного программирования и обработки списков. Следовательно. новый язык должен был заменить языки РОКТКАХ. СОВОЕ и Е!5Р. а в области систелзных приложений — еще и язык ассемблера.
88 Глава 2. Обзор основных языков программирования 2.8.2. Процесс разработки Разработка началась с образования в октябре 1963 гола корпорацией 1ВМ и гр) ппой ЗНАКЕ комитета Аг)чапсед Еапзцаяе Оеке!оршеш Сошш)пее оГ зйе ВНАКЕ ГОКТКАЫ Рго)есг. Этот новый комитет быстро собрался и сформировал подкочитет 3<-~3 Сошпипее, названный так из-за наличия в нем трех человек со стороны корпорации! ВМ и трех со стороны группы ВНАКЕ. Для разработки языка комитет 3< — >3 Сошпипее собирался на три-четыре дня через неделю.
Как и при работе комитета 5Ьоп Капае Сошш)нее. разрабатывавшего язык СОВО1 . завершение исходной разработки была запланировано на удивительно бзизкую дату. Повидимому, независимо от целей разработки языка в начале 1960-х широко распространенно мнение, что это задание может быть выполнено за три месяца. Первую версию языка РЕ/1, позже названную ГОКТКАЫ Ч1. предполагазось завершить к декабрю. что составляло менее трех месяцев со дня основания комитета. Комитет. приведя в оправдание две различные причины задержки. передвинул срок окончания работ сначата на январь, а затем и на февраль 1964 гола.
Исходная концепция разработки состояла в том. что новый язык должен был быть расширенной версией языка ГОКТКАН 1Ч. совместимой с нии. но это намерение было быстро отброшено, как и название ГОКТКА)Ч Ч1, Вплоть до 1965 года этот язык был известен как ЫР(., что являлось аббревиатурой названия 14ец Рго гашпипй (.апйцайе (новый язык программирования). Первый опубликованный отчет о языке НР!.
был предоставлен на собрании группы КУНАКЕ в марте 1964 года. Более полное описание последовало в апреле. а работоспособная версия была опубликована в декабре 1964 гола (! ВМ. 1964) группой разработчиков компилятора из выбранной для ревзизации лаооратории ! ВМ Нцгз)еу 1.аЬога1огу в Великобритании. В 1965 году. чтобы избежазь путаницы с аббревиатурой Национальной физической лаборатории (НРŠ— капова! РЬ) айса! 1аЬогазогу) в Великобритании, название языка было изменено на РЕ 1.
Если бы компилятор разрабатывался за прелелами Соединенного Королевства. название. вероятно. осталось бы прежним. 2.8.3. Обзор языка Возможно, лучшим описанием языка РЕЛ. состоящим из одного предложения. будет следующее; он содержит то. что считалось лучшими частями языка АЕОО(.
60 (рекурсия и блочная структура). языка ГОКТКА)ч 1Ч (раздельная компиляция со связью посредством глобальных данных) и языка СОВОГО 60 (структуры данных. средства ввода-выводв и генерации отчетов). а также несколько новых конструкций. каким-то обраюм соелиненных в елиное целое. Мы не будем пытаться даже в конспективной форме описать все свойства этого языка или хотя бы его наиболее противоречивыс конструкшик Вместо этого мы кратко назовем несколько вкяалов, сделанных этим языком в фонд знаний в области языков программирования.
Язык Р(Л был первым языком, имевшим следуюшие возможности. ° Программы могли порождать параллельно выполняемые задачи. Хотя сача идея была хороша. но ее реализация в языке Р1Л была скверной. ° Появилась возможность выявления и обработки 23 видов различных исключительных ситуаций или ошибок в процессе выполнения. 2.8. Все дпя всех: язык Р(/1 ° Процелуры могли использоваться рекурснвно, но для более эффективного программирования нерекурснвных процедур эта возможность могла быть заблокирована. ° В качестве типа данных были включены указатели.
° Появилась возможность обращаться к пересекающимся разделам массивов. Например, к третьей строке матрицы можно было обращаться как к вектору. 2.$.4. Оценка Любая оценка языка Р1Л должна начинаться с упоминания о претенциозности работ по его созданию. Оглядываясь назад, кажется наивным полагать, что такое количество конструкций можно было успешно объединить вместе. Тем не менее, это суждение следует смягчить признанием того, что опыт разработки языков в то время был очень небольшим. Вообще говоря, структура языка Р1Л была основана на допущения, что любая полезная конструкцня, которая может быть реализована, должна включаться в язык, прн этом вопросу, как большое количество функций сможет ужиться вместе, уделялось мало внимания.
Эдсгер Днйкстра (Еазйег 1211кзтга) в своей лекции на церемонии вручения премии Тьюринга (Тцппй Атчагб 1.есшге (011)сапа, 1972)) подверг сильнейшей критике сложность языка РЬЛ: "Я совершенно не вижу, как мы можем охватить умом наши увеличивающиеся в размере программы, в то время как нз-за своей явной переусложненностн язык программирования — наш основной инструмент, прошу отметить! — уже выходит нз-под нашего интеллектуального контроля". Помимо сложности, возникшей нз-за большого размера, язык Р1Л страдал от большого количества конструкций, которые сейчас считаются неудачно разработаннымн. Среди ннх можно отметить указатели, обработку исключительных ситуаций, параллельность, хотя мы должны обратить внимание н на то, что в квкдой нз указанных конструкций было что-то новое. С точки зрения использования язык Р1Л должен считаться, по крайней мере частично, успешным. В 1970-х годах он в значительной мере использовался как в коммерции, так н в науке.
В это же время он широко использовался в качестве учебного средства, главным образом в несколько сокращенных формах, таких как язык РЬ/С (Сотней, 1977) н язык РЬ/СБ (Сопжау впд СопзгаЫе, 1976). Ниже следует пример программы на языке Р1Л. /* ПРИМЕР ПРОГРАММЫ НА ЯЗЫКЕ РЬ/1 ВВОД: ЦЕЛОЕ ЧИСЛО Ь1ЯТЬЕМ, МЕНЬШЕ 100, ЗА КОТОРЫМ СЛЕДУЕТ НАБОР ЦЕЛЫХ ЧИСЕЛ В КОЛИЧЕСТВЕ Ь|ЯТЬЕН ВЫВОД: КОЛИЧЕСТВО ВВЕДЕННЫХ ВЕЛИЧИН, КОТОРЫЕ БОЛЬШЕ ИХ СРЕДНЕГО АРИФМЕТИЧЕСКОГО */ Р1|ЕХ: РКОСЕОПКЕ ОРТ1ОНЯ (МА1Н)г ОЕСЬАКЕ 1НТЬ1БТ (1: 99) Г1ХЕО. ОЕСЬАКЕ (Ь|БТЬЕН, СООНТЕК, ЯЦМ, АУЕКАОЕ, КЕЯОЬТ) Г1ХЕО; ЯОМ = 0) КЕБОЬТ О) ЯЕТ Ь|ЯТ(ЫЯТЬЕЫ)г 1Г (Ь1ЯТЬЕМ > О) Ь (ЫЯТЬЕМ < 100) ТНЕМ РОг /* СЧИТЫВАНИЕ ВХОДНЫХ ДАННЫХ В МАССИВ И ВЫЧИСЛЕНИЕ ИХ СУММЫ */ РО СООНТЕК 1 ТО Ь1ЯТЬЕН; 90 Глава 2.
Обзор основных языков программирования ОЕТ Ь|ЯТ (1НТт ТЯТ (СООНТЕК)); ЯОМ = ЯОМ + 1НТЬТЯТ (СООНТЕК)) ЕН01 /* ВЫЧИСЛЕНИЕ СРЕпНЕ, О */ АУЕКАБЕ = ЯПМ / ТЯТЬЕМ) /* ПОЛСЧЕТ ЧИСЛА ВЕЛИЧИН, КОТОРЫЕ БОЛЬШЕ СРЕЛНЕГО / 00 СОБНТЕК = 1 ТО Ь1ЯТЬЕК; 1Р 1НТЬ1ЯТ (СОЬМТЕК) > АУЕКАОЕ ТНЕН КЕЯОЬТ = КЕЯОЬТ ~1; ЕНО) /* ВЫВОЛ РЕЗУЛЬТАТОВ */ РПТ ЯК1Р ЫЯТ (' ЧИСЛО ВЕЛИЧИН, КОТОРЫЕ БОЛЬШЕ СРЕЛНЕГО:'); РПТ Ь1ЯТ (КЕЯОЬТ)) ЕН0) ЕЬЯЕ РОТ ЯК1Р Ь1ЯТ (' ОШИБКА — ВВЕДЕНА НЕВЕРНАЯ БЛИНА СПИСКА' ) 1 ЕН0 РЬ1ЕХ Происхождение языка Р1Л прелставлено на рис.