Алгол

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

Алго́л (англ. Algol от англ. algorithmic — алгоритмический и англ. language — язык) — название ряда языков программирования, применяемых при составлении программ для решения научно-технических задач на ЭВМ. Разработан комитетом по языку высокого уровня IFIP в 19581960 годах (Алгол 58, Алгол 60). Кардинально переработан в 19641968 годах (Алгол 68). Один из первых языков высокого уровня. Был популярен в Европе, в том числе в СССР, в качестве как языка практического программирования, так и академического языка (языка публикации алгоритмов в научных работах), но в США и Канаде не смог превзойти распространённый там Фортран. Оказал заметное влияние на все разработанные позднее императивные языки программирования — в частности, на язык Pascal.

Обычно названием Алгол (без уточнения версии) именуют Алгол 60, в то время как Алгол 68 рассматривается как самостоятельный язык.





История

Алгол был разработан в 1958 году на недельной конференции в ETH (Цюрих, Швейцария) как универсальный язык программирования для широкого круга применений, а затем доработан комитетом, созданным Международной федерацией по обработке информации (IFIP). В комитет вошёл ряд ведущих европейских и американских учёных и инженеров-разработчиков языков. Среди них были: Джон Бэкус — один из создателей Фортрана, Джозеф Уэгстен — впоследствии возглавлял комитет по разработке языка Кобол, Джон Маккарти — автор языка Лисп разработанного одновременно с Алголом, Петер Наур — впоследствии доработал «нормальную форму Бэкуса», завершив разработку БНФ, Эдсгер Дейкстра — нидерландский учёный, впоследствии получивший широкую известность как один из создателей структурного программирования и сторонник математического подхода к программированию, будущий лауреат Премии Тьюринга.

Сначала работа столкнулась с большими трудностями непринципиального характера. Так, например, один из членов комитета вспоминал «десятичную бурю» — крайне резкую дискуссию между американскими и европейскими участниками по поводу того, какой именно символ использовать в качестве разделителя целой и дробной части числа. Американцы стояли за точку, европейцы требовали применять традиционную в Европе запятую, и из-за такой мелочи работа оказалась под реальной угрозой срыва. Чтобы избежать конфликтов по мелким вопросам, было решено, что описание Алгола будет трёхуровневым, включающим уровень описаний, публикаций и реализации. Мелкие вопросы, типа выбора между точкой и запятой или используемого алфавита, были вынесены на второй-третий уровень, что позволило относительно быстро решить принципиальные вопросы. На уровне публикаций, согласованном позже, допускалось использование национальных ключевых слов и стандартов представления данных (в том числе и десятичной точки), уровень реализации определял язык совершенно строго — согласно ему должны были строиться трансляторы.

После принятия в 1958 году первой версии описания языка Алгол 58 (первоначально предполагалось назвать язык IAL — International Algebraic Language, но от этого отказались[1]) довольно быстро были осознаны проблемы, для решения которых комитет сформировал новый вариант стандарта — Алгол 60; он и стал «классическим» Алголом. В 1959 году Джон Бэкус разработал «нормальную форму Бэкуса» (БНФ) — формальный способ описания алгоритмических языков. Первым языком, спецификация которого была записана в БНФ, стал Алгол 58. Впоследствии, после усовершенствований, которые предложил Питер Наур, возникла форма Бэкуса — Наура (аббревиатура та же — БНФ или BNF), которая использовалась для спецификации языка ALGOL 60 уже на этапе её разработки.

У нового языка нашлись как приверженцы, так и критики. В США Алгол приняли холодно, он был популярен только в академической среде, и то не повсеместно. Те, кто попытался реализовать Алгол, столкнулись с целым рядом сложностей. Так, например, обнаружилось, что ни один из существовавших тогда компьютеров не поддерживал ввод-вывод всех 116 литер, из которых состоял алфавит Алгола.

