Модула-2

Поделись знанием:
Перейти к: навигация, поиск
Modula-2
Класс языка:

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

Появился в:

1978

Автор:

Никлаус Вирт

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

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

Основные реализации:

[www.sysecol.ethz.ch/RAMSES/MacMETH.html ETH Zurich] (создан Никлаусом Виртом), [www.plas.fit.qut.edu.au/gpm/Default.aspx Gardens Point], [www.awiedemann.de/compiler/ p1], [www.excelsior-usa.com/xdsx86.html Native XDS-x86], [www.nongnu.org/gm2/index.html gm2] (GNU Modula-2)

Диалекты:

PIM2, PIM3, PIM4, ISO

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

Pascal, Mesa, ALGOL, Simula-67

Повлиял на:

Modula-3, Oberon, Ada, Fortran 90, Lua, Zonnon, Modula-GM

Мо́дула-2 (Modula-2) — язык программирования общего назначения, являющийся развитием Паскаля, разработанный Никлаусом Виртом в 1978 году.





Цели и принципы разработки языка

Язык Модула-2 был разработан Никлаусом Виртом для создания системного программного обеспечения ЭВМ Lilith (англ.), разработка которой началась в 1977 году в Институте информатики Цюриха. Этим определяются многие его особенности. Язык изначально проектировался как средство промышленного системного программирования, позволяющее писать надёжные, понятные, удобные в сопровождении программы. При этом язык должен был, оставаясь языком высокого уровня со строгой типизацией и поддержкой всех средств надёжного программирования, давать возможность обращаться непосредственно к аппаратуре, создавать специфические системные программы, такие как обработчики прерываний и драйверы устройств, поддерживать программирование параллельно исполняющихся взаимодействующих процессов.

Предками Модулы-2 были языки Паскаль и Модула — также язык-потомок Паскаля, в котором появилось понятие модуля и средства параллельного программирования. Единственная экспериментальная реализация Модулы была создана в 1975 году. Модулу можно рассматривать как первоначальный вариант, своего рода «альфа-версию» Модулы-2, синтаксически эти два языка очень близки. Кроме того, по словам Вирта, на Модулу-2 оказал влияние язык Mesa (англ.), разработанный в Xerox PARC.

Общая характеристика

Язык Модула-2 — структурный, модульный язык программирования, с синтаксисом, основанным на языке Паскаль, но заметно переработанным и улучшенным. Его основные характерные особенности приведены ниже.

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

Язык прост по структуре — в нём имеется только 40 зарезервированных слов (для сравнения, в Аде их 63); официальное «Сообщение о языке», содержащее исчерпывающее описание Модулы-2, занимает 40 страниц (полное описание сокращённого варианта ПЛ/1 занимает около 200 страниц).

Особенности синтаксиса

Описать особенности Модулы-2 проще всего путём сравнения с языком Паскаль. Наиболее важные отличия, помимо введения модулей и механизмов управляемого экспорта описаний, состоят в нижеследующем.

  • Язык регистро-зависимый — прописные и строчные буквы в идентификаторах различаются. Все ключевые слова пишутся в верхнем регистре.
  • Синтаксис сделан более регулярным и упрощён. Все синтаксические конструкции, кроме цикла REPEAT-UNTIL, следуют принципу: конструкция, начинающаяся с ключевого слова, заканчивается ключевым словом. В частности, условный оператор имеет общий вид
IF Условие THEN
  Операторы
ELSIF Условие THEN
  Операторы
ELSIF Условие THEN
  Операторы
...
ELSE
  Операторы
END

Благодаря этому исчезла необходимость постоянного использования составных операторов BEGIN-END и «лестниц» операторов IF при многоступенчатой проверке условий.

  • Циклы WHILE и FOR также предусматривают тело из набора операторов и заканчиваются зарезервированным словом END.
  • Добавлен безусловный цикл LOOP-END.
  • И процедуры, и функции объявляются с ключевым словом PROCEDURE.
  • Добавлен предопределённый тип BITSET — битовое поле.
  • Из языка исключён оператор безусловного перехода GOTO.
  • Добавлен процедурный тип, дающий возможность присваивать процедуры и функции переменным. Позже эта возможность была включена и в Паскаль, где она изначально отсутствовала.

Достоинства и недостатки

