stringtranslate.com

Модуль-2

Modula-2 — структурированный процедурный язык программирования , разработанный в период с 1977 по 1985/8 годы Никлаусом Виртом в ETH Zurich . Он был создан как язык операционной системы и прикладного программного обеспечения персональной рабочей станции Lilith . [1] Позже он использовался для программирования вне контекста Лилит.

Вирт рассматривал Modula-2 как преемника своих более ранних языков программирования Pascal и Modula . [2] [3] Основные понятия:

  1. Модуль как компилирующая единица для раздельной компиляции
  2. Сопрограмма как основной строительный блок для параллельных процессов
  3. Типы и процедуры, обеспечивающие доступ к данным, специфичным для машины

На языковой дизайн повлияли язык Mesa и Xerox Alto , оба из Xerox PARC , которые Вирт видел во время своего творческого отпуска в 1976 году. [4] Компьютерный журнал Byte посвятил августовский номер 1984 года языку и окружающей его среде. [5]

Вирт создал серию языков Oberon как преемника Modula-2, в то время как другие (особенно в Digital Equipment Corporation и Acorn Computers , позже Olivetti ) разработали Modula-2 в Modula-2+ и позже в Modula-3 .

Описание

Modula-2 — процедурный язык общего назначения, подходящий как для системного программирования , так и для программирования приложений. Синтаксис основан на более раннем языке Вирта, Паскале , с удаленными некоторыми элементами и синтаксической двусмысленностью. Концепция модуля , предназначенная для поддержки раздельной компиляции и абстракции данных; и была добавлена ​​прямая языковая поддержка мультипрограммирования .

Язык позволяет использовать однопроходные компиляторы . Такой компилятор Гуткнехта и Вирта был примерно в четыре раза быстрее, чем более ранние многопроходные компиляторы . [6]

Вот пример исходного кода программы «Hello world»:

МОДУЛЬ  Здравствуйте ; ИЗ  STextIO  IMPORT  WriteString ; BEGIN  WriteString ( «Привет, мир!» ) END  Hello .

Модуль Modula-2 может использоваться для инкапсуляции набора связанных подпрограмм и структур данных и ограничения их видимости из других частей программы. Программы Модулы-2 состоят из модулей, каждый из которых состоит из двух частей: модуля определения , интерфейсной части, содержащей только те части подсистемы, которые экспортируются ( видны другим модулям), и модуля реализации , который содержит рабочий код, внутренний для модуля.

Язык имеет строгий контроль области действия . За исключением стандартных идентификаторов, ни один объект снаружи не виден внутри модуля, если он не импортирован явно; ни один внутренний объект модуля не виден снаружи, если он не экспортирован явно.

Предположим, что модуль M1 экспортирует объекты a, b, c и P, перечисляя их идентификаторы в явном списке экспорта.

  МОДУЛЬ  ОПРЕДЕЛЕНИЯ M1 ;  ЭКСПОРТ  КВАЛИФИЦИРОВАН  a ,  b ,  c ,  P ;  ...

Тогда объекты a, b,c и P из модуля M1 известны вне модуля M1 как M1.a, M1.b, M1.c и M1.P. Они экспортируются квалифицированным образом наружу (при условии, что модуль M1 является глобальным). Имя экспортирующего модуля, т. е. M1, используется в качестве квалификатора, за которым следует имя объекта.

Предположим, что модуль M2 содержит следующее объявление IMPORT

 МОДУЛЬ  М2 ;  ИМПОРТ  М1 ;  ...

Тогда это означает, что объекты, экспортированные модулем M1 за пределы включающей его программы, теперь могут использоваться внутри модуля M2. На них указываются квалифицированные ссылки: M1.a, M1.b, M1.c и M1.P. Пример:

 ...  М1 . а  :=  0 ;  М1 . с  :=  M1 . Р ( М1.а + М1.б ) ; _ _  _ ...  

Квалифицированный экспорт позволяет избежать конфликтов имен. Например, если другой модуль M3 экспортирует объект с именем P, то эти два объекта можно различить, поскольку M1.P отличается от M3.P. Не имеет значения, что оба объекта внутри модулей экспорта M1 и M3 называются P.

Альтернативный метод существует. Предположим, что модуль M4 сформулирован так:

 МОДУЛЬ  М4 ;  ИЗ  M1  ИМПОРТ  a ,  b ,  c ,  P ;

