Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Из Википедии — свободной энциклопедии

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

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

Разработчики: Лука Карделли (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).

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

  • Модули состоят из интерфейса (INTERFACE) и тела (MODULE);
  • Модули, содержащие небезопасный код, помечаются ключевым словом UNSAFE;
  • Автоматическое управление памятью (сборка мусора);
  • Строгая типизация, составные (RECORD) и расширяемые (OBJECT) типы;
  • Обработка исключительных ситуаций;
  • Поддержка многопоточности;
  • Обобщения (GENERIC, аналог шаблонов C++).

Примеры

Программа 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 реализовано в стандартной библиотеке. Операции ввода-вывода также реализованы в стандартной библиотеке.

  • IO — интерфейс ввода-вывода.
  • Rd/Wr — интерфейсы, реализующие потоки чтения/записи, соответственно.
  • Text — интерфейс для работы со строками (тип TEXT).
  • Word — процедуры для работы с беззнаковыми целыми.
  • Fmt — форматирование данных различных типов для печати.

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

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

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

TYPE IntPtr = UNTRACED REF INTEGER;

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

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

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

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

  • DEC SRC M3 — оригинальный компилятор Модулы-3 от DEC.
  • Critical Mass CM3 — наиболее развитый преемник DEC SRC M3.
  • Polytechnique Montreal Modula-3 PM3 — другой преемник DEC SRC M3 (сейчас слился с CM3).
  • EzM3 — легковесный независимый компилятор, построенный на основе PM3. Развивается совместно с CVSup
  • HM3 — преемник PM3 (версии 1.1.15), с поддержкой POSIX Threading (NPTL).

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

Литература

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

  • Greg Nelson, ed. Systems Programming with Modula-3 The definitive reference on the Modula-3 language with interesting articles on object-oriented systems software construction and a documentation of the discussion leading to the final features of the language.
  • Samuel P. Harbison, Modula-3 Easy to use class textbook.
  • Robert Sedgewick, Algorithms in Modula-3
  • Laszlo Boszormenyi & Carsten Weich, Programming in Modula-3: An Introduction in Programming with Style
  • Renzo Orsini, Agostino Cortesi Programmare in Modula-3 : introduzione alla programmazione imperativa e a oggetti an italian book of the language explaining its main features.

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

  • Операционная система SPIN (en) была написана на Модуле-3. Интерфейсы ядра совместимы с DEC Unix.
  • CVSup — программа для синхронизации репозиториев, также написана на Модуле-3.

Примечания

Ссылки


Эта страница в последний раз была отредактирована 7 ноября 2022 в 11:15.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).