Можно определённо сказать, что язык Модула-2, сохранив положительные черты Паскаля, имеет ряд особенностей, делающих её языком, гораздо более мощным и лучше приспособленным как для системного, так и для прикладного программирования. Основные преимущества Модулы-2 перед современными ему языками структурного программирования следующие[1]:

  • Простота и лаконичность определения языка. Полное определение синтаксиса в нотации РБНФ занимает менее 3 страниц, полные синтаксические диаграммы — 12 страниц, официальное «сообщение о языке» имеет объём 40 страниц, что для универсального языка с такими возможностями — едва ли не абсолютный минимум. Для сравнения: официальное полное определение языка Ада занимает 400 машинописных страниц.
  • Простой, логичный и однородный синтаксис, очищенный от избыточных конструкций и элементов, провоцирующих ошибки написания. Модула-2 — первый из директивных языков программирования, в котором удалось отказаться от оператора GOTO.
  • Хорошо продуманный механизм разделения программы на единицы компиляции (модули) с явно описываемыми интерфейсами и полностью контролируемым импортом, позволяющим импортировать как целые модули, так и отдельные элементы с возможностью как квалифицированного (с указанием имени модуля) так и неквалифицированного использования имён импортированных объектов.
  • Исключение из языка средств ввода-вывода и большинства стандартных процедур и функций и перенос их в библиотеки, оформленные в виде стандартных модулей, что упрощает язык и компилятор и предоставляет реализатору полную свободу в способах реализации стандартных процедур и функций.
  • Включение в язык механизмов низкоуровневого программирования, в том числе непосредственной работы с памятью и нетипизированными данными и указателями, что позволяет писать на языке высокого уровня большинство низкоуровневых программ, которые традиционно писались на ассемблере, таких как драйвера и обработчики прерываний.
  • Наличие элементарных средств параллельного программирования, выбранных таким образом, чтобы гарантировать их адекватную реализацию как на физически многопроцессорных платформах, так и на платформах с разделением времени.
  • Существенным для времени создания языка было появление процедурного типа и, соответственно, переменных, которым можно динамически присваивать процедуры.

К недостаткам языка можно отнести:

  • Слабость механизмов параллельного программирования, в частности — организации взаимодействия параллельных процессов. Реализация этих средств переложена на системные библиотеки, причём в стандартной библиотеке имеются лишь простейшие средства управления распараллеливанием. Параллельная программа на Модуле-2, использующая средства управления параллелизмом, выходящие за эти рамки, автоматически теряет переносимость.[2]
  • Отсутствие механизмов управления отображением абстрактных типов на память.[2]
  • Поддержка локальных модулей неоправданно усложняет компилятор. Поводами для использования вложенных модулей являются ограничение области видимости и выделение высокоприоритетных частей программы для обеспечения синхронизации при параллельной обработке, но их можно реализовать и другими, более простыми и очевидными, средствами.[3]
  • Явное разделение на модуль реализации и модуль определения — спорное решение. Оно усложняет работу компилятора и вынуждает программиста синхронизировать изменения в разных файлах. Можно отметить, что в потомке Модулы-2 — Обероне, — от такого разделения отказались, вместо этого в едином программном модуле экспортируемые элементы (составляющие интерфейс модуля) просто помечаются специальным образом.[3]

Можно также отметить отсутствие в Модуле-2 ряда возможностей, известных и популярных на момент её создания, что может быть отнесено как к достоинствам, так и к недостаткам языка, в зависимости от точки зрения конкретного критика:

Использование

В СССР первые компиляторы для Модула-2 появились в 1982-83 годах для ЭВМ СМ-4 и Электроника-60. Тогда же были выработаны технологии программирования и созданы первые пакеты прикладных программ на Модуле-2. Такие работы велись, в частности, на факультете Кибернетика МИФИ. ВНТК «СТАРТ» Вычислительного Центра Сибирского отделения Академии наук СССР разработал серию процессоров Кронос с аппаратной поддержкой языка программирования Модула-2.

В целом можно сказать, что Модула-2 не получила того распространения и признания, которого заслуживала по своим качествам. Язык завоевал определённую популярность в академической среде Европы, был довольно популярен среди программистов СССР, но не смог потеснить своего предшественника — новые реализации языка Паскаль, включившие в себя средства организации модулей, а позже — средства объектного программирования, всегда обходили Модулу-2 по популярности. Система Lilith, для которой создавалась Модула-2, не получила широкой известности и не смогла помочь Модуле-2 в продвижении.

Свою роль сыграло чрезвычайно широкое распространение дешёвых и быстрых Паскаль-компиляторов фирмы Borland International. Интересно, что компилятор Turbo Modula-2 для ОС CP/M был не только создан Borland, но даже поступил в продажу в Северной Америке и Западной Европе. Однако руководство компании, прежде всего Филипп Кан, приняло решение отказаться от развития этой системы, чтобы не создавать конкурента крайне успешному Turbo Pascal. Результатом этого решения стало то, что вице-президент Borland Нильс Йенсен, один из основателей компании, вместе со своей командой разработчиков в 1987 году покинул Borland, выкупив права на Turbo Modula-2. Созданная им компания JPI (Jensen & Partners International) выпустила под маркой TopSpeed линейку компиляторов для процессоров семейства x86: Assembler, Modula-2, Pascal, C/C++, Ada.[4]

В настоящее время язык Модула-2 используется для программирования бортового программного обеспечения спутников, запускаемых в рамках проекта ГЛОНАСС [5]. В конце 2010 г. компилятор GNU Modula-2 официально включен в коллекцию GCC [6].