Это означает, что объекты, экспортированные модулем M1 наружу, снова могут использоваться внутри модуля M4, но теперь посредством простых ссылок на экспортированные идентификаторы в неквалифицированном виде , например: a, b, c и P. Пример:

 ...  а  :=  0 ;  с  :=  P ( а  +  б );  ...

Этот метод импорта можно использовать, если нет конфликтов имен. Это позволяет использовать переменные и другие объекты вне их модуля экспорта таким же неквалифицированным способом, как и внутри модуля экспорта.

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

Язык обеспечивает однопроцессорный параллелизм ( мониторы , сопрограммы и явная передача управления) и аппаратный доступ (абсолютные адреса, битовые манипуляции и прерывания ). Он использует систему номинальных типов .

Диалекты

Существует два основных диалекта Модулы-2. Первый — PIM , названный в честь книги Никлауса Вирта «Программирование в Модуле-2» . [4] Было три основных издания PIM: второе, третье (исправленное) и четвертое. Каждый описывает небольшие варианты языка. Вторым основным диалектом является ISO , названный в честь усилий по стандартизации Международной организации по стандартизации . Вот некоторые различия между ними.

Суперсеты

Существует несколько расширений Modula-2 с языковыми расширениями для конкретных областей применения:

Производные

Существует несколько производных языков, которые очень похожи на Модулу-2, но сами по себе являются новыми языками. Большинство из них представляют собой разные языки с разными целями и собственными сильными и слабыми сторонами:

Многие другие современные языки программирования переняли особенности Модулы-2.

Языковые элементы

Зарезервированные слова

PIM [2,3,4] определяет 40 зарезервированных слов :

И ПОВТОРЕНИЕ ПЕТЛИ ELSIFМАССИВ КОНЕЦ MOD ВОЗВРАТНАЧАЛО ВЫХОД НАБОР МОДУЛЕЙЭКСПОРТОМ НЕ ТОГДАДЕЛО ДЛЯ ТОКОНСТ ИЗ ИЛИ ТИПОПРЕДЕЛЕНИЕ ЕСЛИ УКАЗАТЕЛЬ ДОПОРЯДОК РЕАЛИЗАЦИИ DIV VARДЕЛАЙТЕ ИМПОРТ КВАЛИФИЦИРОВАННЫМ, ПОКАЕЩЕ В ЗАПИСИ

Встроенные идентификаторы

PIM [3,4] определяет 29 встроенных идентификаторов :

АБС ИСКЛ. LONGINT REALНАБОР БИТОВ ЛОЖНЫЙ ДЛИННЫЙ РАЗМЕРBOOLEAN FLOAT MAX TRUECAP HALT MIN TRUNCКАРДИНАЛ ВЫСОКИЙ НОЛЬ ВАЛЧАР ИНК ОДДCHR, ВКЛЮЧАЯ ЗАКАЗДекабрьский целочисленный процесс

Использование встроенной системы

Модуль-2 используется для программирования многих встраиваемых систем .

Кембридж Модуль-2

Cambridge Modula-2 от Cambridge Microprocessor Systems основан на подмножестве PIM4 с языковыми расширениями для разработки встроенных систем. Компилятор работает под DOS и генерирует код для встраиваемых микроконтроллеров Motorola серии 68000 (M68k), работающих под управлением операционной системы MINOS.

Мод51

Mod51 от Mandeno Granville Electronics основан на ISO Modula-2 с языковыми расширениями для разработки встроенных систем в соответствии с IEC 1131 , отраслевым стандартом для программируемых логических контроллеров (ПЛК), тесно связанным с Modula-2. Компилятор Mod51 генерирует автономный код для микроконтроллеров на базе 80C51.

Модуль-ГМ

