Модула-2 -- потомок Паскаля и экспериментального языка Н.Вирта, разработанного примерно в 1975 г. и названного Модула. Здесь сказалось влияние опыта работы Вирта с языком Меза в Исследовательском центре фирмы Xerox в Пало-Альто (США) в 1976 г. Разработка Модулы-2 началась в 1977 г., и язык был впервые реализован на мини-ЭВМ PDP-11 в 1979 г.
Основные части языка, в которых Модула-2 усовершенствован по сравнению с Паскалем, следующие:
- упрощение грамматических правил;
- возможность разбивать большие программы на маленькие, называемые модулями;
- возможность программирования с помощью языковых средств низкого уровня, подобных тем, которые требуются для разработки операционных систем ЭВМ;
- обеспечение мультипрограммирования.
В общем, Модула-2 - богатый и выразительный язык. Он позволяет представлять отношения и понятия программирования, недоступные во многих других языках.
Язык программирования Модула-2 относится к машинно-независимым языкам, так что одна и та же программа, написанная на Модуле-2, может без переписывания выполняться на ЭВМ совершенно различных типов. Обычно машинно-независимые языки могут применяться только для задач программирования высокого уровня или общего характера, таких как задачи бухгалтерского учета и расчета заработанной платы. Однако Модула-2 может применяться и для программирования на языковых средствах низкого уровня. Например, Вирт применил Модулу-2 для написания полной операционной системы для мини-ЭВМ Lilith.
Большинство языков нельзя применять для написания операционных систем, поскольку для этого требуются операции с информацией машинного уровня, уникальной для конкретной ЭВМ. Модула-2 позволяет описать любое действие, которое можно описать на машинном языке конкретной ЭВМ. Эта цель достигается с помощью модулей, используемых, чтобы скрыть детали программы, различные для ЭВМ различных типов. Таким образом, бОльшую часть программы оказывается возможным переносить с одной ЭВМ на другую.
Большинство языков программирования позволяет выполнять одновременно только одно задание. Однако в некоторых прикладных задачах, таких как заказ билетов на самолеты, программа одновременно должна выполнять много действий. Один клиент отменяет заказ, тогда как другой получает посадочный талон. Возможность выполнения действий называется параллельной обработкой , и язык Модула-2 - один из немногих языков, содержащих команды для описания таких операций.
Абстракция данных и скрытие информации - современные концепции программирования, помогающие уменьшить сложность программ и повысить их надежность. Конкретные детали организации данных на диске определяют программисты, создающие операционную систему конкретной ЭВМ. Эти детали скрыты в некотором модуле и могут быть различными для различных ЭВМ. Этот факт не оказывает отрицательного влияния на пользователя. Все, что нужно пользователю, -- это процедура высокого уровня для выполнения задач ввода-вывода с диска, например Open(имя файла), Read(два блока, имя файла).
Последней характерной чертой Модулы-2 является раздельная компиляция, позволяющая разрабатывать и хранить в библиотеках программы, которые можно использовать повторно. Библиотечные модули делятся на часть, связанную с определением и видимую для пользователя, и реализующую часть, которую видит только программист. Часть, связанная с определением, - это все, что необходимо для компиляции пользовательских программ. Реализующая часть содержит конкретные прикладные программы, выполняющие требуемые функции. Пользовательские программы, модули определения и модули реализации компилируются отдельно друг от друга. (Контроль и проверка версии осуществляется системой.) В реализующую часть библиотечных программ можно вносить изменения, не влияя на программы, а тем самым и на пользователей. Этот подход и концепции абстракции и скрытия информации используются совместно и согласованно.