Модуль-3
![]() | |
Парадигмы | императивный , структурированный , процедурный , модульный , параллельный , объектно-ориентированный , общий |
---|---|
Семья | Вирт / Модула |
Разработано | Лука Карделли , Джеймс Донахью, Люсиль Глассман, Мик Джордан; Билл Калсоу, Грег Нельсон |
Разработчики | Декабрь Оливетти Элего Софтвер Солюшнс ГмбХ |
Впервые появился | 1988 год |
Стабильная версия | 5.8.6
/ 14 июля 2010 г |
Предварительный выпуск | 5.8.6
/ 14 июля 2010 г |
Дисциплина набора текста | сильный , статический , безопасный или, если небезопасный, явно безопасный изолированный |
Объем | Лексический |
Платформа | ИА-32 , x86-64 , PowerPC , SPARC |
ТЫ | Кроссплатформенность : FreeBSD , Linux , Darwin , SunOS. |
Веб-сайт | www |
Основные реализации | |
СРЦ Модуль-3, СМ3, [1] ПМ3, [2] ЭЗМ3, [3] M3/PC Клагенфурт [4] | |
Под влиянием | |
Алгол , Евклид , Меса , Модуль-2 , Модуль-2+ , Оберон , Паскаль | |
Под влиянием | |
С# , Java , Ним , [5] OCaml , Руст , [6] Питон [7] |
Modula-3 — это язык программирования , задуманный как преемник обновленной версии Modula-2, известной как Modula-2+ . Несмотря на то, что он оказал влияние в исследовательских кругах (влияя на дизайн таких языков, как Java , C# , Python [8] и Ним ) он не получил широкого распространения в промышленности. Он был разработан Лукой Карделли , Джеймсом Донахью, Люсиль Глассман, Миком Джорданом (ранее работал в Olivetti Лаборатории программных технологий ), Биллом Калсоу и Грегом Нельсоном в (SRC) Digital Equipment Corporation (DEC Центре системных исследований ) и Исследовательском центре Olivetti ( ORC) в конце 1980-х годов.
Основными особенностями Modula-3 являются модульность , простота и безопасность при сохранении мощи языка системного программирования. Modula-3 стремилась продолжить Паскаля традицию типовой безопасности , одновременно вводя новые конструкции для практического программирования в реальном мире. В частности, в Modula-3 добавлена поддержка общего программирования (аналогично шаблонам ), многопоточности , обработки исключений , сборки мусора , объектно-ориентированного программирования , частичного выявления и явной маркировки небезопасного кода. Целью разработки Модулы-3 был язык, реализующий наиболее важные особенности современных императивных языков программирования в довольно простых формах. Таким образом, якобы опасные и усложняющие функции, такие как множественное наследование и перегрузка операторов, были опущены.
Историческое развитие [ править ]
Проект «Модула-3» начался в ноябре 1986 года, когда Морис Уилкс написал Никлаусу Вирту с некоторыми идеями по поводу новой версии Модулы. Незадолго до этого Уилкс работал в DEC, вернулся в Англию и присоединился к Совету по стратегии исследований Оливетти. Вирт уже перешел в Oberon , но у него не было проблем с тем, чтобы команда Уилкса продолжала разработку под названием Modula. Определение языка было завершено в августе 1988 года, а обновленная версия - в январе 1989 года. Вскоре последовали компиляторы от DEC и Olivetti, а затем и сторонние реализации.
На его дизайн сильно повлияла работа над языком Modula-2+, который использовался в то время в SRC и в Компьютерном исследовательском центре Acorn (ARC, позже ORC, когда Olivetti приобрела Acorn). На этом языке была разработана операционная система для DEC Firefly Была написана многопроцессорная рабочая станция VAX , на которой был написан компилятор Acorn для Acorn C и библиотека выполнения модулей (CAMEL) в ARC для ARX проекта операционной системы ARM на базе Acorn Archimedes для серии компьютеров . Как говорится в пересмотренном отчете Modula-3, на язык повлияли другие языки, такие как Mesa , Cedar , Object Pascal , Oberon и Euclid . [9]
В 1990-е годы Modula-3 приобрел значительную популярность в качестве языка обучения, но так и не получил широкого распространения для промышленного использования. Этому, возможно, способствовал упадок DEC, ключевого сторонника Modula-3 (особенно когда она перестала эффективно поддерживать его до того, как DEC была продана Compaq в 1998 году). В любом случае, несмотря на простоту и мощь Модулы-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!». программа .
MODULE Main;
IMPORT IO;
BEGIN
IO.Put("Hello World\n")
END Main.
Все программы в Модуле-3 имеют как минимум файл модуля, а большинство из них также включают файл интерфейса, который используется клиентами для доступа к данным из модуля . Как и в некоторых других языках, программа Modula-3 должна экспортировать главный модуль, который может быть либо файлом с именем Main.m3, либо файлом, который может вызывать EXPORT
для экспорта основного модуля.
MODULE Foo EXPORTS Main
Имена файлов модулей рекомендуется совпадать с именем в исходном коде. Если они различаются, компилятор только выдает предупреждение.
Другие соглашения в синтаксисе включают именование экспортируемого типа интерфейса. T
, поскольку типы обычно характеризуются их полными именами, поэтому тип T
внутри модуля с именем Foo будет называться Foo.T
. Это способствует читабельности. Другое похожее соглашение — присвоение имени общедоступному объекту. Public
как в примерах ООП ниже.
Языковые особенности [ править ]
Модульность [ править ]
Прежде всего, все скомпилированные модули либо INTERFACE
или реализация MODULE
s, того или иного вкуса. Модуль, скомпилированный интерфейсом, начинающийся с ключевого слова INTERFACE
, определяет константы, типы, переменные, исключения и процедуры. Модуль реализации, начинающийся с ключевого слова MODULE
, предоставляет код и любые дополнительные константы, типы или переменные, необходимые для реализации интерфейса. По умолчанию модуль реализации реализует одноименный интерфейс, но модуль может явно EXPORT
к модулю с другим именем. Например, основная программа экспортирует модуль реализации для основного интерфейса.
MODULE HelloWorld EXPORTS Main;
IMPORT IO;
BEGIN
IO.Put("Hello World\n")
END HelloWorld.
Любой скомпилированный модуль может IMPORT
другие интерфейсы, хотя циклический импорт запрещен. Эту проблему можно решить, выполнив импорт из модуля реализации. Сущности внутри импортированного модуля можно импортировать вместо имени модуля, используя FROM Module IMPORT Item [, Item]*
синтаксис:
MODULE HelloWorld EXPORTS Main;
FROM IO IMPORT Put;
BEGIN
Put("Hello World\n")
END HelloWorld.
Обычно импортируется только интерфейс и используется точечная нотация для доступа к элементам интерфейса (аналогично доступу к полям в записи). Типичное использование — определение одной структуры данных (записи или объекта) для каждого интерфейса вместе с любыми вспомогательными процедурами. Здесь основной тип получит имя «T», и его можно будет использовать, как в MyModule.T
.
В случае конфликта имен между импортируемым модулем и другим объектом внутри модуля зарезервированное слово
AS
можно использовать как в IMPORT CollidingModule AS X;
Безопасное и небезопасное [ править ]
Некоторые возможности считаются небезопасными, поскольку компилятор больше не может гарантировать согласованность результатов; например, при взаимодействии с C. языком Ключевое слово UNSAFE
с префиксом перед INTERFACE
или MODULE
, может использоваться, чтобы указать компилятору включить определенные низкоуровневые функции языка. Например, небезопасной операцией является обход системы типов с использованием LOOPHOLE
скопировать биты целого числа в число с плавающей запятой REAL
число.
Интерфейс, импортирующий небезопасный модуль, также должен быть небезопасным. Безопасный интерфейс может быть экспортирован небезопасным модулем реализации. Это типичное использование при взаимодействии с внешними библиотеками , где встроены два интерфейса: один небезопасный, другой безопасный.
Дженерики [ править ]
Общий интерфейс и соответствующий ему универсальный модуль,
префикс INTERFACE
или MODULE
ключевое слово с GENERIC
и принять в качестве формальных аргументов другие интерфейсы. Таким образом (как и в шаблонах C++ ) можно легко определять и использовать абстрактные типы данных, но в отличие от C++ детализация находится на уровне модуля. Интерфейс передается универсальному интерфейсу и модулям реализации в качестве аргументов, и компилятор генерирует конкретные модули.
Например, можно определить GenericStack, а затем создать его экземпляр с помощью таких интерфейсов, как IntegerElem
, или RealElem
или даже интерфейсы для объектов, если каждый из этих интерфейсов определяет свойства, необходимые универсальным модулям.
Голые типы INTEGER
, или REAL
использовать их нельзя, поскольку они не являются модулями, а система дженериков основана на использовании модулей в качестве аргументов. Для сравнения, в шаблоне C++ будет использоваться простой тип.
ФАЙЛ: IntegerElem.i3
INTERFACE IntegerElem;
CONST Name = "Integer";
TYPE T = INTEGER;
PROCEDURE Format(x: T): TEXT;
PROCEDURE Scan(txt: TEXT; VAR x: T): BOOLEAN;
END IntegerElem.
ФАЙЛ: GenericStack.ig
GENERIC INTERFACE GenericStack(Element);
(* Here Element.T is the type to be stored in the generic stack. *)
TYPE
T = Public OBJECT;
Public = OBJECT
METHODS
init(): TStack;
format(): TEXT;
isEmpty(): BOOLEAN;
count(): INTEGER;
push(elm: Element.T);
pop(VAR elem: Element.T): BOOLEAN;
END;
END GenericStack.
ФАЙЛ: GenericStack.mg
GENERIC MODULE GenericStack(Element);
< ... generic implementation details... >
PROCEDURE Format(self: T): TEXT =
VAR
str: TEXT;
BEGIN
str := Element.Name & "Stack{";
FOR k := 0 TO self.n -1 DO
IF k > 0 THEN str := str & ", "; END;
str := str & Element.Format(self.arr[k]);
END;
str := str & "};";
RETURN str;
END Format;
< ... more generic implementation details... >
END GenericStack.
ФАЙЛ: IntegerStack.i3
INTERFACE IntegerStack = GenericStack(IntegerElem) END IntegerStack.
FILE: IntegerStack.m3
MODULE IntegerStack = GenericStack(IntegerElem) END IntegerStack.
Прослеживаемость [ править ]
Любой идентификатор можно отследить до места его происхождения, в отличие от функции «включения» в других языках. Скомпилированный модуль должен импортировать идентификаторы из других скомпилированных модулей, используя IMPORT
заявление. Даже в перечислениях используется та же точка, что и при доступе к полю записи.
INTERFACE A;
TYPE Color = {Black, Brown, Red, Orange, Yellow, Green, Blue, Violet, Gray, White};
END A;
MODULE B;
IMPORT A;
FROM A IMPORT Color;
VAR
aColor: A.Color; (* Uses the module name as a prefix *)
theColor: Color; (* Does not have the module name as a prefix *)
anotherColor: A.Color;
BEGIN
aColor := A.Color.Brown;
theColor := Color.Red;
anotherColor := Color.Orange; (* Can't simply use Orange *)
END B.
Динамическое размещение [ править ]
Modula-3 поддерживает распределение данных во время выполнения . Можно выделить два типа памяти: TRACED
и UNTRACED
разница в том, сборщик мусора или нет. видит ли это NEW()
используется для выделения данных любого из этих классов памяти. В UNSAFE
модуль, DISPOSE
доступен для освобождения неотслеживаемой памяти.
Объектно-ориентированный [ править ]
В Модуле-3 могут использоваться методы объектно-ориентированного программирования, но их использование не является обязательным. Многие другие функции, представленные в Modula-3 (модули, дженерики), обычно могут заменять объектную ориентацию.
Поддержка объектов намеренно сведена к самым простым условиям. Тип объекта (называемый «классом» в других объектно-ориентированных языках) вводится с помощью OBJECT
объявление, которое имеет по существу тот же синтаксис, что и RECORD
объявление, хотя тип объекта является ссылочным типом, тогда как RECORD в Modula-3 таковым не является (аналогично структурам в C). Экспортированные типы обычно называются T по соглашению, и для предоставления доступа к методам и данным создается отдельный тип «Public». Например:
INTERFACE Person;
TYPE T <: Public;
Public = OBJECT
METHODS
getAge(): INTEGER;
init(name: TEXT; age: INTEGER): T;
END;
END Person.
Это определяет интерфейс Person
с двумя типами, T
, и Public
, который определен как объект с двумя методами: getAge()
и init()
. T
определяется как подтип Public
с помощью <:
оператор.
Чтобы создать новый Person.T
объект, используйте встроенную процедуру NEW
с методом init()
как
VAR jim := NEW(Person.T).init("Jim", 25);
Откровение [ править ]
Modula-3's REVEAL
Конструкт предоставляет концептуально простой и понятный, но очень мощный механизм сокрытия деталей реализации от клиентов с произвольным количеством уровней дружественности . Полное раскрытие формы REVEAL T = V
может быть использован для демонстрации полной реализации Person
интерфейс сверху. Частичное раскрытие формы REVEAL T <: V
просто показывает, что T является супертипом V, не раскрывая никакой дополнительной информации о T. [10]
MODULE Person;
REVEAL T = Public BRANDED
OBJECT
name: TEXT; (* These two variables *)
age: INTEGER; (* are private. *)
OVERRIDES
getAge := Age;
init := Init;
END;
PROCEDURE Age(self: T): INTEGER =
BEGIN
RETURN self.age;
END Age;
PROCEDURE Init(self: T; name: TEXT; age: INTEGER): T =
BEGIN
self.name := name;
self.age := age;
RETURN self;
END Init;
BEGIN
END Person.
Обратите внимание на использование BRANDED
Ключевое слово, которое «маркирует» объекты, чтобы сделать их уникальными и избежать структурной эквивалентности. BRANDED
также может принимать строку в качестве аргумента, но если ее опустить, генерируется уникальная строка.
Modula-3 — один из немногих языков программирования, который требует строгой квалификации внешних ссылок из модуля. То есть ссылка в модуле A
на объект x
экспортировано из модуля B
должен принять форму B.x
. В Модуле-3 невозможно импортировать все экспортированные имена из модуля.
Из-за требований языка к уточнению имени и переопределению методов невозможно сломать работающую программу, просто добавив новые объявления в интерфейс (любой интерфейс). Это позволяет нескольким программистам одновременно редактировать большие программы, не беспокоясь о конфликтах имен; а также это позволяет редактировать основные языковые библиотеки с уверенностью в том, что ни одна существующая программа не будет повреждена в процессе.
Исключения [ править ]
Обработка исключений основана на TRY
... EXCEPT
блочная система, которая с тех пор [ нужна ссылка ] стать общими. Одна функция, которая не была принята в других языках. [ нужна ссылка ] , за заметными исключениями Delphi , Python [1] , Scala [2] и Visual Basic.NET , заключается в том, что EXCEPT
Конструкция определила форму оператора переключения с каждым возможным исключением в качестве случая в своем собственном предложении EXCEPT. Модуль-3 также поддерживает LOOP
... EXIT
... END
конструкция, которая повторяется до тех пор, пока EXIT
возникает структура, эквивалентная простому циклу внутри TRY
... EXCEPT
пункт.
Многопоточный [ править ]
Язык поддерживает использование многопоточности и синхронизацию между потоками. ) есть стандартный модуль В библиотеке времени выполнения ( m3core под названием Thread, который поддерживает использование многопоточных приложений. Среда выполнения Modula-3 может использовать отдельный поток для внутренних задач, таких как сбор мусора.
Встроенная структура данных MUTEX
используется для синхронизации нескольких потоков и защиты структур данных от одновременного доступа с возможным повреждением или состоянием гонки. LOCK
Оператор вводит блок, в котором блокируется мьютекс. Разблокировка MUTEX
подразумевается выходом локуса выполнения кода из блока. MUTEX
является объектом, и поэтому из него могут быть получены другие объекты.
Например, в разделе ввода/вывода (I/O) библиотеки libm3 устройства чтения и записи (Rd.T и Wr.T) являются производными от MUTEX и блокируются перед доступом или изменением каких-либо внутренних данных, таких как буферы.
Резюме [ править ]
Вкратце, особенности языка:
- Модули и интерфейсы
- Явная маркировка небезопасного кода
- Дженерики
- Автоматический сбор мусора
- Строгая типизация , структурная эквивалентность типов.
- Объекты
- Исключения
- Темы
Modula-3 — один из редких языков, эволюция функций которого документирована.
В «Системном программировании с помощью Modula-3» интенсивно обсуждаются четыре основных момента проектирования языка. Эти темы: структурная эквивалентность и эквивалентность имен, правила подтипирования, общие модули и режимы параметров, такие как READONLY
.
Возможности стандартной библиотеки [ править ]
Продолжая тенденцию, начатую с языка C , многие функции, необходимые для написания реальных программ, были исключены из определения языка и вместо этого предоставлялись через стандартный набор библиотек . Большинство интерфейсов ниже подробно описаны в [11]
Стандартные библиотеки, предоставляющие следующие функции. Они называются стандартными интерфейсами и являются обязательными (должны быть предусмотрены) в языке.
- Текст: операции над ссылками на неизменяемые строки, называемые
TEXT
с - Тема: Операции, связанные с резьбой, в том числе
MUTEX
, переменная условия и приостановка потока. Библиотека потоков обеспечивает упреждающее переключение потоков. - Слово: побитовые операции над целыми числами без знака (или машинными словами). Обычно реализуется непосредственно компилятором
- Интерфейсы с плавающей запятой
Некоторые рекомендуемые интерфейсы реализованы в доступных реализациях, но не являются обязательными.
- Lex: для анализа номера и других данных.
- Fmt: форматирование различных типов данных для печати.
- Pkl (или Pickle): сериализация объектов любых ссылочных типов, доступных сборщику мусора.
- Таблица: Общие модули для карт
Как и в C, ввод-вывод также осуществляется через библиотеки, в Modula-3 называемые Rd
и Wr
. Объектно-ориентированное проектирование библиотек Rd (читатели) и Wr (писатели) подробно описано в книге Грега Нельсона. Интересным аспектом Модулы-3 является то, что это один из немногих языков программирования, стандартные библиотеки которого были официально проверены на отсутствие различных типов ошибок, включая ошибки блокировки. Это делалось под эгидой Лиственницы/Модулы-3 (см. семейство Лиственница ). [12] и расширенная статическая проверка [13] проекты в Исследовательском центре систем DEC .
Реализации [ править ]
Доступно несколько компиляторов, большинство из них с открытым исходным кодом .
- DEC-SRC M3, оригинал. [14]
- Исследовательский центр Оливетти (ORC) Набор инструментов Modula-3, первоначально представлявший собой компилятор, теперь доступен в виде библиотеки для синтаксического, лексического и семантического анализа программ Modula-3. [15]
- Critical Mass CM3, другой преемник DEC-SRC M3.
- Polytechnique Montreal Modula-3 PM3, преемник DEC-SRC M3, в настоящее время сливается с CM3.
- EzM3, независимая, легкая и легко переносимая реализация, разработанная совместно с CVSup.
- HM3, преемник версии PM3 pm3-1.1.15, с поддержкой встроенной многопоточности с использованием NPTL.
- CM3, преемник Critical Mass CM3. Это единственная актуальная, поддерживаемая и развивающаяся реализация. Релизы доступны по адресу http://www.opencm3.net/releng/ .
Поскольку единственным аспектом структур данных C, который отсутствует в Modula-3, является тип объединения, все существующие реализации Modula-3 способны обеспечить хорошую совместимость двоичного кода с объявлениями типов массивов и структур языка C.
Книги [ править ]
Ни одна из этих книг до сих пор не издана, хотя можно получить использованные копии, а некоторые частично или полностью оцифрованы, а некоторые главы одной из них имеют предварительные или последующие версии, которые можно получить в виде исследовательских отчетов из Интернета.
- Грег Нельсон, редактор, « Системное программирование с помощью Modula-3» . Полный справочник по языку Modula-3 с интересными статьями по созданию объектно-ориентированного системного программного обеспечения и документацией обсуждения, ведущего к окончательным функциям языка. Есть и раньше (см. [9] для второй главы, [16] для четвертой главы, [17] для пятой главы, [18] для шестой главы) и некоторые сзади (см. [19] для первой и последующих глав обновлены две, то есть для обеих предыдущих версий определения языка. [9] и, [11] для третьей главы и [20] для седьмой главы) публикации версий большинства из восьми глав, индивидуально доступных в предыдущем Центре системных исследований DEC (SRC) в виде исследовательских отчетов для загрузки.
- Сэмюэл П. Харбисон, «Модула-3» . Простой в использовании учебник для класса.
- Роберт Седжвик , Алгоритмы в Модуле-3
- Ласло Бозорменьи и Карстен Вайх, Программирование в Modula-3: Введение в стильное программирование
- Ренцо Орсини, Агостино Кортези «Программирование на Модуле-3: введение в императивное и объектное программирование», итальянская книга об этом языке, объясняющая его основные особенности.
Проекты с использованием Modula-3 [ править ]
Программное обеспечение, которым программируется Модуль-3, включает в себя:
- Операционная SPIN система
- Программа CVSup. репозитория программного обеспечения синхронизации
- Язык Obliq , который использует способность сетевых объектов Modula-3 прозрачно переносить объекты по локальным сетям, обеспечивая распределенную способность парадигмы объектно-ориентированного программирования Modula-3. Он использовался для создания распределенных приложений, компьютерной анимации и приложений веб-программирования в форме расширения сценариев для Modula-3.
Влияние на другие языки программирования [ править ]
Хотя Modula-3 не получила статуса основного, некоторые части дистрибутива DEC-SRC M3 получили статус основного. Вероятно, наиболее влиятельной частью была библиотека сетевых объектов, которая легла в основу первой реализации удаленного вызова методов (RMI) в Java, включая сетевой протокол. Только когда Sun перешла от стандарта Common Object Request Broker Architecture (CORBA) к протоколу на основе IIOP, от него отказались. Документация Java по сборке мусора удаленных объектов по-прежнему ссылается на новаторскую работу, проделанную для сетевых объектов Modula-3. [21] Реализация классов в Python также была вдохновлена механизмом классов, найденным в C++ и Modula-3. [22] Кроме того, язык Nim использует некоторые аспекты Modula-3, такие как отслеживаемые и неотслеживаемые указатели.
Ссылки [ править ]
- ^ «Модула критической массы-3 (СМ3)» . Модуль критической массы-3 . Элего Программные решения ГмбХ . Проверено 21 марта 2020 г.
- ^ «Политехнический институт Монреаля Модуль-3 (ПМ3): Что это такое» . Политехнический институт Монреаля Модуль-3 . Элего Программные решения ГмбХ . Проверено 21 марта 2020 г.
- ^ Полстра, Джон Д. (9 ноября 2006 г.). «Ezm3: более простой дистрибутив Modula-3» . CVSup.org . Архивировано из оригинала 10 апреля 2013 года . Проверено 21 марта 2020 г.
- ^ Вайх, Карстен. «M3/PC Klagenfurt 96: среда Modula-3 для MS-DOS» . Кафедра информатики . Университет Клагенфурта. Архивировано из оригинала 20 мая 2000 года . Проверено 21 марта 2020 г.
- ^ Пичета, Доминик; Локурсчо, Уго. «Часто задаваемые вопросы» . Проверено 21 марта 2020 г.
- ^ «R/Rust — я только что узнал о Modula-3, языке, который имел много схожих с Rust целей, и существовала даже экспериментальная ОС, которая полагалась на безопасность, обеспечиваемую этим языком» .
- ^ ван Россум, Гвидо (май 1996 г.). «Программирование на Python: Предисловие (1-е изд.)» . Python.org . Проверено 21 марта 2020 г.
- ^ «Часто задаваемые вопросы по проектированию и истории: почему слово «self» должно использоваться явно в определениях и вызовах методов?» . Python.org . 21 марта 2020 г. Проверено 21 марта 2020 г.
- ↑ Перейти обратно: Перейти обратно: а б с Отчет «Модула-3» (пересмотренный) Лука Карделли, Джеймс Донахью, Люсиль Глассман, Мик Джордан, Билл Калсоу, Грег Нельсон. Центра системных исследований DEC (SRC) (ноябрь 1989 г.) Отчет 52
- ^ Карделли, Лука; Донахью, Джеймс; Глассман, Люсиль; Джордан, Мик; Калсоу, Билл; Нельсон, Грег (август 1992 г.). «Определение языка Модула-3» . Уведомления ACM SIGPLAN . 27 (8): 15–42. дои : 10.1145/142137.142141 . ISSN 0362-1340 .
- ↑ Перейти обратно: Перейти обратно: а б Некоторые полезные интерфейсы Modula-3. Архивировано 4 марта 2016 г. в Wayback Machine Джимом Хорнингом, Биллом Калсоу, Полом МакДжонсом, Грегом Нельсоном. Центра системных исследований DEC (SRC) (декабрь 1993 г.) Отчет 113
- ^ LM3. Архивировано 3 марта 2016 г. в Wayback Machine Кевина Д. Джонса. Центра системных исследований DEC (SRC) (июнь 1991 г.) Отчет 72
- ^ Расширенная статическая проверка. Архивировано 5 июля 2017 г. в Wayback Machine Дэвид Л. Детлефс, К. Рустан М. Лейно, Грег Нельсон, Джеймс Б. Сакс . Отчет Compaq SRC об исследовании № 159 (декабрь 1998 г.)
- ^ НИЦ Модуль-3 3.3 [ постоянная мертвая ссылка ] Билл Калсоу и Эрик Мюллер. Корпорация цифрового оборудования (январь 1995 г.)
- ^ Джордан, Мик (1990). «Расширяемая среда программирования для Модулы-3» . Программное обеспечение SIGSOFT. англ. Примечания . 15 (6): 66–76. дои : 10.1145/99278.99285 .
- ^ Введение в программирование с использованием потоков. Архивировано 5 июля 2017 г. в Wayback Machine Эндрю Д. Биррелла. Отчет об исследовании 35 Центра системных исследований DEC (SRC) (январь 1989 г.)
- ^ Примитивы синхронизации для мультипроцессора: формальная спецификация. Архивировано 4 марта 2016 г. в Wayback Machine. А. Д. Биррелл, Дж. В. Гуттаг, Дж. Дж. Хорнинг, Р. Левин. Центра системных исследований DEC (SRC) (август 1987 г.) Отчет об исследовании 20
- ^ Потоки ввода-вывода: абстрактные типы, реальные программы. Архивировано 3 марта 2016 г. в Wayback Machine Марка Р. Брауна и Грега Нельсона. Центра системных исследований DEC (SRC) (ноябрь 1989 г.) Отчет 53
- ^ Справочное руководство по Modula-3 Лука Карделли, Джеймс Донахью, Люсиль Глассман, Мик Джордан, Билл Калсоу, Грег Нельсон. Центр системных исследований DEC (SRC) (февраль 1995 г.)
- ^ Учебное пособие по эстакаде. Архивировано 3 марта 2016 г. в Wayback Machine Марка С. Манасса и Грега Нельсона. Отчет об исследовании № 69 Центра системных исследований DEC (SRC) (май 1992 г.)
- ^ Сборка мусора удаленных объектов , Документация по удаленному вызову методов Java для Java SE 8.
- ^ Классы , Официальная документация Python.
Внешние ссылки [ править ]
- Официальный сайт
- Модуль3 на GitHub
- Веб-сайт внедрения CM3
- Домашняя страница Модулы-3 (давно мертва, зеркало )
- Модуль-3: Определение языка
- Программные решения Элего
- Телеконференция «Модула-3» , практически пустынная
- Список рассылки по разработке Modula-3 , активен
- Заметки с курса CS2 Калифорнийского технологического института, который проводился по Модуле-3 в 2002 и 2003 годах.
- Класс CS3 Калифорнийского технологического института, 2009 г., в Wayback Machine (архивировано 23 мая 2013 г.)
- зеркало Программирование в Модуле-3 : примеры программ
- Создание распределенных объектно-ориентированных приложений: объекты Modula-3 в работе . Мишель Р. Дажене. Черновая версия (январь 1997 г.)
- Модуль-3: Язык, библиотеки и инструменты . Презентация по Модуле-3 более 120 слайдов. Майкл Р. Дагенайс [ постоянная мертвая ссылка ] , мертвый
- Объектно-ориентированная абстракция данных в Modula-3 . Джозеф Бергин (1997)
- Интервью Computerworld с Лукой Карделли о Модуле-3