Delco Electronics , в то время дочерняя компания GM Hughes Electronics , начиная с 1985 года разработала версию Modula-2 для встраиваемых систем управления. Delco назвала ее Modula-GM. Это был первый язык программирования высокого уровня, который использовался для замены машинного кода (языка) встроенных систем в блоках управления двигателем (ЭБУ) Delco . Это было важно, поскольку в 1988 году Delco производила для GM более 28 000 ЭКЮ в день. Тогда это был крупнейший в мире производитель ЭБУ. [18] Первое экспериментальное использование Modula-GM во встроенном контроллере было в 1985 году в контроллере антиблокировочной тормозной системы, который был основан на микропроцессоре Motorola 68xxx, а в 1993 году ЭБУ Gen-4 использовался командами автогонок чемпионата Champ Car World Series Championship. (CART) и команды Indy Racing League (IRL). [19] Первым производственным применением Modula-GM было его использование в грузовиках GM, начиная с модуля управления транспортным средством (VCM) 1990 модельного года, который использовался для управления двигателями Vortec GM Powertrain . Modula-GM также использовался во всех ЭБУ для семейства двигателей GM Buick V6 3800 Series II, используемых в Buick Park Avenue 1997-2005 модельного года . Компиляторы Modula-GM и соответствующие инструменты управления программным обеспечением были получены Delco от Intermetrics .

В 1986 году Modula-2 был выбран в качестве основы для языка высокого уровня Delco из-за его многочисленных преимуществ перед другими альтернативными языками. После того, как в 1995 году Delco Electronics была выделена из GM (с другими подразделениями по производству компонентов) и образовала Delphi Automotive Systems , глобальный поиск поставщиков требовалось использовать непатентованный язык программного обеспечения высокого уровня. Встроенное программное обеспечение ЭБУ, разрабатываемое в настоящее время в Delphi , компилируется коммерческими компиляторами для языка C.

Российские радионавигационные спутники

Спутники российской системы радионавигационной спутниковой службы ГЛОНАСС , аналогичной системе глобального позиционирования (GPS) США , программируются в Модуле-2. [20]

Составители

Турбо Модуль-2

Turbo Modula-2 — компилятор и интегрированная среда разработки для MS-DOS , разработанная, но не опубликованная компанией Borland . Компания Jensen and Partners, в которую входил соучредитель Borland Нильс Йенсен, купила неизданную кодовую базу и превратила ее в TopSpeed ​​Modula-2. В конечном итоге он был продан компании Clarion, ныне SoftVelocity, которая в то время предлагала компилятор Modula-2 как часть своей линейки продуктов Clarion . [43]

Версия Turbo Modula-2 для Zilog Z80 CP/M некоторое время продавалась компанией Echelon по лицензии Borland. Сопутствующая версия для Hitachi HD64180 была продана Micromint как инструмент разработки для их одноплатного компьютера SB-180. [44]

IBM Модуль-2

У IBM был компилятор Modula-2 для внутреннего использования, который работал как в OS/2, так и в AIX , и имел первоклассную поддержку в редакторе E2 от IBM . [45] IBM Modula-2 использовался для частей внутреннего кода вертикальной лицензии OS/400 (фактически ядра OS/400). [46] Этот код в основном был заменен на C++ , когда OS/400 была перенесена на семейство процессоров IBM RS64 , хотя некоторые из них остались в современных версиях операционной системы. [47] [48] Также существовала серверная часть Motorola 68000 , которая, возможно, использовалась во встраиваемых системах. [45]

Операционные системы

Модуль-2 используется для программирования некоторых операционных систем (ОС). Структура и поддержка модуля Modula-2 используются непосредственно в двух родственных ОС.

ОС под названием Medos-2 для рабочей станции Lilith была разработана в ETH Zurich Свеном Эриком Кнудсеном по совету Вирта. Это однопользовательская объектно-ориентированная операционная система, построенная на модулях Modula-2. [49] [50] [51]

ОС под названием Excelsior , для рабочей станции «Кронос» , разработана Сибирским отделением Академии наук Советского Союза , Новосибирским вычислительным центром, проектом «Модульные асинхронные развивающиеся системы» (МАРС), «Кронос Исследовательской группой» (КРГ). Это однопользовательская система, основанная на модулях Модула-2. [52]

Книги

