software.wikisort.org - Язык_программирования

Search / Calendar

Мо́дула-3 (Modula-3, M3) — системный язык программирования, развитие языка Модула-2. Разработан в исследовательском центре System Research Center (SRC) компании DEC совместно с Olivetti.

Modula-3
Семантика императивный, структурный, модульный, объектно-ориентированный, обобщённое
Класс языка язык программирования, объектно-ориентированный язык программирования и императивный язык программирования
Тип исполнения компилируемый
Появился в 1986—1988
Автор DEC SRC, Olivetti
Разработчик Digital Equipment Corporation
Выпуск 5.8.6 (14 июля 2010; 12 лет назад (2010-07-14))
Система типов строгая, статическая
Основные реализации CM3, PM3, EzM3, HM3
Испытал влияние Алгол, Модула-2, Модула-2+, Оберон, Паскаль
Повлиял на C#, Java, Ocaml, Python, Nim
Сайт modula3.org

Разработчики: Лука Карделли (Luca Cardelli), Джим Донахью (Jim Donahue), Мик Джордан (Mick Jordan), Билл Калсоу (Bill Kalsow) и Грег Нельсон (Greg Nelson). Язык не получил широкого распространения в промышленности, хотя используется в академических кругах. Во время разработки на язык было оказано значительное влияние со стороны языка Modula-2+, использующегося в то время в SRC для написания ПО для многопроцессорной рабочей станции DEC Firefly.

Основными особенностями Модулы-3 являются: простота, типобезопасность и возможность применения для написания системного ПО. Модула-3 поддерживает обобщённое программирование, многозадачность, автоматическое управление памятью (сборка мусора), обработку исключений, объектно-ориентированное программирование (включая сокрытие данных и методов). Разработчики языка преследовали цель дополнить Модулу-2 новыми средствами современных языков программирования. В то же время потенциально опасные и сложные средства, такие, как множественное наследование и перегрузка операторов, не были включены в язык.


История


Разработка Модулы-3 началась в 1986 году. Морис Уилкс (Maurice Wilkes) написал Никлаусу Вирту некоторые идеи по созданию новой версии Модулы. Уилкс, до этого работавший в DEC, вернулся в Англию и устроился в исследовательский центр Olivetti. Вирт в это время был занят разработкой нового языка программирования Oberon, но не отказал Уилксу в помощи. Описание Модулы-3 было закончено в августе 1988 и исправлено в январе 1989 года. Тогда же появились компиляторы от DEC SRC и Olivetti, а также начали появляться компиляторы от сторонних фирм.

В девяностые годы XX века Модула-3 получила распространение преимущественно в академической среде, как язык для обучения программированию, и почти не использовалась в промышленности. Причиной этого могла послужить гибель DEC — основного разработчика языка. В то же время корпорацией Critical Mass был предложен коммерческий компилятор CM3 и интегрированная среда разработки Reactor. В 2000 году Critical Mass прекратила свою деятельность. В настоящее время техническую поддержку Модулы-3 предоставляет корпорация Elego Software Solutions GmbH, которая унаследовала от Critical Mass исходные коды компилятора CM3. Интегрированная среда Reactor сейчас переименована в CM3 IDE и распространяется с исходными текстами. В марте 2002 года Elego получила исходные тексты компилятора PM3, до этого разрабатывавшегося в Ecole Polytechnique de Montreal.


Возможности языка


Обработка исключений в блоках TRY … EXCEPT … END и TRY … FINALLY … END. Конструкция EXCEPT реализована подобно конструкции CASE. Modula-3 также поддерживает цикл LOOP … EXIT … END.

Реализована поддержка объектно-ориентированного программирования. Объектным типом является OBJECT. Этот тип отличается от записей (RECORD) тем, что является ссылочным, и позволяет создавать процедуры, связанные с типом (методы), а также поддерживает перегрузку методов. Все методы являются виртуальными. Например, конструкция:

TYPE A = OBJECT a: INTEGER; METHODS p():=AP END;

определяет объектный тип, содержащий поле a целого типа и метод p. Процедура AP является реализацией метода p и имеет следующий вид:

PROCEDURE AP(self: A) = BEGIN … END AP;

Вызов метода осуществляется так: o.p();, где o — переменная (объект) типа A.

Конструкция REVEAL обеспечивает простой, но в то же время очень мощный механизм сокрытия деталей реализации объекта от клиентов.

Модула-3 — один из немногих языков, который требует, чтобы программные единицы, импортированные из внешних модулей, строго квалифицировались. Например, если модуль A использует переменную x из модуля B, обращение к этой переменной должно быть записано в такой форме: B.x. Другими словами, Модула-3 не позволяет импортировать все объекты, экспортируемые каким-либо модулем. Благодаря этому практически невозможно вывести из строя программу, добавив в неё новую функциональность. Большое количество пользователей может одновременно расширять программу, не боясь, что это приведёт к сбоям. Также Модула-3 устанавливает различие между объявлением сигнатуры метода (блок METHODS) и его перегрузкой (блок OVERRIDES).


Свойства языка



Примеры


Программа Hello, world! может выглядеть так:

MODULE Main;
IMPORT IO;
BEGIN
  IO.Put ("Hello World\n")
END Main.

или так (используется модуль работы с потоком вывода):

MODULE Hello EXPORTS Main;
IMPORT Wr, Stdio;
BEGIN
  Wr.PutText(Stdio.stdout, "Hello, World!\n");
  Wr.Close(Stdio.stdout);
END Hello.

Некоторые модули, входящие в стандартную библиотеку


Аналогично языку C, большинство процедур для написания программ на Модуле-3 реализовано в стандартной библиотеке. Операции ввода-вывода также реализованы в стандартной библиотеке.

Также в состав стандартной библиотеки входят интерфейсы для работы с числами с плавающей точкой, словарями, списками и т. д.


Низкоуровневое программирование


Модула-3, помимо ссылок, также поддерживает и указатели. Тип ADDRESS является аналогом типа void* в Си. Указатель на переменную целого типа будет выглядеть так:

TYPE IntPtr = UNTRACED REF INTEGER;

Для получения адреса переменной используется встроенная функция ADR(), которая является аналогом операции & в Си. Сборщик мусора не следит за указателями (об этом говорит слово UNTRACED). Все указатели нужно освобождать вручную, используя встроенную процедуру DISPOSE.

Также, Модула-3 поддерживает все типы данных, имеющиеся в языке Си. Благодаря этому, код на Модуле-3 может свободно компоноваться с кодом на языке Си. Все определения типов содержатся в модуле Ctypes.


Основные реализации


Большинство компиляторов имеет статус Open Source.

Все реализации поддерживают большое количество платформ (более 20). Типы данных бинарно совместимы с типами языка C, что позволяет использовать совместно эти два языка.


Литература


Некоторые из этих книг можно найти в зарубежных интернет-магазинах. Большинство из них доступно бесплатно в сети Интернет.


Проекты, использующие Модулу-3



Примечания



    Ссылки



    На других языках


    [it] Modula-3

    Il Modula-3 è un linguaggio di programmazione object-oriented nato come evoluzione del Modula-2. È stato progettato da Luca Cardelli, Jim Donahue, Mick Jordan, Bill Kalsow and Greg Nelson presso i centri di ricerca di DEC e Olivetti.
    - [ru] Модула-3



    Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

    Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.org внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

    2019-2025
    WikiSort.org - проект по пересортировке и дополнению контента Википедии