Оберон (язык программирования)

Поделись знанием:
(перенаправлено с «Глагол (язык программирования)»)
Перейти к: навигация, поиск
Oberon
Класс языка:

императивный, структурированный, модульный

Появился в:

1986

Автор:

Никлаус Вирт

Система типов:

статическая, сильная

Испытал влияние:

Modula-2, Pascal

Повлиял на:

Active Oberon, Component Pascal, Go, Java[1][2], Modula-3, Oberon-2, Zonnon

Сайт:

[www.oberon.ethz.ch/ ron.ethz.ch]

Оберон — язык программирования высокого уровня, разработанный Никлаусом Виртом, для исполнения программ на котором предназначена одноимённая операционная система, авторами которой являются Никлаус Вирт и Юрг Гуткнехт (нем.).





Системы и среды

Программы, написанные на языке программирования Оберон, требуют определённой поддержки во время выполнения — им необходим динамический загрузчик и централизованно выполняемый автоматический сборщик мусора, для этого программам на языке Оберон нужна специальная операционная среда. Обычным способом её реализации является добавление в систему набора библиотек, реализующих необходимые компоненты, хотя, вообще говоря, операционной среде вовсе не обязательно нужна отдельная операционная система: она сама по себе может представлять собой операционную систему. Таковы системы Native Oberon для первоначального Оберона и A2 для Активного Оберона. На данный момент существуют компиляторы Оберон в байт-код виртуальной Java-машины и CLI для виртуальной машины .NET.

Операционные системы и среды для исполнения программ на языках семейства Оберон, развившихся из первоначальной Системы Оберон, являются ETH Oberon, BlackBox Component Builder, WinOberon, A2 и др.

На основе Оберона были разработаны проекты Оберон-0, Оберон-X и другие[3]. Простота Оберона и наличие исходных текстов оригинальной реализации позволяют легко адаптировать его для специальных классов задач. Но все эти Обероны очень близки между собой, поскольку и первоначальный Оберон очень прост.

История языка

Основой для Оберона послужил язык Модула-2, выросший из Паскаля, (по словам Вирта[4], первоначально систему хотели писать непосредственно на Модуле, но пришли к выводу о необходимости её доработки и сокращения, что и привело к появлению Оберона). Целью проекта (Project Oberon) Никлауса Вирта и Юрга Гуткнехта в 1986—1989 годы[5] было создание с нуля обозримой и надежной операционной системы для однопользовательской рабочей станции.

Для реализации этого проекта в 1988 году Никлаусом Виртом был спроектирован язык программирования высокого уровня общего назначения, также названный Оберон[6].

В 1989 году в Швейцарской высшей технической школе Цюриха (ETH) была выпущена первая реализация Оберона для процессоров семейства NS32000. Он был создан в качестве компонента операционной среды Оберон. Этот компилятор требует менее 50 Кбайт памяти, состоит из 6 модулей общим объёмом около 4000 строк и сам себя компилирует за 15 секунд на компьютере с процессором NS32532 (тактовая частота — 25 МГц).

Язык Оберон

Нововведения

Просто невозможно поблагодарить всех тех, кто так или иначе подпитывал своими идеями то, что теперь называется Oberon. Большинство идей пришло от использования и изучения существующих языков, таких как Modula-2, Ada, Smalltalk и Cedar, которые часто предостерегали нас от того, как не надо делать.

Язык сохранил основные черты синтаксиса Модулы и был объектным расширением. Это позволило отказаться от механизма вариантных записей Модулы, являющихся отступлением от первоначальной строгой статической типизации, что дало возможность ввести механизм автоматического управления памятью — сборку мусора: из языка исключена возможность освобождения динамически выделенной памяти с помощью особого оператора, а вместо него сама среда исполнения содержит модуль, возвращающий неиспользуемую память системе. Автоматическое управление памятью является средством повышения надёжности программ с динамическими структурами данных, так как исключает человеческие ошибки, свойственные, например, таким языкам, как С/C++.

Упрощение синтаксиса

Чтобы добиться наибольшей надёжности и производительности трансляции, было предпринято значительное упрощение языка за счёт его отказа от средств, которые были сочтены ненужными (исходя из опыта разработки, реализации и применения других языков), либо усложняли компилятор без достаточного оправдания с точки зрения производительности, либо были достаточно сложны, чтобы быть отправленными во внешние библиотеки, либо плохо совмещались с механизмами модульности и автоматического управления памятью: записи с вариантами, перечислимые типы, типы-диапазоны, множества общего вида, беззнаковый целый тип, локальные модули, модули определений, списки экспорта, оператор for, прежний вариант оператора with, специальный синтаксис определения главной программы. Рудиментарные средства поддержки параллельного программирования, имевшиеся в Модуле-2, не вошли в язык, так как он обслуживал однопользовательскую операционную систему. В целях упрощения отказались от обработки исключений.

Было упрощено описание массивов (индексы массивов могут быть только целочисленными и всегда начинаются с нуля, подобно языку Си), ограничено использование указателей — указатели могут существовать только на записи и массивы, в списках импорта указывается только импортируемый модуль, а при использовании импортированных имён требуется обязательная квалификация (явное указание имени модуля-экспортёра). В статье «От Модулы к Оберону»[4] Вирт подробно пояснил причины удаления каждого из элементов.

Из соображений «достаточного минимума» в язык не были включены в качестве явного синтаксического понятия методы (процедуры и функции, связанные с типом), так как этот механизм в самом общем виде легко смоделировать, создавая в объектах (записях в языке Оберон) поля процедурного типа и присваивая им процедуры, соответствующие методам. Таким образом, в Обероне минимальными средствами поддерживается объектно-ориентированное программирование для упрощения процесса трансляции кода и ускорения этого процесса.

Благодаря внесённым изменениям, Оберон стал синтаксически проще. Описание его синтаксиса поместилось на одной странице, полное описание языка занимает около 20 страниц, что вдвое меньше, чем описание Модулы-2. Оберон является если не минимальным, то, во всяком случае, одним из самых малых по объёму универсальных языков программирования высокого уровня.

Эпиграфом к описанию оригинального Оберона было выбрано высказывание Эйнштейна: «Делай настолько просто, насколько возможно, но не проще этого».

Синтаксис Оберона в РБНФ

Определён в следующих предложениях РБНФ[7]:

Модуль           = MODULE идент ";" [СписокИмпорта] ПослОбъявл [BEGIN ПослОператоров] END идент ".".
СписокИмпорта    = IMPORT [идент ":="] идент {"," [идент ":="] идент} ";".
ПослОбъявл       = { CONST {ОбъявлКонст ";" } | TYPE {ОбъявлТипа ";" } | VAR {ОбъявлПерем ";" }}
  {ОбъявлПроц ";" | ОпережающееОбъяв";"}.
