И.Г. Головин, И.А. Волкова - Языки и методы программирования (1160773), страница 5
Текст из файла (страница 5)
В отличие от Фортрана (разработчики которого, как и все первооткрыватели, действовали «наощупь») Алгол 60 проектировался под влиянием определенных языковых концепций. Впервые синтаксис языка был описан формально(с помощью так называемых бэкусо-науровых форм — БНФ). Этоописание дало мощный толчок к исследованиям в области теориии практики реализации языков программирования. После Алголаописания языков программирования стали выглядеть следующимобразом:• словесное описание лексики;• формальное описание синтаксиса с помощью БНФ (или их разновидностей);• словесное описание семантики введенных понятий.20Была достигнута определенная унификация в описаниях языковпрограммирования.
Хотя Алгол и был языком «номер два» в своейнише (НТР), но он получил достаточно большое распространение вЕвропе (в том числе и в СССР) именно как первый язык программирования, на котором учили программированию студентов. Языковаяниша Алгола 60 — образовательная, ее он удерживал три десятка лет,доминируя в университетах.Не будет преувеличением сказать, что Алгол 60 — предок большинства современных языков программирования, включая Паскаль,Ада, С и др.Примерно в одно время с Алголом (1959 г.) по инициативе Министерства обороны США появился Кобол (COBOL — CommonBusiness-Oriented Language), который использовался для коммерческиориентированных приложений (бухгалтерских и финансовых отчетов). Вследствие ранней стандартизации язык получил широкоераспространение. Кобол до 1990 гг.
XX в. занимал господствующееположение в нише программ для работы с большими БД и программдля автоматизации финансовых расчетов. «Проблема 2000 года»появилась из-за того, что в Коболе был специальный тип данных —дата, под год в котором отводилось две десятичные цифры. Поэтомуна рубеже тысячелетий пришлось переписывать многие приложениядля работы с финансовыми базами данных. Если бы не проблема2000 г., возможно, многие программы на Коболе до сих пор бы использовались.Важное влияние на последующее развитие программированияоказал язык Лисп (Lisp — List Processing), разработанный ДжономМаккарти в 1958 г.
для решения задач, позже названных задачами искусственного интеллекта. Лисп активно используется до сих пор, онстал родителем целого направления — функционального программирования, хотя следует отметить, что в современных вариантах Лиспаиспользуются все основные парадигмы, в том числе императивная иобъектно-ориентированная. В настоящее время самый популярныйдиалект Лиспа — Common LISP.
Широко известен близкий потомокЛиспа — Scheme.В настоящее время функциональные языки не относятся к числуиндустриальных. Основная причина — относительная неэффективность (по сравнению с языками, основанными на императивнойпарадигме). Еще в 1978 г. «отец Фортрана» Джон Бэкус предложилотказаться от парадигмы Фон Неймана (императивного программирования) и использовать методику функционального программирования. В настоящее время идеи функционального программированияпереживают «ренессанс» и начинают проникать и в индустриальныеязыки.Заметим, что уже в период зарождения языков программированиябыли высказаны и частично реализованы идеи, которые до сих пороказывают огромное влияние на их развитие.21Период бурного ростаВ этот период ежегодно появлялись сотни новых языков программирования. К 1967 г. только в США активно использовалосьпорядка 400 языков программирования.
В этот период окончательносформировались основные концепции языков программирования(абстрактные типы данных, инкапсуляция, полиморфизм и многиедругие), которые развиваются до сих пор.Также в этот период были созданы языки С и Паскаль.Интересно, что в течение всего данного периода неоднократнопредпринимались попытки создания единого универсального языкапрограммирования, который покрывал бы практически все проблемные области и был бы достаточно адекватен, чтобы на нем программировать. Заметим, что все эти попытки провалились.
Единогоязыка не существует до сих пор, хотя в разных проблемных областях(нишах) можно выделить лидеров.Язык PL/1 был одним из первых претендентов на роль единогоязыка (1964 г.). PL/1 был создан как объединение конструкций изсамых популярных к тому времени языков (Фортрана, Алгола 60,Кобола и некоторых других). Этот язык широко использовался дляпрограммирования на больших компьютерах (мейнфреймах) компании IBM (для которых он и создавался), но для других архитектурон оказался непригоден, и в настоящее время практически не используется.
Основное концептуальное влияние PL/1 состояло в том,что разработчики языков программирования осознали, что простоеобъединение разнородных механизмов без тщательной проработкии адаптации невозможно.Другой претендент на роль универсального языка — Алгол 68интересен прежде всего с теоретической точки зрения. Этот языкразрабатывался как преемник Алгола 60, но не получил такого широкого распространения. Главная проблема Алгола 68 — сложность: онимел очень сложное описание и оказался сложным для реализации.Данный язык воплотил принцип ортогональности языковых конструкций, т. е.
их независимость друг от друга. Принцип ортогональности требует, чтобы везде, где встречается одна конструкция, моглавстречаться и другая. Например, любая конструкция Алгола 68 возвращает некоторое значение (т.е. может быть элементом выражения),в том числе и оператор.
С другой стороны, любое выражение можетрассматриваться как оператор. Понятие «выражение-оператор», которое есть сейчас во многих языках программирования (С, C++, С#,Java), досталось в наследство от Алгола 68.Язык Паскаль, разработанный Никлаусом Виртом в 1969—1970 гг.,явился полной противоположностью Алгола 68. Простой, понятныйи мощный язык стал одним из основных языков для обучения студентов программированию.
На основе Паскаля Н.Вирт позже создалязыки Модула 2, Оберон и Оберон 2.22Самым популярным диалектом Паскаля стал ТурбоПаскаль (продукт компании Borland), отличавшийся мощным механизмом модульности и объектно-ориентированными возможностями. Автор этогоязыка Андерс Хейльсберг позже создал язык Delphi на основе ТурбоПаскаля, а после перехода в компанию Microsoft — язык С#.Практически одновременно с Паскалем был разработан язык С.Автор этого языка Деннис Ритчи создал его, с одной стороны,весьма простым, с другой — очень гибким. Конструкции языка Сестественным образом отображались на машинную архитектуру (каки конструкции языка Паскаль) и позволяли использовать фундаментальные особенности архитектуры (что не всегда можно сделать наПаскале). В результате язык С прочно занял нишу, которая раньшебыла занята машинными языками, — системное низкоуровневоепрограммирование (разработка операционных систем, драйверовустройств ввода-вывода и т.д.).На основе языка С в 1980-х гг. были разработаны языки C++ иObjective С, дополнившие С объектно-ориентированными свойствами.Автор языка C++ Бьярне Страуструп сделал язык максимальносовместимым с языком С (что позволило, например, включить вязык C++ стандартную библиотеку языка С).
Объектно-ориентированные свойства языка C++ опирались на понятия языка Симула67, разработанного в 1960-е гг. в Норвегии К. Нюгардом и У. Далем.Язык C++ в настоящее время является одним из самых популярныхязыков программирования.Язык Objective С так же, как и язык C++, использовал С какбазу, но объектно-ориентированные свойства Objective С использовали концепции языка SmallTalk — первого «чистого» объектноориентрованного языка. Язык SmallTalk оказал большое влияние наразвитие других объектно-ориентированных языков, но по эффективности сильно им уступал. Язык Objective С одно время оказался втени своего конкурента языка C++, но в настоящее время обрел «второе дыхание» в связи с распространением платформы iOS компанииApple, в которой он является одним из основных языков разработкикак системных, так и прикладных программ.Одним из самых значительных языков программирования рассматриваемого периода стал язык Ада (1980 г.) — самый яркий претендент на роль универсального единого языка.
Он был разработанна основе языка Паскаль и воплощал в себе базовые концепциитехнологии программирования в том виде, как ее понимали в конце1970-х гг. Язык был разработан по заказу Министерства обороныСША в соответствии с тщательно сформулированными требованиями и в результате открытого конкурса. Язык Ада должен былзаменить более трехсот пятидесяти языков программирования, использовавшихся подрядчиками Пентагона при разработке заказного программного обеспечения (в основном в области встроенных23систем реального времени). Несмотря на мощную финансовую, законодательную и административную поддержку, язык Ада так и нестал основным языком для разработки программного обеспечения(даже в системе Минобороны США).
Основными причинами этогоявились большая его сложность (проблему усугубило официальноезапрещение создания подмножеств Ады) и отсутствие поддержкиобъектно-ориентрованной парадигмы (объектно-ориентированноерасширение Ады появилось только в 1995 г.). Тем не менее'язык продолжает использоваться и в настоящее время (хотя и не так активно,как предполагалось при его создании).Эволю ционны йпериодПоследние двадцать лет развития языков программированияхарактеризуются уменьшением числа вновь созданных языков. Онипродолжают регулярно появляться, но говорить можно только о единицах новых появившихся языков в год (в отличие от десятков и дажесотен ежегодно появлявшихся языков в предыдущие десятилетия).Концептуально почти все новые языки поддерживают объектноориентированную парадигму.Особенность эволюционного периода — появление большого числа языков для web-программирования, т.е.
языков, предназначенныхдля встраивания в web-серверы и клиентские web-приложения. Самыепопулярные языки этого вида — Python, Perl, РНР, Ruby, JavaScript.Из-за специфики проблемной области большинство связываний вэтих языках — динамические (понятие связывания рассматриваетсяв гл. 3), поэтому большинство этих языков интерпретируемые.В 1995 г. компания Sun объявила о разработке языка Java — одного из самых популярных в настоящее время. Синтаксис Java и рядпонятий в нем похожи на C++. Основное достоинство Java — независимость от платформы (как это достигается см. в гл. 4).