Дальнейшим развитием Модулы-2 является созданный Виртом язык Оберон (1988). Фирмами DEC и Olivetti на основе Модулы-2 был разработан язык Модула-3.

Напишите отзыв о статье "Модула-2"

Примечания

  1. Вирт Н. Программирование на языке Модула-2. М.: Мир, 1987;
  2. 1 2 В. М. Курочкин. Предисловие редактора перевода к книге: Вирт Н. Программирование на языке Модула-2. М.: Мир, 1987.
  3. 1 2 Никлаус Вирт. [www.vspu.ac.ru/~chul/wirth/frommodula/frommodula.htm «От модулы к Оберону»] (рус.). ИнфоАрт. Проверено 25 октября 2010. [www.webcitation.org/616yKy274 Архивировано из первоисточника 22 августа 2011].
  4. Руслан Богатырев. [pascal.sources.ru/articles/058.htm <--! www.osp.ru/pcworld/2001/04/058.htm --> Летопись языков Паскаль] (рус.). Мир ПК, #04/2001 (17.04.2001). Проверено 25 октября 2010.
  5. [kronos.ru/about/koltashev А. А. Колташев. Модула-2 в российском космосе]
  6. [www.nongnu.org/gm2 GNU Modula-2 page]

Литература

  • Вирт Н. Программирование на языке Модула-2. Перевод с англ. В. А. Серебрякова, В. М. Ходукина; Под ред. В. М. Курочкина. - М. : Мир, 1987. - 222 с.
  • Вирт Н. [progbook.ru/technologiya-programmirovaniya/659-virt-algoritmy-i-struktury-dannyh.html Алгоритмы и структуры данных] (версия книги на языке Модула-2), Москва, Мир, 1989, ISBN 5-03-001045-9 (русск.), 0-13-022005-1 (англ)
  • Руслан Богатырёв. [pascal.sources.ru/articles/058.htm Летопись языков Паскаль] (рус.). Мир ПК, #04/2001 (17.04.2001). Проверено 25 октября 2010. [www.webcitation.org/619ALHuEu Архивировано из первоисточника 23 августа 2011].

См. также

Ссылки

  • [urls.net.ru/computer/programming/modula/ urls.net.ru/computer/programming/modula/] (рус.). — Подборка ссылок по языку Модула-2. Проверено 25 октября 2010. [www.webcitation.org/619AM0dWy Архивировано из первоисточника 23 августа 2011].
  • [modula2.org/ modula-2] (англ.). — официальный сайт. Проверено 25 октября 2010. [www.webcitation.org/619ANPsJj Архивировано из первоисточника 23 августа 2011].
  • [www.excelsior-usa.com/xds.html XDS Family of Products] (англ.). — бесплатный компилятор от новосибирской компании Эксельсиор. Проверено 25 октября 2010. [www.webcitation.org/619AO1EHs Архивировано из первоисточника 23 августа 2011].
  • [www.nongnu.org/gm2/ GNU Modula-2]

Отрывок, характеризующий Модула-2

Но несмотря на то, в этот вечер Наташа, то взволнованная, то испуганная, с останавливающимися глазами лежала долго в постели матери. То она рассказывала ей, как он хвалил ее, то как он говорил, что поедет за границу, то, что он спрашивал, где они будут жить это лето, то как он спрашивал ее про Бориса.
– Но такого, такого… со мной никогда не бывало! – говорила она. – Только мне страшно при нем, мне всегда страшно при нем, что это значит? Значит, что это настоящее, да? Мама, вы спите?
– Нет, душа моя, мне самой страшно, – отвечала мать. – Иди.
– Все равно я не буду спать. Что за глупости спать? Maмаша, мамаша, такого со мной никогда не бывало! – говорила она с удивлением и испугом перед тем чувством, которое она сознавала в себе. – И могли ли мы думать!…
Наташе казалось, что еще когда она в первый раз увидала князя Андрея в Отрадном, она влюбилась в него. Ее как будто пугало это странное, неожиданное счастье, что тот, кого она выбрала еще тогда (она твердо была уверена в этом), что тот самый теперь опять встретился ей, и, как кажется, неравнодушен к ней. «И надо было ему нарочно теперь, когда мы здесь, приехать в Петербург. И надо было нам встретиться на этом бале. Всё это судьба. Ясно, что это судьба, что всё это велось к этому. Еще тогда, как только я увидала его, я почувствовала что то особенное».
– Что ж он тебе еще говорил? Какие стихи то эти? Прочти… – задумчиво сказала мать, спрашивая про стихи, которые князь Андрей написал в альбом Наташе.
– Мама, это не стыдно, что он вдовец?
– Полно, Наташа. Молись Богу. Les Marieiages se font dans les cieux. [Браки заключаются в небесах.]
– Голубушка, мамаша, как я вас люблю, как мне хорошо! – крикнула Наташа, плача слезами счастья и волнения и обнимая мать.
В это же самое время князь Андрей сидел у Пьера и говорил ему о своей любви к Наташе и о твердо взятом намерении жениться на ней.

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


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

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