SHARE — американская ассоциация пользователей компьютеров IBM — потребовала от фирмы реализовать Алгол для своих машин, но появившийся в конце концов компилятор Алгола для IBM OS/360 был крайне неудобен в использовании — вполне естественно, что IBM, вложившая в Фортран огромные суммы, не имела стимула для создания нового продукта, который лишь конкурировал бы со старым. В то же время, недостатки Фортрана вынудили IBM искать ему замену и привели к разработке PL/I — языка-наследника Фортрана, в котором влияние Алгола было весьма заметным.

А вот в Европе Алгол приняли с энтузиазмом. Он быстро завоевал популярность в академической среде, повсеместно шла разработка компиляторов, многие из которых, несмотря на сложности реализации, оказались весьма успешными. Алгол распространился от Великобритании до Дальнего востока СССР, став как универсальным языком описания алгоритмов в научных публикациях, так и средством реального программирования.

В СССР в Вычислительном центре АН СССР в Лаборатории программирования под руководством В. М. Курочкина был создан свой транслятор с языка АЛГОЛ 60 для ЭВМ БЭСМ-6. Он на протяжении многих лет служил важным инструментом для решения прикладных задач из различных областей естественных наук, широко использовался во многих организациях СССР.

Язык Алгол был принят фирмой Burroughs Corporation в их моделях, начиная с B5000 — этот язык получил название Elliott ALGOL. На компьютерах LGP-30 (англ.) использовался язык Dartmouth ALGOL 30.

Даже когда язык Алгол почти перестал использоваться для программирования, он ещё долго оставался официальным языком для публикации алгоритмов.

Перед текстом описания языка использовался эпиграф из «Логико-философского трактата» Людвига Витгенштейна: «То, что вообще может быть сказано, может быть сказано ясно; а о чём невозможно говорить, о том следует молчать».[2]

Свойства языка

Особенности языка Алгол стали типичными для большинства императивных языков, созданных позднее него. Именно в Алголе появилось представление о программе не как о свободной последовательности команд, а как о блочной структуре, состоящей из чётко описанных и отделённых друг от друга частей. Основной блок программы на Алголе — это сама главная программа. Она содержит свою исполняемую часть, заключённую в блок, ограниченный парой ключевых слов begin и end, а также описания подпрограмм. Каждая подпрограмма — это программа в миниатюре, имеющая собственные, описанные внутри неё данные, однозначно определённый интерфейс в виде имени и списка формальных параметров, и блок кода. При этом в блоке могут выделяться подблоки.

Были выделены структурные управляющие конструкции: ветвления, циклы, последовательные участки, исполняющие условно или многократно вложенные наборы операторов, также ограниченные теми же ключевыми словами begin и end, что дало возможность описывать логику программы без использования безусловных переходов — печально известного оператора goto, провоцирующего на создание запутанных и плохо структурированных программ.

Современным программистам подобная структура программы кажется очевидной, кое в чём устаревшей и не всегда удобной (часто критикуются бесконечные begin — end в программах на Паскале, который унаследовал эту особенность именно от Алгола), но на момент появления Алгола всё это было заметным шагом вперёд. Программы становились регулярными, это давало возможность наращивать их по объёму, сохраняя обозримыми, понятными, доступными анализу и исправлению. Именно на базе Алгола и его языков-потомков были выполнены успешные работы по аналитическому доказательству правильности программ.

Крайне важным свойством Алгола стала возможность организации рекурсивных процедур, до этого у промышленных языков отсутствовавшая (у лидеров рынка — Фортрана и Кобола, — рекурсия прямо запрещена), но широко использовавшаяся в Лиспе. Использование рекурсивных вычислений в ряде случаев способно значительно упростить структуру программы и сделать её более понятной за счёт близости к математическому описанию алгоритма решения задачи.

Разумеется, не все особенности Алгола сейчас можно назвать удачными и до конца продуманными. Например, стандарт языка полностью проигнорировал средства ввода-вывода; разработчики решили, что каждая реализация языка может решать этот вопрос самостоятельно, исходя из особенностей целевой машины и потребностей пользователей. С другой стороны, концепции модульного программирования с использованием стандартных библиотек подпрограмм тогда ещё просто не было, и операторы ввода-вывода должны были включаться прямо в язык. Это привело к тому, что каждая реализация организовывала ввод-вывод по-своему, и в этой части Алгол-программы для разных компиляторов оказывались почти гарантированно несовместимыми.

