Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 27
Текст из файла (страница 27)
1. Исторические предпоснпки Среди предков языка С известны языки СР(., ВСР(., В н АЕООЕ 68. Язык СР(. был разработан в Кембриджском университете в начале 1960-х годов. Язык ВСРП вЂ” простой снстемный язык, разработанный в 1967 году Мартином Рнчардсом (К1сЬагбэ, 1969).
Первая работа над операционной системой (ЛЧ(Х была выполнена в конце 1960-х годов Кеном Томпсоном (Кеп ТЬотрэоп) нз компании Вей ЬаЬогазопез. Первая ее версия была написана на языке ассемблера. Первым высокоуровневым языком, реализованным под операционной системой (ЛЧ)Х, был язык В, основанный на языке ВСР!.. Язык В был разработан н реализован Томпсоном в 1970 году. Нн язык ВСРЕ, нн язык В не содержат типов данных, что довольно странно для языков высокого уровня, хотя уровень обоих языков значительно ниже, чем у таких языков, как Риса!.
То, что язык не содержит типов данных, означает, что все данные рассматрнваются как машинные слова, которые, хотя н крайне просты, но приводят ко многим сложностям н ненадежности. Например, сушествует проблема определения арифметики, в которой должно вычисляться выражение: целочисленной нлн с плавающей точкой. В одной реализации языка ВСРП перед операндами с плаваюшей точкой указывались точки. Операнды, которым не предшествовали точки, рассматривались как целочнсленные. Альтернативным вариантом могло бы быть нспольэованне различных символов для операций с плаваюшей точкой.
Эта проблема, а также несколько других, привели к разработке на основе языка В нового языка, предусматривавшего типы данных. Изначально названный НВ, позже переименованный в С, этот новый язык был разработан н реализован в 1972 году Денннсом Рнтчн (Оепшз К11сЬ(е) нз компании Вей 1.аЬопкопеэ (Кепэ(ййап апд КйсЬ(е, 1978). Язык А(.ОО(. 68 оказал на язык С значительное влияние, как через язык ВСР(„так н непосредственно. Это можно заметить по его операторам хок н видкаЬ, операторам прнсванвання н его обрашенню с указателями.
Глава 2. Обзор основных языков программирования 9$ Единственным "стандартом' для языка С в первые 15 лет его существования была книга Кернигана и Ритчи (1978). Со временем язык мелленно эволюционировал при участии различных разработчиков, вводящих допштннтельные свойства. В 1989 году институт А)ч51 выпустил официальное описание языка С (А)чей!.
1989), в котором солержатось большое количество свойств, уже включенных в язык разработчиками средств его реализации. В середине и конце 1980-х годов была разработана новая версия языка С, названная языком С++ (ЕИЬ апд Епоизпцр, 1990). Его история и некоторые из наиболее значительных свойств описаны в разделе 2.16. Подробнее о поддержке языком С++ абстракции данных написано в главе 1О. Поддержка языком С++ объектно-ориентированного программирования рассмотрена в главе 11.
2. 32.2.2. Оценка Язык С обладает достаточным количеством управляюших операторов и возможностей структуризации данных, чтобы он мог использоваться в различных приклалных областях. Кроме того, он содержит богатый набор операторов, обеспечиваюших высокую степень выразительности. Одной из важнейших причин н любви, и неприязни к языку С является отсутствие полной проверки типов. Например, можно написать функции, для параметров которых не производится проверка типов. Люди, которым язык С нравится, высоко ценят его гибкость; те же, кто его недолюбливает, нахолят его слишком ненадежным. Главной причиной значительного роста его популярности в 1980-х годах является то, что он представляет собой часть широко используемой операционной системы (Лч!Х.
Эта привязка к системе ()Н!Х обеспечивает недорогой (часто просто бесплатный вместе с системой [ЛЧ[Х) и лостаточно хороший компилятор, доступный программистам на большом количестве типов компьютеров. Ниже следует пример программы на языке С. /' Пример программы на языке С Ввод: Белое число 11яг1еп, меньше 100, за которым слелует набор целых чисел в количестве 11яс1еп Вывод: Количество введенных величин, которые больше их среднего арифметического */ чей шазп () ( зпс зпг11яг[98], 11я"1еп, соцпсег, яцш, ачегаде, геяц1гг яцш = 0; геяи1г = 0; асалам ("Ъ<(", Ь11яс1еп]; зВ ( (11яг1еп > 0) са (11яг1еп < 100) ) ( /* Считывание входных величин в массив и вычисление суммы */ хог (соцпгег = 0; соипгег < 1(яг1еп; соипгег++) ( асалам ( "то", ьдпг11яг [соцпгег] ); яцш = яцш + зпс11яс[соцпсег]; ) /* Вычисление среднего арифметического */ ачега9е яиш / 11яс1еп; /* Вычисление количества входных величин, которые больше их среднего */ Гог (соипсег 0; соипсег < 11яг1еп; соипсег++) Н (1пг1(яг[соцпгег] > ачегаое) геяи1<++г 2.12.
Несколько важных наследников семейство языков АИО[. /* Вывод результатов */ рг1псб(юйисло величин, которые больше ик среднего:%Юп", геаи1г) ) ) в1вв рг1пгГ (" Ошибка — введена неверная длина списка~п")) ) Происхождение языка С представлено на рис. 2.10. АНЕ С ((999) Рис. 2.10. Генеазошзяязыка С 2.12.3. Д1зугие потомки языка АЕВО1. В этом разделе кратко описываются истоки и характеристики других потомков языка А! ОО(., которые будут упоминаться далее в книге. 2. 12.3.1. Язык Моете)1а-2 После языка Рааса! Ннклаус Вирт разработал язык Моди)а, появившийся в результате его зкспериментов с параллельностью (%(п)з. !97б). Для языка Модо)а никогда не выпускался компилятор, и его разработка была прекращена вскоре после его публикапии.
Тем не менее, сам Вирт от разработки языка не отказался. Он сместил акцент на создание языка, который должен был стать единым языком новой компьютерной системы, позже названной Г.й)()ь В то время как компьютер сам по себе коммерческого успеха не имел. этот успех имел язык Мог)и)а-2 (%(п)з, ! 985). Глава 2. Обзор основных язмков программирования Основными характерными свойствами языка Моби)а-2, структура которого основывалась на языках Разов) и Мобц1а. были модули, обеспечиваюшие поддержку абстрактных типов данных, использование процедур как типов, низкоуровневые средства системного программирования и сопрограммы, а также некоторые синтаксические свойства. которые были улучшены по сравнению с соответствуюшими свойствами языка Рааса!.
Язык Моби!а-2 стал широко использоваться в конце 1980-х годах и в начазе 1990-х голах в качестве учебного языка в университетах. Также он использовазся. по крайней мере несколько лет, в различных промышленных отраслях. 2. 12.3.2. Язык МЫм1сг-3 Язык Мобц)а-3 был совместно разработан Исследовательским центром корпорации О!8!га1 Ейц!Ршепг (8уз!ешз йезеагсЬ Сепгег оГ О!8!!а1 Ег!ц!Ршеп! Согрогабоп) в Пазо.Альто и Исследовательским центром компании 01!чеп! (01Негб йезеагсЬ Сепгег) в Мегшо-11арк в конце 1980-х годах (Сагберб ег а1., 1989). Он основан на языках Мобц1а-2, Мсза (Мйсйей е! а1., 1979).
Себаг (Г.ашрзоп, 1983) н Мобц1а-2+ (йочпег, 1986). К языку Моби(а-2 были добавлены классы н объекты для поддержки объектно-ориентированного программирования, обработка исключительных ситуаций, "сборка мусора" и паразлельность. Несмотря на то что это мощный и хорошо сконструированный язык, надежды на его широкое распространение довольно мачо. Хотя этот язык и финансируется компанией О!8!га1, пользовательская база языка Моби!а-2, на которой мог бы начать расти язык Мобц1а-3, уже практически исчезла. 2. 12.3.3.
Язезк ОЬегои Язык ОЬегоп, частично основанный на языке Мобц1а-2, является последним языком. созданным Никлаусом Виртом. Последняя версия языка ОЬегоп названа ОЬегоп-2 (МбьзепЬос1с. 1993). Страстное увлечение Вирта простотой в языках программирования ошеломляюше откровенно проявилось в проекте языка ОЬегоп.
Хотя с целью получения языка ОЬегоп к языку Моби(а-2 были добавлены некоторые свойства, значительно большее количество свойств было удалено, что сделало язык ОЬегоп абсолютной противоположностью языков С++ и Аба 95, если говорить об этом с точки зрения сложности и размера. Основным свойством, добавленным к языку Моби!а-2, было расширение типов. поддерживаюших объектно-ориентированное программирование. В числе удазенных свойств находятся: вариантные записи, непрозрачные типы, перечислимые типы, полтипы, тип САВ01НА~, нецелочнсленные инлексы массивов, оператор нДСЬ, оператор хок. Поразительно, но язык ОЬегоп значительно меньше и проша своего предшественника.
2.!2.3.4. Язык Ре1рЬ! Язык 0е)рЬ1, подобно языку С++, является смешанным языком, созданным путем введения в сушествуюший императивный язык, помимо других свойств, объектноориентированной поддержки. Язык 0е!РЬ~ происходит от языка Риса!. большое количество различий между языками С++ и 0е)РЫ является результатом различий между породившими их языками и сопутствующими им культурамн программирования.