ОбъявлКонст      = ИдентОпр "=" КонстВыраж.
ОбъявлТипа       = ИдентОпр "=" Тип.
ОбъявлПерем      = СписокИдент ":" Тип.
ОбъявлПроц       = PROCEDURE [Приемник] ИдентОпр [ФормальныеПарам]";" ПослОбъявл [BEGIN ПослОператоров] END идент.
ОпережающееОбъяв = PROCEDURE "^" [Приемник] ИдентОпр [ФормальныеПарам].
ФормальныеПарам  = "(" [СекцияФП {";" СекцияФП}] ")" [":" УточнИдент].
СекцияФП         = [VAR] идент {"," идент} ":" Тип.
Приемник         = "(" [VAR] идент ":" идент ")".
Тип              = УточнИдент | ARRAY [КонстВыраж {"," КонстВыраж}] OF Тип
  | RECORD ["("УточнИдент")"] СписокПолей {";" СписокПолей} END | POINTER TO Тип | PROCEDURE [ФормальныеПарам].
СписокПолей      = [СписокИдент ":" Тип].
ПослОператоров   = Оператор {";" Оператор}.
Оператор         = [ Обозначение ":=" Выраж
  | Обозначение ["(" [СписокВыраж] ")"]
  | IF Выраж THEN ПослОператоров {ELSIF Выраж THEN ПослОператоров} [ELSE ПослОператоров] END
  | CASE Выраж OF Вариант {"|" Вариант} [ELSE ПослОператоров] END
  | WHILE Выраж DO ПослОператоров END
  | REPEAT ПослОператоров UNTIL Выраж
  | LOOP ПослОператоров END
  | WITH Охрана DO ПослОператоров END
  | EXIT
  | RETURN [Выраж] ].
Вариант          = [МеткиВарианта {"," МеткиВарианта} ":" ПослОператоров].
МеткиВарианта    = КонстВыраж [".." КонстВыраж].
Охрана           = УточнИдент ":" УточнИдент.
КонстВыраж       = Выраж.
Выраж            = ПростоеВыраж [Отношение ПростоеВыраж].
ПростоеВыраж     = ["+" | "-"] Слагаемое {ОперСлож Слагаемое}.
Слагаемое        = Множитель {ОперУмн Множитель}.
Множитель        = Обозначение ["(" [СписокВыраж] ")"] | число | символ | строка | NIL | Множество
  | "(" Выраж ")" | " ~ " Множитель.
Множество        = "{" [Элемент {"," Элемент}] "}".
Элемент          = Выраж [".." Выраж].
Отношение        = "=" | "#" | "<" | "<=" | ">" | ">=" | IN | IS.
ОперСлож         = "+" | "-" | OR.
ОперУмн          = "*" | "/" | DIV | MOD | "&".
Обозначение      = УточнИдент {"." идент | "[" СписокВыраж "]" | "^" | "(" УточнИдент ")"}.
СписокВыраж      = Выраж {"," Выраж}.
СписокИдент      = ИдентОпр {"," ИдентОпр}.
УточнИдент       = [идент "."] идент.
ИдентОпр         = идент [ "*" | "-" ].

Основные элементы

Программа на Обероне представляет собой набор модулей. В общем виде модуль имеет вид:

  MODULE Имя;
    IMPORT СписокИмпорта;
    Определения;
  BEGIN
    Операторы
  END Имя.

Список импорта определяет, из каких модулей будут импортированы внешние имена. Определения включают определения типов, процедур, функций, переменных, констант. При этом определения имён, отмеченных звёздочкой, экспортируются данным модулем, то есть будут видны другим модулям, импортирующим данный. В Обероне-2 допустимо также помечать имена знаком минус, в этом случае они экспортируются в режиме «только для чтения».

Тело модуля исполняется при его загрузке. В Компонентном Паскале внутри тела модуля (в разделе BEGIN..END) появилась возможность добавить секцию CLOSE:

  BEGIN
    Операторы
  CLOSE
    Операторы
  END Имя.

Здесь операторы, расположенные между BEGIN и CLOSE, выполняются при загрузке модуля, а операторы, расположенные между CLOSE и END — при выгрузке его из памяти. Такое расширение было сочтено полезным для компонентных программ, которые загружают и выгружают модули динамически.

Создаваемые программистом типы данных ограничены следующим набором: типы-массивы ARRAY, типы-записи RECORD, процедурные типы PROCEDURE, типы-указатели POINTER. Указатель может быть объявлен только на массив или запись.

Синтаксис внутренней части программы достаточно традиционен и прост. Язык поддерживает традиционный набор конструкций: условный оператор IF, оператор выбора CASE, циклы (с предусловием — WHILE, с постусловием REPEAT..UNTIL, безусловный — LOOP). Подобно Модуле-2, прописные и строчные буквы в идентификаторах различаются, все зарезервированные слова пишутся большими буквами. Все языковые конструкции, кроме цикла REPEAT..UNTIL заканчиваются ключевым словом END и допускают расположение внутри нескольких операторов без использования составного оператора BEGIN..END. Естественно, как и в Модуле-2 нет безусловных переходов.

Парадигма объектно-ориентированного программирования поддерживается механизмом расширения записей (в языке нет отдельного ключевого слова для описания классов, вроде «class» или «object», сочтено, что обычного понятия «тип запись» вполне достаточно). По сути, каждый тип запись — это описание класса, а поля записи — это данные-члены класса.

В исходном Обероне методов (процедур и функций, связанных с классом) нет вообще. Механизм методов может быть использован путём объявления в записи полей процедурного типа, которым при создании экземпляра класса присваиваются конкретные процедуры. Вызов таких процедур производится традиционным способом обращения к полю записи, по умолчанию процедура не знает об экземпляре класса, для которого она была вызвана (нет механизма, аналогичного this в C++ или Java), и если такие сведения ей необходимы, ссылка на экземпляр должна быть передана явно (например, через параметр). Отсутствие явно описываемых методов было одним из качеств исходного Оберона, вызвавшего критику привыкших к традиционным гибридным языкам программистов. С другой стороны, предлагаемый Обероном механизм позволяет реализовать всё, что реализуемо традиционными средствами языков с методами, и даже более того — в Обероне каждый экземпляр класса может иметь собственный вариант метода (значение поля процедурного типа), тогда как при описании методов как части класса все экземпляры работают с одним вариантом метода. В Обероне-2 методы были всё-таки введены. Методы описываются отдельно от типа запись, с указанием типа, с которым они связаны.

Новый тип запись может быть объявлен как расширение существующего. В этом случае тип, который расширяется, указывается в описании записи в скобках после ключевого слова RECORD. Расширенный тип автоматически получает все поля расширяемого типа и (в Обероне-2) связывается со всеми процедурами, связанными с расширяемым типом. Процедуры, связанные с новым типом, могут иметь ту же сигнатуру, что и процедуры, связанные с расширяемым типом — таким образом обеспечивается переопределение методов в порождённых типах. В Компонентном Паскале с целью более полного контроля за расширяемостью типов записи по умолчанию не являются расширяемыми, а методы не могут быть переопределены. Чтобы разрешить расширение записей и переопределение методов, используются специально введённые ключевые слова EXTENSIBLE, ABSTRACT, LIMITED, EMPTY.

Концепции программирования

Компонентное программирование

Оберон нацелен на компонентно-ориентированную разработку программного обеспечения[8]. Инкапсуляция поддерживается исключительно на уровне модуля — все типы, объявленные внутри модуля, друг для друга абсолютно прозрачны. Из других модулей доступно то, что объявлено при определении как экспортируемое.

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