В Алголе было предложено два способа передачи параметров в подпрограмму — по имени и по значению. Если второй способ возражений не вызывает (он широко используется в абсолютном большинстве языков по сей день), то первый (он предполагает, что в процедуру передаётся имя фактического параметра, и процедура работает так, как будто в точке обращения записан её код, где вместо формального параметра написано имя фактического) приводил к трудностям реализации компиляторов и появлению труднообнаруживаемых ошибок.

Пример кода на языке Алгол 60

procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
    value n, m; array a; integer n, m, i, k; real y;
comment Наибольший элемент матрицы a, размера n на m 
 передаётся в виде результата в y, а его индексы — в параметры i и k;
begin integer p, q;
    y := 0; i := k := 1;
    for p:=1 step 1 until n do
      for q:=1 step 1 until m do
        if abs(a[p, q]) > y then
        begin y := abs(a[p, q]);
          i := p; k := q
        end
end Absmax

Это пример выдачи на печать таблицы в реализации Алгола Elliott 803 ALGOL.

FLOATING POINT ALGOL TEST'
BEGIN REAL A,B,C,D'

READ D'

FOR A:= 0.0 STEP D UNTIL 6.3 DO
BEGIN
  PRINT PUNCH(3),££L??'
  B := SIN(A)'
  C := COS(A)'
  PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C'
END'
END'

PUNCH(3) посылает текст не на перфоратор, а на удалённый принтер. SAMELINE подавляет возврат каретки. ALIGNED(1,6) указывает формат — 1 знак до и 6 после десятичной точки.

Hello, World

Это пример программы Hello, World для реализации Dartmouth ALGOL 30[3]:

BEGIN
FILE F (KIND=REMOTE);
EBCDIC ARRAY E [0:11];
REPLACE E BY "HELLO, WORLD!";
WHILE TRUE DO
  BEGIN
  WRITE (F, *, E);
  END;
END.

Это альтернативная реализация для Elliott Algol:

 program HiFolks;
 begin
    print "Hello, world";
 end;

Реализация для IBM OS/360 ALGOL F:

'BEGIN'
  OUTSTRING (1, '('HELLO, WORLD!')');
'END'

Трюк Йенсена

Рассмотрим следующую программу на Алголе:

begin
  procedure p (a, b);
    name a, b; integer a, b;
  begin
    for a:=1 step 1 until 10 do
      b := 0
  end p;
  integer i; integer array s [1:10];
  p (i, s[i])
end

В соответствии с определением способа передачи параметров по имени, вызов процедуры p в данном случае должен приводить к обнулению всех элементов массива s. Такое использование передачи параметра по имени было названо «трюком Йенсена» в честь впервые предложившего его программиста. Функции с такими параметрами легко реализуются с помощью препроцессора (как в языке C), однако, генерация объектного кода для них достаточно сложна: фактически для передачи по имени сложных выражений компилятор должен был создавать специальную неименованную функцию, вычисляющую это выражение в его собственной среде окружения, так называемый санк (англ.). Ближайшим аналогом санка является замыкание в языке Лисп, однако, санк возникает только в специфическом контексте передачи параметров. Эта особенность языка Алгол 60, в остальном довольно разумно организованного, примечательна удивительным сочетанием полной практической бесполезности с чрезвычайной сложностью и неэффективностью реализации. Поэтому в дальнейшем развитии языков программирования от передачи параметров по имени отказались. В языке PL/I, в целом очень много унаследовавшем от Алгола-60, на этой волне заодно отказались и от передачи параметров по значению, оставив, как и в раннем Фортране, единственный механизм — по ссылке.[4] В языке Си, напротив, осталась только передача параметров по значению (передача по ссылке там может быть смоделирована путём использования параметров типа «указатель»). А для тех случаев, когда передача параметров по имени имеет смысл (она необходима, например, если требуется создать функцию, для которой значения параметров не вычислялись бы в момент вызова), были созданы специальные синтаксические механизмы.

