<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sib">
	<id>https://sibwiki.org/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D0%B0</id>
	<title>Модула - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://sibwiki.org/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D0%B0"/>
	<link rel="alternate" type="text/html" href="https://sibwiki.org/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D0%B0&amp;action=history"/>
	<updated>2026-05-31T12:25:21Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://sibwiki.org/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D0%B0&amp;diff=85941&amp;oldid=prev</id>
		<title>Yaroslav: Bot: Automated import of articles</title>
		<link rel="alternate" type="text/html" href="https://sibwiki.org/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D0%B0&amp;diff=85941&amp;oldid=prev"/>
		<updated>2026-05-30T21:59:08Z</updated>

		<summary type="html">&lt;p&gt;Bot: Automated import of articles&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова сторонка&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{YouTube|ZMPfWupWO9U|width=300|height=250}}&lt;br /&gt;
&lt;br /&gt;
Модула (Modula) — это семейство языков программирования высокого уровня, разработанное в конце 1970-х годов под руководством выдающегося швейцарского ученого Никлауса Вирта (создателя языка Паскаль) в Институте информатики Швейцарской высшей технической школы Цюриха (ETH Zürich). Название языка происходит от его фундаментальной архитектурной парадигмы — модульной системы организации программного кода. Язык создавался с целью устранения архитектурных ограничений раннего Паскаля и предназначался для профессиональной промышленной разработки и системного программирования.&lt;br /&gt;
&lt;br /&gt;
== История создания и эволюция стандарта ==&lt;br /&gt;
Концепция языка начала формироваться во второй половине 1970-х годов, когда язык Паскаль получил широкое распространение, но продемонстрировал ряд существенных проблем при попытках его использования в сложных промышленных проектах. Никлаус Вирт стремился создать инструмент, который сохранял бы академическую строгость и безопасность Паскаля, но обладал бы гибкостью и мощностью языка Си. &lt;br /&gt;
&lt;br /&gt;
Первая экспериментальная версия, известная просто как Модула, была представлена в 1975 году. Она ограничилась рамками научных публикаций, не получила завершенной технической реализации и не применялась на практике. &lt;br /&gt;
&lt;br /&gt;
Основываясь на полученном опыте, в 1978 году Вирт создал язык Модула-2. В отличие от учебного Паскаля, Модула-2 изначально проектировалась для нужд системного программирования и предназначалась для работы на персональной рабочей станции Lilith, разрабатываемой в том же Институте информатики в Цюрихе. Разработчикам удалось совместить высокоуровневые концепции (строгую статическую типизацию и надежность) с низкоуровневыми возможностями.&lt;br /&gt;
&lt;br /&gt;
Язык Модула-2 был стандартизирован в двух основных диалектах. Первым стандартом де-факто стала спецификация PIM (аббревиатура от названия фундаментального труда Никлауса Вирта «Programming in Modula-2»). Позднее язык прошел процедуру официальной международной стандартизации, получив стандарт ISO.&lt;br /&gt;
&lt;br /&gt;
== Архитектура и модульная парадигма ==&lt;br /&gt;
Фундаментальным нововведением языка стал модульный принцип разбиения программы. Программа на языке Модула-2 представляет собой набор независимых модулей — самостоятельных единиц компиляции. В отличие от языка Си, где модульность имитировалась механическим включением заголовочных файлов через препроцессор, в Модуле-2 этот принцип был реализован на уровне самого языка с жестким контролем связей.&lt;br /&gt;
&lt;br /&gt;
Каждый модуль логически и физически разделяется на две составляющие:&lt;br /&gt;
1. Модуль определений (Definition module) — выступает в роли внешнего интерфейса. В нем декларируются константы, переменные, а также заголовки процедур и функций, которые экспортируются (предоставляются для использования) другим модулям.&lt;br /&gt;
2. Модуль реализации (Implementation module) — содержит непосредственно исполняемый код, скрытый от внешнего пользователя, что обеспечивает инкапсуляцию логики.&lt;br /&gt;
&lt;br /&gt;
Язык поддерживает создание локальных и глобальных модулей. Ключевой особенностью является строго контролируемый импорт. Синтаксис позволяет не просто импортировать модуль целиком, но и точно специфицировать список запрашиваемых элементов: разработчик может указать конкретные константы, переменные или процедуры, которые необходимы для работы, исключая возможность конфликта имен.&lt;br /&gt;
&lt;br /&gt;
== Синтаксис и конструкции языка ==&lt;br /&gt;
Модула-2 сохранила простоту: ее полное описание занимает всего около 40 страниц (для сравнения, стандарт языка Си насчитывает порядка 500 страниц). В языке предусмотрено всего 40 зарезервированных ключевых слов. В отличие от Паскаля, язык является регистрозависимым: строчные и прописные буквы различаются, а все ключевые слова пишутся исключительно в верхнем регистре.&lt;br /&gt;
&lt;br /&gt;
Архитектура языка была очищена от избыточных и опасных конструкций. Был полностью исключен оператор безусловного перехода (goto). Существенной переработке подверглись управляющие конструкции. В Паскале использование условного оператора if и циклов требовало постоянного применения операторных скобок begin и end, что в сложных ветвлениях приводило к громоздким структурам. В Модуле-2 все синтаксические блоки начинаются с ключевого слова и завершаются единым закрывающим словом END. &lt;br /&gt;
&lt;br /&gt;
Концептуальный пример ветвления в Модуле-2 выглядит следующим образом:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
IF условие THEN&lt;br /&gt;
    операторы&lt;br /&gt;