В языке отсутствует специальный механизм конструкторов. Рекомендуемым методом создания и инициализации объектов является описание порождающих модулей и процедур (в традиционной терминологии ООП — factory).

Программа в такой технологии представляет собой набор относительно самостоятельных компонентов (в данном случае — модулей), имеющих скрытую от внешнего мира внутреннюю структуру и чётко определённый интерфейс. Модули могут загружаться и выгружаться динамически, во время работы программы, система предоставляет развитые средства контроля типов во время выполнения, которые позволяют писать универсальные алгоритмы обработки данных, не зависящие от конкретных типов этих данных (например, библиотека для работы с СУБД может предоставлять методы, записывающие результат запроса из базы в запись произвольной структуры, если набор и типы полей этой записи соответствуют набору и типам полей в БД).

В компонентной парадигме считается неудачным архитектурное решение, связанное с широким использованием наследования реализации от типов, объявленных в другом компоненте, поскольку это приводит к явлению, известному как «хрупкость базового типа» — после того, как от базового типа порождено большое количество типов-наследников (причём часть из них может быть даже неизвестна разработчику базового типа), любые изменения в реализации базового типа становятся крайне рискованными, так как они могут непредсказуемым образом отразиться на типах-потомках.

Известно, что одной из проблем применения объектно-ориентированного программирования в системном программировании является необходимость иметь группы маленьких классов, которые могли бы взаимодействовать без дополнительных накладных расходов. В Обероне этой проблемы нет — все типы, определённые в одном модуле, видят друг друга, а проблем с надёжностью это не создаёт, так как модуль всё равно разрабатывается, тестируется и сопровождается как единое целое.

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

Объектно-ориентированное программирование

Средства объектного программирования интерпретируются в Обероне как естественное развитие средств работы с записями в модульной системе, точнее, как технический инструментарий для решения конкретной архитектурной задачи: обеспечить эффективное «разделение труда» между различными модулями при работе с динамическими типами и структурами данных: например, работа с указателями в списке может быть скрыта (вместе с соответствующими полями) в одном модуле, а определение и работа с конкретным «наполнением» элементов списка — задаваться в другом (или, чаще, других). В этом смысле технология объектного программирования в Обероне подчинена концепции модульности: она здесь является, скорее, средством описания данных, чем средством построения архитектуры приложения в целом.

Влияние Оберона на другие языки

По утверждению Вирта[9], разработчики языка Java за несколько лет до её создания «изучили исходные коды Оберона и, в частности, исходные коды обероновских сборщиков мусора. Потом они испортили Оберон синтаксисом Си и назвали получившееся словом Java». Хотя от устного выступления нельзя требовать абсолютной точности формулировок, но во всяком случае несомненное сходство идеологий Оберона и Java (стремление к минимализму и строгой типизации, ограничение множественного наследования, автоматическое управление памятью) говорит о том, что здесь имеет место определённый консенсус относительно того, какие средства должны составлять ядро современного языка программирования общего назначения. Однако если в Обероне и его прямых наследниках минимализм остаётся во главе угла, разработчики Java пошли по пути экстенсивного наращивания возможностей языка.

В само семейство языков Оберон входят также Оберон-07, Оберон-2, Component Pascal (Компонентный Паскаль), Активный Оберон, OberonScript и др.

Версии языка

Исходная версия Оберона («классический Оберон») — наиболее краткая, с наименьшим количеством ключевых слов и синтаксических конструкций. Она была использована в качестве базы для создания семейства языков, каждый из которых расширяет классический в каком-либо направлении либо отличается от него некоторыми деталями.

Оберон-2

В 1992 году Никлаус Вирт и его ученик Ханспетер Мёссенбёк (нем.) — ныне профессор Университета им. Иоганна Кеплера в Линце — опубликовали описание дополненного варианта Оберона, получившего название Оберон-2. Он представляет собой уточнённую версию классического Оберона. Дополнения, внесённые в Оберон-2 и оформленные очень экономно, заключаются в следующем:

  • добавлены процедуры, связанные с типом, допускающие переопределение для порожденных типов (приблизительный аналог виртуальных методов в других объектно-ориентированных языках);
  • в язык возвращён оператор цикла с шагом FOR;
  • добавлена возможность экспорта описаний в режиме «только для чтения»[10][11].

Любопытно, что несмотря на расширение языка, объём формального описания синтаксиса Оберона-2 меньше, чем у классического Оберона. Это произошло в результате оптимизации описания синтаксиса. Существует оптимизирующий компилятор XDS[12] для Oberon-2.

Есть также компилятор языка Оберон-2[13] в байт-код виртуальной машины Java (Java Virtual Machine). Разработанный С. Свердловым (Вологда, ВГПУ) в 1998 году компилятор работает в Windows 95/NT. Генерирует файлы классов (.class), которые могут загружаться и исполняться виртуальной машиной языка Java. Позволяет создавать приложения и аплеты. Содержит стандартные для Оберона, так называемые Дубовые требования библиотеки, а также интерфейсы для Java API.

ETH Oberon

ETH Oberon, реализации которого имеются для многих вычислительных платформ.

Oberon SA

Oberon SA — это версия языка Оберон, разработанная Н. Виртом для процессора Strong-ARM, используемого в беспилотном вертолете.

На основе опыта разработки Oberon SA Н. Вирт в 2007 году подготовил изменения и дополнения к классическому Оберону[14][15] для более строгой поддержки структурного программирования, чем, например, в Oberon-2 или Компонентном Паскале. Новая версия языка получила название Oberon-07[16]. Имеется перевод «The Programming Language Oberon, Revision 1.11.2008» на русский язык[17]. Но в отношении поддержки объектно-ориентированного программирования язык Oberon-07 не следует за Обероном-2, а продолжает минималистичную линию классического Оберона, включая отсутствие поддержки процедур, привязанных к типам записей.

Oberon-07

Oberon-07 имеет следующие основные отличия от классического Оберона:

  • в цикле WHILE разрешены несколько охраняемых ветвей (ELSIF … DO). Тем самым обеспечена полная явная поддержка цикла Дейкстры[18]. Ранее цикл Дейкстры моделировался при помощи цикла LOOP;
  • соответственно, исключен неструктурированный цикл LOOP вместе с оператором EXIT (выход из цикла);
  • в процедуре теперь может быть только одна точка выхода, фиксированная в конце тела процедуры: RETURN, в сущности, перестал быть оператором, превратившись в такую же синтаксическую часть описания процедуры, как ключевое слово PROCEDURE и т. д.;
  • добавлен оператор цикла FOR;
  • исключено неявное приведение типа INTEGER к REAL и типов с различной разрядностью друг к другу;
  • разрешены ссылки только на записи;
  • уточнено правило импорта/экспорта: экспорт переменных разрешён только для чтения, спецификатор экспорта один — «*»;
  • уточнены типы данных — CHAR поддерживает множество Latin-1, INTEGER — −2^31 — +2^31-1, REAL и LONGREAL — IEEE Standard, 32 и 64 бита соответственно, SET — множество целых между 0 и 31.

Австралийская компания CFB Software (г. Брисбен) при Университете штата Квинсленд разработала IDE Astrobe[19] для языка Oberon-07 для микроконтроллеров ARM7 компании NXP (Philips) и синтаксические диаграммы языка Oberon-07[20], а также рекомендации по стилю программ на Oberon-07[21].

