Модула-3

Поделись знанием:
(перенаправлено с «Modula-3»)
Перейти к: навигация, поиск
Modula-3
Семантика:

императивный, структурный, модульный, объектно-ориентированный, обобщённое

Тип исполнения:

компилируемый

Появился в:

19861988

Автор:

DEC SRC, Olivetti

Система типов:

строгая, статическая

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

[www.opencm3.net CM3], [modula3.elegosoft.com/pm3 PM3], [www.cvsup.org/ezm3 EzM3], HM3

Испытал влияние:

Алгол, Модула-2, Модула-2+, Оберон, Паскаль

Повлиял на:

C#, Java, Ocaml, Python

Сайт:

[www.modula3.org/ ula3.org]

Мо́дула-3 (Modula-3, M3) — это системный язык программирования, который является продолжением языка Модула-2. Разработан в исследовательском центре System Research Center (SRC) корпорации Digital Equipment Corporation (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, аналог шаблонов С++).

Примеры

Программа 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, что позволяет использовать совместно эти два языка.

Напишите отзыв о статье "Модула-3"

Литература

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

  • 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.

Ссылки

Отрывок, характеризующий Модула-3

– Нет, моя душа (граф был смущен тоже. Он чувствовал, что он был дурным распорядителем имения своей жены и виноват был перед своими детьми но не знал, как поправить это) – Нет, я прошу тебя заняться делами, я стар, я…
– Нет, папенька, вы простите меня, ежели я сделал вам неприятное; я меньше вашего умею.
«Чорт с ними, с этими мужиками и деньгами, и транспортами по странице, думал он. Еще от угла на шесть кушей я понимал когда то, но по странице транспорт – ничего не понимаю», сказал он сам себе и с тех пор более не вступался в дела. Только однажды графиня позвала к себе сына, сообщила ему о том, что у нее есть вексель Анны Михайловны на две тысячи и спросила у Николая, как он думает поступить с ним.
– А вот как, – отвечал Николай. – Вы мне сказали, что это от меня зависит; я не люблю Анну Михайловну и не люблю Бориса, но они были дружны с нами и бедны. Так вот как! – и он разорвал вексель, и этим поступком слезами радости заставил рыдать старую графиню. После этого молодой Ростов, уже не вступаясь более ни в какие дела, с страстным увлечением занялся еще новыми для него делами псовой охоты, которая в больших размерах была заведена у старого графа.