ELSIF другое_условие THEN&lt;br /&gt;
    операторы&lt;br /&gt;
ELSE&lt;br /&gt;
    операторы&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В язык был добавлен безусловный цикл LOOP, а процедуры и функции перестали синтаксически разделяться (и те, и другие декларируются через ключевое слово PROCEDURE). Важным нововведением стало появление процедурного типа данных (позволяющего передавать процедуры как параметры) и предопределенного типа BITSET для работы с битовыми множествами.&lt;br /&gt;
&lt;br /&gt;
== Низкоуровневые возможности и библиотеки ==&lt;br /&gt;
Для обеспечения конкуренции с языком Си в Модулу-2 были включены средства прямого доступа к аппаратуре. Язык позволяет:&lt;br /&gt;
Осуществлять прямое отображение структур данных на физическую память (с явным указанием адресов памяти).&lt;br /&gt;
Писать низкоуровневые драйверы и обработчики аппаратных прерываний.&lt;br /&gt;
&lt;br /&gt;
В целях оптимизации базового синтаксиса из ядра языка были полностью удалены встроенные средства ввода-вывода. Все операции чтения и записи вынесены в стандартизированные внешние библиотеки. Также в стандартную библиотеку были вынесены средства поддержки параллельного программирования (сопрограммы).&lt;br /&gt;
&lt;br /&gt;
== Модула-3 ==&lt;br /&gt;
В конце 1980-х годов (в период с 1986 по 1988 год) группой разработчиков из корпорации DEC была создана Модула-3. Никлаус Вирт выступал в роли консультанта, но не принимал прямого участия в написании кода, так как в это время работал над языком Оберон.&lt;br /&gt;
&lt;br /&gt;
Модула-3 была призвана адаптировать язык к требованиям промышленного программирования конца десятилетия. Сохранив базовую безопасность и простоту, разработчики внедрили в язык:&lt;br /&gt;
Объектно-ориентированное программирование (ООП).&lt;br /&gt;
Структурную обработку исключений.&lt;br /&gt;
Полноценную многопоточность и автоматическую сборку мусора.&lt;br /&gt;
Обобщенное программирование (generics).&lt;br /&gt;
&lt;br /&gt;
Для работы с системными ресурсами было введено ключевое слово UNSAFE, помечающее блоки небезопасного кода. Обращение к импортированным объектам стало более строгим (через точечную нотацию). Была разработана обширная стандартная библиотека, включающая потоки ввода-вывода, форматирование строк и средства интеграции с кодом на языке Си.&lt;br /&gt;
&lt;br /&gt;
== Применение и влияние на индустрию ==&lt;br /&gt;
Несмотря на академическое совершенство, семейство языков Модула не смогло завоевать массовый коммерческий рынок программного обеспечения. В 1980-е годы отсутствие встроенной поддержки ООП сделало Модулу-2 менее привлекательной, а появившаяся позже Модула-3 не смогла конкурировать с доминирующими продуктами компании Borland (Turbo Pascal, Delphi) и языком C++. Коммерческие компиляторы Паскаля просто интегрировали ключевые идеи Модулы (в частности, модули-юниты, процедурные типы и исключения), сделав переход на новый язык бессмысленным для большинства программистов. Корпорация DEC вскоре прекратила свое существование, и развитие Модулы-3 остановилось.&lt;br /&gt;
&lt;br /&gt;
Тем не менее, языки нашли применение в академической и научно-исследовательской среде. В СССР Модула-2 получила значительное распространение благодаря фокусу советской науки на теоретические разработки. В Вычислительном центре Академии наук СССР были созданы трансляторы для суперкомпьютеров БЭСМ-6 и Электроника-60. Сибирское отделение АН СССР спроектировало серию процессоров «Крона» с аппаратной поддержкой архитектуры Модулы-2.&lt;br /&gt;
&lt;br /&gt;
В мировой практике Модула-2 до сих пор применяется в узкоспециализированных сферах с высочайшими требованиями к надежности (например, в бортовом программном обеспечении спутников навигационной системы ГЛОНАСС). На Модуле-3 была написана экспериментальная операционная система SPIN и утилиты синхронизации для системы управления версиями CVS. В настоящее время существуют бесплатные компиляторы с открытым исходным кодом (Open Source), поддерживающие множество аппаратных платформ, однако промышленное использование языков этого семейства остается минимальным.&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
[[Оберон]]&lt;br /&gt;
[[PL/I]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Языки программирования]]&lt;br /&gt;
&lt;br /&gt;
[https://www.youtube.com/watch?v=ZMPfWupWO9U Смотреть видео]&lt;/div&gt;</summary>
		<author><name>Yaroslav</name></author>
	</entry>
</feed>