Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

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

Синтаксис [ править ]

Типичный пример синтаксиса языка - «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.

Интерфейс, который импортирует небезопасный модуль, также должен быть небезопасным. Безопасный интерфейс может быть экспортирован небезопасным модулем реализации. Это типичное использование при взаимодействии с внешними библиотеками , когда создаются два интерфейса: один небезопасный, другой безопасный.

Дженерики [ править ]

Универсальный интерфейс и соответствующий ему универсальный модуль префикс ключевого слова INTERFACEor и принимают в качестве формальных аргументов другие интерфейсы. Таким образом (подобно шаблонам C ++ ) можно легко определять и использовать абстрактные типы данных, но, в отличие от C ++ , детализация находится на уровне модуля. Интерфейс передается универсальному интерфейсу и модулям реализации в качестве аргументов, и компилятор сгенерирует конкретные модули.MODULEGENERIC

Например, можно определить 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]

Стандартные библиотеки, предоставляющие следующие возможности. Они называются стандартными интерфейсами и требуются (должны быть предоставлены) на языке.

  • Текст: операции с неизменяемыми строковыми ссылками, называемые TEXTs
  • Поток: операции, относящиеся к потокам, включая 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, такие как отслеживаемые и неотслеживаемые указатели.

Ссылки [ править ]

  1. ^ "Модуль критической массы-3 (CM3)" . Модуль критической массы-3 . elego Software Solutions GmbH . Проверено 21 марта 2020 .
  2. ^ "Политехнический модуль Монреаля-3 (PM3): Что это такое" . Политехнический Монреальский модуль-3 . elego Software Solutions GmbH . Проверено 21 марта 2020 .
  3. ^ Полстра, Джон Д. (9 ноября 2006). «Ezm3: более простое распределение Modula-3» . CVSup.org . Архивировано из оригинального 10 апреля 2013 года . Проверено 21 марта 2020 .
  4. ^ Weich, Карстен. «M3 / PC Klagenfurt 96: среда Modula-3 для MS-DOS» . Кафедра информатики . Клагенфуртский университет. Архивировано из оригинального 20 мая 2000 года . Проверено 21 марта 2020 .
  5. ^ Пичета, Доминик; Locurcio, Гюго. «Часто задаваемые вопросы» . Проверено 21 марта 2020 .
  6. Ван Россум, Гвидо (май 1996 г.). «Программирование на Python: предисловие (1-е изд.)» . Python.org . Проверено 21 марта 2020 .
  7. ^ "Часто задаваемые вопросы по дизайну и истории: почему" self "должно явно использоваться в определениях и вызовах методов?" . Python.org . 21 марта 2020 . Проверено 21 марта 2020 .
  8. ^ a b c Отчет о Модуле-3 (отредактированный) Лука Карделли, Джеймс Донахью, Люсиль Глассман, Мик Джордан, Билл Калсо, Грег Нельсон. Отчет об исследовании 52 Центра системных исследований DEC (SRC) (ноябрь 1989 г.)
  9. ^ a b Некоторые полезные интерфейсы Modula-3 Джим Хорнинг, Билл Калсо, Пол МакДжонс, Грег Нельсон. Отчет об исследовании 113 Центра системных исследований DEC (SRC) (декабрь 1993 г.)
  10. ^ LM3 Кевин Д. Джонс. Отчет об исследовании 72 Центра системных исследований DEC (SRC) (июнь 1991 г.)
  11. ^ Расширенная статическая проверка Дэвид Л. Детлефс, К. Рустан М. Лейно, Грег Нельсон, Джеймс Б. Сакс . Отчет об исследовании Compaq SRC 159 (декабрь 1998 г.)
  12. ^ SRC Modula-3 3.3 [ постоянная мертвая ссылка ] Билл Калсо и Эрик Мюллер. Digital Equipment Corporation (январь 1995 г.)
  13. ^ Джордан, Мик (1990). «Расширяемая среда программирования для Modula-3» . SIGSOFT Softw. Англ. Примечания . 15 (6): 66–76. DOI : 10.1145 / 99278.99285 . Проверено 8 сентября 2009 .
  14. ^ Введение в программирование с помощью потоков Эндрю Д. Биррелл. Отчет об исследовании 35 Центра системных исследований DEC (SRC) (январь 1989 г.)
  15. ^ Примитивы синхронизации для мультипроцессора: формальная спецификация А. Д. Биррелл, Дж. В. Гуттаг, Дж. Дж. Хорнинг, Р. Левин. Отчет об исследовании 20 Центра системных исследований DEC (SRC) (август 1987 г.)
  16. ^ Потоки ввода-вывода: абстрактные типы, реальные программы Марк Р. Браун и Грег Нельсон. Отчет об исследовании 53 Центра системных исследований DEC (SRC) (ноябрь 1989 г.)
  17. ^ Справочное руководство Modula-3 Лука Карделли, Джеймс Донахью, Люсиль Глассман, Мик Джордан, Билл Калсо, Грег Нельсон. Центр системных исследований DEC (SRC) (февраль 1995 г.)
  18. ^ Учебник по эстакаде Марк С. Манассе и Грег Нельсон. Отчет об исследовании 69 Центра системных исследований DEC (SRC) (май 1992 г.)
  19. ^ Сборщик мусора удаленных объектов , Документация по вызову удаленного метода Java для Java SE 8.
  20. ^ Классы , официальная документация 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