Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 28
Текст из файла (страница 28)
Поскольку язык С мощный, но потенциально ненадежный. такое же определение применимо и к языку С++, по крайней мере это касается проверки диапазона изменения индексов массива, арифметики указателей и многочисленных приведений типов. Аналогично тому, как язык Рааса! элегантнее и надежнее языка С, язык 0е1РЬ! элегантнее и надежнее языка 2.12. Насколько важных наследников семейства языков А16О(. 101 С- . Язык Ое!рЫ также менее сложен, чем язык С++. Например, Ое!рЫ не позволяет использовать определяем>ю пользователем перегрузку операторов, настариваемые подпрограммы и параметризованные классы. в то время как все это являются частью языка С+-. Язык Ое!рЫ, подобно языку Ч!зла! С++, предоставляет программистам графический интерфейс пользователя (ОШ вЂ” ОгарЫса( ()зег 1пгегГасе) и простые способы создания СНЛ-интерфейсов ддя приложений, написанных на языке Ое!рЬЬ Язык Ое!рЫ был разраоотан, финансировался и продавался компанией Вог1апд, той же компанией, что создала язык ТцгЬо Рааса!.
2.13. Программирование, основанное на логике: язык Рго!ое Говоря просто, логическое программирование — это использование формальной логической записи лля сообщения компьютеру вычислительных процессов. В современных языках логического программирования в качестве формы записи используется исчисление предикатов. Программирование на языках логического программирования является непроцедурным. Программы на таких языках ие устанавливают точно, ках должен вычисляться результат, а только описывают его форму.
Для этого языкам логического программирования необходимы четкие средства предоставления компьютеру как соответствующей информации, так и процесса логического вывода. Исчисление предикатов обеспечивает компьютер основной формой передачи информации, а метод доказательства, названный резолюцией и изначально разработанный Робинсоном (йоЫпзоп, 1965), предоставляет способы логического вывода. 2.13.1. Процесс разработки В начале 1970-х годов Ален Колмерье (А!а1п СоЬпегацег) и Филипп Руссель (РЫ11!рре йоцззе1) из группы по разработке искусственного интеллекта (Агййс!а! !иге!!)йепсе Огоцр) Марсельского университета (()п)чегз)гу оГ А(х-Магзей)е) вместе с Робертом Ко. вальски из отдела искусственного интеллекта (Оершппепг оГ Агг(Г1с(а!!иге!!(йепсе) Эдип бургского университета (1/пгкегягу оГ ЕсйпЬцгЗЬ) разработали базовую структуру язык~ Рго!ой.
Основными компонентами языка Рго!ой были метод задания высказываний ис. числения предикатов и реализация ограниченной формы резолюции. Исчисление преди катав и резолюция описываются в главе 15. Первый интерпретатор языка Рго!ой быг разработан в 1972 голу в Марселе. Реализованная версия языка была описана Русселем (Копие!, !975). Само название языка произошло от сокращения словосочетания "ргоягащш(пй !оя(с". 2.13.2. Обзор языка Программы языка Рго!ой состоят из набора утверждений. Видов утверждений в языке Рго!оз немного, правда, все они могут оказаться сложными.
Одним из обычных применений языка Рго!оз является его использование в качестве базы данных со встроенной логикой. Эта область применения предоставляет простую основу для обсуждения языка Рго!ой. 102 Глава 2. Обзор основных языков программирования База ланных протраммы языка Рго!ой состоит из двух типов утверждений: фактов и правил. Примерами фактов могут служить следуютцие выражения: таог)тет ()оавве, ,"'айе) . ЕагЬег (четв, ,'оливе). Они утверждают, что объект 5 оавве приходится матерью (жо" вег) объекту баке, а объект четв — отцом (1агйег) объекту чоагве. Рассмотрим теперь пример правила: дгавс(ратевт(Х, Е) : — рагег.т(Х, У), рагевт (т', Е).
Оно утверждает, что лля конкретных значениЯ перелтенных Х, У и Е из факта, что объект Х является родителелт объекта ".. а объект у — родителем объекта Е, можно сделать вывод о том, что объект Х приходится объекту Е дедушкоЯ или бабушкой (агаве)рагев ). База данных языка Рго!ой может интерактивно запрашиваться целевыми утвержлениями, например: Еатвет (ЬоЬ, с)агс'е).
В нем спрашивается, является ли объект ЬоЬ отцом (йагЬег) объекта оаг=' е. При получении такого запроса (нли цели) система Рго! ой использует резолюцию, чтобы опрелелить истинность данною утверждения. Если система сможет заключить. что утверждение . верно, она выласт ответ "истина". В противном случае, булат выдан ответ "ложь". 2.13.3. Оценка Существует относительно небольшая группа специалистов по компьютерным наукам.
которые верят, что логическое протраммирование представляет собоЯ наилучший способ избежать применения императивных языков программирования, а также решить огромную проблему производства большого количества надежного программного обеспечения, необхолимого на сегодняшний день. До настояшего времени, правда, сушествуют две основные причины, почему логическое программирование не становится широко используемым.
Во-первых, доказано, что, как и другие неимперативные подходы. логическое протраммнрование крайне неэффективно. Во-вторых, оно зарекомендовачо себя в качестве эффективного метода только в нескольких относительно небольших приклалных областях; некоторых видах систем управления базами данных и некоторых областях искусственного интеллекта. Логическое программирование н язык Рго)ой подробно рассмотрены в главе 15.
2.14. Величойший проект в истории: язык Ада Язык Ада — результат самого обширного и самого лорогостояшего нз когда-либо прелприннмавшихся проектов по созданию языка программирования. Язык Ат)а разрабатывался лля Министерства обороны США, так что состояние сушествовавшей вычислительной среды способствовало определению его формы.
103 2.14. Величайший проект в истории: язык Ас!а 2.14.1. Историческая ретросаектиеа К !974 году около половины областей применения компьютеров в Министерстве обороны прихолилось на встроенные системы. Последний термин означает, что аппаратное обеспечение такой системы встраивалось в устроГютво, управляемое илн обслуживаемое этой системой. Прн этом быстро росла стоимость программного обеспечения, в основном нз-за увеличения ело'кностн систем. В проектах Министерства обороны попользовались более 450 различныл языков программирования, ни один из которых Миниглсрством стандартизован не был.
Каждый подрядчик мог определить новый, отлнчаюшиГюя от предыдуших, язык программирования. Из-за тако~о количества языков повзорное использование прикладного программного обеспечения было очень редким. Более того, не было инструментальных средств разработки программного обеспечения !поскольку они обычно зав>жели от конкретного языка) Большинство языков не подхошыи для использования в области встроенных систем. Поэтому в !974 голу армия, флот и ВВС независимо друг от друга предложили разработать язык высокого уровня для встроенных систел!. 2.14.2.
Процесс разработки Обратив внимание на это широко распространенное мнение, директор Отдела исследований и проектирования Министерства обороны (ОеГепзе йезеагсЬ апд Епк(пеег!пк) Малкольм Кури (Ма!со)ш Снобе) в январе 1975 года сформировал группу НО1.1тО (Н!яЬОгдсг Ьаплцаде 9!гогЬ!пй Огоцр — группа по разработке первоочередного языка), котор)ю изначачьно возглавил подполковник ВВС Уильям Уайтекер (%!!!!агл %ЬЬайег).
В ! рупие НОьЮО имелись представители всех военных служб и служб связи с Великобританией, Францией и Западной Германией. Исходным заданием группы было следующее. ° Определить требования к новому высокоуровневому языку, заказанному Министерством обороны. ° Оценить существующие языки и определить нх жизнеспособность. ° Предложить принятие или реализацию минимального набора языков программирования. В апреле 1975 гола группа выпустила список требований к новому языку, названный Бггажшап досшпеп! (Оераг!шеп! оГ ОеГепзе, 1975а). (Здесь и далее фамилии в названиях документов отмечают этапы реализации плана создания нового языка программирования; Бггаитпап — "соломенный человек", !лгообшап — "деревянный", Тшшап— 'оловянный", 1гошпап — "железный", Я!ее!шап — "стальной" и Бюпешап— "каменный".
— Прин. перев.) Этот документ был распространен по родам войск, федеральным агентствам, избранным промышленным и образовательным структурам и заинтересованным сторонам в Европе. Вслед за указанным документом в августе 1975 года последовал %ообшап досцшеп! (Оераг!шеп! оГ ОеГепзе, 1975Ь), а в январе 1976 гола — Т1пшап досцшеп! (Оерацшеп! оГ ОеГепзе, 1976).
В последнем рассматривался полный набор требований к языку, а также необхолимые его характеристики. Основным автором всех этих документов был Дэвид Фишер (ОачЫ Е!зйег) из Института анализа обороноспособности (!пзгйше Гог ОеГепзе Апа1уз!з). Группа, принимавшая участие в проекте, была значительной и насчитывала более 200 человек, представляющих более 40 организаций помимо Министерства оборо- Глава 2. Обзор основных языков прогроммироаония ны. В январе 1977 года требования документа Т!птап 6осшпепг оыли заменены требованиями локумента 1гоптап гейшгетепгз 6осшпеп! (Оераггтепг оГ ОеГепзе.
19771. который имел практически идентичное содержание. ио несколько отличался форматом. В апреле 1977 года в качестве основы лля неограниченных условий подряда бьш использован документ 1гопгпап 6осшпепг. затем этот документ был предан огласке. сделав. таким образом, язык А6а первым языком. созданным на основе конкурсного контракта. В июне 1977 года четверо из заявленных подрядчиков — компании Зойесп. эй1 (пгегпабопа1. СИ НопеуткеИГВцй и 1пгеппегйсз — были выбраны для перехода. независимо и параллельно. к фазе 1 разработки языка. Все четыре из предложенных в результате проектов были основаны на языке Разов!.
Когда в феврале 1978 гола шестимесячная фаза 1 была завершена. ее результаты оценили 400 добровольцев из 80 экспертных команх разбросанных по всему миру. В результате этой оценки два финалиста — компании 1пгеггпеспсз и СИ Нопеуие!РВий — были выбраны для прололжения разработки в фазе 2. В июне 1978 года была выпущена слелуюшая итерация документа трсбований— Бгее!шап 6осцшепг (Оераггпзепг оГ ОеГепзе. 1978). В конце фазы 2 была выполнена еше олна двухмесячная опенка и в мае 1979 гола побелителем была признана структура языка.