~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ C87498699F150B92E6ACFB64E32E5193__1710497220 ✰
Заголовок документа оригинал.:
✰ Modula-3 - Wikipedia ✰
Заголовок документа перевод.:
✰ Модуль-3 — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Modula-3 ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/c8/93/c87498699f150b92e6acfb64e32e5193.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/c8/93/c87498699f150b92e6acfb64e32e5193__translat.html ✰
Дата и время сохранения документа:
✰ 22.06.2024 17:10:51 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 15 March 2024, at 13:07 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Модуль-3 — Википедия Jump to content

Модуль-3

Из Википедии, бесплатной энциклопедии
Модуль-3
Парадигмы императивный , структурированный , процедурный , модульный , параллельный , объектно-ориентированный , общий
Семья Вирт / Модула
Разработано Лука Карделли , Джеймс Донахью, Люсиль Глассман, Мик Джордан; Билл Калсоу, Грег Нельсон
Разработчики Декабрь
Оливетти
Элего Софтвер Солюшнс ГмбХ
Впервые появился 1988 год ; 36 лет назад ( 1988 )
Стабильная версия
5.8.6 / 14 июля 2010 г .; 13 лет назад ( 14 июля 2010 г. )
Предварительный выпуск
5.8.6 / 14 июля 2010 г .; 13 лет назад ( 14 июля 2010 г. )
Дисциплина набора текста сильный , статический , безопасный или, если небезопасный, явно безопасный изолированный
Объем Лексический
Платформа ИА-32 , x86-64 , PowerPC , SPARC
ТЫ Кроссплатформенность : FreeBSD , Linux , Darwin , SunOS.
Веб-сайт www .modula3 .org
Основные реализации
СРЦ Модуль-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 Лаборатории программных технологий ), Биллом Калсоу и Грегом Нельсоном в Digital Equipment Corporation (SRC ) Центре системных исследований (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 сейчас преподают в университетах в основном на курсах сравнительного программирования, а учебники по ней больше не издаются. По сути, единственным корпоративным сторонником Модулы-3 является компания elego, которая унаследовала исходники от Critical Mass и с тех пор выпустила несколько выпусков системы CM3 в исходном и двоичном коде. Reactor IDE была выпущена с открытым исходным кодом после нескольких лет отсутствия под новым названием CM3-IDE. В марте 2002 года elego также взяла на себя репозиторий другого активного дистрибутива Modula-3, PM3, который до этого момента поддерживался на Политехническая школа Монреаля , которая позже продолжилась работой над HM3, с годами совершенствовалась, пока не устарела.

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

языка Типичным примером синтаксиса является фраза «Hello, World!». программа .

МОДУЛЬ   Основной  ;  
  ИМПОРТ   В/В  ; 
  НАЧАТЬ 
   ИО  .   Поместите  (  «Hello World\n»  ) 
 END   Main  . 

Все программы в Модуле-3 имеют как минимум файл модуля, а большинство из них также включают файл интерфейса, который используется клиентами для доступа к данным из модуля . Как и в некоторых других языках, программа Modula-3 должна экспортировать главный модуль, который может быть либо файлом с именем Main.m3, либо файлом, который может вызывать EXPORT для экспорта основного модуля.

МОДУЛЬ   Foo   ЭКСПОРТ   Главная 

Имена файлов модулей рекомендуется совпадать с именем в исходном коде. Если они различаются, компилятор только выдает предупреждение.

Другие соглашения в синтаксисе включают именование экспортируемого типа интерфейса. T, поскольку типы обычно характеризуются их полными именами, поэтому тип T внутри модуля с именем Foo будет называться Foo.T. Это способствует читабельности. Другое похожее соглашение — присвоение имени общедоступному объекту. Public как в примерах ООП ниже.

Языковые особенности [ править ]

Модульность [ править ]

Прежде всего, все скомпилированные модули либо INTERFACE или реализация MODULEs, того или иного вкуса. Модуль, скомпилированный интерфейсом, начинающийся с ключевого слова INTERFACE, определяет константы, типы, переменные, исключения и процедуры. Модуль реализации, начинающийся с ключевого слова MODULE, предоставляет код и любые дополнительные константы, типы или переменные, необходимые для реализации интерфейса. По умолчанию модуль реализации реализует одноименный интерфейс, но модуль может явно EXPORTк модулю с другим именем. Например, основная программа экспортирует модуль реализации для основного интерфейса.

МОДУЛЬ   HelloWorld   ЭКСПОРТ   Main  ;  
  ИМПОРТ   В/В  ; 
  НАЧАТЬ 
   ИО  .   Поместите  (  «Hello World\n»  ) 
 END   HelloWorld  . 

Любой скомпилированный модуль может IMPORTдругие интерфейсы, хотя циклический импорт запрещен. Эту проблему можно решить, выполнив импорт из модуля реализации. Сущности внутри импортированного модуля можно импортировать вместо имени модуля, используя FROM Module IMPORT Item [, Item]* синтаксис:

МОДУЛЬ   HelloWorld   ЭКСПОРТ   Main  ;  
  ИЗ   IO   ИМПОРТ   Поместите  ; 
  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

ИНТЕРФЕЙС   IntegerElem  ; 
  CONST   Имя   =   "Целое число"  ; 
  ТИП   T   =   ЦЕЛОЕ ЧИСЛО  ; 
  ПРОЦЕДУРА   Формат  (  x  :   T  ):   ТЕКСТ  ; 
  ПРОЦЕДУРА   Сканирование  (  txt  :   ТЕКСТ  ;   VAR   x  :   T  ):   BOOLEAN  ; 
  КОНЕЦ   ЦелочисленныйЭлем  . 

ФАЙЛ: GenericStack.ig

ОБЩИЙ   ИНТЕРФЕЙС   GenericStack  (  Элемент  ); 
  (* Здесь Element.T — это тип, который будет храниться в общем стеке. *) 
 TYPE 
    T   =   Public   OBJECT  ; 
     Public   =   МЕТОДЫ 
    ОБЪЕКТА 
        init  ():   TStack  ; 
         формат  ():   ТЕКСТ  ; 
         isEmpty  ():   BOOLEAN  ; 
         количество  ():   ЦЕЛОЕ  ; 
         нажать  (  elm  :   Element  .  T  ); 
         pop  (  VAR   elem  :   Element  .  T  ):   BOOLEAN  ; 
     КОНЕЦ  ; 
  КОНЕЦ   GenericStack  . 

ФАЙЛ: GenericStack.mg

ОБЩИЙ   МОДУЛЬ   GenericStack  (  Элемент  ); 
  <   ...   общие   о реализации   сведения  ...   > 
 ПРОЦЕДУРА   Формат  (  self  :   T  ):   TEXT   = 
 VAR 
    str  :   TEXT  ; 
  BEGIN 
    str   :=   Элемент  .   Имя   &   "Стек{"  ; 
     FOR   k   :=   0   TO   self  .   n   -  1   DO 
        IF   k   >   0   THEN   str   :=   str   &   ", "  ;    КОНЕЦ  ; 
         ул   :=   стр   &   Элемент  .   Формат  (  self.arr  [  k  ]  )  ; 
     КОНЕЦ  ; 
     ул   :=   ул   &   "};"   ; 
     ВОЗВРАТ   ул  ; 
  КОНЕЦ   Формат  ; 
  <   ...   подробнее   общей   реализации   об  ...   > 
 END   GenericStack  . 

ФАЙЛ: IntegerStack.i3

ИНТЕРФЕЙС   IntegerStack   =   GenericStack  (  IntegerElem  )   КОНЕЦ   IntegerStack  . 

FILE: IntegerStack.m3

МОДУЛЬ   IntegerStack   =   GenericStack  (  IntegerElem  )   END   IntegerStack  . 

Прослеживаемость [ править ]

Любой идентификатор можно отследить до места его происхождения, в отличие от функции «включения» в других языках. Скомпилированный модуль должен импортировать идентификаторы из других скомпилированных модулей, используя IMPORTзаявление. Даже в перечислениях используется та же точка, что и при доступе к полю записи.

ИНТЕРФЕЙС   А  ; 

  ТИП   Цвет   =   {  Черный  ,   Коричневый  ,   Красный  ,   Оранжевый  ,   Желтый  ,   Зеленый  ,   Синий  ,   Фиолетовый  ,   Серый  ,   Белый  }; 

  КОНЕЦ   А  ; 
МОДУЛЬ   Б  ; 

  ИМПОРТ   А  ; 
  ИЗ   ИМПОРТНОГО    Цвета  ; 

  ВАР 
   aЦвет  :   A.   Цвет  ;     (* Использует имя модуля в качестве префикса *) 
   theColor  :   Color  ;     (* Не имеет имени модуля в качестве префикса * 
   AnotherColor  :   A.  )   Цвет  ; 

  НАЧАЛО 
   aColor   :=   A  .   Цвет  .   Коричневый  ; 
    theColor   :=   Цвет  .   Красный  ; 
    другойЦвет   :=   Цвет  .   Апельсин  ;     (*Невозможно просто использовать оранжевый *) 
 END   B  . 

Динамическое размещение [ править ]

Modula-3 поддерживает распределение данных во время выполнения . Можно выделить два типа памяти: TRACED и UNTRACEDразница в том, сборщик мусора или нет. видит ли это NEW()используется для выделения данных любого из этих классов памяти. В UNSAFE модуль, DISPOSE доступен для освобождения неотслеживаемой памяти.

Объектно-ориентированный [ править ]

В Модуле-3 могут использоваться методы объектно-ориентированного программирования, но их использование не является обязательным. Многие другие функции, представленные в Modula-3 (модули, дженерики), обычно могут заменять объектную ориентацию.

Поддержка объектов намеренно сведена к самым простым условиям. Тип объекта (называемый «классом» в других объектно-ориентированных языках) вводится с помощью OBJECT объявление, которое имеет по существу тот же синтаксис, что и RECORDобъявление, хотя тип объекта является ссылочным типом, тогда как RECORD в Modula-3 таковым не является (аналогично структурам в C). Экспортируемые типы обычно называются T по соглашению, и для предоставления доступа к методам и данным создается отдельный тип «Public». Например:

ИНТЕРФЕЙС   Человек  ; 

  ТИП   T   <  :   Публичный  ; 
    Public   =   МЕТОДЫ  
   ОБЪЕКТА 
     getAge  ():   INTEGER  ; 
      init  (  имя  :   ТЕКСТ  ;   возраст  :   ЦЕЛОЕ  ):   T  ; 
    КОНЕЦ  ; 

  КОНЕЦ   Человек  . 

Это определяет интерфейс Person с двумя типами, T, и Public, который определен как объект с двумя методами: getAge() и init(). T определяется как подтип Public с помощью <: оператор.

Чтобы создать новый Person.T объект, используйте встроенную процедуру NEW с методом init() как

ВАР   Джим   :=   НОВЫЙ  (  Person  .  T  ).   init  (  "Джим"  ,   25  ); 

Откровение [ править ]

Модула-3 REVEALКонструкт предоставляет концептуально простой и понятный, но очень мощный механизм сокрытия деталей реализации от клиентов с произвольным количеством уровней дружественности . Полное раскрытие формы REVEAL T = V может быть использован для демонстрации полной реализации Personинтерфейс сверху. Частичное раскрытие формы REVEAL T <: V просто показывает, что T является супертипом V, не раскрывая никакой дополнительной информации о T. [10]

МОДУЛЬ   Человек  ; 

  REVEAL   T   =   Общедоступное   БРЕНДИРОВАННОГО  
 ОБЪЕКТА  
   имя  :   ТЕКСТ  ;      (* Эти две переменные *) 
   age  :   INTEGER  ;    (* являются частными. *) 
 ПЕРЕОПРЕДЕЛЯЕТ 
   getAge   :=   Age  ; 
    инициализация   :=   инициализация  ; 
  КОНЕЦ  ; 

  ПРОЦЕДУРА   Возраст  (  self  :   T  ):   INTEGER   = 
   BEGIN 
     RETURN   self  .   возраст  ; 
    КОНЕЦ   Возраста  ; 

  ПРОЦЕДУРА   Init  (  self  :   T  ;   имя  :   TEXT  ;   возраст  :   INTEGER  ):   T   = 
   BEGIN 
     self  .   имя   :=   имя  ; 
      себя  .   возраст   :=   возраст  ; 
    ВОЗВРАТ   себя  ; 
    КОНЕЦ   Инициал  ; 

  НАЧАЛО 
 КОНЕЦ   Человек  . 

Обратите внимание на использование 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, такие как отслеживаемые и неотслеживаемые указатели.

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

  1. ^ «Модула критической массы-3 (СМ3)» . Модуль критической массы-3 . Элего Программные решения ГмбХ . Проверено 21 марта 2020 г.
  2. ^ «Политехнический институт Монреаля Модуль-3 (ПМ3): Что это такое» . Политехнический институт Монреаля Модуль-3 . Элего Программные решения ГмбХ . Проверено 21 марта 2020 г.
  3. ^ Полстра, Джон Д. (9 ноября 2006 г.). «Ezm3: более простой дистрибутив Modula-3» . CVSup.org . Архивировано из оригинала 10 апреля 2013 года . Проверено 21 марта 2020 г.
  4. ^ Вайх, Карстен. «M3/PC Klagenfurt 96: среда Modula-3 для MS-DOS» . Кафедра информатики . Университет Клагенфурта. Архивировано из оригинала 20 мая 2000 года . Проверено 21 марта 2020 г.
  5. ^ Пичета, Доминик; Локурсчо, Уго. "Часто задаваемые вопросы" . Проверено 21 марта 2020 г.
  6. ^ «R/Rust — я только что узнал о Modula-3, языке, который имел много схожих с Rust целей, и существовала даже экспериментальная ОС, которая полагалась на безопасность, обеспечиваемую этим языком» .
  7. ^ ван Россум, Гвидо (май 1996 г.). «Программирование на Python: Предисловие (1-е изд.)» . Python.org . Проверено 21 марта 2020 г.
  8. ^ «Часто задаваемые вопросы по проектированию и истории: почему слово «self» должно использоваться явно в определениях и вызовах методов?» . Python.org . 21 марта 2020 г. Проверено 21 марта 2020 г.
  9. ^ Перейти обратно: а б с Отчет по Модуле-3 (пересмотренный) Лука Карделли, Джеймс Донахью, Люсиль Глассман, Мик Джордан, Билл Калсоу, Грег Нельсон. Отчет 52 Центра системных исследований DEC (SRC) (ноябрь 1989 г.)
  10. ^ Карделли, Лука; Донахью, Джеймс; Глассман, Люсиль; Джордан, Мик; Калсоу, Билл; Нельсон, Грег (август 1992 г.). «Определение языка Модула-3» . Уведомления ACM SIGPLAN . 27 (8): 15–42. дои : 10.1145/142137.142141 . ISSN   0362-1340 .
  11. ^ Перейти обратно: а б Некоторые полезные интерфейсы Modula-3. Архивировано 4 марта 2016 г. в Wayback Machine Джимом Хорнингом, Биллом Калсоу, Полом МакДжонсом, Грегом Нельсоном. Отчет 113 Центра системных исследований DEC (SRC) (декабрь 1993 г.)
  12. ^ LM3. Архивировано 3 марта 2016 г. в Wayback Machine Кевина Д. Джонса. Отчет 72 Центра системных исследований DEC (SRC) (июнь 1991 г.)
  13. ^ Расширенная статическая проверка. Архивировано 5 июля 2017 г. в Wayback Machine Дэвид Л. Детлефс, К. Рустан М. Лейно, Грег Нельсон, Джеймс Б. Сакс . Отчет Compaq SRC об исследовании № 159 (декабрь 1998 г.)
  14. ^ НИЦ Модуль-3 3.3 [ постоянная мертвая ссылка ] Билл Калсоу и Эрик Мюллер. Корпорация цифрового оборудования (январь 1995 г.)
  15. ^ Джордан, Мик (1990). «Расширяемая среда программирования для Модулы-3» . Программное обеспечение SIGSOFT. англ. Примечания . 15 (6): 66–76. дои : 10.1145/99278.99285 .
  16. ^ Введение в программирование с использованием потоков. Архивировано 5 июля 2017 г. в Wayback Machine Эндрю Д. Биррелла. Отчет об исследовании 35 Центра системных исследований DEC (SRC) (январь 1989 г.)
  17. ^ Примитивы синхронизации для мультипроцессора: формальная спецификация. Архивировано 4 марта 2016 г. в Wayback Machine А.Д. Бирреллом, Дж. В. Гуттагом, Дж. Дж. Хорнингом, Р. Левином. Отчет об исследовании 20 Центра системных исследований DEC (SRC) (август 1987 г.)
  18. ^ Потоки ввода-вывода: абстрактные типы, реальные программы. Архивировано 3 марта 2016 г. в Wayback Machine Марка Р. Брауна и Грега Нельсона. Отчет 53 Центра системных исследований DEC (SRC) (ноябрь 1989 г.)
  19. ^ Справочное руководство Modula-3 Лука Карделли, Джеймс Донахью, Люсиль Глассман, Мик Джордан, Билл Калсоу, Грег Нельсон. Центр системных исследований DEC (SRC) (февраль 1995 г.)
  20. ^ Учебное пособие по эстакаде. Архивировано 3 марта 2016 г. в Wayback Machine Марка С. Манасса и Грега Нельсона. Отчет об исследовании 69 Центра системных исследований DEC (SRC) (май 1992 г.)
  21. ^ Сборка мусора удаленных объектов , Документация по удаленному вызову методов Java для Java SE 8.
  22. ^ Классы , Официальная документация Python.

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: C87498699F150B92E6ACFB64E32E5193__1710497220
URL1:https://en.wikipedia.org/wiki/Modula-3
Заголовок, (Title) документа по адресу, URL1:
Modula-3 - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)