Модула-2 (язык программирования)

Модула-2 (язык программирования)

Модула-2 (Modula-2) — язык программирования общего назначения, разработанный Никлаусом Виртом в 1978 году.

Содержание

Цели и принципы разработки языка

Язык Модула-2 был разработан Никлаусом Виртом для создания системного программного обеспечения ЭВМ Lilith, разработка которой началась в 1977 году в Институте информатики Цюриха. Этим определяются многие его особенности. Язык изначально проектировался как средство промышленного системного программирования, позволяющее писать надёжные, понятные, удобные в сопровождении программы. При этом язык должен был, оставаясь языком высокого уровня со строгой типизацией и поддержкой всех средств надёжного программирования, давать возможность обращаться непосредственно к аппаратуре, создавать специфические системные программы, такие как обработчики прерываний и драйверы устройств, поддерживать программирование параллельно исполняющихся взаимодействующих процессов.

Предками Модулы-2 были языки Паскаль и Модула — также язык-потомок Паскаля, в котором появилось понятие модуля и средства параллельного программирования. Единственная экспериментальная реализация Модулы была создана в 1975 году. Модулу можно рассматривать как первоначальный вариант, своего рода «альфа-версию» Модулы-2, синтаксически эти два языка очень близки. Кроме того, по словам Вирта, на Модулу-2 оказал влияние язык Mesa, разработанный в Xerox PARC.

Общая характеристика

Язык Модула-2 — структурный, модульный язык программирования, с синтаксисом, основанным на языке Паскаль, но заметно переработанным и улучшенным. Его основные характерные особенности следующие:

  • Программа представляет собой набор модулей — самостоятельных единиц компиляции, которые могут компилироваться раздельно. При этом программный модуль может быть (но не обязан) разделён на две части: модуль определений и модуль реализации. Модуль определений — это внешний интерфейс модуля, то есть набор экспортируемых им имён констант, переменных, типов, заголовков процедур и функций, которые доступны внешним модулям. Модуль реализации содержит программный код, в частности, конкретизацию описаний всего, что перечислено в модуле определений. Например, некоторый тип «запись» может быть объявлен в модуле определений с указанием лишь его имени, а в модуле реализации — с полной структурой. В этом случае внешние модули могут создавать значения данного типа, вызывать процедуры и функции, работающие с ним, выполнять присваивание переменных, но не имеют прямого доступа к структуре значений, поскольку эта структура не описана в модуле определений. Если для этого же типа описать в модуле определений структуру, то она станет доступна. Помимо модулей глобального уровня в Модуле-2 допускается создавать локальные модули.
  • Импорт определений, описанных в прочих модулях, полностью контролируется. Можно импортировать модули определений целиком, но синтаксис позволяет существенно уточнять списки импорта, например, импортировать из модуля конкретные константы, переменные, процедуры и функции, только те, которые необходимы.
  • Все средства ввода-вывода исключены из языка. Вместо них используются библиотечные модули, на которые возложена задача реализации ввода-вывода на конкретных системах. Однако имеется набор стандартизованных библиотек ввода-вывода, предоставляющих необходимые функции для типичных случаев (ввод-вывод основных типов данных с использованием текстового терминала, файловый ввод-вывод).
  • В язык введён минимум понятий и примитивов для многопоточного программирования, добавлена также стандартная библиотека, поддерживающая параллельные программы.
  • Включены средства прямого доступа к аппаратуре компьютера, в частности, реализовано прямое отображение структур данных на память, в том числе с прямым заданием адреса.

Язык прост по структуре - в нём имеется только 40 ключевых слов (для сравнения - в Аде их 63), официальное "Сообщение о языке", содержащее исчерпывающее описание Модулы-2, занимает 40 страниц (полное описание сокращённого варианта PL/1 занимает около 200 страниц).

Особенности синтаксиса

Описать особенности Модулы-2 проще всего путём сравнения с языком Паскаль. Наиболее важные отличия, помимо введения модулей и механизмов управляемого экспорта описаний, состоят в следующем.

  • Язык регистро-зависимый — прописные и строчные буквы в идентификаторах различаются. Все ключевые слова пишутся в верхнем регистре.
  • Синтаксис сделан более регулярным и упрощён. Все синтаксические конструкции, кроме цикла DO-REPEAT, следуют принципу: конструкция, начинающаяся с ключевого слова, заканчивается ключевым словом. В частности, условный оператор имеет общий вид
    IF Условие THEN
       Операторы
    ELSIF Условие THEN
      Операторы
    ELSIF Условие THEN
      Операторы
    ...
    ELSE
      Операторы
    END

    Благодаря этому исчезла необходимость постоянного использования составных операторов BEGIN-END и «лестниц» операторов IF при многоступенчатой проверке условий.
  • Циклы WHILE и FOR также предусматривают тело из набора операторов и заканчиваются ключевым словом END.
  • Добавлен безусловный цикл LOOP-END.
  • И процедуры, и функции объявляются с ключевым словом PROCEDURE.
  • Добавлен предопределённый тип BITSET — битовое множество.
  • Из языка исключён оператор безусловного перехода GOTO.
  • Добавлен процедурный тип, дающий возможность присваивать процедуры и функции переменным. Позже эта возможность была включена и в Паскаль, где она изначально отсутствовала.

Достоинства и недостатки