Языки семейства Oberon

Компонентный Паскаль (Component Pascal)

Оберон-2 сразу после опубликования в 1992 году рассматривался как кандидат на роль стандарта языка (конференция Oakwood Conference, Croydon, 1993), но практический опыт, накопленный при создании больших программных комплексов, выявил некоторые слабости нововведений и желательность дальнейших уточнений (что лишний раз подчёркивает мудрость консерватизма, проявленного Виртом в определении классического Оберона). Эти уточнения были предприняты в варианте Оберона-2, названном Компонентный Паскаль и опубликованном в 1999 году, компанией Oberon microsystems[22], образованной в 1992 году учениками Вирта (сам Вирт стал членом совета директоров). Как и при переходе от Оберона к Оберону-2, эти уточнения сделаны наиболее экономно[23]. В частности, теперь язык полностью поддерживает методологию компонентно-ориентированного программирования. Благодаря последнему обстоятельству, Компонентный Паскаль на данный момент является, по-видимому, наиболее совершенным среди прямых потомков классического Оберона. Однако он может быть редуцирован не только к подмножеству, эквивалентному первоначальному Оберону, но и к другому полноценному минималистичному подмножеству, в котором наследование и переопределение методов допускается только для чисто интерфейсных типов и методов (определенных с атрибутом ABSTRACT). Это обстоятельство выявляет несколько промежуточный характер Оберона-2.

В Компонентный Паскаль добавлены средства, позволяющие разработчику полностью контролировать расширение экспортируемых типов и переопределение методов (атрибуты EXTENSIBLE, ABSTRACT, NEW, EMPTY, а также возможность ограниченного экспорта метода «только для реализации»). Добавлен блок завершения тела модуля (ключевое слово CLOSE) и предопределенный пустой метод FINALIZE. Система основных (элементарных) типов приведена в соответствие с типами Java. Введён неявный строковый тип. Компания Oberon Microsystems, определившая Компонентный Паскаль, выпустила также фреймворк BlackBox Component Framework и среду визуального программирования BlackBox Component Builder[24] — небольшие по размеру и нетребовательные к ресурсам, целиком построенные на Компонентном Паскале.

Впоследствии компилятор BlackBox был встроен в кросс-платформенную среду программирования Denia, в частности для операционной системы реального времени JBed, полностью написанной на Компонентном Паскале.

Активный Оберон (Active Oberon), Zonnon

Эти языки уже с полным основанием можно назвать не расширениями или версиями Оберона, а самостоятельными языками. В них существенно расширен синтаксис, введены конструкции для описания классических «свойств» (property) с контролем чтения/записи, числовых типов с задаваемым размером в битах. Введена поддержка активных объектов, обменивающихся сообщениями в формате, определяемом РБНФ-описанием, обработка исключений[25].

См. также

Напишите отзыв о статье "Оберон (язык программирования)"

Примечания

  1. Идея динамической кодогенерации взята из диссертации ученика Вирта Микаэля Франца ([www.ict.edu.ru/ft/004790/obe_fate.pdf PC World Russia CD, September 2005])
  2. [www.oberon2005.oberoncore.ru/r260905.html Лекция Н. Вирта в Нижегородском государственном университете им. Н. И. Лобачевского]
  3. [www.ethoberon.ethz.ch/genealogy.html Генеалогия языков семейства Оберон] (англ.)
  4. 1 2 3 Никлаус Вирт. [www.vspu.ac.ru/~chul/wirth/frommodula/frommodula.htm «От модулы к Оберону»] (рус.). ИнфоАрт. Проверено 25 октября 2010. [www.webcitation.org/616yKy274 Архивировано из первоисточника 22 августа 2011].
  5. N. Wirth and J. Gutknecht. Project Oberon. Addison-Wesley, 1992.
  6. N. Wirth. The Programming Language Oberon. Software — Practice and Experience, Vol.18, No.7, p.671-690
  7. Wirth N. (1988) «[web.archive.org/web/20110526122801/www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon.Report.pdf The Programming Language Oberon]» // Software — Practice and Experience, Vol.18, No.7, p.671-690.
  8. C. Szyperski. Component Software — Beyond Object-Oriented Programming. Addison-Wesley, 1998.
  9. [www.oberon2005.ru/r260905.html Лекция Н. Вирта в Нижегородском государственном университете им. Н. И. Лобачевского]
  10. [www.uni-vologda.ac.ru/oberon/o2rus.htm Язык программирования Оберон-2], Х. Мёссенбёк, Н. Вирт
  11. [www.edm2.com/0608/oberon2.html A Description of the Oberon-2 Language, Paul Floyd]  (англ.)
  12. [www.excelsior-usa.com/xds.html XDS Family of Products]
  13. [www.uni-vologda.ac.ru/JOB/rus/index.html компилятор Оберон-2 в байт-код виртуальной машины Java (Java Virtual Machine)]
  14. [web.archive.org/web/20110526095459/www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.pdf Difference between Oberon-07 and Oberon]
  15. [web.archive.org/web/20120106102545/oberoncore.ru/_media/wiki/lang/wirth_n.oberon_at_a_glance.en.pdf Oberon at a glance]
  16. [web.archive.org/web/20090419094229/www.inf.ethz.ch/personal/wirth/Articles/Oberon/Oberon07.Report.pdf The Programming Language Oberon, Revision 20.7.2011]
  17. [forum.oberoncore.ru/download/file.php?id=1956 Перевод «The Programming Language Oberon, Revision 1.11.2008» на русский язык]
  18. Э.Дейкстра. Дисциплина программирования. Мир, Москва, 1978
  19. [www.cfbsoftware.com/astrobe/astrobe.aspx IDE Astrobe для языка Oberon-07]
  20. [www.cfbsoftware.com/astrobe/Oberon07.Syntax.zip Синтаксические диаграммы языка Oberon-07]
  21. [www.cfbsoftware.com/astrobe/Oberon.LPC2000.pdf Рекомендации по стилю программ на Oberon-07 в главе 10 Programming Conventions and Guidelines]
  22. [www.oberon.ch Oberon microsystems AG] (нем.)
  23. [www.inr.ac.ru/~info21/cpascal/cp_report_1.4_rus.htm Сообщение о языке Компонентный Паскаль]
  24. [www.oberon.ch/blackbox.html BlackBox Component Builder]
  25. [research.microsoft.com/en-us/um/people/nick/entcs/gutknecht.pdf Active Oberon for .NET:An Exercise in Object Model Mappin]

Литература

  • Вирт Никлаус. Построение компиляторов, Москва, ДМК Пресс,2010, ISBN 978-5-94074-585-3
  • [www.piter.com/book.phtml?978546900378 Свердлов С. З. Языки программирования и методы трансляции], Питер,2007, ISBN 978-5-469-00378-6