См. также

Напишите отзыв о статье "Алгол"

Примечания

  1. A. J. Perlis. Talk on Computing in the fifties // ACM National Conference. — 1981.
  2. [db.chgk.info/question/vladbel/34 Вопросы Владимира Белкина (Москва). Вопрос 34 | Что? Где? Когда?]
  3. [www.engin.umd.umich.edu/CIS/course.des/cis400/algol/hworld.html Hello world! Example Program]
  4. Пратт Т. Языки программирования: разработка и реализация. — М.: Мир, 1979. — 576 с.: ил.

Литература

  • [www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=6126 ISO 1538:1984 Programming languages — ALGOL 60]
  • Роберт В Себеста. 2.5. Первый шаг к совершенствованию: язык ALGOL 60 // Основные концепции языков программирования = Concepts of Programming Languages. — 5-е изд. — М.: «Вильямс», 2001. — С. 672. — ISBN 5-8459-0192-8.

Ссылки

  • [www.computer-museum.ru/histsoft/algolbnf.php Язык программирования Алгол 60 (описание в формулах БНФ).]
  • [www.lrz.de/~bernhard/Algol-BNF.html Синтаксис] (англ.) ALGOL 60 в БНФ.
  • [web.archive.org/web/20030315091028/www.braithwaite-lee.com/opinions/p75-hoare.pdf «The Emperor’s Old Clothes»] (англ.) — речь Чарльза Хоара с вручения Приза Тьюринга ACM в 1980 об истории Алгола и участии Хоара в ней.
  • [www.billp.org/ccs/A104/ «803 ALGOL»(англ.) — руководство по Elliott 803 ALGOL.
  • [chernykh.net/content/view/209/221/ История появления Алгола-60.]

Отрывок, характеризующий Алгол

– Вот в чем дело, – сказала она значительно и тоже полушопотом. – Репутация графа Кирилла Владимировича известна… Детям своим он и счет потерял, но этот Пьер любимый был.
– Как старик был хорош, – сказала графиня, – еще прошлого года! Красивее мужчины я не видывала.
– Теперь очень переменился, – сказала Анна Михайловна. – Так я хотела сказать, – продолжала она, – по жене прямой наследник всего именья князь Василий, но Пьера отец очень любил, занимался его воспитанием и писал государю… так что никто не знает, ежели он умрет (он так плох, что этого ждут каждую минуту, и Lorrain приехал из Петербурга), кому достанется это огромное состояние, Пьеру или князю Василию. Сорок тысяч душ и миллионы. Я это очень хорошо знаю, потому что мне сам князь Василий это говорил. Да и Кирилл Владимирович мне приходится троюродным дядей по матери. Он и крестил Борю, – прибавила она, как будто не приписывая этому обстоятельству никакого значения.
– Князь Василий приехал в Москву вчера. Он едет на ревизию, мне говорили, – сказала гостья.
– Да, но, entre nous, [между нами,] – сказала княгиня, – это предлог, он приехал собственно к графу Кирилле Владимировичу, узнав, что он так плох.
– Однако, ma chere, это славная штука, – сказал граф и, заметив, что старшая гостья его не слушала, обратился уже к барышням. – Хороша фигура была у квартального, я воображаю.
И он, представив, как махал руками квартальный, опять захохотал звучным и басистым смехом, колебавшим всё его полное тело, как смеются люди, всегда хорошо евшие и особенно пившие. – Так, пожалуйста же, обедать к нам, – сказал он.


Наступило молчание. Графиня глядела на гостью, приятно улыбаясь, впрочем, не скрывая того, что не огорчится теперь нисколько, если гостья поднимется и уедет. Дочь гостьи уже оправляла платье, вопросительно глядя на мать, как вдруг из соседней комнаты послышался бег к двери нескольких мужских и женских ног, грохот зацепленного и поваленного стула, и в комнату вбежала тринадцатилетняя девочка, запахнув что то короткою кисейною юбкою, и остановилась по средине комнаты. Очевидно было, она нечаянно, с нерассчитанного бега, заскочила так далеко. В дверях в ту же минуту показались студент с малиновым воротником, гвардейский офицер, пятнадцатилетняя девочка и толстый румяный мальчик в детской курточке.
Граф вскочил и, раскачиваясь, широко расставил руки вокруг бежавшей девочки.
– А, вот она! – смеясь закричал он. – Именинница! Ma chere, именинница!
– Ma chere, il y a un temps pour tout, [Милая, на все есть время,] – сказала графиня, притворяясь строгою. – Ты ее все балуешь, Elie, – прибавила она мужу.
– Bonjour, ma chere, je vous felicite, [Здравствуйте, моя милая, поздравляю вас,] – сказала гостья. – Quelle delicuse enfant! [Какое прелестное дитя!] – прибавила она, обращаясь к матери.
Черноглазая, с большим ртом, некрасивая, но живая девочка, с своими детскими открытыми плечиками, которые, сжимаясь, двигались в своем корсаже от быстрого бега, с своими сбившимися назад черными кудрями, тоненькими оголенными руками и маленькими ножками в кружевных панталончиках и открытых башмачках, была в том милом возрасте, когда девочка уже не ребенок, а ребенок еще не девушка. Вывернувшись от отца, она подбежала к матери и, не обращая никакого внимания на ее строгое замечание, спрятала свое раскрасневшееся лицо в кружевах материной мантильи и засмеялась. Она смеялась чему то, толкуя отрывисто про куклу, которую вынула из под юбочки.
– Видите?… Кукла… Мими… Видите.
И Наташа не могла больше говорить (ей всё смешно казалось). Она упала на мать и расхохоталась так громко и звонко, что все, даже чопорная гостья, против воли засмеялись.
– Ну, поди, поди с своим уродом! – сказала мать, притворно сердито отталкивая дочь. – Это моя меньшая, – обратилась она к гостье.
Наташа, оторвав на минуту лицо от кружевной косынки матери, взглянула на нее снизу сквозь слезы смеха и опять спрятала лицо.
Гостья, принужденная любоваться семейною сценой, сочла нужным принять в ней какое нибудь участие.
– Скажите, моя милая, – сказала она, обращаясь к Наташе, – как же вам приходится эта Мими? Дочь, верно?
Наташе не понравился тон снисхождения до детского разговора, с которым гостья обратилась к ней. Она ничего не ответила и серьезно посмотрела на гостью.
Между тем всё это молодое поколение: Борис – офицер, сын княгини Анны Михайловны, Николай – студент, старший сын графа, Соня – пятнадцатилетняя племянница графа, и маленький Петруша – меньшой сын, все разместились в гостиной и, видимо, старались удержать в границах приличия оживление и веселость, которыми еще дышала каждая их черта. Видно было, что там, в задних комнатах, откуда они все так стремительно прибежали, у них были разговоры веселее, чем здесь о городских сплетнях, погоде и comtesse Apraksine. [о графине Апраксиной.] Изредка они взглядывали друг на друга и едва удерживались от смеха.
Два молодые человека, студент и офицер, друзья с детства, были одних лет и оба красивы, но не похожи друг на друга. Борис был высокий белокурый юноша с правильными тонкими чертами спокойного и красивого лица; Николай был невысокий курчавый молодой человек с открытым выражением лица. На верхней губе его уже показывались черные волосики, и во всем лице выражались стремительность и восторженность.
Николай покраснел, как только вошел в гостиную. Видно было, что он искал и не находил, что сказать; Борис, напротив, тотчас же нашелся и рассказал спокойно, шутливо, как эту Мими куклу он знал еще молодою девицей с неиспорченным еще носом, как она в пять лет на его памяти состарелась и как у ней по всему черепу треснула голова. Сказав это, он взглянул на Наташу. Наташа отвернулась от него, взглянула на младшего брата, который, зажмурившись, трясся от беззвучного смеха, и, не в силах более удерживаться, прыгнула и побежала из комнаты так скоро, как только могли нести ее быстрые ножки. Борис не рассмеялся.
– Вы, кажется, тоже хотели ехать, maman? Карета нужна? – .сказал он, с улыбкой обращаясь к матери.
– Да, поди, поди, вели приготовить, – сказала она, уливаясь.
Борис вышел тихо в двери и пошел за Наташей, толстый мальчик сердито побежал за ними, как будто досадуя на расстройство, происшедшее в его занятиях.


Из молодежи, не считая старшей дочери графини (которая была четырьмя годами старше сестры и держала себя уже, как большая) и гостьи барышни, в гостиной остались Николай и Соня племянница. Соня была тоненькая, миниатюрненькая брюнетка с мягким, отененным длинными ресницами взглядом, густой черною косой, два раза обвившею ее голову, и желтоватым оттенком кожи на лице и в особенности на обнаженных худощавых, но грациозных мускулистых руках и шее. Плавностью движений, мягкостью и гибкостью маленьких членов и несколько хитрою и сдержанною манерой она напоминала красивого, но еще не сформировавшегося котенка, который будет прелестною кошечкой. Она, видимо, считала приличным выказывать улыбкой участие к общему разговору; но против воли ее глаза из под длинных густых ресниц смотрели на уезжавшего в армию cousin [двоюродного брата] с таким девическим страстным обожанием, что улыбка ее не могла ни на мгновение обмануть никого, и видно было, что кошечка присела только для того, чтоб еще энергичнее прыгнуть и заиграть с своим соusin, как скоро только они так же, как Борис с Наташей, выберутся из этой гостиной.
– Да, ma chere, – сказал старый граф, обращаясь к гостье и указывая на своего Николая. – Вот его друг Борис произведен в офицеры, и он из дружбы не хочет отставать от него; бросает и университет и меня старика: идет в военную службу, ma chere. А уж ему место в архиве было готово, и всё. Вот дружба то? – сказал граф вопросительно.
– Да ведь война, говорят, объявлена, – сказала гостья.
– Давно говорят, – сказал граф. – Опять поговорят, поговорят, да так и оставят. Ma chere, вот дружба то! – повторил он. – Он идет в гусары.
Гостья, не зная, что сказать, покачала головой.
– Совсем не из дружбы, – отвечал Николай, вспыхнув и отговариваясь как будто от постыдного на него наклепа. – Совсем не дружба, а просто чувствую призвание к военной службе.
Он оглянулся на кузину и на гостью барышню: обе смотрели на него с улыбкой одобрения.
– Нынче обедает у нас Шуберт, полковник Павлоградского гусарского полка. Он был в отпуску здесь и берет его с собой. Что делать? – сказал граф, пожимая плечами и говоря шуточно о деле, которое, видимо, стоило ему много горя.
– Я уж вам говорил, папенька, – сказал сын, – что ежели вам не хочется меня отпустить, я останусь. Но я знаю, что я никуда не гожусь, кроме как в военную службу; я не дипломат, не чиновник, не умею скрывать того, что чувствую, – говорил он, всё поглядывая с кокетством красивой молодости на Соню и гостью барышню.
Кошечка, впиваясь в него глазами, казалась каждую секунду готовою заиграть и выказать всю свою кошачью натуру.
– Ну, ну, хорошо! – сказал старый граф, – всё горячится. Всё Бонапарте всем голову вскружил; все думают, как это он из поручиков попал в императоры. Что ж, дай Бог, – прибавил он, не замечая насмешливой улыбки гостьи.
Большие заговорили о Бонапарте. Жюли, дочь Карагиной, обратилась к молодому Ростову:
– Как жаль, что вас не было в четверг у Архаровых. Мне скучно было без вас, – сказала она, нежно улыбаясь ему.
Польщенный молодой человек с кокетливой улыбкой молодости ближе пересел к ней и вступил с улыбающейся Жюли в отдельный разговор, совсем не замечая того, что эта его невольная улыбка ножом ревности резала сердце красневшей и притворно улыбавшейся Сони. – В середине разговора он оглянулся на нее. Соня страстно озлобленно взглянула на него и, едва удерживая на глазах слезы, а на губах притворную улыбку, встала и вышла из комнаты. Всё оживление Николая исчезло. Он выждал первый перерыв разговора и с расстроенным лицом вышел из комнаты отыскивать Соню.
– Как секреты то этой всей молодежи шиты белыми нитками! – сказала Анна Михайловна, указывая на выходящего Николая. – Cousinage dangereux voisinage, [Бедовое дело – двоюродные братцы и сестрицы,] – прибавила она.
– Да, – сказала графиня, после того как луч солнца, проникнувший в гостиную вместе с этим молодым поколением, исчез, и как будто отвечая на вопрос, которого никто ей не делал, но который постоянно занимал ее. – Сколько страданий, сколько беспокойств перенесено за то, чтобы теперь на них радоваться! А и теперь, право, больше страха, чем радости. Всё боишься, всё боишься! Именно тот возраст, в котором так много опасностей и для девочек и для мальчиков.
– Всё от воспитания зависит, – сказала гостья.
– Да, ваша правда, – продолжала графиня. – До сих пор я была, слава Богу, другом своих детей и пользуюсь полным их доверием, – говорила графиня, повторяя заблуждение многих родителей, полагающих, что у детей их нет тайн от них. – Я знаю, что я всегда буду первою confidente [поверенной] моих дочерей, и что Николенька, по своему пылкому характеру, ежели будет шалить (мальчику нельзя без этого), то всё не так, как эти петербургские господа.
– Да, славные, славные ребята, – подтвердил граф, всегда разрешавший запутанные для него вопросы тем, что всё находил славным. – Вот подите, захотел в гусары! Да вот что вы хотите, ma chere!
– Какое милое существо ваша меньшая, – сказала гостья. – Порох!
– Да, порох, – сказал граф. – В меня пошла! И какой голос: хоть и моя дочь, а я правду скажу, певица будет, Саломони другая. Мы взяли итальянца ее учить.
– Не рано ли? Говорят, вредно для голоса учиться в эту пору.
– О, нет, какой рано! – сказал граф. – Как же наши матери выходили в двенадцать тринадцать лет замуж?
– Уж она и теперь влюблена в Бориса! Какова? – сказала графиня, тихо улыбаясь, глядя на мать Бориса, и, видимо отвечая на мысль, всегда ее занимавшую, продолжала. – Ну, вот видите, держи я ее строго, запрещай я ей… Бог знает, что бы они делали потихоньку (графиня разумела: они целовались бы), а теперь я знаю каждое ее слово. Она сама вечером прибежит и всё мне расскажет. Может быть, я балую ее; но, право, это, кажется, лучше. Я старшую держала строго.
– Да, меня совсем иначе воспитывали, – сказала старшая, красивая графиня Вера, улыбаясь.
Но улыбка не украсила лица Веры, как это обыкновенно бывает; напротив, лицо ее стало неестественно и оттого неприятно.
Старшая, Вера, была хороша, была неглупа, училась прекрасно, была хорошо воспитана, голос у нее был приятный, то, что она сказала, было справедливо и уместно; но, странное дело, все, и гостья и графиня, оглянулись на нее, как будто удивились, зачем она это сказала, и почувствовали неловкость.
– Всегда с старшими детьми мудрят, хотят сделать что нибудь необыкновенное, – сказала гостья.
– Что греха таить, ma chere! Графинюшка мудрила с Верой, – сказал граф. – Ну, да что ж! всё таки славная вышла, – прибавил он, одобрительно подмигивая Вере.
Гостьи встали и уехали, обещаясь приехать к обеду.
– Что за манера! Уж сидели, сидели! – сказала графиня, проводя гостей.


Когда Наташа вышла из гостиной и побежала, она добежала только до цветочной. В этой комнате она остановилась, прислушиваясь к говору в гостиной и ожидая выхода Бориса. Она уже начинала приходить в нетерпение и, топнув ножкой, сбиралась было заплакать оттого, что он не сейчас шел, когда заслышались не тихие, не быстрые, приличные шаги молодого человека.