Можно определённо сказать, что язык Модула-2, сохранив все положительные черты Паскаля, прежде всего, простоту и логичность синтаксиса, имеет, по сравнению с языком-предком, массу дополнительных положительных черт, делающих его гораздо более мощным и лучше приспособленным как для системного, так и для прикладного программирования (что, в общем, неудивительно, так как Паскаль создавался как учебный язык, а Модула-2 — как язык системного программирования). Все или почти все вышеперечисленные изменения синтаксиса и дополнительные возможности можно рассматривать как достоинства языка. Свойственная всем языкам Вирта лаконичность, стремление к созданию минимального достаточного для решения поставленных задач инструментария проявились в полной мере. Система описания модулей, контролируемого импорта-экспорта описаний позволяет организовывать взаимодействие частей программы эффективным, но максимально упорядоченным образом.

К недостаткам языка можно отнести:

  • Слабо развитые механизмы параллельного программирования, в частности — организации взаимодействия параллельных процессов. Реализация этих средств переложена на системные библиотеки.
  • Отсутствие механизмов управления отображением абстрактных типов на память.
  • Отсутствие динамических массивов и строк. Впрочем, для языка системного программирования отнесение данных фактов к недостаткам спорно.
  • Возможно, система модулей несколько переусложнена. В частности, единственным поводом для использования вложенных модулей является ограничение области видимости, которое можно реализовать и другими средствами. Можно отметить, что в потомке Модулы-2 — Обероне, — произошёл отказ от разделения модулей на модуль реализации и модуль определений.

Использование

В целом можно сказать, что Модула-2 не получила того распространения и признания, которого заслуживала по своим качествам. Язык завоевал определённую популярность в академической среде Европы, был довольно популярен среди программистов СССР, но не смог потеснить своего предшественника — новые реализации языка Паскаль, включившие в себя средства организации модулей, а позже — средства объектного программирования, всегда обходили Модулу-2 по популярности. Система Lilith, для которой создавалась Модула-2, не получила широкой известности и не смогла помочь Модуле-2 в продвижении.

Свою роль сыграло чрезвычайно широкое распространение дешёвых и быстрых Паскаль-компиляторов фирмы Borland International. Интересно, что компилятор Turbo Modula-2 для ОС CP/M был не только создан Borland, но даже поступил в продажу в Северной Америке и Западной Европе. Однако руководство компании, прежде всего Филипп Кан, приняло решение отказаться от развития этой системы, чтобы не создавать конкурента крайне успешному Turbo Pascal. Результатом этого решения стало то, что вице-президент Borland Нильс Йенсен, один из основателей компании, вместе со своей командой разработчиков в 1987 году покинул Borland, выкупив права на Turbo Modula-2. Созданная им компания JPI (Jensen & Partners International) выпустила под маркой TopSpeed линейку компиляторов для процессоров семейства x86: Assembler, Modula-2, Pascal, C/C++, Ada.[1]

Тем не менее, Модула-2 получила своё практическое применение. Она традиционно используется для написания ПО для советских и российских космических спутников (например, ГЛОНАСС). Разработку компилятора осуществляет новосибирская компания Excelsior (XDS).

Дальнейшим развитием Модулы-2 является созданный Виртом и Гуткнехтом язык Оберон (1988). Фирмами DEC и Модула-3.

Примечания

Ссылки



Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "Модула-2 (язык программирования)" в других словарях:

  • Язык программирования Модула — алгоритмический язык, предназначенный для составления программ, работающих в реальном времени. В языке Модула используются: понятия модуля и процесса; средства программирования низкого уровня. Программа на языке Модула формируется из независимых… …   Финансовый словарь

  • Модула (язык программирования) — Модула  язык программирования, потомком языка Паскаль. Он была разработан в Швейцарии в конце 1970 х годов Никлаусом Виртом, тем же человеком, который создал Паскаль. Основным нововведением Модулы над Паскалем является модульная система,… …   Википедия

  • Язык программирования — Язык программирования  формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия,… …   Википедия

  • Язык программирования Си — Си Семантика: процедурный Тип исполнения: компилируемый Появился в: 1969 73 г. Автор(ы): Кен Томпсон, Денис Ритчи Типизация данных: статическая Основные реализации …   Википедия

  • Язык программирования C — Си Семантика: процедурный Тип исполнения: компилируемый Появился в: 1969 73 г. Автор(ы): Кен Томпсон, Денис Ритчи Типизация данных: статическая Основные реализации …   Википедия

  • Язык программирования Рубин — Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 …   Википедия

  • Язык программирования Java — Java Класс языка: объектно ориентированный, структурный, императивный Появился в: 1995 г. Автор(ы): Sun Microsystems Последняя версия: Java Standard Edition 6 (1.6.14) Т …   Википедия

  • Язык программирования Dylan — Dylan  динамический объектно ориентированный язык программирования, нацеленный на быструю разработку программ, разработанный, прежде всего, усилиями множественное наследование, полиморфизм и многие другие функции. Язык общего назначения,… …   Википедия

  • Оберон-2 (язык программирования) — Oberon 2 Класс языка: императивный, структурированный, модульный, объектно ориентированный Появился в: 1991 Автор(ы): Никлаус Вирт, Ханспетер Мёссенбёк …   Википедия

  • Компонентный Паскаль (язык программирования) — Компонентный Паскаль язык программирования, созданный на основе языка Оберон 2 компанией Oberon microsystems, Inc.. Компонентный Паскаль является прямым наследником легендарного Паскаля, Модулы 2 и диалектом Оберона. Основные уточнения… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»