На английском языке
  • [web.archive.org/web/20060103184459/www.oberon.ethz.ch/WirthPubl/ProgInOberonWR.pdf Martin Reiser, Niklaus Wirth. Programming in Oberon: steps beyond Pascal and Modula] — NY: ACM Press, 1992 — ISBN 0-201-56543-9, 22Mb
  • [web.archive.org/web/20120601225425/www.inf.ethz.ch/personal/wirth/books/AlgorithmE1/AD2012.pdf N.Wirth.Algorithms and Data Structures (Oberon Version], 1.2Мб
  • [web.archive.org/web/20060103183842/www.oberon.ethz.ch/WirthPubl/ProjectOberon.pdf N.Wirth, J.Gutknecht.Project Oberon: The Design of an Operating System and Compiler], 4.2Мб PDF
  • [store.oberoncore.ru/lib/book/report_oberon.pdf N.Wirth.The Programming Language Oberon], 91Кб
  • [web.archive.org/web/20060629171811/www.inr.ac.ru/~info21/wirth/programming_in_oberon.pdf N.Wirth.Programming in Oberon. A derivative of Programming in Modula-2], 400Кб

Ссылки

  • [www.oberon.ethz.ch/ Официальный сайт Oberon.] (англ.)
  • [oberoncore.ru/ Оберон-технологии в России.]
  • [www.osp.ru/os/1996/06/179017/ Вирт Н. Долой «жирные» программы // Открытые системы. 1996. № 6.]
  • [www.osp.ru/pcworld/2005/10/317204/ Язык Оберон. Краткий путеводитель. Руслан Богатырев], Мир ПК, октябрь 2005.
  • [www.uni-vologda.ac.ru/oberon/o2rus.htm Мёссенбёк, Н. Вирт. Язык программирования Оберон-2], Институт компьютерных систем, ETH, Цюрих,1996. [store.oberoncore.ru/lib/book/report_oberon2_rus.pdf pdf.]
  • [metasystems.ru/download/science/a-010-conf-pm-2006-C.pdf Языки программирования и технологии «Оберон»: перспективы для индустрии и образования], Орловский ГУ, материалы секции-семинара, 30 марта 2006 г.
  • [www.ict.edu.ru/ft/004787/obe_esp.pdf Руслан Богатырев. Оберон как эсперанто программирования], Мир ПК, сентябрь 2005.
  • [sites.google.com/site/oberonsystems/ Путеводитель по системам Оберон]

Отрывок, характеризующий Оберон (язык программирования)

Несмотря на то, что поверхность исторического моря казалась неподвижною, так же непрерывно, как движение времени, двигалось человечество. Слагались, разлагались различные группы людских сцеплений; подготовлялись причины образования и разложения государств, перемещений народов.
Историческое море, не как прежде, направлялось порывами от одного берега к другому: оно бурлило в глубине. Исторические лица, не как прежде, носились волнами от одного берега к другому; теперь они, казалось, кружились на одном месте. Исторические лица, прежде во главе войск отражавшие приказаниями войн, походов, сражений движение масс, теперь отражали бурлившее движение политическими и дипломатическими соображениями, законами, трактатами…
Эту деятельность исторических лиц историки называют реакцией.
Описывая деятельность этих исторических лиц, бывших, по их мнению, причиною того, что они называют реакцией, историки строго осуждают их. Все известные люди того времени, от Александра и Наполеона до m me Stael, Фотия, Шеллинга, Фихте, Шатобриана и проч., проходят перед их строгим судом и оправдываются или осуждаются, смотря по тому, содействовали ли они прогрессу или реакции.
В России, по их описанию, в этот период времени тоже происходила реакция, и главным виновником этой реакции был Александр I – тот самый Александр I, который, по их же описаниям, был главным виновником либеральных начинаний своего царствования и спасения России.
В настоящей русской литературе, от гимназиста до ученого историка, нет человека, который не бросил бы своего камушка в Александра I за неправильные поступки его в этот период царствования.
«Он должен был поступить так то и так то. В таком случае он поступил хорошо, в таком дурно. Он прекрасно вел себя в начале царствования и во время 12 го года; но он поступил дурно, дав конституцию Польше, сделав Священный Союз, дав власть Аракчееву, поощряя Голицына и мистицизм, потом поощряя Шишкова и Фотия. Он сделал дурно, занимаясь фронтовой частью армии; он поступил дурно, раскассировав Семеновский полк, и т. д.».
Надо бы исписать десять листов для того, чтобы перечислить все те упреки, которые делают ему историки на основании того знания блага человечества, которым они обладают.
Что значат эти упреки?
Те самые поступки, за которые историки одобряют Александра I, – как то: либеральные начинания царствования, борьба с Наполеоном, твердость, выказанная им в 12 м году, и поход 13 го года, не вытекают ли из одних и тех же источников – условий крови, воспитания, жизни, сделавших личность Александра тем, чем она была, – из которых вытекают и те поступки, за которые историки порицают его, как то: Священный Союз, восстановление Польши, реакция 20 х годов?
В чем же состоит сущность этих упреков?
В том, что такое историческое лицо, как Александр I, лицо, стоявшее на высшей возможной ступени человеческой власти, как бы в фокусе ослепляющего света всех сосредоточивающихся на нем исторических лучей; лицо, подлежавшее тем сильнейшим в мире влияниям интриг, обманов, лести, самообольщения, которые неразлучны с властью; лицо, чувствовавшее на себе, всякую минуту своей жизни, ответственность за все совершавшееся в Европе, и лицо не выдуманное, а живое, как и каждый человек, с своими личными привычками, страстями, стремлениями к добру, красоте, истине, – что это лицо, пятьдесят лет тому назад, не то что не было добродетельно (за это историки не упрекают), а не имело тех воззрений на благо человечества, которые имеет теперь профессор, смолоду занимающийся наукой, то есть читанном книжек, лекций и списыванием этих книжек и лекций в одну тетрадку.
Но если даже предположить, что Александр I пятьдесят лет тому назад ошибался в своем воззрении на то, что есть благо народов, невольно должно предположить, что и историк, судящий Александра, точно так же по прошествии некоторого времени окажется несправедливым, в своем воззрении на то, что есть благо человечества. Предположение это тем более естественно и необходимо, что, следя за развитием истории, мы видим, что с каждым годом, с каждым новым писателем изменяется воззрение на то, что есть благо человечества; так что то, что казалось благом, через десять лет представляется злом; и наоборот. Мало того, одновременно мы находим в истории совершенно противоположные взгляды на то, что было зло и что было благо: одни данную Польше конституцию и Священный Союз ставят в заслугу, другие в укор Александру.
Про деятельность Александра и Наполеона нельзя сказать, чтобы она была полезна или вредна, ибо мы не можем сказать, для чего она полезна и для чего вредна. Если деятельность эта кому нибудь не нравится, то она не нравится ему только вследствие несовпадения ее с ограниченным пониманием его о том, что есть благо. Представляется ли мне благом сохранение в 12 м году дома моего отца в Москве, или слава русских войск, или процветание Петербургского и других университетов, или свобода Польши, или могущество России, или равновесие Европы, или известного рода европейское просвещение – прогресс, я должен признать, что деятельность всякого исторического лица имела, кроме этих целей, ещь другие, более общие и недоступные мне цели.
Но положим, что так называемая наука имеет возможность примирить все противоречия и имеет для исторических лиц и событий неизменное мерило хорошего и дурного.
Положим, что Александр мог сделать все иначе. Положим, что он мог, по предписанию тех, которые обвиняют его, тех, которые профессируют знание конечной цели движения человечества, распорядиться по той программе народности, свободы, равенства и прогресса (другой, кажется, нет), которую бы ему дали теперешние обвинители. Положим, что эта программа была бы возможна и составлена и что Александр действовал бы по ней. Что же сталось бы тогда с деятельностью всех тех людей, которые противодействовали тогдашнему направлению правительства, – с деятельностью, которая, по мнению историков, хороша и полезна? Деятельности бы этой не было; жизни бы не было; ничего бы не было.
Если допустить, что жизнь человеческая может управляться разумом, – то уничтожится возможность жизни.


Если допустить, как то делают историки, что великие люди ведут человечество к достижению известных целей, состоящих или в величии России или Франции, или в равновесии Европы, или в разнесении идей революции, или в общем прогрессе, или в чем бы то ни было, то невозможно объяснить явлений истории без понятий о случае и о гении.
Если цель европейских войн начала нынешнего столетия состояла в величии России, то эта цель могла быть достигнута без всех предшествовавших войн и без нашествия. Если цель – величие Франции, то эта цель могла быть достигнута и без революции, и без империи. Если цель – распространение идей, то книгопечатание исполнило бы это гораздо лучше, чем солдаты. Если цель – прогресс цивилизации, то весьма легко предположить, что, кроме истребления людей и их богатств, есть другие более целесообразные пути для распространения цивилизации.
Почему же это случилось так, а не иначе?
Потому что это так случилось. «Случай сделал положение; гений воспользовался им», – говорит история.
Но что такое случай? Что такое гений?
Слова случай и гений не обозначают ничего действительно существующего и потому не могут быть определены. Слова эти только обозначают известную степень понимания явлений. Я не знаю, почему происходит такое то явление; думаю, что не могу знать; потому не хочу знать и говорю: случай. Я вижу силу, производящую несоразмерное с общечеловеческими свойствами действие; не понимаю, почему это происходит, и говорю: гений.
Для стада баранов тот баран, который каждый вечер отгоняется овчаром в особый денник к корму и становится вдвое толще других, должен казаться гением. И то обстоятельство, что каждый вечер именно этот самый баран попадает не в общую овчарню, а в особый денник к овсу, и что этот, именно этот самый баран, облитый жиром, убивается на мясо, должно представляться поразительным соединением гениальности с целым рядом необычайных случайностей.
Но баранам стоит только перестать думать, что все, что делается с ними, происходит только для достижения их бараньих целей; стоит допустить, что происходящие с ними события могут иметь и непонятные для них цели, – и они тотчас же увидят единство, последовательность в том, что происходит с откармливаемым бараном. Ежели они и не будут знать, для какой цели он откармливался, то, по крайней мере, они будут знать, что все случившееся с бараном случилось не нечаянно, и им уже не будет нужды в понятии ни о случае, ни о гении.
Только отрешившись от знаний близкой, понятной цели и признав, что конечная цель нам недоступна, мы увидим последовательность и целесообразность в жизни исторических лиц; нам откроется причина того несоразмерного с общечеловеческими свойствами действия, которое они производят, и не нужны будут нам слова случай и гений.
Стоит только признать, что цель волнений европейских народов нам неизвестна, а известны только факты, состоящие в убийствах, сначала во Франции, потом в Италии, в Африке, в Пруссии, в Австрии, в Испании, в России, и что движения с запада на восток и с востока на запад составляют сущность и цель этих событий, и нам не только не нужно будет видеть исключительность и гениальность в характерах Наполеона и Александра, но нельзя будет представить себе эти лица иначе, как такими же людьми, как и все остальные; и не только не нужно будет объяснять случайностию тех мелких событий, которые сделали этих людей тем, чем они были, но будет ясно, что все эти мелкие события были необходимы.
Отрешившись от знания конечной цели, мы ясно поймем, что точно так же, как ни к одному растению нельзя придумать других, более соответственных ему, цвета и семени, чем те, которые оно производит, точно так же невозможно придумать других двух людей, со всем их прошедшим, которое соответствовало бы до такой степени, до таких мельчайших подробностей тому назначению, которое им предлежало исполнить.


Основной, существенный смысл европейских событий начала нынешнего столетия есть воинственное движение масс европейских народов с запада на восток и потом с востока на запад. Первым зачинщиком этого движения было движение с запада на восток. Для того чтобы народы запада могли совершить то воинственное движение до Москвы, которое они совершили, необходимо было: 1) чтобы они сложились в воинственную группу такой величины, которая была бы в состоянии вынести столкновение с воинственной группой востока; 2) чтобы они отрешились от всех установившихся преданий и привычек и 3) чтобы, совершая свое воинственное движение, они имели во главе своей человека, который, и для себя и для них, мог бы оправдывать имеющие совершиться обманы, грабежи и убийства, которые сопутствовали этому движению.
И начиная с французской революции разрушается старая, недостаточно великая группа; уничтожаются старые привычки и предания; вырабатываются, шаг за шагом, группа новых размеров, новые привычки и предания, и приготовляется тот человек, который должен стоять во главе будущего движения и нести на себе всю ответственность имеющего совершиться.
Человек без убеждений, без привычек, без преданий, без имени, даже не француз, самыми, кажется, странными случайностями продвигается между всеми волнующими Францию партиями и, не приставая ни к одной из них, выносится на заметное место.
Невежество сотоварищей, слабость и ничтожество противников, искренность лжи и блестящая и самоуверенная ограниченность этого человека выдвигают его во главу армии. Блестящий состав солдат итальянской армии, нежелание драться противников, ребяческая дерзость и самоуверенность приобретают ему военную славу. Бесчисленное количество так называемых случайностей сопутствует ему везде. Немилость, в которую он впадает у правителей Франции, служит ему в пользу. Попытки его изменить предназначенный ему путь не удаются: его не принимают на службу в Россию, и не удается ему определение в Турцию. Во время войн в Италии он несколько раз находится на краю гибели и всякий раз спасается неожиданным образом. Русские войска, те самые, которые могут разрушить его славу, по разным дипломатическим соображениям, не вступают в Европу до тех пор, пока он там.
По возвращении из Италии он находит правительство в Париже в том процессе разложения, в котором люди, попадающие в это правительство, неизбежно стираются и уничтожаются. И сам собой для него является выход из этого опасного положения, состоящий в бессмысленной, беспричинной экспедиции в Африку. Опять те же так называемые случайности сопутствуют ему. Неприступная Мальта сдается без выстрела; самые неосторожные распоряжения увенчиваются успехом. Неприятельский флот, который не пропустит после ни одной лодки, пропускает целую армию. В Африке над безоружными почти жителями совершается целый ряд злодеяний. И люди, совершающие злодеяния эти, и в особенности их руководитель, уверяют себя, что это прекрасно, что это слава, что это похоже на Кесаря и Александра Македонского и что это хорошо.
Тот идеал славы и величия, состоящий в том, чтобы не только ничего не считать для себя дурным, но гордиться всяким своим преступлением, приписывая ему непонятное сверхъестественное значение, – этот идеал, долженствующий руководить этим человеком и связанными с ним людьми, на просторе вырабатывается в Африке. Все, что он ни делает, удается ему. Чума не пристает к нему. Жестокость убийства пленных не ставится ему в вину. Ребячески неосторожный, беспричинный и неблагородный отъезд его из Африки, от товарищей в беде, ставится ему в заслугу, и опять неприятельский флот два раза упускает его. В то время как он, уже совершенно одурманенный совершенными им счастливыми преступлениями, готовый для своей роли, без всякой цели приезжает в Париж, то разложение республиканского правительства, которое могло погубить его год тому назад, теперь дошло до крайней степени, и присутствие его, свежего от партий человека, теперь только может возвысить его.
Он не имеет никакого плана; он всего боится; но партии ухватываются за него и требуют его участия.
Он один, с своим выработанным в Италии и Египте идеалом славы и величия, с своим безумием самообожания, с своею дерзостью преступлений, с своею искренностью лжи, – он один может оправдать то, что имеет совершиться.
Он нужен для того места, которое ожидает его, и потому, почти независимо от его воли и несмотря на его нерешительность, на отсутствие плана, на все ошибки, которые он делает, он втягивается в заговор, имеющий целью овладение властью, и заговор увенчивается успехом.
Его вталкивают в заседание правителей. Испуганный, он хочет бежать, считая себя погибшим; притворяется, что падает в обморок; говорит бессмысленные вещи, которые должны бы погубить его. Но правители Франции, прежде сметливые и гордые, теперь, чувствуя, что роль их сыграна, смущены еще более, чем он, говорят не те слова, которые им нужно бы было говорить, для того чтоб удержать власть и погубить его.
Случайность, миллионы случайностей дают ему власть, и все люди, как бы сговорившись, содействуют утверждению этой власти. Случайности делают характеры тогдашних правителей Франции, подчиняющимися ему; случайности делают характер Павла I, признающего его власть; случайность делает против него заговор, не только не вредящий ему, но утверждающий его власть. Случайность посылает ему в руки Энгиенского и нечаянно заставляет его убить, тем самым, сильнее всех других средств, убеждая толпу, что он имеет право, так как он имеет силу. Случайность делает то, что он напрягает все силы на экспедицию в Англию, которая, очевидно, погубила бы его, и никогда не исполняет этого намерения, а нечаянно нападает на Мака с австрийцами, которые сдаются без сражения. Случайность и гениальность дают ему победу под Аустерлицем, и случайно все люди, не только французы, но и вся Европа, за исключением Англии, которая и не примет участия в имеющих совершиться событиях, все люди, несмотря на прежний ужас и отвращение к его преступлениям, теперь признают за ним его власть, название, которое он себе дал, и его идеал величия и славы, который кажется всем чем то прекрасным и разумным.
Как бы примериваясь и приготовляясь к предстоящему движению, силы запада несколько раз в 1805 м, 6 м, 7 м, 9 м году стремятся на восток, крепчая и нарастая. В 1811 м году группа людей, сложившаяся во Франции, сливается в одну огромную группу с серединными народами. Вместе с увеличивающейся группой людей дальше развивается сила оправдания человека, стоящего во главе движения. В десятилетний приготовительный период времени, предшествующий большому движению, человек этот сводится со всеми коронованными лицами Европы. Разоблаченные владыки мира не могут противопоставить наполеоновскому идеалу славы и величия, не имеющего смысла, никакого разумного идеала. Один перед другим, они стремятся показать ему свое ничтожество. Король прусский посылает свою жену заискивать милости великого человека; император Австрии считает за милость то, что человек этот принимает в свое ложе дочь кесарей; папа, блюститель святыни народов, служит своей религией возвышению великого человека. Не столько сам Наполеон приготовляет себя для исполнения своей роли, сколько все окружающее готовит его к принятию на себя всей ответственности того, что совершается и имеет совершиться. Нет поступка, нет злодеяния или мелочного обмана, который бы он совершил и который тотчас же в устах его окружающих не отразился бы в форме великого деяния. Лучший праздник, который могут придумать для него германцы, – это празднование Иены и Ауерштета. Не только он велик, но велики его предки, его братья, его пасынки, зятья. Все совершается для того, чтобы лишить его последней силы разума и приготовить к его страшной роли. И когда он готов, готовы и силы.
Нашествие стремится на восток, достигает конечной цели – Москвы. Столица взята; русское войско более уничтожено, чем когда нибудь были уничтожены неприятельские войска в прежних войнах от Аустерлица до Ваграма. Но вдруг вместо тех случайностей и гениальности, которые так последовательно вели его до сих пор непрерывным рядом успехов к предназначенной цели, является бесчисленное количество обратных случайностей, от насморка в Бородине до морозов и искры, зажегшей Москву; и вместо гениальности являются глупость и подлость, не имеющие примеров.
Нашествие бежит, возвращается назад, опять бежит, и все случайности постоянно теперь уже не за, а против него.
Совершается противодвижение с востока на запад с замечательным сходством с предшествовавшим движением с запада на восток. Те же попытки движения с востока на запад в 1805 – 1807 – 1809 годах предшествуют большому движению; то же сцепление и группу огромных размеров; то же приставание серединных народов к движению; то же колебание в середине пути и та же быстрота по мере приближения к цели.
Париж – крайняя цель достигнута. Наполеоновское правительство и войска разрушены. Сам Наполеон не имеет больше смысла; все действия его очевидно жалки и гадки; но опять совершается необъяснимая случайность: союзники ненавидят Наполеона, в котором они видят причину своих бедствий; лишенный силы и власти, изобличенный в злодействах и коварствах, он бы должен был представляться им таким, каким он представлялся им десять лет тому назад и год после, – разбойником вне закона. Но по какой то странной случайности никто не видит этого. Роль его еще не кончена. Человека, которого десять лет тому назад и год после считали разбойником вне закона, посылают в два дня переезда от Франции на остров, отдаваемый ему во владение с гвардией и миллионами, которые платят ему за что то.


