Язык программирования высокого уровня достаточно полно описывается совокупностью
следующих особенностей:
язык обладает характеристиками. Примеры таких характеристик приведены в разд. 4.1.1.3;
язык содержит абстракции. Основные языковые абстракции рассмотрены в разд. 4.3;
язык поддерживает методологию программирования. Обзор языков, поддерживающих методологии, приведен в гл. 2;
язык принадлежит к семейству языков. Семейства подробно рассматриваются в разд. 4.5.1;
язык может быть специализированным для некоторой предметной области. Специализированным языкам посвящен разд. 4.5.2.
5.1. Обзор языков, принадлежащих к семействам
Родственные связи между языками мы можем проследить, определяя их принадлежность
к некоторому семейству. Во многих случаях можно указать родословное дерево языков,
четко определяя последовательность языков, генетически" оказавших влияние друг на
друга.
5.1.1. Семейство универсальных языков
Большинство языков этого семейства было создано в 60-е годы XX века (рис. 4.30).
Они характеризуются:
ориентацией на большой класс задач, в первую очередь, вычислительных;
множеством языковых конструкций и некоторой громоздкостью;
долгожительством. Все языки применяются в настоящее время;
все эти языки поддерживают императивную методологию.
5.1.2. Семейство уникальных языков
Уникальные языки характеризуются некоторой определенной чертой, "изюминкой", выделяющей
их среди других языков. Практически все из них (рис. 4.31) остались в определенном
смысле неповторимыми.
Большинство этих языков поддерживают императивную методологию. Их более поздние
диалекты иногда обогащались методами поздних по возникновению методологий. Одновременно
закономерным и все-таки неожиданным стало появление в конце 80-х годов XX века диалекта
Object-Oriented Cobol.
Ряд языков из этого семейства можно охарактеризовать, как языки с одним типом данных.
Дадим краткую характеристику некоторым языкам.
APL - язык, в котором единственным структурным типом данных являются массивы
- одномерные (векторы) и двумерные (матрицы).
Cobol - язык, ориентированный на обработку коммерческой информации. На этом языке
хорошо писать задачи, требующие строго фиксированного формата выдачи (печати) результатов.
Forth - язык, в котором программы записываются в постфиксной записи и в стековой
нотации.
SETL - язык, в котором одним из основных типов данных является множество.
CLU - язык, в котором наиболее полное воплощение получила концепция абстрактных
типов данных.
5.1.3. Семейство языков параллельного программирования
Семейство представляет собой множество параллельных языков программирования, частично
обсуждавшихся в разд. 2.4.1 и 2.4.2. Параллельные языки различаются:
способом организации процессов:
сопрограммы. Например, в языках Modula-2 и BLISS;
разветвления (fork) и объединения (join). Например, в языках PL/I и Mesa;
параллельные скобки (cobegin/coend). Например, в языках Algol-68 и Edison;
объявления процессов. Например, в языках Ada и Concurrent Pascal;
Языки этого семейства (рис. 4.32) содержат в себе, как подмножество, языковые конструкции
языка С. Дополнение языка С объектно-ориентированными конструкциями дало язык C++,
а обрезание некоторых опасных, с точки зрения программирования, конструкций языка
С у языка C++ привело к появлению языка Java. Отметим, что многие концепции, присутствующие
в Java (как в языке, так и окружении), заимствованы авторами Java из проекта Oberon
Никлауса Вирта.
5.1.5. Pascal-семейство языков
Это семейство (рис. 4.33) можно также назвать семейством Никлауса Вирта, знаменитого
швейцарского профессора. Вирта часто называют "отцом структурных языков". Однако именно
ему удалось создать истинно объектно-ориентированный язык программирования - Oberon,
способный обеспечить безопасность типов.
5.1.6. Ada-семейство языков
Ada - многофункциональный, мощный, универсальный язык. Первый его вариант создавался
в период с 1979 по 1983 годы (рис. 4.34). Это один из немногочисленных языков, созданных
"на заказ", причем заказчиком выступало министерство обороны США.
5.1.7. Simula-семейство языков
Язык Simula получил широкое применение для решения задач имитационного моделирования.
Языки этого семейства (рис. 4.35) воплощают концепцию языка-ядра. Эта особенность
позволяет сравнительно просто вводить расширения языка, ориентированные на конкретные
области применения. Язык Simula считается основателем, a Smalltalk - классическим
представителем объектно-ориентированных языков. Язык BETA интересен тем, что он комбинирует
абстракции данных, управления и процедур в одну исчерпывающую абстракцию. Объекты
этого языка (порождаемые паттернами) могут рассматриваться как переменные, структуры
данных, процедуры, функции, параллельные системы.
5.1.8. Lisp-семейство языков
Это семейство (рис. 4.36) близко к языкам функционального программирования, уже
рассмотренным в разд. 2.2.3.
5.1.9. Prolog-семейство языков
Это семейство (рис. 4.37) близко к языкам логического программирования, уже рассмотренным
в разд. 2.2.4.
5.2. Обзор языков, ориентированных на предметную область
Создание языка, более или менее специализированного к предметной области - крупное
достижение. Создавая такие языки, авторы должны долгое время продумывать - как наилучшим
образом решать проблемы, исследовать их, смотреть на них с различных точек зрения.
Предметных областей достаточно много и не все из них имеют специализированные языки.
Программы, которые написаны на языках, ориентированных на предметную область, имеют
следующие преимущества:
они более точные;
они могут быть быстро написаны;
их легко сопровождать;
о них легко говорить в понятиях и терминах предметной области;
их могут использовать непрограммисты.
Далее мы выделим несколько областей и укажем языки, ориентированные для них.
5.2.1. Языки форматирования текстов
Предметная область - издательские системы, системы подготовки научных публикаций
с большим количеством формул. Языки форматирования:
ТеХ - язык форматирования текстов, разработанный Дональдом Кнутом [Кнут 1993].
Язык использует специальные команды, которые предваряются символом начала команды
для различения их и основного текста;
LaTeX - один из языков, представляющий надстройку над ТеХ. Особенность таких
надстроек в том, что они предлагают стилевые файлы, упрощающие задание и, соответственно,
получение определенного результата форматирования;
troff и nroff - форматоры текстов в операционной системе Unix [Баурн 1986].
5.2.2. Языки разметки
Предметная область - универсальные форматы представления структурированных данных.
Язык разметки SGML (Standard Generalized Markup Language - стандартный обобщенный
язык разметки) представляет собой набор правил и шаблонов для описания содержания,
структуры и формата любых электронных документов, независимо от конечного способа
их представления. На основе данного языка разработан ряд специализированных языков,
в том числе:
XML (extensible Markup Language) - расширяемый язык разметки;
HTML (HyperText Markup Language) - язык разметки гипертекста;
MathML (Mathematics Markup Language) - язык описания математических формул.
5.2.3. Языки скриптов
Предметная область - разработка командных пакетных файлов для командных интерпретаторов.
Языки скриптов:
Tcl/Tk - язык скриптов графического пользовательского интерфейса;
Javascript - язык скриптов текстовых браузеров;
Perl - язык, часто применяющийся в CGI-скриптах.
Существенным подмножеством данной области языков являются языки скриптов операционных
систем. Они предназначены для создания командных пакетных файлов на основе команд
операционных систем. Примерами могут служить sh, bash, csh, ksh - языки сценариев
и скриптов операционной системы Unix.
5.2.4. Промежуточные языки программирования
Многие языковые трансляторы (см. разд. 5.2.4.2) используют промежуточные языки
программирования, являющиеся императивными. Промежуточные языки играют важную роль
в переносимости, стоимости и эффективности трансляторов. Существуют два основных способа
становления языка в качестве промежуточного [Handbook 1998].
Включение, когда существующий язык становится промежуточным языком некоторого
транслятора. Примерами могут служить:
ранние компиляторы C++, которые использовали язык программирования С в качестве
промежуточного языка программирования;
для языка разметки и верстки LaTeX промежуточным языком будет ТеХ.
Разработка, когда промежуточный язык специально создается для использования между
компонентами транслятора. Многие компании, разрабатывающие трансляторы, используют
промежуточные языки для сокращения усилий по их разработке. В таком случае вместо
разработки трансляторов, например, с языков С, C++, Pascal в архитектуру Intel, PowerPC
и SPARC для каждого варианта, т. е. 9 трансляторов, можно обойтись созданием лишь
6. Первые 3 программы будут выполнять анализ текстов на исходных языках и преобразовывать
их в промежуточное представление. Оставшиеся 3 программы будут транслировать промежуточное
представление в объектный код. Наиболее известными промежуточными языками, созданными
для этих целей, являются:
Pcode - для языка программирования Pascal;
Java Byte Code - для языка программирования Java;
Diana - для языка программирования Ada.
О промежуточном языке для семейства операционных систем
Идея промежуточных языков была перенесена из области разработки трансляторов в область
разработки операционных систем. Для семейства операционных систем разрабатывается
промежуточный объектный код. Он обеспечивает переносимость (мобильность) программ
на уровне объектного кода.
5.2.5. Языки программирования агентов
Предметная область - многоагентные системы. Агенты - сущности, находящиеся в некоторой
среде, от которой они получают данные, отражают события, происходящие в среде, интерпретируют
их и исполняют команды, воздействующие на среду. Языки программирования агентов:
Java - универсальный язык программирования;
AgentSpeak - язык переговоров и обмена знаниями;
TeleScript - специализированный язык программирования агентов;
Oz - язык описания интеллектуальных агентов.
5.2.6. Языки создания графики
Предметная область - подготовка визуальной графической информации. Языки создания
графики:
PostScript - язык управления для целого ряда графических устройств - от фотонаборных автоматов до лазерных принтеров;
Предметная область - описание аппаратуры микросхем. Языки описания аппаратуры:
VHDL (Very high speed integrated circuit Hardware Description Language) - язык
описания аппаратуры на базе языка Ada. Разрабатывался для моделирования цифровых систем;
Verilog - язык, позволяющий достаточно эффективно выполнить описание и провести
моделирование и синтез цифровых схем благодаря:
применению встроенных примитивов;
применению примитивов пользователя;
средствам временного контроля;
средствам моделирования задержки распространения от входа до выхода;
возможности задания внешних тестовых сигналов.
5.2.8. Языки описания виртуальной реальности
Предметная область - создание трехмерных изображений, так называемых виртуальных
миров, в которых пользователь может перемещаться и взаимодействовать с объектами.
Языки позволяют определить среду действия персонажей компьютерных игр. Языки описания
виртуальной реальности:
VRML (Virtual Reality Modeling Language) - язык моделирования виртуальной реальности.
Язык позволяет определить реакцию объектов на события и перемещения объектов;
Dynamo - язык описания трехмерных виртуальных миров.
5.2.9. Языки конфигурирования
Предметная область - совокупность управляющей информации некоторой системы и процесс
адаптации системы для работы в определенных рамках, налагаемых внешним окружением
и пользователем. Языки конфигурирования:
Autoconf- язык макрокоманд, порождающих выполняемые командным интерпретатором
скрипты, задачей которых является конфигурация исходных текстов;
Знаете ли Вы, что диаграмма последовательности, Sequence diagram - это методология объектно-ориентированного проектирования, предназначенная для моделирования взаимодействия во времени. Диаграмма последовательности позволяет отслеживать поведение взаимодействующих групп объектов.