Уже были зазимки, утренние морозы заковывали смоченную осенними дождями землю, уже зелень уклочилась и ярко зелено отделялась от полос буреющего, выбитого скотом, озимого и светло желтого ярового жнивья с красными полосами гречихи. Вершины и леса, в конце августа еще бывшие зелеными островами между черными полями озимей и жнивами, стали золотистыми и ярко красными островами посреди ярко зеленых озимей. Русак уже до половины затерся (перелинял), лисьи выводки начинали разбредаться, и молодые волки были больше собаки. Было лучшее охотничье время. Собаки горячего, молодого охотника Ростова уже не только вошли в охотничье тело, но и подбились так, что в общем совете охотников решено было три дня дать отдохнуть собакам и 16 сентября итти в отъезд, начиная с дубравы, где был нетронутый волчий выводок.
В таком положении были дела 14 го сентября.
Весь этот день охота была дома; было морозно и колко, но с вечера стало замолаживать и оттеплело. 15 сентября, когда молодой Ростов утром в халате выглянул в окно, он увидал такое утро, лучше которого ничего не могло быть для охоты: как будто небо таяло и без ветра спускалось на землю. Единственное движенье, которое было в воздухе, было тихое движенье сверху вниз спускающихся микроскопических капель мги или тумана. На оголившихся ветвях сада висели прозрачные капли и падали на только что свалившиеся листья. Земля на огороде, как мак, глянцевито мокро чернела, и в недалеком расстоянии сливалась с тусклым и влажным покровом тумана. Николай вышел на мокрое с натасканной грязью крыльцо: пахло вянущим лесом и собаками. Чернопегая, широкозадая сука Милка с большими черными на выкате глазами, увидав хозяина, встала, потянулась назад и легла по русачьи, потом неожиданно вскочила и лизнула его прямо в нос и усы. Другая борзая собака, увидав хозяина с цветной дорожки, выгибая спину, стремительно бросилась к крыльцу и подняв правило (хвост), стала тереться о ноги Николая.
– О гой! – послышался в это время тот неподражаемый охотничий подклик, который соединяет в себе и самый глубокий бас, и самый тонкий тенор; и из за угла вышел доезжачий и ловчий Данило, по украински в скобку обстриженный, седой, морщинистый охотник с гнутым арапником в руке и с тем выражением самостоятельности и презрения ко всему в мире, которое бывает только у охотников. Он снял свою черкесскую шапку перед барином, и презрительно посмотрел на него. Презрение это не было оскорбительно для барина: Николай знал, что этот всё презирающий и превыше всего стоящий Данило всё таки был его человек и охотник.
– Данила! – сказал Николай, робко чувствуя, что при виде этой охотничьей погоды, этих собак и охотника, его уже обхватило то непреодолимое охотничье чувство, в котором человек забывает все прежние намерения, как человек влюбленный в присутствии своей любовницы.
– Что прикажете, ваше сиятельство? – спросил протодиаконский, охриплый от порсканья бас, и два черные блестящие глаза взглянули исподлобья на замолчавшего барина. «Что, или не выдержишь?» как будто сказали эти два глаза.
– Хорош денек, а? И гоньба, и скачка, а? – сказал Николай, чеша за ушами Милку.
Данило не отвечал и помигал глазами.
– Уварку посылал послушать на заре, – сказал его бас после минутного молчанья, – сказывал, в отрадненский заказ перевела, там выли. (Перевела значило то, что волчица, про которую они оба знали, перешла с детьми в отрадненский лес, который был за две версты от дома и который был небольшое отъемное место.)
– А ведь ехать надо? – сказал Николай. – Приди ка ко мне с Уваркой.
– Как прикажете!
– Так погоди же кормить.
– Слушаю.
Через пять минут Данило с Уваркой стояли в большом кабинете Николая. Несмотря на то, что Данило был не велик ростом, видеть его в комнате производило впечатление подобное тому, как когда видишь лошадь или медведя на полу между мебелью и условиями людской жизни. Данило сам это чувствовал и, как обыкновенно, стоял у самой двери, стараясь говорить тише, не двигаться, чтобы не поломать как нибудь господских покоев, и стараясь поскорее всё высказать и выйти на простор, из под потолка под небо.
Окончив расспросы и выпытав сознание Данилы, что собаки ничего (Даниле и самому хотелось ехать), Николай велел седлать. Но только что Данила хотел выйти, как в комнату вошла быстрыми шагами Наташа, еще не причесанная и не одетая, в большом, нянином платке. Петя вбежал вместе с ней.
– Ты едешь? – сказала Наташа, – я так и знала! Соня говорила, что не поедете. Я знала, что нынче такой день, что нельзя не ехать.
– Едем, – неохотно отвечал Николай, которому нынче, так как он намеревался предпринять серьезную охоту, не хотелось брать Наташу и Петю. – Едем, да только за волками: тебе скучно будет.
– Ты знаешь, что это самое большое мое удовольствие, – сказала Наташа.
– Это дурно, – сам едет, велел седлать, а нам ничего не сказал.
– Тщетны россам все препоны, едем! – прокричал Петя.
– Да ведь тебе и нельзя: маменька сказала, что тебе нельзя, – сказал Николай, обращаясь к Наташе.
– Нет, я поеду, непременно поеду, – сказала решительно Наташа. – Данила, вели нам седлать, и Михайла чтоб выезжал с моей сворой, – обратилась она к ловчему.
И так то быть в комнате Даниле казалось неприлично и тяжело, но иметь какое нибудь дело с барышней – для него казалось невозможным. Он опустил глаза и поспешил выйти, как будто до него это не касалось, стараясь как нибудь нечаянно не повредить барышне.


Старый граф, всегда державший огромную охоту, теперь же передавший всю охоту в ведение сына, в этот день, 15 го сентября, развеселившись, собрался сам тоже выехать.
Через час вся охота была у крыльца. Николай с строгим и серьезным видом, показывавшим, что некогда теперь заниматься пустяками, прошел мимо Наташи и Пети, которые что то рассказывали ему. Он осмотрел все части охоты, послал вперед стаю и охотников в заезд, сел на своего рыжего донца и, подсвистывая собак своей своры, тронулся через гумно в поле, ведущее к отрадненскому заказу. Лошадь старого графа, игреневого меренка, называемого Вифлянкой, вел графский стремянной; сам же он должен был прямо выехать в дрожечках на оставленный ему лаз.
Всех гончих выведено было 54 собаки, под которыми, доезжачими и выжлятниками, выехало 6 человек. Борзятников кроме господ было 8 человек, за которыми рыскало более 40 борзых, так что с господскими сворами выехало в поле около 130 ти собак и 20 ти конных охотников.
Каждая собака знала хозяина и кличку. Каждый охотник знал свое дело, место и назначение. Как только вышли за ограду, все без шуму и разговоров равномерно и спокойно растянулись по дороге и полю, ведшими к отрадненскому лесу.
Как по пушному ковру шли по полю лошади, изредка шлепая по лужам, когда переходили через дороги. Туманное небо продолжало незаметно и равномерно спускаться на землю; в воздухе было тихо, тепло, беззвучно. Изредка слышались то подсвистыванье охотника, то храп лошади, то удар арапником или взвизг собаки, не шедшей на своем месте.
Отъехав с версту, навстречу Ростовской охоте из тумана показалось еще пять всадников с собаками. Впереди ехал свежий, красивый старик с большими седыми усами.