Рекомендации

  1. ^ "Краткое содержание проектов Н. Вирта, 1962–1999" . Кафедра компьютерных наук . ETH Цюрих .
  2. ^ Вирт, Никлаус (2002). «Паскаль и его преемники». В Брое, Манфред; Денерт, Эрнст (ред.). Пионеры программного обеспечения: вклад в разработку программного обеспечения . Берлин, Гейдельберг: Springer-Verlag . стр. 108–120. дои : 10.1007/978-3-642-59412-0. ISBN 978-3-642-59412-0. S2CID  2698265.
  3. Вирт, Никлаус (18 февраля 2005 г.). «История и цели Модулы-2». Журнал доктора Добба . ООО "Информа".
  4. ^ аб Вирт, Никлаус (1988). Программирование в Модуле-2 (4-е изд.). Берлин, Гейдельберг: Springer. дои : 10.1007/978-3-642-83565-0. ISBN 978-3-642-83565-0. S2CID  41899609.Страница 4.
  5. ^ Вирт, Никлаус ; Гуткнехт, Юрг ; Оран, Ричард; Пол, Роберт Дж.; Коар, Дэвид (август 1984 г.). «Тема: Модуль-2». Байт: Журнал малых систем . Том. 9, нет. 8. стр. 143–232.Доступно на Archive.org.
  6. Вирт, Никлаус (1 мая 1984 г.). «Однопроходный компилятор Модулы-2 для Лилит» (PDF) . Программное обеспечение ЦФБ . Проверено 23 ноября 2023 г.
  7. ^ ИСО/МЭК 10514-1:1996.
  8. ^ Тичи и др., Modula-2*: Расширение Modula-2 для переносимых программ с высокой степенью параллелизма, Университет Карлсруэ [1990]
  9. ^ Браунль, Параллельное программирование, Прентис-Холл [1993]
  10. ^ Мюллер, К. (ноябрь 1986 г.). «Модула – Пролог: разработка программного обеспечения». Программное обеспечение IEEE . 3 (6): 39–45}. дои : 10.1109/MS.1986.229475. S2CID  763425.
  11. ^ ab modula2.org, 5. Где я могу получить информацию об ISO Modula-2?
  12. ^ Карделли и др., Отчет Modula-3 , Отчет об исследовании 31, Центр системных исследований, Digital Equipment Corporation, [1988]
  13. ^ Н. Вирт и Дж. Гуткнехт, Проект Оберон: разработка операционной системы и компилятора, ISBN 0-201-54428-8 , Аддисон-Уэсли [1992] 
  14. ^ Moessenboeck & Wirth, Язык программирования Оберон-2 , ETH Zurich [1995]
  15. ^ Томас Браунль, Параллаксис, язык для структурированного параллельного программирования данных, Штутгартский университет [1996]
  16. ^ Пэт Д. Терри, Другой минимальный язык программирования, Уведомления ACM SIGPLAN № 30 [1995]
  17. ^ Д. Бласбанд, Язык программирования YAFL, второе издание, [1993]
  18. ^ Журнал Delco Electronics Electron, Наследие Этвуда, весна '89, стр. 25
  19. ^ Разработка электроники для автогонок GM.
  20. ^ Колташев, А.А. (2006). «Модула-2 в российском космосе». Кронос: История проекта (на русском языке). хТех . Проверено 8 апреля 2021 г.
  21. Гивен, Дэвид (9 октября 2020 г.). «АКК». Гитхаб . Проверено 13 марта 2021 г.
  22. ^ "ADW Модуль-2". Модуль-2.org . Проверено 13 марта 2021 г.
  23. ^ "Аглет Модуль-2". Аглет Модуль-2 . 15 февраля 2012 года . Проверено 13 марта 2021 г.
  24. ^ "ФСТ Модуль-2". psg.com . Проверено 13 октября 2021 г.
  25. ^ "Модула Гарденс-Пойнт" . Группа языков и систем программирования, факультет информационных технологий . Квинслендский технологический университет, Брисбен. 29 января 2007 г. Архивировано из оригинала 23 марта 2013 г. . Проверено 13 марта 2021 г.
  26. К. Джон Гоф (25 октября 2010 г.). «Гарденс Пойнт Модуль-2 (GPM/CLR)». Гитхаб . Проверено 16 октября 2022 г.
  27. ^ «ГНУ Модуль-2». Саванна . Фонд свободного программного обеспечения. 30 августа 2018 года . Проверено 13 марта 2021 г.
  28. ^ "Логитек Модуль-2" . Электронный журнал разработчиков для OS/2 (EDM/2) . Проверено 29 мая 2022 г.
  29. ^ «1988: Модуль-2 и Logitech RTK» . Ойвинд Тейг. 12 апреля 2022. Фотография дискеты .
  30. ^ Дежен, Рене; Нидер, Клаудио; Преузинг, Бернд; Шауб, Маркус; Штраубе, Йорг (2004). «М2Амига». Веб-сайт Клаудио . А+Л АГ. Архивировано из оригинала 20 января 2019 года . Проверено 13 марта 2021 г.
  31. ^ "Лилит и Модула-2". Программное обеспечение ЦФБ . Проверено 23 ноября 2023 г.
  32. ^ «MacMETH: быстрая языковая система Modula-2 для компьютеров Macintosh» . ETH Цюрих: Экология наземных систем . 22 января 2020 г. Проверено 13 марта 2021 г.
  33. ^ «Язык программирования структурированного текста Mod51» . Инструменты дизайна . Архивировано из оригинала 21 октября 2008 года . Проверено 13 марта 2021 г.
  34. Темпельманн, Томас (1 сентября 2020 г.). «Домашняя страница Томаса Темпельмана» . Проверено 18 марта 2021 г.
  35. ^ "Модула-2 Р10" . Проверено 13 октября 2021 г.
  36. Дотцель, Чи-Я (21 января 2020 г.). «МодульАвэр» . Проверено 18 марта 2021 г.
  37. Видеманн, Альберт (13 января 2021 г.). «П1 Модуль-2». p1 Общество компьютерных наук . Проверено 19 марта 2021 г.
  38. ^ Бек, Майкл; Гейсс, Рубино (2006). «Компилятор Карлсруэ Модуль-2 MOCKA». Институт программных структур и организации данных (IPD) . Технологический институт Карлсруэ . Архивировано из оригинала 4 сентября 2009 года . Проверено 21 марта 2021 г.
  39. ^ Джефферсон, Гарет (август 1986 г.). «Компилятор Модула-2». Австралийский персональный компьютер . стр. 49, 52, 54, 56, 58 . Проверено 8 октября 2022 г.
  40. ^ «Системы Модула-2 для OpenVMS/Alpha и OpenVMS/VAX». Terra Datentechnik (на английском и немецком языках). Эрленбах, Швейцария. 12 ноября 2002 года . Проверено 23 марта 2021 г.
  41. ^ Борхерт, Андреас; Хаш, Мартин (21 января 2003 г.). «m2c: Система Модула-2 Ульма». Ульмский университет . Ульм , Германия . Проверено 23 марта 2021 г.
  42. ^ «Семейство продуктов XDS: Modula-2 - инструменты разработки Oberon-2» . ООО «Эксельсиор» . 1999–2009 гг. Архивировано из оригинала 27 мая 2009 года . Проверено 23 марта 2021 г.
  43. ^ «О Кларионе». Архивировано из оригинала 7 декабря 2002 года . Проверено 31 марта 2023 г.
  44. ^ "Целевой подвал". Байт: Журнал малых систем . Том. 11, нет. 13. с. 98.
  45. ^ ab "IBM Модуль-2". edm2.com . 2 марта 2019 года . Проверено 12 марта 2021 г.
  46. ^ «Отзывы читателей о AS / 400: тайна решена» . itjungle.com . 21 февраля 2011 года . Проверено 12 марта 2021 г.
  47. ^ Солтис, Фрэнк Г. (1997). Внутри AS/400 (2-е изд.). Дьюк Пресс. ISBN 978-1882419661.
  48. Лейф Свальгаард (8 октября 2003 г.). «Re:Re:Эмулятор MI». MI400 (список рассылки) . Проверено 26 февраля 2021 г.
  49. ^ Кнудсен, Свенд Эрик (1983). Медос-2: Операционная система, ориентированная на Модуль-2, для персонального компьютера Лилит (доктор философии). ETH Цюрих . doi : 10.3929/ethz-a-000300091. hdl : 20.500.11850/137906.
  50. Кнудсен, Свенд Эрик (25 октября 2000 г.). «Медос в ретроспективе». В Бёсёрменьи, Ласло; Гуткнехт, Юрг ; Помбергер, Густав (ред.). Школа Никлауса Вирта: искусство простоты . Морган Кауфманн. стр. 69–86. ISBN 978-1558607231. ISBN  1-55860-723-4 и dпункт, ISBN 3-932588-85-1
  51. ^ Сэнд, Пол А. (сентябрь 1984 г.). «Персональный компьютер Лилит». Байт . стр. 300–311 . Проверено 6 марта 2021 г.Перепечатка.
  52. ^ Кузнецов, Д.Н.; Недоря, А.Е.; Тарасов Е.В.; Филиппов В.Е. «Кронос: семейство процессоров для языков высокого уровня». Кронос: История проекта (на русском языке). хТех . Проверено 13 апреля 2021 г.

Внешние ссылки