Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 25
Текст из файла (страница 25)
2.б. Сааас (1960) (60 (1960) РОптпан а) (1962) Р(/1 (1965) Рис. 2.б. Геяеазагкя языка Р1Л 2.9. Два ранних динамических языка: АРЕ и ЗМОВОЕ Поскольку языки, рассматриваемые в данном разделе, значительно отличаются от языков, рассматривавшихся ранее, то и сама структура раздела отличается от структуры предыдуших разделов. Ни язык АРЬ, ни язык Б)ЧОВОЬ не основывались ни иа одном из предшествовавших языков, они также не оказали существенного влияния на послелуюшие языки (хотя язык 1 и основан на языке АРЬ, а язык 1СО)Ч (Ог(зтто!г( апд Ог(зво(4 1983) — на языке Б)ЧОВОЦ.
И язык АРЬ, и язык Б)ЧОВОЬ используются нами лля иллюстраиии и противопоставления некоторых их свойств соответствующим свойствам более традиционных языков. Именно по этой причине они кратко описываются в данном разделе. По возникновению и по предназначению языки АРЬ и СОВОЬ значительно различаются. Тем не менее, их объединяют лве общие характеристики: динамическая проверка типов и динамическое распрелеление памяти.
По существу, переменные в обоих языках не имеют типов. Переменная получает тип при присвоении ей значения, при этом она получает тип присваиваемой величины. Память выделяется переменной только при присвоении ей значения, поскольку заранее определить требуемое количество памяти невозможно. 2.9. Два ранних динамических языка: АРЬ и Б)ЧОВОЬ 2.9.1. Истоки и характеристики языка АР1. Язык АРЕ (Ро!!пйа ап6 Ра(г!и. 1975) был разработан около 1960 года Кеннетом Айверсоноч (Кеппегй Е. 1кегзоп) нз корпорации 1ВМ.
Изначально он разрабатывался не для рсалнзашш в качестве языка программирования. а в качестве средства описания архитект) ры компьютера. Впервые язык АРЬ был описан в книге. давшей ему имя, "А Ргойгапншпз Еапзоазе" (1чегзоп, 1962). Первая его реализация была создана корпорашюй 1ВМ в середине 1960-х голов Язык АРЕ содержит большое количество мощных операторов, что созлавало проблемы при его реализации.
Первой областью использования языка АР1. были печатные терминалы корпорации 1ВМ. В этих терминалах содержались специальные печатающие шары. обеспечивавшие печать разрозненных символов, требуюгцихся языку. Большое ко:шчсство операторов языка АР1 позволяет манипулировать с массивами как со скалярными величинами. Например.
транспонированне любой матрицы выполняется с помощью одного оператора. Большой набор операторов обеспечивает значительную выразительность. одновременно затрудняя чтение программ. написанных на языке ЛР1.. Многие считали, что лучшим использованием языка АРЕ было бы "одноразовое" программирование. Хотя программы можно писать очень быстро. от них пришлось бы избавляться после использования, поскольку модифицировать их было бы затруднительно.
Язык АРЕ был популярен около 30 лет и на данный момент все еше используется, хотя н не очень широко. Более того, на протяжении своей жизни он не претерпел скольконнбудь существенных изменений. 2.9.2. Происхождение и характеристики языка ЗМОВОЕ Язык 5)ЧОВО (произносится как "сноубол") (Сг(зззоЫ ег а1., 1971) был разработан в начале !960-х голов зремя со~рудникал~и компании Вей ЕаЬогагог!ез: Д.Фарбером ! О.).ГагЬег).
Р.Грисволдом (й.Е.Ог!ззго1д) и Ф.Поленски (Е,Ро(епьйу) (РагЬег а! а(., 1964). Он был создан специально для обработки текстов. Ядро языка 5)ЧОВОЬ вЂ” это набор мощных опсраш10 для сопоставления образцов строк. Одним из ранних применений языка 5ЫОВО(. было создание текстовых редакторов. Поскольку динамическая природа языка 5ЫОВОЕ делала его медленнее лругнх языков.
то в наше время он нечасто используется с подобной целью. Тем не менее. язык 5)ЧОВОЕ все еше жив и полдерживается языками, используемыми лля разнообразных задач обработки текстов в многочисленных приложениях. 2.10. Возникновение абстракции данных: язык $!МЦ1.А 67 Хотя язык 51МОЕА 67 так и не получил широкого распространения и слабо повлиял на вычислительную технику и программирование того времени, некоторые из введенных в нем концепций делают его важным.
2.10.1. Процесс разработки Язык 5!М()ЕЛ! был разработан двумя норвежцамн. Кристеном Нигаардом (Кгумеп '.Чуйаагд) и Оле-Джоханом Далом (01е-)ойап ОаЫ). между 1962 и 1964 годами в Норвежском вычислительном центре (Ыогзгей!ап Сотробпй Сепгег, ЫСС). В первую очередь их 92 Глава 2. Обзор основных языков программирования интересовало использование кол(пьютеров лля моделирования.
хотя они также работали и в области исследования операций. Язык 51М!)БА ) бьш разработан исключительно зля моделирования систем и впервые был реачизован в конце !964 гола на компьютере (ЛЧ(ЧАС ! 107. Сразу после завершения реализации языка 5!МН.А 1 Нигаарл н Дал начали работ) над расширением языка с целью введения в него аосолютно новых свойств и изменения некоторых уже существующих конструкш(й для того. чтооы сделать язык полезным дзя более универсальных приложений. В результате этой работы появился язык ЫМОБА 67. проект которого был впервые пуолично представлен в марте !967 гола (ОаЫ ап() Нуйааг((, 1967). Мы ограничимся рассмотрением только языка 5!МОВА 67. хотя в языке ЯМО(А !также встречается несколько интересных свойств языка ЯМОБА 67.
2.10.2. Обзор языка Язык 5!М(Я А 67 представляет собой расширенную версию языка АБООБ 60 с его блочной структурой и структурой управляюших операторов. Основным недостатком языка А!.ОО1. 60 (да и других языков того времени) при использовании для моделирования были их подпрограммы. Для молелирования требовались подпрограммы.
позволяюшие перезапускать их с места, на котором их выполнение бьшо ранее прервано Подпрограммы с таким типом управления называются сопрограммами. поскольку и вызывающая и вызываемая подпрограммы в некотором смысле равноправны. а не состоят в жестких иерархических отношениях, обычных лля императивных языков програимирования. Для полдержки сопрограмм в языке 51МША 67 была разработана конструкция класса.
Это было важное усовершенствование. поскольку оно положило начало нашим понятиям об абстракции данных. Основополагаюшая идея класса состоит в том. что стру кт)- ра данных и процедуры. обрабатывающие ее. объединяются вместе. Более того. описание класса — это только шаблон структуры данных. и в таком качестве описание класса отличается от его экземпляра. так что программа может создавать и использовать:побое количество экземпляров отдельного класса. Экземпляры класса мог1т содержать локальные данные, н программы, выполняемые во время создания экземпляра.
которые могут инициализировать некоторые структуры данных. принадлежашие экземплярам класса. Более подробно классы и экземпляры классов представлены в главе 1О. Интересно отметить, что важная концепция абстракции данных не была выявлена и приписана к конструкции класса вплоть до 1972 года, когда Хоар (Ноаге) (1972) распознал эту связь Происхождение языка 51М\/БА 67 показано на рис.
2.7. АШОЬ 60 (1960) 9)мцЫ)(1964) ° 9 МУ)А 67 (1967) Рис. 2.7. Генеатогня языка 5617(,7,4 6. 93 2. ! О. Возникновение абстракции данных: язык 51М01А 67 2.11. Ортогональная структура: язык АЕООЕ68 Язык АЕОО[, 68 был источником нескольких новых идей в области структуры языка, некоторые из которых впоследствии переняли другие языки. Мы рассматриваем этот язык именно по этой причине, несмотря но то, что он так и не получил широкого распространения ни в Европе, ни в Соединенных Штатах. Поскольку некоторые конструкции языка А[.ОО[. 68 описаны в дальнейших главах, в этом разделе мы остановимся только на его самом важном вкладе в компьютерные науки.
2.11.1. Процвсс разработки Развитие семейства языков А[.ОО[. не закончилось с выходом в 1962 году переработанного отчета, хотя результаты следующего этапа разработки языка были опубликованы только через шесть лет. Получившийся в результате язык А[.ООЬ 68 (чап %1]п8аагдеп ег а].. 1969) разительно отличался от своего предшественника. Одним из интереснейших нововведений языка АЬОО[.68 является его основной структурный критерий — ортогональность. Вернемся к нашему обсуждению ортогональности в главе 1.
Использование в языке А[.00]. 68 ортогональности приводит к нескольким новым свойствам, два из которых описаны в следующем разделе. 2.11.2. ОбзЬр языка Одним из важных результатов ортогональности языка А[.00[. 68 было введение определяемых пользователем типов данных. Ранние языки, например ЕОКТКА1Ч, содержали только несколько основных структур данных. Язык Р1Л обладал большим количеством структур данных, что затрудняло его изучение и реализацию, но он, очевидно, не мог обеспечить соответствуюцзую структуру данных для каждой области применения.
А[.ОО[. 68 предоставлял несколько элементарных типов и структур и позволял пользователю комбинировать эти основные элементы для создания большого количества различных структур. Возможность определять новые типы данных была с некоторыми уточнениями включена во все основные императивные языки программирования, разработанные позднее.
Типы данных, определяемые пользователем, полезны из-за того, что онн позволяют пользователю создавать абстракции данных, которые максимально соответствуют конкретным задачам. Все аспекты типизации данных рассматриваются в главе 5. Еше одним новшеством в области типов данных было использование в языке АЕООЕ 68 динамических массивов, которые в главе 4 описываются с точки зрения динамической памяти. Динамический массив — это массив, в котором при объявлении не устанавливаются предельные значения индексов.