Движение народов начинает укладываться в свои берега. Волны большого движения отхлынули, и на затихшем море образуются круги, по которым носятся дипломаты, воображая, что именно они производят затишье движения.
Но затихшее море вдруг поднимается. Дипломатам кажется, что они, их несогласия, причиной этого нового напора сил; они ждут войны между своими государями; положение им кажется неразрешимым. Но волна, подъем которой они чувствуют, несется не оттуда, откуда они ждут ее. Поднимается та же волна, с той же исходной точки движения – Парижа. Совершается последний отплеск движения с запада; отплеск, который должен разрешить кажущиеся неразрешимыми дипломатические затруднения и положить конец воинственному движению этого периода.
Человек, опустошивший Францию, один, без заговора, без солдат, приходит во Францию. Каждый сторож может взять его; но, по странной случайности, никто не только не берет, но все с восторгом встречают того человека, которого проклинали день тому назад и будут проклинать через месяц.
Человек этот нужен еще для оправдания последнего совокупного действия.
Действие совершено. Последняя роль сыграна. Актеру велено раздеться и смыть сурьму и румяны: он больше не понадобится.
И проходят несколько лет в том, что этот человек, в одиночестве на своем острове, играет сам перед собой жалкую комедию, мелочно интригует и лжет, оправдывая свои деяния, когда оправдание это уже не нужно, и показывает всему миру, что такое было то, что люди принимали за силу, когда невидимая рука водила им.
Распорядитель, окончив драму и раздев актера, показал его нам.
– Смотрите, чему вы верили! Вот он! Видите ли вы теперь, что не он, а Я двигал вас?
Но, ослепленные силой движения, люди долго не понимали этого.
Еще большую последовательность и необходимость представляет жизнь Александра I, того лица, которое стояло во главе противодвижения с востока на запад.
Что нужно для того человека, который бы, заслоняя других, стоял во главе этого движения с востока на запад?
Нужно чувство справедливости, участие к делам Европы, но отдаленное, не затемненное мелочными интересами; нужно преобладание высоты нравственной над сотоварищами – государями того времени; нужна кроткая и привлекательная личность; нужно личное оскорбление против Наполеона. И все это есть в Александре I; все это подготовлено бесчисленными так называемыми случайностями всей его прошедшей жизни: и воспитанием, и либеральными начинаниями, и окружающими советниками, и Аустерлицем, и Тильзитом, и Эрфуртом.
Во время народной войны лицо это бездействует, так как оно не нужно. Но как скоро является необходимость общей европейской войны, лицо это в данный момент является на свое место и, соединяя европейские народы, ведет их к цели.
Цель достигнута. После последней войны 1815 года Александр находится на вершине возможной человеческой власти. Как же он употребляет ее?
Александр I, умиротворитель Европы, человек, с молодых лет стремившийся только к благу своих народов, первый зачинщик либеральных нововведений в своем отечестве, теперь, когда, кажется, он владеет наибольшей властью и потому возможностью сделать благо своих народов, в то время как Наполеон в изгнании делает детские и лживые планы о том, как бы он осчастливил человечество, если бы имел власть, Александр I, исполнив свое призвание и почуяв на себе руку божию, вдруг признает ничтожность этой мнимой власти, отворачивается от нее, передает ее в руки презираемых им и презренных людей и говорит только:
– «Не нам, не нам, а имени твоему!» Я человек тоже, как и вы; оставьте меня жить, как человека, и думать о своей душе и о боге.

