Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 26
Текст из файла (страница 26)
Распределение памяти, требуемой динамическому массиву, происходит при присваивании ему значения. В языке АЕОО[. 68 динамические массивы называются х1вх. Например, объявление 81ех [1гб] Дпс 11ат показывает, что переменная 11ае — это динамический массив целых чисел с одним индексом, нижнее значение которого равно 1, распределение памяти при этом не происходит. Присвоение переменной множества значений 11вс : (3, 5, 6, 2) приводит к выделению переменной 11вс памяти, достаточной для хранения четырех це- лых чисел, при этом значения индексов массива меняют на реальные значения [1: 4 ] .
9Я Гдово 2. Обзор основных языков прогроммировония 2.11.3. Оценка Язык А(.СО1 68 содержит значительное количество новых свойств. Его использование ортогональности, утрированное. по мнению некоторых. было. тем не менее. Революционным. Многие свойства. введенные языком А1СО!. 68. стали частью последующих языков. Впрочем, язык АССОВ 68 повторил одну из ошибок языка А1СО!. 60. что значительно повлияло на отсутствие широкого признания языка.
Язык бьш описан с использованием элегантного и лаконичного. но к тому же неизвестного. метаязыка, Прежде чем приступить к чтению описания языка (тап %!1пбаагдеп е( а1.. 1969). следовало изучить новый метаязык. названный грамматикой Вийнгаардена. Чтобы больше усложнить условия изучения, разработчики языка прилумали набор слов .ъчя объяснения языка и его (рамматики. Например, ключевые слова были названы хпс(заапк, извлечение подстроки— Шлжхпд, а процесс выполнения процедуры — аоекахоп ов гбаркоаес(икхпд, который мог бытыаее(с.
Ехкж или каким-либо еше. Естественным будет противопоставить струкзуры языков Р(,!1 и А(.СО(. 68. Улобство написания на языке АССОВ 68 достигалось за счет принципа ортогональности: несколько основных концепций и неограниченное использование механизмов комбинирования.
Удобству использования языка РЕ!1 способствовало большое число фиксированых конструкций. Язык АССОВ 68 расширил элегантную простозу языка А!.СО!. 60. тогда как язык РЕЯ просто объединил свойства нескольких языков. Разумеется, необходимо помнить, что целью языка Р( Л было создание единого инструмента для широкого класса задач; а язык А( СОЬ 68 был рассчитан только на научные приложения. Язык Р(./1 был признан более широко, чем язык АЕСО(. 68.
в значительной степени благодаря поддержке со стороны корпорации! ВМ и проблемам, связанным с пониманием и реализацией языка А(.СО1 68. Реализация была сложной залачей для обоих языков. но язык Р|Л имел ресурсы корпорации! ВМ, использованные лля создания компилятора. а язык АЕСОЕ 68 подобного покровителя не имел. Происхождение языка А1СО!. 68 показано на рис. 2.8. АЬООЬ 60 (! 9601 Акоок 66 ((9661 Рис. 3.8.
Генеазогия языка А1.СОь 68 2Л2. Несколько важных наследников семейства языков АЕООЕ Все императивные языки, в том числе и такие императивно-объектно-ориентированныс. как 5ача и С++. разработанные после 1960 года, чем-то в своей структуре обязаны языку А( СОЕ 60 и/или А(.СОЬ68. В этом разделе рассмотрены некоторые из них. В разделе опущено обсуждение языка Ада, которое будет проведено в разделе 2.14, С++, который будет рассмотрен в разделе 2.16, и Зака, который описан в разделе 2.17. 2.12. Нвсколько важных наследников семейства языков А(.ОО1 2 12.1.
Преднамеренная простота: язык Ройса! 2.12.1.1. Исторические предпосылки Никлаус Вирт ()л(1Ыацз 1!1/1п!г) был членом группы 1пгегпайопа1 Редегаг(оп оГ 1п1огплайоп Ргосезз(пз (1Р)Р) %ог!г!п8 Сгоцр 2.1 (рабочая группа 2.1 Международной федерации по обраоотке информации). которая в середине 1960-х годах была создана для продолжения разработки языка А(.СО(..
В августе 1965 года Вирт и Хоар внесли свой вллад в эту работу, представив группе довольно скромный план, касающийся дополнений и изменений в языке АССОВ 60 (улг(пп апг! Ноаге, 1966). Большинство членов группы отклонили его как слишком незначительный. Вместо него была разработана более сложная релакция, которая, в конечном итоге. и стала языком Л(,СО168.
Вирт с неоодьшой группой разработчиков считал, что отчет о языке А1СО!. 68 не должен публиковаться. обосновывая свое мнение как сложностью самого языка программирования. зак и сложностью лгетаязыка. использованного лля его описания. Эта точка зрения позже была отчасти полкреплена тем, что документация по языку АССОВ 68, а следовательно, и сам язык.
действительно считались в компьютерном мире слишком трудными. 11редложенная Виртом и Хоаром версия языка А(.СО(.60 была названа языком Л(.СО1-%. Она была реализована в Стенфордском университете и изначально использовалась в качестве учебного средства, правда только в небольшом количестве университетов.
Основными особенностями языка А(.СО!.-'й/ были метод передачи параметров по значению и результату, а также оператор сава для многовариантного ветвления. Метод передачи параметров по значению результата является альтернативой используемому в языке А(.СО(. 60 методу передачи параметров по имени. Оба метода рассмотрены в главе 8. Оператор савв описан в главе 7. Следующим значительным проектом Вирта. также основанным на языке А!.СО(.
60, быд его крупнейший успех — язык Разса1. Исходное описание языка Разса( было опуб:аковано в 1971 голу (%1п!з, 1971). В процессе реализации эта версия была несколько илменена и описана в 1973 году (%1пп, !973). Отметилг, что свойства, часто приписываемые языку Разса1. фактически произошли от более ранних языков. Например. определяемые пользователем типы данных впервые были ввелены в языке А1.СОВ 68, оператор саве — в языке Л1СО(.-%, а записи в языке Рааса! подобны структурированным переменнылг в языках СОВОБ и РБЛ. 2. 12.1.2. Оценка Язык Разса1 имеет большое влияние на обучение программированию. В 1970 году большинство студентов, изучавших естественные. технические и компьютерные науки, знакомились с програлглгированиелг с помощью языка РОКТКА)л!. хотя в некоторых университетах для этой цели использовались язык РБ/1, языки, основанные на языке РБ/1, и язык Л(.СО1-'й/.
С середины 1970-х самылг широко используемым для обучения языком стал Рааса!. Произошедшее было довольно естественно, поскольку язык Рааса! специально создавался лля обучения програлглшрованню. хотя его популярность было невозможно предсказать. Поскольку язык Рааса! создавазся как язык для обучения, в нем отсутствовали некоторые свойства, необхолимые для различных видов приложений. Лучшим примером эгого служит отсутствие возможности написания подпрограммы, которая бы принимала в качестве параметра массив переменной длины.
Другим примером является отсутствие какой бы Глава 2. Обзор основных языков программирования то ни было раздельной компиляции. Эти различия естественным образом привели к возникновению многочисленных нестандартных диалектов, таких как язык Тиг(ю Рааса(. Популярность языка Рааса[, как в сфере обучения программированию, так и в других областях, главным образом основана на его замечательной комбинации простоты и выразительности.
Нотя, как мы увидим из послелуюших глав, лля языка Рааса! характерна некоторая ненадежность. по сравнению с лругими языками [особенно с языками ГОКТКА)ч и С), он все же является относительно надежным языком. С середины )990-х голов популярность языка Рааса! стала лапать как в промышленности, так и в университетах. Ниже следует пример программы на языке Рааса!. (Пример программы на языке Разса1 Ввод: Целое число 1'зс1еп, меньше 100, эа которым следует набор целых чисел в количестве 11зс1еп Вывод: Количество ввеленных величин, которые больше их среднего арифметического) ргодгав разек (1прцг, оцсрос)г Г)!)Рв 1пс11зсгуре = аггау [1..99) ой 1пгедег; чаг 1пс11зс : 1пс11яссуре; 11яг1еп, соопгег, зчш, ачегаде, гези1С: аггедег; Ьвдйп гези1с:= 0; яиш := 0; геаб1п (11зс1еп)г 1й ((11зг1еп > 0) апс( (11зс1еп < 100) ) сЬвп Ьвдлп (Считывание входных величин в массив и вычисление суммы) Гог соипсег:= 1 го 11зг1еп бо Ьвдлп геаб1п (1пг11зс [соцпсег) ) Г зош := япш + 1пг11яг[соцпгег) впс[г (Вычисление среднего арифметического) ачегаде := яцш / 11яг1еп; (Вычисление количества входных величин, которые больше их среднего) аког соипсег := 1 ео 11зс1еп с(о 1г' (1пс11яг [соипгег) > ачегаде) ЕЬвп гези1С:= геяи1Г + 1; (Вывод результатов) нг1ге1п('Число величин, которые больше их среднего:', геяц1с) впд (относится к условию 11 ((11яг1еп > 0 ...)) сйеп ...) в1зв нг1те1п (' Ошибка — введена неверная длина списка'',; впс!.
Происхождение языка Рааса! представлено на рис. 2.9. 2. ) 2. Несколько важных наследников семейство языков АЮО[. АЕООЕЗ9119Н) АЛОЕ66119661 элса!1! 971! Рис. 3.9. Генеалогия языка Рааса! 2.12.2. Мсэидинно-независимый язык: С Подобно языку Рааса!, язык С немногое добавил в ранее известные языковые свойства, но получил очень широкое распространенне. Несмотря на то что изначально язык С создавался лля системного программирования, он также нашел прнмененне н в большом количестве других областей. 2. 12.2.