Парадигмы | императивный , структурированный , процедурный , модульный , параллельный |
---|---|
Семья | Вирт Модула |
Разработано | Лука Карделли , Джеймс Донахью, Люсиль Глассман, Мик Джордан; Билл Калсо, Грег Нельсон |
Разработчики | DEC Olivetti elego Software Solutions GmbH |
Впервые появился | 1988 |
Стабильный выпуск | 5.8.6 / 14 июля 2010 г . |
Предварительный выпуск | 5.8.6 / 14 июля 2010 г . |
Печатная дисциплина | сильный , статический , безопасный или, если небезопасный, явно безопасный изолированный |
Объем | Лексический |
Платформа | IA-32 , x86-64 , PowerPC , SPARC |
Операционные системы | Кроссплатформенность : FreeBSD , Linux , Darwin , SunOS. |
Веб-сайт | www |
Основные реализации | |
SRC Modula-3, CM3, [1] PM3, [2] EZM3, [3] M3 / PC Клагенфурт [4] | |
Под влиянием | |
АЛГОЛ , Евклид , Меса , Модула-2 , Модула-2 + , Оберон , Паскаль | |
Под влиянием | |
C # , Java , Nim , [5] OCaml , Python [6] |
Modula-3 - это язык программирования, задуманный как преемник обновленной версии Modula-2, известной как Modula-2 + . Хотя он оказал влияние в исследовательских кругах (оказал влияние на дизайн таких языков, как Java , C # и Python [7] ), он не получил широкого распространения в промышленности. Его разработали Лука Карделли , Джеймс Донахью, Люсиль Глассман, Мик Джордан (ранее в Лаборатории программных технологий Оливетти ), Билл Калсо и Грег Нельсон из Центра системных исследований (SRC) Digital Equipment Corporation (DEC ) иИсследовательский центр Оливетти (ORC) в конце 1980-х.
Основными особенностями Modula-3 являются простота и безопасность при сохранении мощи языка системного программирования. Modula-3 нацелен на продолжение традиции Pascal в области безопасности типов, одновременно вводя новые конструкции для практического программирования в реальном мире. В частности, в Modula-3 добавлена поддержка общего программирования (аналогичного шаблонам ), многопоточности , обработки исключений , сборки мусора , объектно-ориентированного программирования , частичного выявления и явной маркировки небезопасного кода. Целью разработки Modula-3 был язык, реализующий наиболее важные функции современного императивного программирования.языки в довольно простых формах. Таким образом, якобы опасные и усложняющие функции, такие как множественное наследование и перегрузка операторов, были опущены.
Историческое развитие [ править ]
Проект Modula-3 стартовал в ноябре 1986 года, когда Морис Уилкс написал Никлаусу Вирту с некоторыми идеями для новой версии Modula. Незадолго до этого Уилкс работал в DEC, а затем вернулся в Англию и присоединился к Совету по стратегии исследований Оливетти. Вирт уже перешел в Оберон , но у него не было проблем с командой Уилкса, продолжающей разработку под названием Modula. Определение языка было завершено в августе 1988 года, а обновленная версия - в январе 1989 года. Вскоре последовали компиляторы от DEC и Olivetti, а после этого были реализованы сторонние реализации.
На его дизайн сильно повлияла работа над языком Modula-2 +, который использовался в SRC и в Исследовательском центре Acorn Computers (ARC, позже ORC, когда Olivetti приобрел Acorn) в то время, который был языком операционной системы для Была написана многопроцессорная рабочая станция VAX DEC Firefly, на которой был написан компилятор Acorn для Acorn C и библиотека выполнения Modula (CAMEL) в ARC для проекта операционной системы ARX для компьютеров семейства Acorn Archimedes на базе ARM . Как говорится в пересмотренном отчете Modula-3, на этот язык повлияли другие языки, такие как меса , кедр., Объект Паскаль , Оберон и Евклид . [8]
В течение 1990-х годов Modula-3 приобрел значительную популярность в качестве учебного языка, но так и не получил широкого распространения в промышленности. Этому, возможно, способствовала кончина DEC, ключевого сторонника Modula-3 (особенно после того, как она перестала эффективно поддерживать его до того, как DEC была продана Compaq в 1998 году). В любом случае, несмотря на простоту и мощность Modula-3, похоже, что не было особой потребности в процедурно- компилируемом языке с ограниченной реализацией объектно-ориентированного программирования . Какое-то время коммерческий компилятор под названием CM3 поддерживался одним из главных разработчиков, ранее работавшим в DEC SRC, который был нанят до того, как DEC был продан Compaq , интегрированной среде разработки.(IDE) под названием Reactor и расширяемая виртуальная машина Java (с лицензией на двоичный код и исходный код).форматы и возможность сборки с помощью Reactor) были предложены Critical Mass, Inc., но эта компания прекратила активную деятельность в 2000 году и передала часть исходного кода своих продуктов компании elego Software Solutions GmbH. Модула-3 сейчас преподается в университетах в основном на курсах сравнительного языка программирования, и его учебники больше не издаются. По сути, единственным корпоративным сторонником Modula-3 является компания elego, которая унаследовала исходные коды от Critical Mass и с тех пор сделала несколько выпусков системы CM3 в исходном и двоичном коде. Reactor IDE была выпущена с открытым исходным кодом после того, как несколько лет назад ее не было, под новым названием CM3-IDE. В марте 2002 года компания elego также приобрела репозиторий другого активного дистрибутива Modula-3, PM3, который до тех пор находился в Политехнической школе Монреаля. но который позже продолжился работой над HM3, с годами улучшался, пока не был устаревшим.
Синтаксис [ править ]
Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( Июль 2011 г. ) |
Типичный пример синтаксиса языка - «Hello, World!» программа .
МОДУЛЬ Main ; ИМПОРТ IO ; НАЧАТЬ IO . Поместите ( "Hello World \ n" ) END Main .
Все программы в Modula-3 имеют как минимум файл модуля, в то время как большинство также включают файл интерфейса, который используется клиентами для доступа к данным из модуля. Как и в других языках, программа Modula-3 должна экспортировать основной модуль, который может быть либо файлом с именем Main.m3, либо файлом, который может вызывать EXPORT
экспорт основного модуля.
МОДУЛЬ Foo EXPORTS Главная
Рекомендуется, чтобы имена файлов модулей совпадали с именами в исходном коде. Если они различаются, компилятор выдает только предупреждение.
Другие соглашения в синтаксисе включают именование экспортируемого типа интерфейса T
, поскольку типы обычно квалифицируются своими полными именами, поэтому T
будет именоваться тип внутри модуля с именем Foo Foo.T
. Это способствует удобочитаемости. Другое подобное соглашение - это именование общедоступного объекта, Public
как в примерах ООП выше.
Особенности языка [ править ]
Модульность [ править ]
Прежде всего, все скомпилированные модули являются либо INTERFACE
реализациями MODULE
, либо разными. Скомпилированный модуль интерфейса, начинающийся с ключевого слова INTERFACE
, определяет константы, типы, переменные, исключения и процедуры. Модуль реализации, начинающийся с ключевого слова MODULE
, предоставляет код и любые другие константы, типы или переменные, необходимые для реализации интерфейса. По умолчанию модуль реализации будет реализовывать интерфейс с тем же именем, но модуль может явно связываться EXPORT
с модулем с другим именем. Например, основная программа экспортирует модуль реализации для основного интерфейса.
МОДУЛЬ HelloWorld EXPORTS Main ; ИМПОРТ IO ; НАЧАТЬ IO . Поместите ( "Hello World \ n" ) END HelloWorld .
Любой скомпилированный модуль может иметь IMPORT
другие интерфейсы, хотя циклический импорт запрещен. Это можно решить, выполнив импорт из МОДУЛЯ реализации. Сущности в импортированном модуле могут быть импортированы вместо только имени модуля, используя FROM Module IMPORT Item [, Item]*
синтаксис:
МОДУЛЬ HelloWorld EXPORTS Main ; FROM IO ИМПОРТ Put ; НАЧАЛО Положите ( "Hello World \ n" ) КОНЕЦ HelloWorld .
Обычно импортируется только интерфейс и используется нотация «точка» для доступа к элементам в интерфейсе (аналогично доступу к полям в записи). Типичное использование - определение одной структуры данных (записи или объекта) для каждого интерфейса вместе с любыми вспомогательными процедурами. Здесь основной тип получит имя 'T', а один будет использовать как в MyModule.T
.
В случае конфликта имен между импортированным модулем и другим объектом в модуле зарезервированное слово AS
может использоваться, как вIMPORT CollidingModule AS X;
Безопасный vs небезопасный [ править ]
Некоторая способность считается небезопасной, когда компилятор больше не может гарантировать согласованность результатов; например, при взаимодействии с языком C. Ключевое слово с UNSAFE
префиксом перед INTERFACE
или MODULE
может использоваться для указания компилятору включить определенные низкоуровневые функции языка. Например, небезопасная операция - это обход системы типов, использующий LOOPHOLE
для копирования битов целого числа в число с плавающей запятой REAL
.
Интерфейс, который импортирует небезопасный модуль, также должен быть небезопасным. Безопасный интерфейс может быть экспортирован небезопасным модулем реализации. Это типичное использование при взаимодействии с внешними библиотеками , когда создаются два интерфейса: один небезопасный, другой безопасный.
Дженерики [ править ]
Универсальный интерфейс и соответствующий ему универсальный модуль префикс ключевого слова INTERFACE
or и принимают в качестве формальных аргументов другие интерфейсы. Таким образом (подобно шаблонам C ++ ) можно легко определять и использовать абстрактные типы данных, но, в отличие от C ++ , детализация находится на уровне модуля. Интерфейс передается универсальному интерфейсу и модулям реализации в качестве аргументов, и компилятор сгенерирует конкретные модули.MODULE
GENERIC
Например, можно определить GenericStack, а затем создать его экземпляр с помощью таких интерфейсов, как IntegerElem
, или RealElem
, или даже интерфейсов для объектов, если каждый из этих интерфейсов определяет свойства, необходимые для универсальных модулей.
Голые типы INTEGER
или REAL
их нельзя использовать, потому что они не являются модулями, а система универсальных типов основана на использовании модулей в качестве аргументов. Для сравнения, в шаблоне C ++ будет использоваться пустой тип.
ФАЙЛ: IntegerElem.i3
ИНТЕРФЕЙС IntegerElem ; CONST Name = "Целое число" ; ТИП T = ЦЕЛОЕ ; ПРОЦЕДУРА Формат ( x : T ): ТЕКСТ ; ПРОЦЕДУРА Сканирование ( txt : TEXT ; VAR x : T ): BOOLEAN ; КОНЕЦ IntegerElem .
ФАЙЛ: GenericStack.ig
ОБЩИЙ ИНТЕРФЕЙС GenericStack ( элемент ); (* Здесь Element.T - это тип, который будет сохранен в универсальном стеке. *) TYPE T = Public OBJECT ; Public = ОБЪЕКТНЫЕ МЕТОДЫ init (): TStack ; format (): ТЕКСТ ; isEmpty (): BOOLEAN ; count (): ЦЕЛОЕ ; толкать ( вяз : Элемент . Т ); pop ( VAR elem : элемент. T ): BOOLEAN ; КОНЕЦ ; КОНЕЦ GenericStack .
ФАЙЛ: GenericStack.mg
РОДОВОЕ МОДУЛЬ GenericStack ( элемент ); < ... общие сведения о реализации ... > ПРОЦЕДУРА Формат ( self : T ): TEXT = VAR str : TEXT ; BEGIN str : = Элемент . Имя & "Стек {" ; ДЛЯ k : = 0 TO self . n - 1 DO ЕСЛИ k > 0 ТО str : = str & "," ; КОНЕЦ ; str : = str & Element . Формат ( self . Arr [ k ]); КОНЕЦ ; str : = str & "};" ; ВОЗВРАТ ул ; КОНЕЦ Формат ; < ... более общие сведения о реализации ... > END GenericStack .
ФАЙЛ: IntegerStack.i3
ИНТЕРФЕЙС IntegerStack = GenericStack ( IntegerElem ) КОНЕЦ IntegerStack .
ФАЙЛ: IntegerStack.m3
МОДУЛЬ IntegerStack = GenericStack ( IntegerElem ) КОНЕЦ IntegerStack .
Прослеживаемость [ править ]
Любой идентификатор можно отследить до того места, где он возник, в отличие от функции «включить» в других языках. Скомпилированный модуль должен импортировать идентификаторы из других скомпилированных модулей с помощью IMPORT
оператора. Даже в перечислениях используется та же «точечная» нотация, которая используется при доступе к полю записи.
ИНТЕРФЕЙС A ;ТИП Цвет = { Черный , Коричневый , Красный , Оранжевый , Желтый , Зеленый , Синий , Фиолетовый , Серый , Белый };КОНЕЦ А ;
МОДУЛЬ B ;ИМПОРТ A ; ОТ A ИМПОРТНОГО Цвет ;VAR aColor : . Цвет ; (* В качестве префикса используется имя модуля *) theColor : Color ; (* Не имеет имя модуля в качестве префикса *) anotherColor : A . Цвет ; НАЧАТЬ aColor : = A . Цвет . Коричневый ; theColor : = Цвет . Красный ; anotherColor : = Цвет . Апельсин ; (* Не могу просто использовать оранжевый *) END B .
Динамическое размещение [ править ]
Modula-3 поддерживает размещение данных во время выполнения . Есть два типа памяти, которые можно выделить, TRACED
и UNTRACED
разница в том, видит ли ее сборщик мусора или нет. NEW()
используется для распределения данных любого из этих классов памяти. В UNSAFE
модуле DISPOSE
доступно для освобождения неотслеживаемой памяти.
Объектно-ориентированный [ править ]
В Modula-3 можно использовать методы объектно-ориентированного программирования, но их использование не требуется. Многие другие функции, предоставляемые в Modula-3 (модули, обобщения), обычно могут заменять объектную ориентацию.
Поддержка объекта намеренно сведена к простейшим условиям. Тип объекта (называемый «классом» в других объектно-ориентированных языках) вводится с OBJECT
объявлением, которое имеет, по существу, тот же синтаксис, что и RECORD
объявление, хотя тип объекта является ссылочным типом, тогда как записи в Modula-3 не являются ( аналогично структурам в C). Экспортируемые типы обычно называются T по соглашению и создают отдельный «общедоступный» тип для предоставления методов и данных. Например:
ИНТЕРФЕЙС Человек ;ТИП T < : общедоступный ; Общественная = ОБЪЕКТ МЕТОДА СеЬАд (): INTEGER ; init ( имя : ТЕКСТ ; возраст : ЦЕЛОЕ ): T ; КОНЕЦ ;КОНЕЦ Человек .
Это определяет интерфейс Person
с двумя типами, T
и Public
, который определяется как объект с двумя методами, getAge()
и init()
. T
определяется как подтип Public
с помощью <:
оператора.
Чтобы создать новый Person.T
объект, используйте встроенную процедуру NEW
с методом init()
как
VAR jim : = NEW ( Человек . T ). init ( "Джим" , 25 );
REVEAL
Конструкция Modula-3 обеспечивает концептуально простой и чистый, но очень мощный механизм для сокрытия деталей реализации от клиентов с произвольно большим количеством уровней удобства . Используйте, REVEAL
чтобы показать полную реализацию Person
интерфейса сверху.
МОДУЛЬ Человек ;REVEAL T = Публичный БРЕНДОВЫЙ ОБЪЕКТ имя : ТЕКСТ ; (* Эти две переменные *) age : INTEGER ; (* частные. *) ПЕРЕОПРЕДЕЛЕНИЕ getAge : = Age ; init : = Init ; КОНЕЦ ;ПРОЦЕДУРА Возраст ( self : T ): INTEGER = BEGIN RETURN self . возраст ; КОНЕЦ Возраст ;ПРОЦЕДУРА Init ( self : T ; name : TEXT ; age : INTEGER ): T = BEGIN self . имя : = имя ; я . age : = возраст ; ВОЗВРАТ самостоятельно ; END Init ;НАЧАЛО КОНЕЦ Человек .
Обратите внимание на использование BRANDED
ключевого слова, которое «маркирует» объекты, чтобы сделать их уникальными и избежать структурной эквивалентности. BRANDED
также может принимать строку в качестве аргумента, но если он опущен, для вас создается уникальная строка.
Modula-3 - один из немногих языков программирования, который требует, чтобы внешние ссылки из модуля были строго квалифицированы. То есть ссылка в модуле A
на объект, x
экспортированный из модуля, B
должна иметь форму B.x
. В Modula-3 невозможно импортировать все экспортированные имена из модуля.
Из-за требований языка к уточнению имени и переопределению метода невозможно сломать работающую программу, просто добавив новые объявления в интерфейс (любой интерфейс). Это дает возможность редактировать большие программы одновременно многими программистами, не беспокоясь о конфликтах имен; и это также позволяет редактировать библиотеки основных языков с твердым пониманием того, что ни одна существующая программа не будет повреждена в процессе.
Исключения [ править ]
Обработка исключений основана на TRY
... EXCEPT
блок системы, которая с тех пор [ править ] стали обычным явлением. Одна особенность, которая не была принята в других языках [ необходима ссылка ] , за заметными исключениями Delphi , Python [1] , Scala [2] и Visual Basic.NET , заключается в том, что EXCEPT
конструкция определила форму оператора switch с каждым возможным исключение как случай в отдельном предложении EXCEPT. Modula-3 также поддерживает конструкцию LOOP
... EXIT
..., END
которая повторяется до тех пор, пока не появитсяEXIT
происходит, структурный эквивалент петли простой внутри TRY
... EXCEPT
п.
Многопоточный [ править ]
Язык поддерживает использование многопоточности и синхронизацию между потоками. В библиотеке времени выполнения ( m3core ) есть стандартный модуль под названием Thread, который поддерживает использование многопоточных приложений. Среда выполнения Modula-3 может использовать отдельный поток для внутренних задач, таких как сборка мусора.
Встроенная структура данных MUTEX
используется для синхронизации нескольких потоков и защиты структур данных от одновременного доступа с возможным повреждением или условиями гонки. LOCK
Оператор вводит блок , в котором мьютекс заблокирован. Разблокировка a MUTEX
подразумевается выходом локуса выполнения кода из блока. Это MUTEX
объект, и поэтому другие объекты могут быть производными от него.
Например, в разделе ввода / вывода (I / O) библиотеки libm3 читатели и писатели (Rd.T и Wr.T) являются производными от MUTEX, и они блокируются перед доступом или изменением любых внутренних данных, таких как буферы.
Резюме [ править ]
Таким образом, особенности языка:
- Модули и интерфейсы
- Явная маркировка небезопасного кода
- Дженерики
- Автоматический сбор мусора
- Строгая типизация , структурная эквивалентность типов
- Объекты
- Исключения
- Потоки
Modula-3 - один из редких языков, эволюция функций которого задокументирована.
В Системном программировании с помощью Modula-3 интенсивно обсуждаются четыре основных момента проектирования языка. Это следующие темы: структурная эквивалентность и эквивалентность имен, правила выделения подтипов, общие модули и режимы параметров, например READONLY
.
Стандартные функции библиотеки [ править ]
Продолжая тенденцию, начатую с языка C , многие функции, необходимые для написания реальных программ, были исключены из определения языка и вместо этого предоставлялись через стандартный набор библиотек . Большинство интерфейсов ниже подробно описаны в [9]
Стандартные библиотеки, предоставляющие следующие возможности. Они называются стандартными интерфейсами и требуются (должны быть предоставлены) на языке.
- Текст: операции с неизменяемыми строковыми ссылками, называемые
TEXT
s - Поток: операции, относящиеся к потокам, включая
MUTEX
переменную условия и приостановку потока. Библиотека потоков обеспечивает упреждающее переключение потоков. - Слово: побитовые операции с целыми числами без знака (или машинными словами). Обычно реализуется непосредственно компилятором
- Интерфейсы с плавающей запятой
Некоторые рекомендуемые интерфейсы реализованы в доступных реализациях, но не требуются
- Lex: для разбора номера и других данных
- Fmt: форматирование различных типов данных для печати
- Pkl (или Pickle): сериализация объектов любых ссылочных типов, доступных сборщику мусора.
- Таблица: Общие модули для карт
Как и в C, ввод-вывод также предоставляется через библиотеки, в Modula-3 это называется Rd
и Wr
. Объектно-ориентированный дизайн библиотек Rd (читатели) и Wr (писатели) подробно описан в книге Грега Нельсона. Интересным аспектом Modula-3 является то, что это один из немногих языков программирования, стандартные библиотеки которых официально проверены на отсутствие различных типов ошибок, включая ошибки блокировки. Это было сделано под эгидой проектов Larch / Modula-3 (см. Семейство Larch ) [10] и расширенной статической проверки [11] в DEC Systems Research Center .
Реализации [ править ]
Доступно несколько компиляторов, большинство из них с открытым исходным кодом .
- DEC-SRC M3, оригинал. [12]
- Исследовательский центр Оливетти (ORC) Набор инструментов Modula-3, первоначально представлявший собой компилятор, теперь доступен в виде библиотеки для синтаксического, лексического и семантического анализа программ Modula-3. [13]
- Критическая масса CM3, другой преемник DEC-SRC M3
- Polytechnique Montreal Modula-3 PM3, преемник DEC-SRC M3, в настоящее время сливается с CM3
- EzM3, независимая легкая и легко переносимая реализация, разработанная совместно с CVSup.
- HM3, преемник PM3-1.1.15 версии PM3, с поддержкой нативной потоковой передачи с использованием NPTL
- CM3, преемник Critical Mass CM3. Это единственная актуальная, поддерживаемая и развиваемая реализация. Релизы доступны по адресу http://www.opencm3.net/releng/ .
Поскольку единственный аспект структуры данных C , который является отсутствующей от Modula-3 является типом союза, вся сохранившаяся до наших дней реализации Modula-3 способна обеспечить хорошую двоичный код совместимость с декларациями типа языка С массивами и структурами .
Книги [ править ]
Ни одна из этих книг до сих пор не издается, хотя можно получить использованные копии, а некоторые оцифрованы, частично или полностью, а некоторые главы одной из них имеют предыдущие или последующие версии, доступные в виде исследовательских отчетов в Интернете.
- Грег Нельсон, редактор, Системное программирование с помощью Modula-3 Исчерпывающий справочник по языку Modula-3 с интересными статьями по построению программного обеспечения объектно-ориентированных систем и документацией обсуждения, ведущего к окончательным особенностям языка. Некоторые из них были ранее (см. [8] для главы 2, [14] для главы 4, [15] для главы 5, [16] для главы 6) и некоторых позже (см. [17] для главы 1 и более обновленных 2, таким образом, обеих предыдущих версий определения языка [8] и, [9] для главы 3 и [18]для главы седьмой) опубликованных версий большинства из ее восьми глав, индивидуально доступных в предыдущем Центре системных исследований DEC (SRC) в качестве исследовательских отчетов для загрузки.
- Сэмюэл П. Харбисон, Modula-3 Простой в использовании учебник для занятий.
- Роберт Седжвик , Алгоритмы в Модуле-3
- Ласло Босорменьи и Карстен Вайх, Программирование на Modula-3: Введение в программирование со стилем
- Ренцо Орсини, Агостино Кортези Программа на Модуле-3: введение в императивную программу на итальянском языке, объясняющую ее основные особенности.
Проекты на Модуле-3 [ править ]
Программное обеспечение, которое программируется Модула-3, включает:
- SPIN операционная система
- Программа синхронизации репозитория программного обеспечения CVSup
- Язык Obliq , который использует возможность сетевых объектов Modula-3 прозрачно перемещать объекты по локальным сетям, обеспечивая распределенные возможности парадигмы объектно-ориентированного программирования Modula-3. Он использовался для создания распределенных приложений, компьютерной анимации и приложений веб-программирования в форме расширения сценариев для Modula-3.
Влияет на другие языки программирования [ править ]
Хотя Modula-3 не получил статуса мейнстрима, некоторые части дистрибутива DEC-SRC M3 получили. Вероятно, наиболее влиятельной частью была библиотека сетевых объектов, которая легла в основу первой реализации Java Remote Method Invocation (RMI), включая сетевой протокол. Только когда Sun перешла от стандарта Common Object Request Broker Architecture (CORBA) к протоколу на основе IIOP, она отказалась. Документация Java по сборке мусора удаленных объектов все еще относится к новаторской работе, проделанной для сетевых объектов Modula-3. [19] Реализация классов в Python также была вдохновлена механизмом классов, найденным в C ++ и Modula-3. [20] Кроме того , язык Nimиспользует некоторые аспекты Modula-3, такие как отслеживаемые и неотслеживаемые указатели.
Ссылки [ править ]
- ^ "Модуль критической массы-3 (CM3)" . Модуль критической массы-3 . elego Software Solutions GmbH . Проверено 21 марта 2020 .
- ^ "Политехнический модуль Монреаля-3 (PM3): Что это такое" . Политехнический Монреальский модуль-3 . elego Software Solutions GmbH . Проверено 21 марта 2020 .
- ^ Полстра, Джон Д. (9 ноября 2006). «Ezm3: более простое распределение Modula-3» . CVSup.org . Архивировано из оригинального 10 апреля 2013 года . Проверено 21 марта 2020 .
- ^ Weich, Карстен. «M3 / PC Klagenfurt 96: среда Modula-3 для MS-DOS» . Кафедра информатики . Клагенфуртский университет. Архивировано из оригинального 20 мая 2000 года . Проверено 21 марта 2020 .
- ^ Пичета, Доминик; Locurcio, Гюго. «Часто задаваемые вопросы» . Проверено 21 марта 2020 .
- ↑ Ван Россум, Гвидо (май 1996 г.). «Программирование на Python: предисловие (1-е изд.)» . Python.org . Проверено 21 марта 2020 .
- ^ "Часто задаваемые вопросы по дизайну и истории: почему" self "должно явно использоваться в определениях и вызовах методов?" . Python.org . 21 марта 2020 . Проверено 21 марта 2020 .
- ^ a b c Отчет о Модуле-3 (отредактированный) Лука Карделли, Джеймс Донахью, Люсиль Глассман, Мик Джордан, Билл Калсо, Грег Нельсон. Отчет об исследовании 52 Центра системных исследований DEC (SRC) (ноябрь 1989 г.)
- ^ a b Некоторые полезные интерфейсы Modula-3 Джим Хорнинг, Билл Калсо, Пол МакДжонс, Грег Нельсон. Отчет об исследовании 113 Центра системных исследований DEC (SRC) (декабрь 1993 г.)
- ^ LM3 Кевин Д. Джонс. Отчет об исследовании 72 Центра системных исследований DEC (SRC) (июнь 1991 г.)
- ^ Расширенная статическая проверка Дэвид Л. Детлефс, К. Рустан М. Лейно, Грег Нельсон, Джеймс Б. Сакс . Отчет об исследовании Compaq SRC 159 (декабрь 1998 г.)
- ^ SRC Modula-3 3.3 [ постоянная мертвая ссылка ] Билл Калсо и Эрик Мюллер. Digital Equipment Corporation (январь 1995 г.)
- ^ Джордан, Мик (1990). «Расширяемая среда программирования для Modula-3» . SIGSOFT Softw. Англ. Примечания . 15 (6): 66–76. DOI : 10.1145 / 99278.99285 . Проверено 8 сентября 2009 .
- ^ Введение в программирование с помощью потоков Эндрю Д. Биррелл. Отчет об исследовании 35 Центра системных исследований DEC (SRC) (январь 1989 г.)
- ^ Примитивы синхронизации для мультипроцессора: формальная спецификация А. Д. Биррелл, Дж. В. Гуттаг, Дж. Дж. Хорнинг, Р. Левин. Отчет об исследовании 20 Центра системных исследований DEC (SRC) (август 1987 г.)
- ^ Потоки ввода-вывода: абстрактные типы, реальные программы Марк Р. Браун и Грег Нельсон. Отчет об исследовании 53 Центра системных исследований DEC (SRC) (ноябрь 1989 г.)
- ^ Справочное руководство Modula-3 Лука Карделли, Джеймс Донахью, Люсиль Глассман, Мик Джордан, Билл Калсо, Грег Нельсон. Центр системных исследований DEC (SRC) (февраль 1995 г.)
- ^ Учебник по эстакаде Марк С. Манассе и Грег Нельсон. Отчет об исследовании 69 Центра системных исследований DEC (SRC) (май 1992 г.)
- ^ Сборщик мусора удаленных объектов , Документация по вызову удаленного метода Java для Java SE 8.
- ^ Классы , официальная документация Python.
Внешние ссылки [ править ]
- Официальный сайт
- Modula3 на GitHub
- Веб-сайт внедрения CM3
- Домашняя страница Модулы-3 (давно мертвая, зеркало )
- Modula-3: определение языка
- Программные решения elego
- Группа новостей Модула-3 , в основном заброшенная
- Список рассылки разработчиков Modula-3 , активный
- Заметки из класса CS2 Калифорнийского технологического института, преподаваемого на Модуле-3 в 2002 и 2003 годах.
- CS3 класс 2009 Caltech на Wayback Machine (архивировано 23 мая 2013 г.)
- Зеркало Программирование в Модуле-3 : примеры программ
- Создание распределенных объектно-ориентированных приложений: объекты Modula-3 в действии . Мишель Р. Дагене. Черновая версия (январь 1997 г.)
- Модула-3: язык, библиотеки и инструменты . Презентация на Модуле-3 более 120 слайдов. Майкл Р. Дагенейс [ постоянная мертвая ссылка ] , мертв
- Объектно-ориентированная абстракция данных в Modula-3 . Джозеф Бергин (1997)
- Computerworld Интервью с Лукой Карделли о Modula-3