Как солнце и каждый атом эфира есть шар, законченный в самом себе и вместе с тем только атом недоступного человеку по огромности целого, – так и каждая личность носит в самой себе свои цели и между тем носит их для того, чтобы служить недоступным человеку целям общим.
Пчела, сидевшая на цветке, ужалила ребенка. И ребенок боится пчел и говорит, что цель пчелы состоит в том, чтобы жалить людей. Поэт любуется пчелой, впивающейся в чашечку цветка, и говорит, цель пчелы состоит во впивании в себя аромата цветов. Пчеловод, замечая, что пчела собирает цветочную пыль к приносит ее в улей, говорит, что цель пчелы состоит в собирании меда. Другой пчеловод, ближе изучив жизнь роя, говорит, что пчела собирает пыль для выкармливанья молодых пчел и выведения матки, что цель ее состоит в продолжении рода. Ботаник замечает, что, перелетая с пылью двудомного цветка на пестик, пчела оплодотворяет его, и ботаник в этом видит цель пчелы. Другой, наблюдая переселение растений, видит, что пчела содействует этому переселению, и этот новый наблюдатель может сказать, что в этом состоит цель пчелы. Но конечная цель пчелы не исчерпывается ни тою, ни другой, ни третьей целью, которые в состоянии открыть ум человеческий. Чем выше поднимается ум человеческий в открытии этих целей, тем очевиднее для него недоступность конечной цели.
Человеку доступно только наблюдение над соответственностью жизни пчелы с другими явлениями жизни. То же с целями исторических лиц и народов.


Свадьба Наташи, вышедшей в 13 м году за Безухова, было последнее радостное событие в старой семье Ростовых. В тот же год граф Илья Андреевич умер, и, как это всегда бывает, со смертью его распалась старая семья.
События последнего года: пожар Москвы и бегство из нее, смерть князя Андрея и отчаяние Наташи, смерть Пети, горе графини – все это, как удар за ударом, падало на голову старого графа. Он, казалось, не понимал и чувствовал себя не в силах понять значение всех этих событий и, нравственно согнув свою старую голову, как будто ожидал и просил новых ударов, которые бы его покончили. Он казался то испуганным и растерянным, то неестественно оживленным и предприимчивым.
Свадьба Наташи на время заняла его своей внешней стороной. Он заказывал обеды, ужины и, видимо, хотел казаться веселым; но веселье его не сообщалось, как прежде, а, напротив, возбуждало сострадание в людях, знавших и любивших его.
После отъезда Пьера с женой он затих и стал жаловаться на тоску. Через несколько дней он заболел и слег в постель. С первых дней его болезни, несмотря на утешения докторов, он понял, что ему не вставать. Графиня, не раздеваясь, две недели провела в кресле у его изголовья. Всякий раз, как она давала ему лекарство, он, всхлипывая, молча целовал ее руку. В последний день он, рыдая, просил прощения у жены и заочно у сына за разорение именья – главную вину, которую он за собой чувствовал. Причастившись и особоровавшись, он тихо умер, и на другой день толпа знакомых, приехавших отдать последний долг покойнику, наполняла наемную квартиру Ростовых. Все эти знакомые, столько раз обедавшие и танцевавшие у него, столько раз смеявшиеся над ним, теперь все с одинаковым чувством внутреннего упрека и умиления, как бы оправдываясь перед кем то, говорили: «Да, там как бы то ни было, а прекрасжейший был человек. Таких людей нынче уж не встретишь… А у кого ж нет своих слабостей?..»
Именно в то время, когда дела графа так запутались, что нельзя было себе представить, чем это все кончится, если продолжится еще год, он неожиданно умер.
Николай был с русскими войсками в Париже, когда к нему пришло известие о смерти отца. Он тотчас же подал в отставку и, не дожидаясь ее, взял отпуск и приехал в Москву. Положение денежных дел через месяц после смерти графа совершенно обозначилось, удивив всех громадностию суммы разных мелких долгов, существования которых никто и не подозревал. Долгов было вдвое больше, чем имения.
Родные и друзья советовали Николаю отказаться от наследства. Но Николай в отказе от наследства видел выражение укора священной для него памяти отца и потому не хотел слышать об отказе и принял наследство с обязательством уплаты долгов.
Кредиторы, так долго молчавшие, будучи связаны при жизни графа тем неопределенным, но могучим влиянием, которое имела на них его распущенная доброта, вдруг все подали ко взысканию. Явилось, как это всегда бывает, соревнование – кто прежде получит, – и те самые люди, которые, как Митенька и другие, имели безденежные векселя – подарки, явились теперь самыми требовательными кредиторами. Николаю не давали ни срока, ни отдыха, и те, которые, по видимому, жалели старика, бывшего виновником их потери (если были потери), теперь безжалостно накинулись на очевидно невинного перед ними молодого наследника, добровольно взявшего на себя уплату.
Ни один из предполагаемых Николаем оборотов не удался; имение с молотка было продано за полцены, а половина долгов оставалась все таки не уплаченною. Николай взял предложенные ему зятем Безуховым тридцать тысяч для уплаты той части долгов, которые он признавал за денежные, настоящие долги. А чтобы за оставшиеся долги не быть посаженным в яму, чем ему угрожали кредиторы, он снова поступил на службу.