JavaScript

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

мультипарадигмальный: объектно-ориентированное, обобщённое, функциональное, императивное, аспектно-ориентированное, событийно-ориентированное, прототипное программирование

Тип исполнения:

интерпретация, трансляция в байт-код Java[1], JIT в машинные коды[2]

Появился в:

1995

Автор:

Брендан Эйх

Выпуск:

ECMAScript 2016[Спецификация 1] (14 июня 2016)

Тестовая версия:

(27 июня 2010)

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

утиная

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

SpiderMonkey, Rhino, KJS (JavaScript) (англ.), JavaScriptCore, V8

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

Lua, Self[3], Си, Scheme[3], Perl[3], Python, Java[3], AWK[3], HyperTalk[3]

Повлиял на:

Objective-J, Dart, TypeScript

JavaScript

MIME-тип

text/javascript, application/javascript[4][Спецификация 2]

Тип формата

текстовый файл с исходным кодом

Расширен из

ECMAScript

JavaScript (/ˈɑːvɑːˌskrɪpt/; аббр. JS /ˈdʒeɪ.ɛs./) — прототипно-ориентированный сценарный язык программирования. Является реализацией языка ECMAScript (стандарт ECMA-262[5]).

JavaScript обычно используется как встраиваемый язык для программного доступа к объектам приложений. Наиболее широкое применение находит в браузерах как язык сценариев для придания интерактивности веб-страницам[6].

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

На JavaScript оказали влияние многие языки, при разработке была цель сделать язык похожим на Java, но при этом лёгким для использования непрограммистами. Языком JavaScript не владеет какая-либо компания или организация, что отличает его от ряда языков программирования, используемых в веб-разработке[~ 1][7].

Название «JavaScript» является зарегистрированным товарным знаком компании Oracle Corporation[8].





Содержание

История

Предпосылки

В 1992 году компания Nombas (впоследствии приобретённая Openwave[en]) начала разработку встраиваемого скриптового языка Cmm (Си-минус-минус), который, по замыслу разработчиков, должен был стать достаточно мощным, чтобы заменить макросы, сохраняя при этом схожесть с Си, чтобы разработчикам не составляло труда изучить его[9]. Главным отличием от Си была работа с памятью. В новом языке всё управление памятью осуществлялось автоматически: не было необходимости создавать буферы, объявлять переменные, осуществлять преобразование типов. В остальном языки сильно походили друг на друга: в частности, Cmm поддерживал стандартные функции и операторы Си[10]. Cmm был переименован в ScriptEase, поскольку исходное название звучало слишком негативно, а упоминание в нём Си «отпугивало» людей[9][11]. На основе этого языка был создан проприетарный продукт CEnvi. В конце ноября 1995 года Nombas разработала версию CEnvi, внедряемую в веб-страницы. Страницы, которые можно было изменять с помощью скриптового языка, получили название Espresso Pages — они демонстрировали использование скриптового языка для создания игры, проверки пользовательского ввода в формы и создания анимации. Espresso Pages позиционировались как демоверсия, призванная помочь представить, что случится, если в браузер будет внедрён язык Cmm. Работали они только в 16-битовом Netscape Navigator под управлением Windows[12].

JavaScript

Перед Бренданом Эйхом, нанятым в компанию Netscape 4 апреля 1995 года[14], была поставлена задача внедрить язык программирования Scheme или что-то похожее в браузер Netscape. Поскольку требования были размыты, Эйха перевели в группу, ответственную за серверные продукты, где он проработал месяц, занимаясь улучшением протокола HTTP[14]. В мае разработчик был переброшен обратно, в команду, занимающуюся клиентской частью (браузером), где он немедленно начал разрабатывать концепцию нового языка программирования. Менеджмент разработки браузера, включая Тома Пакина (Tom Paquin), Михаэля Тоя (англ.), Рика Шелла (Rick Schell), был убеждён, что Netscape должен поддерживать язык программирования, встраиваемый в HTML-код страницы[15].

Помимо Брендана Эйха в разработке участвовали[14] сооснователь[16] Netscape Communications Марк Андрессен и сооснователь Sun Microsystems Билл Джой: чтобы успеть закончить работы над языком к релизу браузера, компании заключили соглашение о сотрудничестве в разработке[17]. Они ставили перед собой цель обеспечить «язык для склеивания» составляющих частей веб-ресурса: изображений, плагинов, Java-апплетов, который был бы удобен для веб-дизайнеров и программистов, не обладающих высокой квалификацией[14].

Первоначально язык назывался Mocha[18][19][20], затем он был переименован в LiveScript[20][21] и предназначался как для программирования на стороне клиента, так и для программирования на стороне сервера (там он должен был называться LiveWire)[17]. На синтаксис оказали влияние языки Си и Java, и, поскольку Java в то время было модным словом[14][17], 4 декабря 1995 года LiveScript переименовали в JavaScript[22], получив соответствующую лицензию у Sun. Анонс JavaScript со стороны представителей Netscape и Sun состоялся накануне выпуска второй бета-версии Netscape Navigator[14]. В нём декларируется, что 28 лидирующих ИТ-компаний выразили намерение использовать в своих будущих продуктах JavaScript как объектный скриптовый язык с открытым стандартом[23].

В 1996 году компания Microsoft выпустила аналог языка JavaScript, названный JScript. Анонсирован этот язык был 18 июля 1996 года[24]. Первым браузером, поддерживающим эту реализацию, был Internet Explorer 3.0.

По инициативе компании Netscape[25][26] была проведена стандартизация языка ассоциацией ECMA. Стандартизированная версия имеет название ECMAScript, описывается стандартом ECMA-262. Первой версии спецификации соответствовал JavaScript версии 1.1, а также языки JScript и ScriptEasy[9][17].

Популярность

В статье «The World’s Most Misunderstood Programming Language Has Become the World’s Most Popular Programming Language»[27](рус.) «Самый неправильно понятый язык программирования в мире стал самым популярным в мире языком программирования») Дуглас Крокфорд утверждает, что лидирующую позицию JavaScript занял в связи с развитием AJAX, поскольку браузер стал превалирующей системой доставки приложений. Он также констатирует растущую популярность JavaScript, то, что этот язык встраивается в приложения, отмечает значимость языка.

Согласно TIOBE Index, базирующемуся на данных поисковых систем Google, MSN, Yahoo!, Википедия и YouTube, в апреле 2015 года JavaScript находился на 6 месте (год назад на 9)[28].

По данным Black Duck Software (англ.)[29] в разработке открытого программного обеспечения доля использования JavaScript росла. 36 % проектов, релизы которых состоялись с августа 2008 по август 2009 гг., включают JavaScript, наиболее часто используемый язык программирования с быстрорастущей популярностью. 80 % открытого программного обеспечения использует Си, C++, Java, Shell и JavaScript. При этом JavaScript — единственный из этих языков, чья доля использования увеличилась (более чем на 2 процента, если считать в строках кода)[30].

JavaScript является самым популярным языком программирования, используемым для разработки веб-приложений на стороне клиента (англ.)[31][32].

Возможности языка

JavaScript является объектно-ориентированным языком, но используемое в языке прототипирование[33][34] обуславливает отличия в работе с объектами по сравнению с традиционными класс-ориентированными языками. Кроме того, JavaScript имеет ряд свойств, присущих функциональным языкам — функции как объекты первого класса, объекты как списки, карринг, анонимные функции, замыкания[35] — что придаёт языку дополнительную гибкость.

Несмотря на схожий с Си синтаксис, JavaScript по сравнению с языком Си имеет коренные отличия:

В языке отсутствуют такие полезные вещи[36], как:

Семантика и синтаксис

Синтаксис языка JavaScript во многом напоминает синтаксис Си и Java, семантически же язык гораздо ближе к Self, Smalltalk или даже Лиспу[27][37][Спецификация 3].

В JavaScript:

Структура языка

Структурно JavaScript можно представить в виде объединения трёх чётко различимых друг от друга частей[38][39][40][41]:

Если рассматривать JavaScript в отличных от браузера окружениях, то объектная модель браузера и объектная модель документа могут не поддерживаться[40].

Объектную модель документа иногда рассматривают как отдельную от JavaScript сущность[42][43][Спецификация 4], что согласуется с определением DOM как независимого от языка интерфейса документа[44][~ 3]. В противоположность этому ряд авторов находят BOM и DOM тесно взаимосвязанными[45][46].

Ядро

ECMAScript не является браузерным языком и в нём не определяются методы ввода и вывода информации[38]. Это, скорее, основа для построения скриптовых языков. Спецификация ECMAScript описывает типы данных, инструкции, ключевые и зарезервированные слова, операторы, объекты, регулярные выражения, не ограничивая авторов производных языков в расширении их новыми составляющими.

Объектная модель браузера

Объектная модель браузера — браузер-специфичная часть языка[40][47], являющаяся прослойкой между ядром и объектной моделью документа[48]. Основное предназначение объектной модели браузера — управление окнами браузера и обеспечение их взаимодействия. Каждое из окон браузера представляется объектом window, центральным объектом DOM. Объектная модель браузера на данный момент не стандартизирована[40][49], однако спецификация находится в разработке WHATWG[48][Спецификация 5] и W3C[39][Спецификация 6].

Помимо управления окнами, в рамках объектной модели браузера, браузерами обычно обеспечивается поддержка следующих сущностей[48][49]:

  • управление фреймами,
  • поддержка задержки в исполнении кода и зацикливания с задержкой,
  • системные диалоги,
  • управление адресом открытой страницы,
  • управление информацией о браузере,
  • управление информацией о параметрах монитора,
  • ограниченное управление историей просмотра страниц,
  • поддержка работы с HTTP cookie.

Объектная модель документа

Объектная модель документа — интерфейс программирования приложений для HTML и XML-документов[50]. Согласно DOM, документ (например, веб-страница) может быть представлен в виде дерева объектов, обладающих рядом свойств, которые позволяют производить с ним различные манипуляции:

  • генерация и добавление узлов,
  • получение узлов,
  • изменение узлов,
  • изменение связей между узлами,
  • удаление узлов.

Встраивание в веб-страницы

Расположение внутри страницы

Для добавления JavaScript-кода на страницу, можно использовать теги <script></script>[Спецификация 7], которые рекомендуется, но не обязательно, помещать внутри контейнера <head>. Контейнеров <script> в одном документе может быть сколько угодно. Атрибут «type='text/javascript'» указывать необязательно, данное значение используется по умолчанию[Спецификация 8].

Скрипт, выводящий модальное окно с классической надписью «Hello, World!» внутри браузера:

      <script type="application/javascript">
         alert('Hello, World!');
      </script>

Расположение внутри тега

Спецификация HTML описывает набор атрибутов, используемых для задания обработчиков событий[Спецификация 9]. Пример использования:

      <a href="delete.php" onclick="return confirm('Вы уверены?');">
         Удалить
      </a>

В приведённом примере при нажатии на ссылку функция confirm('Вы уверены?'); вызывает модальное окно с надписью «Вы уверены?», а return false; блокирует переход по ссылке. Разумеется, этот код будет работать только если в браузере есть и включена поддержка JavaScript, иначе переход по ссылке произойдёт без предупреждения.

Использование кода JavaScript в контексте разметки страницы расценивается в рамках ненавязчивого JavaScript как плохая практика. Аналогом (при условии снабжения ссылки идентификатором alertLink)

      <a href="delete.php" id="alertLink">
         Удалить
      </a>

приведённого примера может являться, например, следующий фрагмент JavaScript:

window.onload = function() {
    var linkWithAlert = document.getElementById("alertLink");
    linkWithAlert.onclick = function() {
        return confirm('Вы уверены?'); 
    };
};

Вынесение в отдельный файл

Есть и третья возможность подключения JavaScript — написать скрипт в отдельном файле, а потом подключить его с помощью конструкции

   <head>
      <script type="application/javascript" src="Путь_к_файлу_со_скриптом">
      </script>
   </head>

Атрибуты элемента script

Элемент script, широко используемый для подключения к странице JavaScript, имеет несколько атрибутов.

В запросе комментариев RFC-4329, определяющем[51] MIME-тип, соответствующий JavaScript, указано:

[4]

Медиатипы

  • application/javascript,
  • application/ecmascript,

которые также определяются в этом документе, предназначены для практического использования, им следует отдавать предпочтение.

  • необязательный атрибут src, принимающий в качестве значения адрес к файлу со скриптом.
  • необязательный атрибут charset, используемый вместе с src для указания используемой кодировки внешнего файла.
  • необязательный атрибут defer указывает, что получение скрипта происходит асинхронно, но выполнение следует отложить до тех пор, пока страница не будет загружена целиком.
  • необязательный атрибут async указывает, что получение скрипта происходит асинхронно, а выполнение будет произведено сразу по завершению скачивания. Очерёдность выполнения скриптов не гарантируется.

При этом атрибут language (language="JavaScript"), несмотря на его активное использование (в 2008 году этот атрибут был наиболее часто используемым у тега <script>[52]), относится к не рекомендуемым (deprecated), отсутствует в DTD, поэтому считается некорректным[Спецификация 10].

Область применения

Веб-приложения

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

AJAX

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

Comet

Comet — широкое понятие, описывающее механизм работы веб-приложений, использующих постоянные HTTP-соединения, что позволяет веб-серверу отправлять данные браузеру без дополнительного запроса со стороны браузера. Для таких приложений используются технологии, непосредственно поддерживаемые браузерами. В частности, в них широко используется JavaScript.

Браузерные операционные системы

JavaScript широко используется в браузерных операционных системах. Так, например, исходный код IndraDesktop WebOS на 75 % состоит из JavaScript[53], код браузерной операционной системы IntOS — на 70 %[54]. Доля JavaScript в исходном коде eyeOS — 5 %[55], однако и в рамках этой операционной системы JavaScript играет важную роль, участвуя в визуализации на клиенте и являясь необходимым механизмом для коммуницирования клиента и сервера[56].

Букмарклеты

JavaScript используется для создания небольших программ, размещаемых в закладки браузера. При этом используются URL-адреса со спецификатором javascript:[57].

Пользовательские скрипты в браузере

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

Для управления пользовательскими скриптами в Mozilla Firefox используется расширение Greasemonkey; Opera[58][59][60] и Google Chrome[61] предоставляют средства поддержки пользовательских скриптов и возможности для выполнения ряда скриптов Greasemonkey.

Серверные приложения

Приложения, написанные на JavaScript, могут исполняться на серверах, использующих Java 6 и более поздних версий[62]. Это обстоятельство используется для построения серверных приложений, позволяющих обрабатывать JavaScript на стороне сервера.

Помимо Java 6, существует ряд платформ, использующих существующие движки (интерпретаторы) JavaScript для исполнения серверных приложений. (Как правило, речь идёт о повторном использовании движков, ранее созданных для исполнения кода JavaScript в браузерах WWW.)

Платформы исполнения серверных приложений на JavaScript
Название Используемый движок JavaScript Языки, на которых написан движок и платформа Лицензия
Jaxer[63] SpiderMonkey[64] C++, C[65] GPL 3[66]
persevere-framework[67] Rhino Java[68] Модифицированная лицензия BSD[69]
Helma[70] Rhino Java, JavaScript[71] BSD-подобная Helma License 2.0[72]
v8cgi V8 C++, JavaScript[73] Лицензия BSD[74]
node.js V8 C++[75] Лицензия MIT[76]

JavaScript на стороне сервера используется в проектах Google[77]. Так например, Google Sites допускает подстройку с помощью JavaScript-сценариев, исполняемых движком Rhino[78].

Мобильные приложения

Перевод мобильных устройств Palm на использование Palm webOS в качестве операционной системы с Mojo SDK в качестве комплекта средств разработки[79] позволяет использовать JavaScript в качестве языка разработки мобильных приложений[80][81].

Виджеты

Виджет — вспомогательная мини-программа, графический модуль которой размещается в рабочем пространстве соответствующей родительской программы (англ.), служащая для украшения рабочего пространства, развлечения, решения отдельных рабочих задач или быстрого получения информации из интернета без помощи веб-браузера. JavaScript используется как для реализации виджетов, так и для реализации движков виджетов. В частности, при помощи JavaScript реализованы Apple Dashboard, Microsoft Gadgets (англ.), Yahoo!_Widgets (англ.), Google Gadgets, Klipfolio Dashboard (англ.).

Прикладное программное обеспечение

JavaScript используется для написания прикладного ПО. Например, 16,4 % исходного кода Mozilla Firefox написано на JavaScript[82].

Google Chrome OS в качестве прикладного ПО использует веб-приложения[83].

В окружении рабочего стола GNOME имеется возможность создавать на JavaScript программы, оперирующие с библиотеками GNOME при помощи Gjs, Seed (англ.)[84].

Манипуляция объектами приложений

JavaScript также находит применение в качестве скриптового языка доступа к объектам приложений. Платформа Mozilla (XUL/Gecko) использует JavaScript. Среди сторонних продуктов, например, Java, начиная с версии 6, содержит встроенный интерпретатор JavaScript на базе Rhino[62]. Сценарии JavaScript поддерживаются в таких приложениях Adobe, как Adobe Photoshop, Adobe Dreamweaver, Adobe Illustrator и Adobe InDesign.

Офисные приложения

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

Microsoft Office

В Excel Services 2010 добавились[85] два новых интерфейса программирования приложений: REST API и JavaScript Object Model (JSOM).

  • Excel Services 2010 REST API позволяет[86] осуществлять доступ к объектам рабочих книг, таким как таблицы, диаграммы и именованные серии данных; получать изображения, HTML, Atom, рабочие книги; устанавливать значения и обновлять вычисления перед запрашиванием элементов[86].
  • JSOM даёт возможность реагировать на действия пользователя в отношении Excel Web Access (EWA), программно взаимодействовать с составляющими EWA. Использование JSOM осуществляется при помощи помещения кода JavaScript на страницу, содержащую компоненты EWA[85].

OpenOffice.org

JavaScript — один из языков программирования, используемых для написания макросов в приложениях, входящих в состав OpenOffice.org[87]. В OpenOffice.org интегрирован интерпретатор JavaScript Rhino[88]. По состоянию на декабрь 2009 года поддержка JavaScript носила ограниченный характер. Ограничения, присущие[88] разработке макросов OpenOffice.org на JavaScript:

  • среда выполнения JavaScript поддерживает загрузку лишь тех классов Java, которые развёрнуты сценарием JavaScript;
  • среда выполнения JavaScript не предоставляет сообщения об ошибках, произошедших во время выполнения скрипта;
  • ещё не реализована поддержка интерактивной разработки JavaScript-сценариев.

В OpenOffice.org имеется редактор и отладчик JavaScript-сценариев[89].

Обучение информатике

JavaScript обладает пропедевтической ценностью, позволяя сочетать при обучении информатике(англ.) Computer science) интенсивную практику программирования и широту используемых технологий[90]. Преподавание данного языка в школе позволяет создать базу для изучения веб-программирования, использовать на уроках творческие проекты[91]. Соответствующий курс позволяет обеспечить углубленный уровень изучения информатики и его имеет смысл включать в элективные курсы углубленного уровня подготовки[92].

JavaScript — подходящий язык для обучения программированию игр (англ.). По сравнению с альтернативами, он функционально достаточен, прост в изучении и в применении, снижает сложность для обучения, мотивирует обучаемых делиться своими играми с другими[93].

Не включённые в книгу Николаса Закаса «Professional JavaScript for Web Developers» части о реализации на JavaScript классических алгоритмов, техник, структур данных, послужили[94] началу проекта Computer science in JavaScript[~ 4].

Версии

JavaScript Соответствующая версия JScript Существенные изменения
1.0 (Netscape 2.0, март 1996) 1.0 (ранние версии IE 3.0, август 1996) Оригинальная версия языка JavaScript.
1.1 (Netscape 3.0, август 1996) 2.0 (поздние версии IE 3.0, январь 1997) В данной версии был реализован объект Array и устранены наиболее серьёзные ошибки.
1.2 (Netscape 4.0, июнь 1997) Реализован переключатель switch, регулярные выражения. Практически приведён в соответствии с первой редакцией спецификации ECMA-262.
1.3 (Netscape 4.5, октябрь 1998) 3.0 (IE 4.0, октябрь 1997) Совместим с первой редакцией ECMA-262.
1.4 (только Netscape Server) 4.0 (Visual Studio 6, нет версии IE) Применяется только в серверных продуктах Netscape.
5.0 (IE 5.0, март 1999)
5.1 (IE 5.01)
1.5 (Netscape 6.0, ноябрь 2000; также
поздние версии Netscape и Mozilla)
5.5 (IE 5.5, июль 2000) Редакция 3 (декабрь 1999). Совместим с третьей редакцией спецификации ECMA-262.
5.6 (IE 6.0, октябрь 2001)
1.6 (Gecko 1.8, Firefox 1.5, ноябрь 2005) Редакция 3 с некоторыми совместимыми улучшениями: E4X, дополнения к Array (например, Array.prototype.forEach), упрощения для Array и String[95]
1.7 (Gecko 1.8.1, Firefox 2.0, осень 2006), расширение JavaScript 1.6 Редакция 3, с добавлением всех улучшений из JavaScript 1.6, генераторов и списочных выражений (англ. list comprehensions, [a*a for (a in iter)]) из Python, блоковых областей с использованием let и деструктурирующего присваивания (var [a, b] = [1, 2])[96].
JScript .NET (ASP.NET; нет версии IE) (Считается, что JScript .NET разработан при участии других членов ECMA)
1.8 (Gecko 1.9, Firefox 3.0, осень 2008), расширение JavaScript 1.7 Новая форма записи для функций, сходная с типичными лямбда-выражениями, генераторы, новые методы итеративной обработки массивов reduce() и reduceRight()[97].
1.8.1 (Gecko 1.9.1, Firefox 3.5) Встроенная поддержка JSON, метод getPrototypeOf() у Object, методы trim(), trimLeft(), trimRight() у String[98]
2.0 Редакция 4 (разработка не закончена[99], название зарезервировано ECMA, но не было использовано для публикации[Спецификация 11])
Редакция 5 (ранее известная под названием ECMAScript 3.1[99]. Финальная версия принята 3 декабря 2009 года[100][101].)

Библиотеки JavaScript

Для обеспечения высокого уровня абстракции и достижения приемлемой степени кросс-браузерности при разработке веб-приложений используются библиотеки JavaScript. Они представляют собой набор многократно используемых объектов и функций.

Среди известных JavaScript библиотек можно отметить Adobe Spry, AngularJS, Dojo Toolkit, Extjs, jQuery, Mootools, Prototype, Qooxdoo (англ.), Underscore.

Отладка

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

По состоянию на ноябрь 2009 года, Internet Explorer, Opera, Firefox, Safari, и Google Chrome имеют отладчики сценариев.

Internet Explorer имеет три отладчика: Microsoft Visual Studio — самый полный из них, за ним следует Microsoft Script Editor (англ.) (компонент Microsoft Office[102]), и, наконец, свободный Microsoft Script Debugger, гораздо более простой, чем два других. Бесплатный Microsoft Visual Web Developer Express предоставляет ограниченную версию с отладочной функцией JavaScript в Microsoft Visual Studio. В восьмой версии в IE вместе с инструментами для разработчиков появился встроенный отладчик.

В Opera также имеется собственный отладчик — Opera Dragonfly[103].

Разрабатываемые веб-приложения в Firefox можно отлаживать при помощи расширений Firebug, Venkman (англ.).

В Safari входит отладчик JavaScript WebKit Web Inspector[104]. Этот же отладчик доступен и в других браузерах, использующих WebKit: Google Chrome, Arora, Rekonq, Midori и др.

Средства тестирования

Большинство фреймворков автоматизированного тестирования (англ.) JavaScript-кода предполагают запуск тестов в браузере. Это осуществляется при помощи HTML-страницы, являющейся контекстом тестирования (англ.), которая, в свою очередь загружает всё необходимое для осуществления тестирования. Первыми такими фреймворками были JsUnit (англ.) (создан в 2001 году), Selenium (создан в 2004 году)[105]. Альтернатива — запуск тестов из командной строки. В этом случае используются окружения, отличные от браузера, например, Rhino[106]. Одним из первых инструментов такого рода является Crosscheck, позволяющий тестировать код, эмулируя поведение Internet Explorer 6 и Firefox версий 1.0 и 1.5[107]. Другой пример фреймворка автоматизированного тестирования JavaScript-кода, не использующего браузер для запуска тестов — библиотека env.js, созданная Джоном Резигом. Она использует Rhino и при этом содержит эмуляцию окружения браузера и DOM[108].

Blue Ridge, плагин к фреймворку веб-приложений Ruby on Rails, позволяет осуществлять модульное тестирование JavaScript-кода как в браузере, так и вне его. Это достигается за счёт использования фреймворка автоматизированного тестирования Screw.Unit и Rhino с env.js[109].

Главная проблема систем тестирования, не использующих браузеры, в том, что они используют эмуляции, а не реальные окружения, в которых выполняется код. Это приводит к тому, что успешное прохождение тестов не гарантирует того, что код корректно отработает в браузере[110][111]. Проблемой систем тестирования, использующих браузер, является сложность работы с ними, необходимость осуществления рутинных неавтоматизированных действий[112]. Для решения этого JsTestDriver, фреймворк автоматизированного тестирования, разрабатываемый Google, использует сервер, взаимодействующий с браузерами для осуществления тестирования[113]. Сходным образом ведёт себя Selenium Remote Control, входящий во фреймворк автоматизированного тестирования Selenium: он включает в себя сервер, запускающий и завершающий браузеры и действующий как HTTP-прокси для запросов к ним[114]. Кроме того, в Selenium содержится Selenium Grid, позволяющий осуществлять одновременное тестирование JavaScript-кода на разных компьютерах с разными окружениями, уменьшая время выполнения тестов[115]. Testswarm, имеющее поддержку фреймворков автоматизированного тестирования JavaScript-кода QUnit (библиотека jQuery), UnitTestJS (библиотека Prototype), JSSpec (библиотека MooTools), JsUnit, Selenium и Dojo Objective Harness, представляет собой распределённое средство поддержки непрерывной интеграции[116].

Негативное свойство, которым может обладать фреймворк автоматизированного тестирования JavaScript-кода — наличие зависимостей. Это создаёт риск отказа в работе тестируемого кода, успешно проходящего тесты, в среде с отсутствием этих зависимостей. Например, исходная версия JsUnitTest, фреймворка, созданного и использовавшегося для тестирования библиотеки Prototype, зависела от самой Prototype, изменяющего свойства объектов в глобальной области видимости[117]. Включение в библиотеку JavaScript инструмента тестирования — распространённая практика. Так YUI Test 3 является частью Yahoo! UI Library и может быть безопасно использован для тестирования произвольного JavaScript-кода[118]. QUnit — фреймворк автоматизированного тестирования, созданный разработчиками jQuery[119].

Связь с другими языками

Взаимное влияние

Стандартизация JavaScript потребовала уйти от проблем с торговыми марками, поэтому стандарт ECMA 262 называет язык ECMAScript, три редакции которого были опубликованы с начала работы над ним в ноябре 1996 года.

Objective-J — это строгое компактное надмножество JavaScript, в котором к JavaScript добавлено:

VBScript от Microsoft, подобно JavaScript, может выполняться на стороне клиента в веб-страницах. VBScript имеет синтаксис, производный от Visual Basic и поддерживается только в Internet Explorer.

JSON, или объектная нотация JavaScript, это формат обмена данными общего назначения, определённый как подмножество JavaScript.

Scheme также является родственным JavaScript языком, поскольку оба представляют богатые возможности функционального программирования: JavaScript является динамическим языком, поддерживает гибкие массивы, может легко симулировать s-выражения, имеет поддержку лямбда-выражений[120].

JavaScript и Java

Общим заблуждением является то, что JavaScript аналогичен или тесно связан с Java, это не так[27]. Оба языка имеют C-подобный синтаксис, являются объектно-ориентированными и как правило широко используются в клиентских веб-приложениях. Из важных различий можно отметить:

Реализация

На JavaScript реализованы интерпретаторы ряда языков программирования, что позволяет использовать для них как среду выполнения веб-браузер. Им можно найти применение, например, в образовательных целях[121].

HotRuby — свободная реализация виртуальной машины Руби на JavaScript и Flash. Позволяет выполнять байткод, полученный в результате компиляции YARV. Реализует большую часть грамматики Руби. Пока не реализован механизм исключений и большая часть встроенных функций и классов[122]. При помощи HotRuby на веб-страницах можно использовать руби-скрипты. Для этого руби-код следует поместить в блок:

<script type="text/ruby"> … </script>

HotRuby выделит его, пошлёт на компиляцию удалённому скрипту и затем отобразит результаты работы на странице[123]. Данная реализация позволяет осуществлять доступ из Руби к объектам JavaScript[124].

Таблица реализаций языков программирования на JavaScript
Язык Название реализации Основные авторы Лицензия
JavaScript s-mr[125] Andrei Formiga New BSD
PostScript WPS[126] Tom Hlavaty  ?
PDF
Ассемблер для MOS Technology 6502 6502asm[127] Stian Soreng GPL
Objective-J Cappuccino[128] Ross Boucher LGPL
Haskell ycr2js[129] Tom Shackell, Neil Mitchell, Andrew Wilkinson, Mike Dodds, Bob Davie, Dimitry Golubovsky simple permissive license
Prolog Monash Toy Prolog[130] Lloyd Allison  ?
ioctl[131] Jan Grant  ?
Cat Cat Interpreter[132] Christopher Diggins Общественное достояние
Scheme BiwaScheme[133] Yutaka Hara MIT
BASIC Quite BASIC[134] Nikko Strom бесплатная проприетарная
Lily (англ.) Lily[135] Bill Orcutt MIT
Forth wForth[136] K Jacobson  ?
PHP phype[137] casperbp, hjelmen0 Artistic license (англ.)[138]
Python 3 Brython[139]  ?  ?

Взаимодействие

В некоторых языках программирования существуют средства поддержки взаимодействия с JavaScript-кодом.

  • Для PHP имеется пакет HTML_Javascript, предоставляющий интерфейс создания простых JavaScript-программ[140].
  • Соответствующий пакет для Tcl называется ::javascript. Он предоставляет команды генерации кода HTML и JavaScript[141].
  • Пакет для Perl Data::JavaScript позволяет переносить структуры данных Perl в JavaScript-код[142].

Поддержка браузерами

</div>

На сегодняшний день поддержку JavaScript обеспечивают современные версии всех наиболее часто используемых браузеров. В Internet Explorer, Opera, Mozilla Firefox, Safari, Google Chrome имеется полная поддержка третьей редакции ECMA-262. При этом в Mozilla Firefox предпринята попытка осуществления поддержки четвёртой редакции спецификации, а первым браузером, в котором появилась неполная поддержка спецификации 3.1, явился Internet Explorer 8[143].

Допущенные разработчиками популярных браузеров ошибки в реализации спецификации, как правило, незначительны[144]. По состоянию на ноябрь 2009 года объектная модель документа имеет более ограниченную поддержку[145].

По мнению создателя языка, поддержка в Internet Explorer компанией Microsoft одного из существующих и применяющихся в других браузерах быстрых движков JavaScript способно привести к появлению приложений, работающих с трёхмерной графикой, написанных на JavaScript 3D-игр, использованию JavaScript в задачах, в которых ранее применялась технология Adobe Flash[146].

Наборы тестов

Регрессионное тестирование соответствия браузеров третьей редакции спецификации ECMA-262 может осуществляться[147][148] с помощью разработанного Google инструмента для тестирования соответствия спецификации ECMAScript Sputnik, включающего более пяти тысяч вариантов тестирования[149] и получившего название по имени российской команды Google[149], а также написанной Юрием Зайцевым оболочки sputniktests-webrunner[150] или сервиса Google[151]. Варианты тестирования, входящие в Sputnik обновляются в связи с выходом пятой редакции спецификации ECMA-262, отражая изменения по сравнению с её предыдущей редакцией[152].

ECMAScript 5 Conformance Suite[153] представляет собой набор тестов, выпущенный Microsoft под лицензией BSD[154], для проверки соответствия реализации языка ECMAScript его пятой редакции спецификации. По состоянию на 12 марта 2010 года в пакете насчитывалось 1236 вариантов тестирования, он имел версию 0.2 альфа и количество загрузок за три месяца составляло 178[155].

Для проверки корректности реализаций JavaScript имеется набор тестов JavaScript Test Suite, выпущенных Mozilla[156][157].

Безопасность

JavaScript позволяет потенциальным авторам вредоносного кода запускать его на любом компьютере сети: для этого достаточно открыть на нём веб-страницу. Это обуславливает наличие двух принципиальных ограничений:

  • JavaScript-программы выполняются в песочнице, в которой они могут выполнять только ограниченный круг действий, а не задачи программирования общего назначения (например, создание файлов, работа с сокетами)[158],
  • для JavaScript-кода применяется политика общего происхождения, в соответствии с которой скрипт, встроенный в страницу, не может получить доступ к ряду свойств объектов другой страницы (в частности, к большинству свойств объекта document) при отличии в протоколе, хосте и номере порта этих страниц[159].

Помимо этого, разработчики браузеров вносят дополнительные ограничения в ответ на имеющие место злоупотребления. Так появился, в частности, запрет на открытие окна, размер одной стороны которого меньше ста пикселей[158].

Межсайтовые уязвимости

Общая проблема, касающаяся JavaScript — межсайтовый скриптинг или XSS, нарушение политики общего происхождения. Уязвимости XSS имеют место в ситуациях, когда злоумышленник имеет возможность поместить скрипт на страницу, демонстрирующуюся пользователю. В этом случае скрипт получает доступ к сайту с правами этого пользователя, что в ряде случаев открывает возможность отсылки конфиденциальной информации, осуществление нежелательных транзакций.

Уязвимости XSS также происходят из-за ошибок, допущенных разработчиками браузеров[160].

Другим типом межсайтовой уязвимости является подделка межсайтовых запросов или CSRF. Она заключается в возможности сайта злоумышленника заставить браузер пользователя осуществить нежелательное действие на целевом сайте (например, банковский перевод денег). Такая возможность имеется, если целевой сайт полагается только на HTTP cookie или запросы авторизации. В этом случае запросы, инициализированные кодом сайта злоумышленника выполняются так же как запросы пользователя, если он авторизован на целевом сайте. Одним из средств защиты от CSRF является осуществление аутентификации при любом запросе, который приводит к необратимым последствиям. Также может помочь анализ HTTP referer.

Неуместное доверие на стороне клиента

Разработчики клиентских приложений, вне зависимости от того, используют они JavaScript или нет, должны осознавать, что последние могут находиться под контролем злоумышленников. Поэтому любая проверка на стороне клиента может быть обойдена, JavaScript может быть как запущен, так и нет. Код, подвергнувшийся обфускации может стать объектом обратной разработки; данные формы могут быть посланы на сервер, минуя валидацию, осуществляемую с помощью JavaScript; скрипты могут быть отключены частично, поэтому, например, надёжную защиту от сохранения изображений с помощью JavaScript осуществить нельзя[161]; чрезвычайно неосмотрительно внедрять пароль в JavaScript, исполняемый на клиенте, где он может быть найден злоумышленником.

Ошибки в браузере, плагинах и расширениях

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

Подобные ошибки выявлялись у часто используемых браузеров, включая Mozilla Firefox[162], Internet Explorer[163], Safari[164]. При выявлении потенциально опасных ошибок в браузере и наличия сведений о реализованных эксплойтах фирма-производитель и эксперты по безопасности рекомендуют отключать JavaScript до выхода патча[165][166].

Плагины, такие как плееры, Macromedia Flash и ряд ActiveX компонент, доступных по умолчанию в Internet Explorer, могут также содержать ошибки, эксплуатируемые с помощью JavaScript, что уже случалось ранее[167][168].

Расширения Mozilla Firefox не изолированы друг от друга: одно расширение может исправлять другое, что может использоваться злоумышленниками. На конференции SecurityByte & Owasp AppSec Asia 2009 Роберто Сагги Ливерани (Roberto Suggi Liverani) и Ник Фримэн (Nick Freeman) продемонстрировали три эксплойта в популярных расширениях Firefox, загруженные с сайта более 30 миллионов раз[169].

Ошибки реализации песочницы

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

Неправильное наделение привилегиями JavaScript из веба служило причиной уязвимостей как Internet Explorer[170], так и Mozilla Firefox[171].

Microsoft Windows позволяет файлам с кодом JavaScript запускаться как обычным программам без того, чтобы быть помещёнными в песочницу. Это делает возможным создание троянских программ[172].

Напишите отзыв о статье "JavaScript"

Примечания

  1. Alexei White. Major JavaScript Engines // JavaScript Programmer's Reference. — Indianapolis, IN 46256: Wiley Publishing, Inc., 2009. — P. 12 — 13. — (Programmer's Reference). — ISBN 978-0-470-34472-9.
  2. Nicholas C. Zakas. Next-Generation JavaScript Engines // High Performance JavaScript / Editor: Mary E. Treseler. — 1st ed. — 1005 Gravenstein Highway North, Sebastopol, CA 95472: O’Reilly Media, 2010. — P. xiii. — ISBN 978-0-596-80279-0.
  3. 1 2 3 4 5 6 Dr. Axel Rauschmayer. [speakingjs.com/es5/ch03.html#_influences The Nature of JavaScript] // [speakingjs.com/es5/ Speaking JavaScript]. — First Edition. — O’Reilly Media, 2014. — P. 41. — ISBN 978-1-449-36503-5.
  4. 1 2 Hoehrmann B. [www.ietf.org/rfc/rfc4329.txt RFC4329] (англ.) (txt). Рабочая группа сетевых технологий специальной комиссии интернет-разработок (Апрель 2006). — Текст запроса комментариев RFC4329. Проверено 28 сентября 2009. [www.webcitation.org/618BjkzKp Архивировано из первоисточника 22 августа 2011].
  5. [www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf ECMAScript Language Specification].
  6. Флэнаган Д. JavaScript. Карманный справочник. Сделайте веб-страницы интерактивными! / Перевод А.Г. Сысонюк. — Москва.: Издательский дом "Вильямс", 2015. — С. 320. — 1000 экз. — ISBN 978-5-8459-1948-9 (рус.).
  7. Рейсиг Д. 4. Инструменты отладки и тестирования // JavaScript. Профессиональные приёмы программирования = Pro JavaScript™ Techniques / Перевод Н. Вильчинский. — СПб.: Питер, 2008. — С. 76. — (Библиотека программиста). — 2500 экз. — ISBN 978-5-91180-904-1.
  8. [tdr.uspto.gov/jsp/DocumentViewPage.jsp?75026640/HRC20110111010222/Prosecutio%20Hist%20for%20Review%20Correspondenc/1/11-Jan-2011/sn/false#p=1 Trademark Snap Shot Prosecution History for Review Correspondence] (англ.). United States Patent and Trademark Office. Проверено 22 июня 2011. [www.webcitation.org/618BlESiL Архивировано из первоисточника 22 августа 2011].
  9. 1 2 3 [www.nombas.com/us/scripting/history.htm History of scripting] (англ.). Nombas. [web.archive.org/web/20040618115018/www.nombas.com/us/scripting/history.htm Архивировано из первоисточника 2 февраля 2006].
  10. Ford S., Wells D., Wells N. [www.objs.com/survey/lang.htm Web Programming Languages] (англ.) (1 September 1997). Проверено 17 ноября 2009. [www.webcitation.org/618BlfJ9i Архивировано из первоисточника 22 августа 2011].
  11. Zakas, Nicholas [www.java-samples.com/showtutorial.php?tutorialid=814 History and evolution of Javascript] (англ.). Проверено 17 ноября 2009. [www.webcitation.org/618Bm83NG Архивировано из первоисточника 22 августа 2011].
  12. Noorda, Brent [embedded.eecs.berkeley.edu/Respep/Research/dds/Hyper-RNweb/0052.html information blitz] (англ.) (27 November 1995). — Страница, содержащая письмо президента Nombas Брента Ноорда с анонсированием Espresso Pages. Проверено 17 ноября 2009. [www.webcitation.org/618BmiKmv Архивировано из первоисточника 22 августа 2011].
  13. [www.ozon.ru/context/detail/id/2847526/ JavaScript. Библия пользователя] = JavaScript. Bible / Денни Гудман (Danny Goodman), Майкл Моррисон (Michael Morrison); пер. с англ. И. В. Василенко. — 5-е изд. — Москва, Санкт-Петербург, Киев: Дилектика, 2006. — С. 3, 26. — 1184 с. — 3000 экз. — ISBN 5-8459-1027-7.
  14. 1 2 3 4 5 6 Hamilton, Naomi [www.computerworld.com.au/article/255293/-z_programming_languages_javascript The A-Z of Programming Languages: JavaScript] (англ.). a-z of programming languages. ComputerWorld (31 July 2008). Проверено 18 ноября 2009. [www.webcitation.org/618Dl788Z Архивировано из первоисточника 22 августа 2011].
  15. Eich, Brendan [weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html Popularity] (англ.)(недоступная ссылка — история) (3 April 2008). Проверено 18 ноября 2009. [web.archive.org/20080407235455/weblogs.mozillazine.org/roadmap/archives/2008/04/popularity.html Архивировано из первоисточника 7 апреля 2008].
  16. Frommer, Dan [www.businessinsider.com/2008/6/marc-andreessen-joins-facebook-board Marc Andreessen Joins Facebook Board] (англ.) (30 June 2008). Проверено 18 ноября 2009. [www.webcitation.org/618Dn2qn5 Архивировано из первоисточника 22 августа 2011].
  17. 1 2 3 4 Zakas N. A Short History // Professional JavaScript for Web Developers. — 2nd ed. — USA, Canada: Wiley Publishing, Inc., 2009. — P. 1, 2. — ISBN 978-0-470-22780-0.
  18. Brendan Eich. [brendaneich.com/2008/04/popularity/ Popularity] (англ.). личный блог (3 апр 2008). Проверено 18 мар 2015.
  19. Brendan Eich. [brendaneich.com/2011/06/new-javascript-engine-module-owner/ New JavaScript Engine Module Owner] (англ.). личный блог (21 июн 2011). Проверено 18 мар 2015.
  20. 1 2 [www.books.ru/books/javascript-karmannyi-spravochnik-490096/ JavaScript. Карманный справочник. Необходимый код и команды] = JavaScript. Phrasebook. Essential code and commands / Кристиан Уэнц (Cristian Wenz); пер. с англ. И. В. Берштейн. — Москва, Санкт-Петербург, Киев: ООО "И. Д. Вильямс", 2008. — С. 18. — 272 с. — 2000 экз. — ISBN 978-5-8459-1186-5.
  21. Paul Krill. [www.infoworld.com/article/2653798/application-development/javascript-creator-ponders-past--future.html JavaScript creator ponders past, future] Mozilla's Brendan Eich describes JavaScript's history, the upcoming upgrade, and disagreements with Microsoft (англ.). InfoWorld (23 June 2008). — «Eich: That’s right. It was all within six months from May till December (1995) that it was Mocha and then LiveScript. And then in early December, Netscape and Sun did a license agreement and it became JavaScript.»  Проверено 3 мая 2015.
  22. Bellis, Mary [inventors.about.com/od/jstartinventions/a/JavaScript.htm The History of JavaScript] (англ.). About.com Guide (30 June 2008). Проверено 18 ноября 2009. [www.webcitation.org/618Dnw7h1 Архивировано из первоисточника 22 августа 2011].
  23. [sunsite.nus.sg/hotjava/pr951204-03.html Netscape and Sun Announce Javascript(TM), the Open, Cross-Platform Object Scripting Language for Enterprise Networks and the Internet] (англ.)(недоступная ссылка — история). Netscape Communications, Sun Microsystems. — Анонс JavaScript. Проверено 17 ноября 2009. [web.archive.org/web/19961216191511/sunsite.nus.sg/hotjava/pr951204-03.html Архивировано из первоисточника 16 декабря 1996].
  24. [www.microsoft.com/presspass/press/1996/jul96/jscriptpr.mspx Microsoft Announces ActiveX Scripting] (англ.). Microsoft (18 July 1996). — Анонс JScript. Проверено 17 ноября 2009. [www.webcitation.org/618DoQIOq Архивировано из первоисточника 22 августа 2011].
  25. Silwa C. [books.google.ru/books?id=kxcEAAAAMBAJ&pg=PA10&lpg=PA10&dq=Netscape+submitted+the+JavaScript+specification&source=bl&ots=JEnGQvNAmu&sig=chtE3zvk_PmmkxWi14D6XEKyRIs&hl=ru&ei=QyEFS7f-EciB_Qbms6G4Dw&sa=X&oi=book_result&ct=result&resnum=4&ved=0CB4Q6AEwAw#v=onepage&q=&f=false Scripting standard coming] (англ.) // Network World : журнал. — IDG Network World Inc, 1996. — Vol. 13, no. 49. — P. 10.
  26. Сибах, Питер [www.ibm.com/developerworks/ru/library/wa-ecma/index.html Знакомимся с ECMAscript]. developerWorks Россия. IBM (13 июня 2007). Проверено 19 ноября 2009. [www.webcitation.org/618DophZS Архивировано из первоисточника 22 августа 2011].
  27. 1 2 3 Crockford, Douglas [javascript.crockford.com/popular.html The World's Most Misunderstood Programming Language Has Become the World's Most Popular Programming Language] (англ.) (3 March 2008). Проверено 25 октября 2009. [www.webcitation.org/618DtmEwx Архивировано из первоисточника 22 августа 2011].
  28. [www.tiobe.com/index.php/content/paperinfo/tpci/index.html TIOBE Programming Community Index for April 2015] (англ.). TIOBE Software BV (April 2015). Проверено 9 мая 2015.
  29. [www.blackducksoftware.com/oss/projects Open Source Project Data] (англ.). Black Duck Software. Проверено 25 октября 2009. [www.webcitation.org/618DqpWF2 Архивировано из первоисточника 22 августа 2011].
  30. [www.blackducksoftware.com/news/releases/2009-08-12 JavaScript and PHP Use Growing in Open Source, Says Black Duck Software] (англ.). Black Duck Software (12 August 2009). Проверено 25 октября 2009. [www.webcitation.org/618DrTZtp Архивировано из первоисточника 22 августа 2011].
  31. [trends.builtwith.com/docinfo/Javascript Javascript Usage Statistics] (англ.). builtwith.com (29 July 2010). Проверено 29 июля 2010. [www.webcitation.org/618Ds4Nob Архивировано из первоисточника 22 августа 2011].
  32. [w3techs.com/technologies/overview/client_side_language/all Usage of client-side programming languages for websites] (англ.). W³Techs (29 July 2010). Проверено 29 июля 2010. [www.webcitation.org/618DsezVa Архивировано из первоисточника 22 августа 2011].
  33. [howtonode.org/object-graphs Learning Javascript with Object Graphs. Objects and Prototype Chains]
  34. [howtonode.org/object-graphs-2 Learning Javascript with Object Graphs (Part II). Pure Prototypal Objects]
  35. [howtonode.org/object-graphs Learning Javascript with Object Graphs. Visualizing Closures]
  36. Kowal, Kris [arstechnica.com/web/news/2009/12/commonjs-effort-sets-javascript-on-path-for-world-domination.ars CommonJS effort sets JavaScript on path for world domination] (англ.) (1 December 2009). Проверено 1 декабря 2009. [www.webcitation.org/618DtG3Xf Архивировано из первоисточника 22 августа 2011].
  37. Mikkonen T., Taivalsaari A. [www.sunlabs.com/techrep/2007/smli_tr-2007-168.pdf Using JavaScript as a Real Programming Language] (англ.). — USA: Sun Microsystems Laboratories, 2007. [web.archive.org/web/20110615055800/www.sunlabs.com/techrep/2007/smli_tr-2007-168.pdf Архивировано] из первоисточника 15 июня 2011.
  38. 1 2 Zakas N. 1. What is JavaScript? // Professional JavaScript for Web Developers. — 2nd ed. — USA, Canada: Wiley Publishing, Inc., 2009. — P. 3. — ISBN 978-0-470-22780-0.
  39. 1 2 Zakas, Nicholas [www.nczonline.net/blog/2009/09/29/web-definitions-dom-ajax-and-more/ Web definitions: DOM, Ajax, and more] (англ.). блог Николаса Закаса (29 September 2009). — Статья, проясняющая разницу между понятиями, относящимися к веб-разработке, в которой, в частности, обосновывается, почему DOM и BOM наряду с ECMAScript рассматриваются как составные части JavaScript. Проверено 9 декабря 2009. [www.webcitation.org/618DuDeEE Архивировано из первоисточника 22 августа 2011].
  40. 1 2 3 4 Chapman, Stephen [javascript.about.com/library/blbom01.htm The Browser Object Model. Introduction] (англ.). Проверено 1 февраля 2010. [www.webcitation.org/618DuphcY Архивировано из первоисточника 22 августа 2011].
  41. Kvk, Raja [vkanakaraj.wordpress.com/2009/12/18/javascript-vs-dom-vs-bom-relationship-explained/ JavaScript Vs DOM Vs BOM, relationship explained] (англ.) (18 December 2009). Проверено 18 декабря 2009. [www.webcitation.org/618DvKHiD Архивировано из первоисточника 22 августа 2011].
  42. Souders S. 1. Understanding AJAX Performance // Even Faster Web Sites: Performance Best Practices for Web Developers. — 1st ed. — USA: O'Reilly Media, 2009. — P. 1 — 6. — ISBN 0596522304.
  43. Дэвид Флэнаган. 15.4.6. Независимые от языка DOM-интерфейсы // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 332 — 334. — ISBN 5-93286-103-7.
  44. Stockwell, Christian [blogs.msdn.com/ie/archive/2008/08/26/ie8-performance.aspx IE8 Performance] (англ.) (26 August 2008). Проверено 6 ноября 2009. [www.webcitation.org/618DwevYO Архивировано из первоисточника 22 августа 2011].
  45. Powell T., Schneider F. Chapter 9: JavaScript Object Models // JavaScript 2.0: The Complete Reference. — 2nd ed. — USA: McGraw-Hill/Osborne, 2004. — 976 p. — ISBN 0072253576.
  46. Chapman, Stephen [javascript.about.com/od/browserobjectmodel/a/bom.htm The Browser Object Model. The Basics] (англ.). Проверено 1 февраля 2010. [www.webcitation.org/618Dxjf0E Архивировано из первоисточника 22 августа 2011].
  47. Chapman, Stephen [javascript.about.com/od/browserobjectmodel/Browser_Object_Model.htm The Browser Object Model] (англ.). Проверено 9 декабря 2009. [www.webcitation.org/618DyC4gD Архивировано из первоисточника 22 августа 2011].
  48. 1 2 3 Koch P.-P. Chapter 6. BOM // ppk on JavaScript. — 1st ed. — New Riders Press, 2006. — 528 p. — ISBN 0321423305.
  49. 1 2 Zakas N. 8. The Browser Object Model // Professional JavaScript for Web Developers. — 2nd ed. — USA, Canada: Wiley Publishing, Inc., 2009. — P. 201 — 229. — ISBN 978-0-470-22780-0.
  50. Zakas N. 10. The Document Object Model // Professional JavaScript for Web Developers. — 2nd ed. — USA, Canada: Wiley Publishing, Inc., 2009. — P. 261 — 317. — ISBN 978-0-470-22780-0.
  51. [www.iana.org/assignments/media-types/application/ Application Media Types] (англ.). Администрация адресного пространства Интернет. — Соответствие типов содержимого MIME-типам. Проверено 28 сентября 2009. [www.webcitation.org/618DzzC6J Архивировано из первоисточника 22 августа 2011].
  52. Wilson B. [dev.opera.com/articles/view/mama-head-structure/#script MAMA: HEAD structure] (англ.). Opera Developer Community. Opera Software (14 ноября 2008). — Статистика используемых элементов в секции head веб-документов. Проверено 14 октября 2009. [www.webcitation.org/618E1KhFK Архивировано из первоисточника 22 августа 2011].
  53. [www.ohloh.net/p/indradesktop/analyses/latest IndraDesktop WebOS Code Analysis] (англ.). Ohloh. — Анализ исходного кода IndraDesktop WebOS. Проверено 8 апреля 2010.
  54. [www.ohloh.net/p/intosw/analyses/latest IntOS Web Operating System Code Analysis] (англ.). Ohloh. — Анализ исходного кода IntOS Web Operating System. Проверено 8 апреля 2010.
  55. [www.ohloh.net/p/eyeos/analyses/latest eyeos Code Analysis] (англ.). Ohloh. — Анализ исходного кода eyeos. Проверено 8 апреля 2010. [www.webcitation.org/618E2Y77h Архивировано из первоисточника 22 августа 2011].
  56. eyeOS Team. 5.2 The JavaScript side and the PHP side // [eyeos.org/download/eyeOS_Developer_Manual_0.1.0.pdf eyeos developer manual]. — P. 23.
  57. Дэвид Флэнаган. 13.4.1. Букмарклеты // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 267. — ISBN 5-93286-103-7.
  58. [www.opera.com/browser/tutorials/userjs/using/ User javascript] (англ.). Opera tutorial. Opera Software. Проверено 27 ноября 2009. [www.webcitation.org/618E36tSi Архивировано из первоисточника 22 августа 2011].
  59. [stuff.techwhack.com/7983-ujs-manager UJS Manager for Opera makes it easy to manage userscripts] (англ.) (25 November 2009). Проверено 27 ноября 2009. [www.webcitation.org/618E3kBrJ Архивировано из первоисточника 22 августа 2011].
  60. [www.opera.com/browser/tutorials/userjs/examples/#greasemonkey Examples of use. Greasemonkey scripts] (англ.). Opera tutorial. Opera Software. Проверено 27 ноября 2009. [www.webcitation.org/618E4ffSq Архивировано из первоисточника 22 августа 2011].
  61. [dev.chromium.org/developers/design-documents/user-scripts User Scripts] (англ.). The Chromium Projects. Проверено 4 июня 2010. [www.webcitation.org/618E5FQtx Архивировано из первоисточника 22 августа 2011].
  62. 1 2 [java.sun.com/javase/6/webnotes/ Java™ SE 6 Release Notes] (англ.). Sun Microsystems, Inc.. — Анализ исходного кода Mozilla Firefox. Проверено 19 ноября 2009. [www.webcitation.org/618EMGwir Архивировано из первоисточника 22 августа 2011].
  63. [www.jaxer.org/ Create entire apps using JavaScript and Ajax] (англ.). Aptana Inc (2009). Проверено 22 декабря 2009. [www.webcitation.org/618E5k4N8 Архивировано из первоисточника 22 августа 2011].
  64. [jaxer.org/guide/ Aptana: Jaxer Guide: Introduction] (англ.). Aptana Inc. Проверено 22 декабря 2009. [www.webcitation.org/618E6IxjQ Архивировано из первоисточника 22 августа 2011].
  65. [www.ohloh.net/p/12532/analyses/latest Jaxer Code Analysis] (англ.). Ohloh. — Анализ исходного кода Jaxer. Проверено 23 декабря 2009. [www.webcitation.org/618E6s4bo Архивировано из первоисточника 22 августа 2011].
  66. Johnson, Ryan [github.com/aptana/Jaxer/blob/master/server/LICENSE-JAXER.html Aptana License for Jaxer] (англ.). Source code Git repository. Aptana Inc (12 August 2009). Проверено 22 декабря 2009. [www.webcitation.org/618E7Mehc Архивировано из первоисточника 22 августа 2011].
  67. [persvr.org/ Persevere helps you rapidly develop data-driven JavaScript-based rich internet applications.] (англ.). Persevere (2008). Проверено 22 декабря 2009. [www.webcitation.org/618E7ocYz Архивировано из первоисточника 22 августа 2011].
  68. [www.ohloh.net/p/persevere-framework/analyses/latest persevere-framework Code Analysis] (англ.). Ohloh. — Анализ исходного кода persevere-framework. Проверено 22 декабря 2009.
  69. kriszyp. [code.google.com/p/persevere-framework/source/browse/trunk/LICENSE License] (англ.). Source code SVN repository. Persevere (31 October 2008). Проверено 22 декабря 2009. [www.webcitation.org/618E8GDnm Архивировано из первоисточника 22 августа 2011].
  70. [helma.org/ helma.org] (англ.). Helma.org. Проверено 22 декабря 2009. [www.webcitation.org/618E8kmKk Архивировано из первоисточника 22 августа 2011].
  71. [www.ohloh.net/p/helma/analyses/latest Helma Code Analysis] (англ.). Ohloh. — Анализ исходного кода Helma. Проверено 22 декабря 2009.
  72. [helma.org/license/ Helma License version 2.0] (англ.). Helma.org. Проверено 22 декабря 2009. [www.webcitation.org/618E9U9fG Архивировано из первоисточника 22 августа 2011].
  73. [www.ohloh.net/p/v8cgi/analyses/latest v8cgi Code Analysis] (англ.). Ohloh. — Анализ исходного кода v8cgi. Проверено 22 декабря 2009. [www.webcitation.org/618EA4sdb Архивировано из первоисточника 22 августа 2011].
  74. Zara, Ondrej [code.google.com/p/v8cgi/source/browse/trunk/LICENSE License] (англ.). Source code SVN repository (3 September 2009). Проверено 22 декабря 2009. [www.webcitation.org/618EAbkQJ Архивировано из первоисточника 22 августа 2011].
  75. [www.ohloh.net/p/node_js/analyses/latest node.js Code Analysis] (англ.). Ohloh. — Анализ исходного кода node.js. Проверено 13 января 2010. [www.webcitation.org/618EB4Qjz Архивировано из первоисточника 22 августа 2011].
  76. Dahl, Ryan [github.com/ry/node/blob/master/LICENSE License] (англ.). Source code GIT repository (26 May 2009). Проверено 13 января 2010. [www.webcitation.org/618EBbMwi Архивировано из первоисточника 22 августа 2011].
  77. Yegge, Steve [steve-yegge.blogspot.com/2007/06/rhino-on-rails.html Rhino on Rails] (англ.) (26 June 2007). Проверено 22 декабря 2009. [www.webcitation.org/618EC29UT Архивировано из первоисточника 22 августа 2011].
  78. Yegge, Steve [steve-yegge.blogspot.com/2008/06/rhinos-and-tigers.html Rhinos and Tigers] (англ.) (14 June 2008). Проверено 22 декабря 2009. [www.webcitation.org/618ECX3L8 Архивировано из первоисточника 22 августа 2011].
  79. Kairer, Ryan [www.palminfocenter.com/news/9666/palm-announces-the-palm-webos/ Palm Announces the Palm webOS] (англ.) (8 January 2009). Проверено 16 октября 2009. [www.webcitation.org/618EDnoAo Архивировано из первоисточника 22 августа 2011].
  80. Целиков, Дмитрий [soft.compulenta.ru/403136/ Анонсировано первое руководство для программирования в среде Palm webOS] (18 февраля 2009). Проверено 16 октября 2009.
  81. Allen M. Palm webOS. — 1st ed. — O'Reilly Media, 2009. — 464 p. — ISBN 978-0-596-15525-4.
  82. .[www.ohloh.net/p/firefox/analyses/latest Mozilla Firefox Code Analysis] (англ.). Ohloh. — Анализ исходного кода Mozilla Firefox. Проверено 16 октября 2011.
  83. Sunder Pichai, Linus Upson. [googlerussiablog.blogspot.com/2009/07/google-chrome.html Представляем операционную систему Google Chrome] (рус.). Блог Google Россия (8 июля 2009). Проверено 20 ноября 2009. [www.webcitation.org/618EKbVLE Архивировано из первоисточника 22 августа 2011].
  84. Winship, Dan [live.gnome.org/JavaScript JavaScript - GNOME live!] (англ.). GNOME. Проверено 28 декабря 2009. [www.webcitation.org/618ELpZmV Архивировано из первоисточника 22 августа 2011].
  85. 1 2 Stich, Christian [blogs.msdn.com/excel/archive/2009/11/30/introducing-the-javascript-object-model-for-excel-services-in-sharepoint-2010.aspx Introducing the JavaScript Object Model for Excel Services in SharePoint 2010] (англ.) (30 November 2009). Проверено 1 декабря 2009. [www.webcitation.org/618EMxmEy Архивировано из первоисточника 22 августа 2011].
  86. 1 2 Stich, Christian [blogs.msdn.com/excel/archive/2009/11/04/simple-access-to-spreadsheet-data-using-the-excel-services-2010-rest-api.aspx Simple Access to Spreadsheet Data Using the Excel Services 2010 REST API] (англ.) (4 November 2009). Проверено 1 декабря 2009. [www.webcitation.org/618ENq6u6 Архивировано из первоисточника 22 августа 2011].
  87. Dr Mark Alexander Bain. Accessing the OOo IDE // Learn OpenOffice.org Spreadsheet Macro Programming: OOoBasic and Calc automation / Reviewer: Andrew Pitonyak. — 1st. — Birmingham: Packt Publishing, 2006. — P. 8 — 11. — (From Technologies to Solutions). — ISBN 1847190979.
  88. 1 2 [framework.openoffice.org/scripting/release-0.2/javascript-devguide.html Writing Office Scripts in JavaScript] (англ.). OpenOffice.org. Проверено 22 декабря 2009. [www.webcitation.org/618EOcGrh Архивировано из первоисточника 22 августа 2011].
  89. [wiki.services.openoffice.org/w/index.php?title=Documentation/DevGuide/Scripting/Writing_Macros Writing Macros] (англ.). OpenOffice.org. Проверено 22 декабря 2009. [www.webcitation.org/618EPK6mI Архивировано из первоисточника 22 августа 2011].
  90. Reed D. Rethinking CS0 with JavaScript (англ.) // Technical Symposium on Computer Science Education. Proceedings of the thirty-second SIGCSE technical symposium on Computer Science Education. — Charlotte, North Carolina, United States: ACM, 2001. — P. 100 — 104. — ISBN 1-58113-329-4.
  91. Драч А. Н. [ito.1gb.ru/tezises/196.doc Повышение педагогического мастерства в области ИКТ-образования в процессе преподавания JavaScript на факультативных занятиях] // Информационные технологии в образовании — 2008 : Сборник научных трудов участников VII научно-практической конференции-выставки 30 — 31 октября 2008 г.. — Ростов-на-Дону: Ростиздат, 2008. — С. 63. — ISBN 978-5-7509-0971-1.
  92. Босова И.Н. [ito.1gb.ru/tezises/196.doc Разработка образовательных программ по информатике на вариативной основе и индивидуальных учебных планов] // Информационные технологии в образовании — 2009 : Сборник научных трудов участников IX научно-практической конференции-выставки 29 — 30 октября 2009 г.. — Ростов-на-Дону: Ростиздат, 2009. — С. 25 — 26. — ISBN 978-5-7509-0971-1.
  93. Wu P. Teaching basic game programming using JavaScript (англ.) // Journal of Computing Sciences in Colleges. Papers of the Second Anual CCSC Southwestern Conference. — Consortium for Computing Sciences in Colleges, USA: ACM, 2009. — Vol. 24, fasc. 4. — P. 211 — 220. — ISSN [www.sigla.ru/table.jsp?f=8&t=3&v0=1937-4771&f=1003&t=1&v1=&f=4&t=2&v2=&f=21&t=3&v3=&f=1016&t=3&v4=&f=1016&t=3&v5=&bf=4&b=&d=0&ys=&ye=&lng=&ft=&mt=&dt=&vol=&pt=&iss=&ps=&pe=&tr=&tro=&cc=UNION&i=1&v=tagged&s=0&ss=0&st=0&i18n=ru&rlf=&psz=20&bs=20&ce=hJfuypee8JzzufeGmImYYIpZKRJeeOeeWGJIZRrRRrdmtdeee88NJJJJpeeefTJ3peKJJ3UWWPtzzzzzzzzzzzzzzzzzbzzvzzpy5zzjzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzztzzzzzzzbzzzzzzzzzzzzzzzzzzzzzzzzzzzvzzzzzzyeyTjkDnyHzTuueKZePz9decyzzLzzzL*.c8.NzrGJJvufeeeeeJheeyzjeeeeJh*peeeeKJJJJJJJJJJmjHvOJJJJJJJJJfeeeieeeeSJJJJJSJJJ3TeIJJJJ3..E.UEAcyhxD.eeeeeuzzzLJJJJ5.e8JJJheeeeeeeeeeeeyeeK3JJJJJJJJ*s7defeeeeeeeeeeeeeeeeeeeeeeeeeSJJJJJJJJZIJJzzz1..6LJJJJJJtJJZ4....EK*&debug=false 1937-4771].
  94. Zakas, Nikolas [www.nczonline.net/blog/2009/04/13/computer-science-in-javascript-linked-list/ Computer science in JavaScript: Linked list] (англ.). [www.nczonline.net/blog/tag/computer-science/ Computer Science] (13 April 2009). Проверено 12 ноября 2009. [www.webcitation.org/618EQ9yZI Архивировано из первоисточника 22 августа 2011].
  95. [developer.mozilla.org/en/docs/New_in_JavaScript_1.6 New in JavaScript 1.6] (англ.). Mozilla Developer Center. — Новое в JavaScript версии 1.6. Проверено 5 октября 2009. [www.webcitation.org/618EQyCRe Архивировано из первоисточника 22 августа 2011].
  96. [developer.mozilla.org/en/docs/New_in_JavaScript_1.7 New in JavaScript 1.7] (англ.). Mozilla Developer Center. — Новое в JavaScript версии 1.7. Проверено 5 октября 2009. [www.webcitation.org/618ERh6uf Архивировано из первоисточника 22 августа 2011].
  97. [developer.mozilla.org/en/docs/New_in_JavaScript_1.8 New in JavaScript 1.8] (англ.). Mozilla Developer Center. — Новое в JavaScript версии 1.8. Проверено 15 февраля 2010. [www.webcitation.org/618ESNfn9 Архивировано из первоисточника 22 августа 2011].
  98. [developer.mozilla.org/en/docs/New_in_JavaScript_1.8.1 New in JavaScript 1.8.1] (англ.). Mozilla Developer Center. — Новое в JavaScript версии 1.8.1. Проверено 15 февраля 2010. [www.webcitation.org/618ET03Sf Архивировано из первоисточника 22 августа 2011].
  99. 1 2 [www.ecma-international.org/news/PressReleases/PR_Ecma_finalises_major_revision_of_ECMAScript.htm Final draft of ECMA-262 — the ECMAScript language standard — has been published] (англ.). ECMA. — Анонс окончательного варианта проекта пятой редакции ECMA-262. Проверено 25 сентября 2009. [www.webcitation.org/618ETYcXh Архивировано из первоисточника 22 августа 2011].
  100. Horwat, Waldemar [mail.mozilla.org/pipermail/es-discuss/2009-December/010215.html ES5 is an ECMA standard] (англ.). Список рассылки Mozilla (4 December 2009). — Сообщение об официальном принятии ECMAScript 5 в качестве стандарта ECMA. Проверено 9 декабря 2009.
  101. djwm. [www.h-online.com/open/news/item/New-version-of-JavaScript-approved-878961.html New version of JavaScript approved] (англ.) (7 December 2009). Проверено 9 декабря 2009. [www.webcitation.org/618EUDTsC Архивировано из первоисточника 22 августа 2011].
  102. [msdn2.microsoft.com/en-us/library/aa202668(office.11).aspx About the programming environment] (англ.). Microsoft Developer Network. Microsoft. Проверено 5 ноября 2009. [www.webcitation.org/618EVz5Qf Архивировано из первоисточника 22 августа 2011].
  103. [www.opera.com/dragonfly/ Opera DragonFly]. Opera Software. Проверено 19 декабря 2009. [www.webcitation.org/618EWbOQ4 Архивировано из первоисточника 22 августа 2011].
  104. Hatcher, Timothy [webkit.org/blog/61/introducing-drosera/ Introducing Drosera] (англ.) (28 June 2006). Проверено 5 ноября 2009. [www.webcitation.org/618EXEkVr Архивировано из первоисточника 22 августа 2011].
  105. Christian Johansen. Chapter 1. Automated Testing // Test Driven JavaScript Development. — Addison-Wesley Professional, 2010. — P. 3. — (Rough Cuts). — ISBN 0-321-68391-9, 978-0-321-68391-5.
  106. Christian Johansen. 3.1.4. Features of xUnit Test Frameworks. The Test Runner // Test Driven JavaScript Development. — Addison-Wesley Professional, 2010. — P. 24, 25. — (Rough Cuts). — ISBN 0-321-68391-9, 978-0-321-68391-5.
  107. Christian Johansen. 3.3.1. Crosscheck // Test Driven JavaScript Development. — Addison-Wesley Professional, 2010. — P. 28. — (Rough Cuts). — ISBN 0-321-68391-9, 978-0-321-68391-5.
  108. Christian Johansen. 3.3.2. env.js // Test Driven JavaScript Development. — Addison-Wesley Professional, 2010. — P. 28, 29. — (Rough Cuts). — ISBN 0-321-68391-9, 978-0-321-68391-5.
  109. Christian Johansen. 3.3.3. Blue Ridge // Test Driven JavaScript Development. — Addison-Wesley Professional, 2010. — P. 29. — (Rough Cuts). — ISBN 0-321-68391-9, 978-0-321-68391-5.
  110. Christian Johansen. 3.3.4. The Issue With Headless Test Runners // Test Driven JavaScript Development. — Addison-Wesley Professional, 2010. — P. 29. — (Rough Cuts). — ISBN 0-321-68391-9, 978-0-321-68391-5.
  111. C. Titus Brown, Gheorghe Gheorghiu, Jason Huggins. 3.1. A Brief History of Selenium // An Introduction to Testing Web Applications with twill and Selenium. — O'Reilly Media, Inc, 2007. — 60 p.
  112. Christian Johansen. 3.4. One Test Runner To Rule Them All // Test Driven JavaScript Development. — Addison-Wesley Professional, 2010. — P. 29. — (Rough Cuts). — ISBN 0-321-68391-9, 978-0-321-68391-5.
  113. Christian Johansen. 3.4.1. How JsTestDriver Works // Test Driven JavaScript Development. — Addison-Wesley Professional, 2010. — P. 29. — (Rough Cuts). — ISBN 0-321-68391-9, 978-0-321-68391-5.
  114. [seleniumhq.org/projects/remote-control/ Selenium Remote-Control] (англ.). seleniumhq.org. Проверено 16 марта 2010. [www.webcitation.org/618EXmkGR Архивировано из первоисточника 22 августа 2011].
  115. Ismayle de Sousa Santos; Pedro de Alcântara dos Santos Neto. [www.ufpi.br/ercemapi/arquivos/file/minicurso/mc2.pdf Automação de testes funcionais com o Selenium] (порт.) (pdf). Проверено 16 марта 2010.
  116. Резиг, Джон [wiki.github.com/jeresig/testswarm/ TestSwarm] (англ.)(недоступная ссылка — история) (25 August 2009). Проверено 16 марта 2010. [web.archive.org/20100214004213/wiki.github.com/jeresig/testswarm/ Архивировано из первоисточника 14 февраля 2010].
  117. Christian Johansen. 3.1.6. Dependencies // Test Driven JavaScript Development. — Addison-Wesley Professional, 2010. — P. 25. — (Rough Cuts). — ISBN 0-321-68391-9, 978-0-321-68391-5.
  118. Christian Johansen. 3.2.1. YUI Test // Test Driven JavaScript Development. — Addison-Wesley Professional, 2010. — P. 26. — (Rough Cuts). — ISBN 0-321-68391-9, 978-0-321-68391-5.
  119. Christian Johansen. 3.2.2. Other In-Browser Testing Frameworks // Test Driven JavaScript Development. — Addison-Wesley Professional, 2010. — P. 28. — (Rough Cuts). — ISBN 0-321-68391-9, 978-0-321-68391-5.
  120. Крокфорд, Дуглас [www.crockford.com/javascript/little.html Малыш-программист на JavaScript] (англ.). — Статья, раскрывающая связь между JavaScript и Scheme. Проверено 28 сентября 2009. [www.webcitation.org/618Eb1Dd9 Архивировано из первоисточника 22 августа 2011].
  121. Толксдорф Р. [www.is-research.de/info/jslanguages/ Языки программирования для JavaScript] (англ.). is-research. — Подборка реализаций языков программирования на JavaScript.. Проверено 12 октября 2009. [www.webcitation.org/618EbRgQQ Архивировано из первоисточника 22 августа 2011].
  122. [code.google.com/p/hotruby/ hotruby. Ruby on JavaScript and Flash] (англ.). Проверено 12 октября 2009. [www.webcitation.org/618EcSGe6 Архивировано из первоисточника 22 августа 2011].
  123. Cooper P. [www.rubyinside.com/hotruby-a-javascript-flash-virtual-machine-that-runs-ruby-821.html HotRuby: A JavaScript & Flash Virtual Machine That Runs Ruby] (англ.). Rubi Inside. Проверено 12 октября 2009. [www.webcitation.org/618Ecu9OX Архивировано из первоисточника 22 августа 2011].
  124. Шустер В. [www.infoq.com/news/2008/03/hotruby-ruby-yarv-in-javascript HotRuby — Ruby 1.9/YARV opcode interpreter in Javascript] (англ.). infoQ. — Описание HotRuby.. Проверено 12 октября 2009. [www.webcitation.org/618EdWgRt Архивировано из первоисточника 22 августа 2011].
  125. Formiga, Andrei [code.google.com/p/s-mr/ s-mr. Self-made Rhino] (англ.). Проверено 9 декабря 2009. [www.webcitation.org/618EeL9Oe Архивировано из первоисточника 22 августа 2011].
  126. Hlavaty, Tom [logand.com/sw/wps/index.html WPS: PostScript for the Web] (англ.). Проверено 12 октября 2009. [www.webcitation.org/618EemdrN Архивировано из первоисточника 22 августа 2011].
  127. [www.6502asm.com/ 6502asm.com — 6502 compatible assembler and emulator in javascript] (англ.). Проверено 12 октября 2009. [www.webcitation.org/618EfOEew Архивировано из первоисточника 22 августа 2011].
  128. [cappuccino.org/ Cappuccino Web Framework — Build Desktop Class Applications in Objective-J and JavaScript] (англ.). Проверено 12 октября 2009. [www.webcitation.org/618Efp1iL Архивировано из первоисточника 22 августа 2011].
  129. [www.haskell.org/haskellwiki/Yhc/Javascript/Brief_overview Yhc/Javascript/Brief overview] (англ.). Проверено 12 октября 2009. [www.webcitation.org/618EgLBAs Архивировано из первоисточника 22 августа 2011].
  130. [courses.cs.vt.edu/~cs1104/TowerOfBabel/Prolog/Instructions.html Monash Toy Prolog] (англ.). Проверено 12 октября 2009. [www.webcitation.org/618Egw78a Архивировано из первоисточника 22 августа 2011].
  131. [ioctl.org/logic/prolog-latest ioctl. Prolog in JavaScript] (англ.). Проверено 12 октября 2009. [www.webcitation.org/618EhM6jV Архивировано из первоисточника 22 августа 2011].
  132. [cat-language.com/interpreter.html Online Cat Interpreter] (англ.). Проверено 12 октября 2009. [www.webcitation.org/618EhpNv2 Архивировано из первоисточника 22 августа 2011].
  133. [www.biwascheme.org/status.html BiwaScheme. Implementation Status] (англ.). Проверено 28 ноября 2009. [www.webcitation.org/618EiHwBM Архивировано из первоисточника 22 августа 2011].
  134. Strom, Nikko [www.quitebasic.com/about/ About Quite BASIC] (англ.). Проверено 12 октября 2009. [www.webcitation.org/618EioXqE Архивировано из первоисточника 22 августа 2011].
  135. Orcutt, Bill [www.lilyapp.org/about/ About Lily] (англ.). Проверено 12 февраля 2010. [www.webcitation.org/618EjGdl8 Архивировано из первоисточника 22 августа 2011].
  136. Jacobson, Kyle [solidcoding.blogspot.com/2008/12/wforth-javascript-forth-interpreter.html wForth - A JavaScript Forth Interpreter] (англ.) (3 December 2008). Проверено 12 февраля 2010. [www.webcitation.org/618EjktaA Архивировано из первоисточника 22 августа 2011].
  137. [code.google.com/p/phype/ phype] (англ.). code.google.com. Проверено 12 февраля 2010. [www.webcitation.org/618EkWIkO Архивировано из первоисточника 22 августа 2011].
  138. [www.ohloh.net/p/phype/analyses/latest phype Licenses] (англ.). Проверено 12 февраля 2010. [www.webcitation.org/618El2OAW Архивировано из первоисточника 22 августа 2011].
  139. [www.brython.info/ brython] (англ.).
  140. [pear.php.net/package-info.php?pacid=93 Package Information: HTML_Javascript] (англ.). PEAR — PHP Extension and Application Repository. Проверено 12 октября 2009. [www.webcitation.org/618ElXwJV Архивировано из первоисточника 22 августа 2011].
  141. [tcllib.sourceforge.net/doc/javascript.html TCLLIB — Tcl Standard Library: javascript] (англ.). Проверено 12 октября 2009. [www.webcitation.org/618Em5w2r Архивировано из первоисточника 22 августа 2011].
  142. [search.cpan.org/dist/Data-JavaScript/JavaScript.pm Data::JavaScript] (англ.). Comprehensive Perl Archive Network. Проверено 12 октября 2009. [www.webcitation.org/618EmX2L8 Архивировано из первоисточника 22 августа 2011].
  143. Zakas N. ECMAScript Support in Web Browsers // Professional JavaScript for Web Developers. — 2nd ed. — USA, Canada: Wiley Publishing, Inc., 2009. — P. 5, 6. — ISBN 978-0-470-22780-0.
  144. [www.webdevout.net/browser-support-ecmascript?IE7=on&IE8=on&FX2=on&FX3=on&OP9=on&KN3_5=on&uas=CUSTOM Web Browser ECMAScript Support] (англ.). Проверено 28 октября 2009. [www.webcitation.org/618GkxEdi Архивировано из первоисточника 22 августа 2011].
  145. [www.webdevout.net/browser-support-dom?uas=IE7-FX2-FX3-OP9 Web Browser DOM Support] (англ.). Проверено 28 октября 2009. [www.webcitation.org/618GlXedE Архивировано из первоисточника 22 августа 2011].
  146. Krill, Paul. [www.infoworld.com/d/developer-world/eich-javascript-getting-faster-could-kill-flash-251 Eich: JavaScript getting faster, could displace Flash], InfoWorld (6 ноября 2009). Проверено 11 ноября 2009.
  147. Walden, Jeff [bugzilla.mozilla.org/show_bug.cgi?id=501227 Check SpiderMonkey correctness on Sputnik test framework] (англ.). Система отслеживания ошибок в продуктах Mozilla Bugzilla (29 June 2009). — Сообщение об ошибках в SpiderMonkey. Проверено 27 ноября 2009.
  148. Blandy, Jim [bugzilla.mozilla.org/show_bug.cgi?id=501521 Integrate Google Sputnik test suite] (англ.). Система отслеживания ошибок в продуктах Mozilla Bugzilla (30 June 2009). — Предложение интеграции Sputnik в инфраструктуру тестирования (англ.) Mozilla. Проверено 27 ноября 2009.
  149. 1 2 Hansen, Christian Plesner [blog.chromium.org/2009/06/launching-sputnik-into-orbit.html Launching Sputnik into Orbit] (англ.) (29 June 2009). — Анонс Sputnik, инструмента для тестирования соответствия спецификации ECMAScript реализаций языка. Проверено 27 ноября 2009. [www.webcitation.org/618Gm4cuM Архивировано из первоисточника 22 августа 2011].
  150. Zaytsev, Juriy [thinkweb2.com/projects/prototype/sputniktests-web-runner/ Sputniktests web runner] (англ.)(недоступная ссылка — история) (9 November 2009). — Исследование соответствия браузеров спецификации ECMAScript. Проверено 27 ноября 2009. [web.archive.org/20091113160850/thinkweb2.com/projects/prototype/sputniktests-web-runner/ Архивировано из первоисточника 13 ноября 2009].
  151. djwm. [www.h-online.com/open/news/item/Google-launches-runnable-test-suite-for-browser-ECMAScript-JavaScript-952868.html Google launches runnable test suite for browser ECMAScript/JavaScript] (англ.). h-online.com (11 March 2010). Проверено 12 марта 2010. [www.webcitation.org/618GmaBqV Архивировано из первоисточника 22 августа 2011].
  152. Taft, Darryl K. [www.eweek.com/c/a/Application-Development/How-Does-IE8-Behave-139350/ How Does IE 8 Behave?] (англ.). eWeek (11 March 2010). — Статья, излагающая результаты исследования инженерами Google, в отношении корректности поддержки браузерами JavaScript, основываясь на тестировании с помощью Sputnik. Проверено 12 марта 2010. [www.webcitation.org/618GocnOi Архивировано из первоисточника 22 августа 2011].
  153. allenwb. [es5conform.codeplex.com/ ECMAScript 5 Conformance Suite] (англ.) (1 July 2009). Проверено 9 декабря 2009. [www.webcitation.org/618GpmD0c Архивировано из первоисточника 22 августа 2011].
  154. Oiaga, Marius [news.softpedia.com/news/Microsoft-Releases-Tests-for-the-Evolution-of-JavaScript-115441.shtml Microsoft Releases Tests for the Evolution of JavaScript] (англ.) (30 June 2009). Проверено 9 декабря 2009. [www.webcitation.org/618GqNjsv Архивировано из первоисточника 22 августа 2011].
  155. allenwb. [es5conform.codeplex.com/releases/view/32905 ECMAScript 5 Conformance Suite. Version 0.2. Download page] (англ.) (13 September 2009). Проверено 12 марта 2010. [www.webcitation.org/618GrJs67 Архивировано из первоисточника 22 августа 2011].
  156. Clary, Bob [bclary.com/2004/10/03/javascript-test-suite JavaScript Test Suite] (англ.) (3 October 2004). Проверено 9 декабря 2009. [www.webcitation.org/618GruLDA Архивировано из первоисточника 22 августа 2011].
  157. Begle, Christine [www.mozilla.org/js/tests/library.html JavaScript Test Library] (англ.). Проверено 9 декабря 2009. [www.webcitation.org/618GsaBtM Архивировано из первоисточника 22 августа 2011].
  158. 1 2 Флэнаган Д. 13.8.1. Чего не может JavaScript // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 280, 281. — ISBN 5-93286-103-7.
  159. Флэнаган Д. 13.8.2. Политика общего происхождения // JavaScript. Подробное руководство = JavaScript. The Definite Guide / Перевод А. Киселева. — 5-е изд. — СПб.: «Символ-Плюс», 2008. — С. 281 — 283. — ISBN 5-93286-103-7.
  160. [www.mozillazine.org/talkback.html?article=4392 Mozilla Cross-Site Scripting Vulnerability Reported and Fixed] (англ.). MozillaZine (28 February 2004). Проверено 24 ноября 2009. [www.webcitation.org/618Gt5sMQ Архивировано из первоисточника 22 августа 2011].
  161. Kottelin, Thor [blog.anta.net/2008/06/17/right-click-“protection”-forget-about-it/ Right-click “protection”? Forget about it] (англ.) (17 June 2008). Проверено 24 ноября 2009. [www.webcitation.org/618GtbF4O Архивировано из первоисточника 22 августа 2011].
  162. Habryn, Mikolaj J. [www.mozilla.org/security/announce/2006/mfsa2006-38.html Buffer overflow in crypto.signText()] (англ.) (1 March 2006). Проверено 24 ноября 2009. [www.webcitation.org/618Gu6XMN Архивировано из первоисточника 22 августа 2011].
  163. Festa, Paul [news.cnet.com/2100-1001-214620.html Buffer-overflow bug in IE] (англ.) (19 August 1998). Проверено 24 ноября 2009. [www.webcitation.org/618Gudf0t Архивировано из первоисточника 22 августа 2011].
  164. [securitytracker.com/alerts/2006/Mar/1015713.html Apple Safari JavaScript Buffer Overflow Lets Remote Users Execute Arbitrary Code and HTTP Redirect Bug Lets Remote Users Access Files] (англ.) (2 March 2006). Проверено 24 ноября 2009.
  165. Farrell, Nick [news.cnet.com/2100-1001-214620.html Turn off Javascript in IE again] (англ.) (24 November 2009). Проверено 24 ноября 2009. [www.webcitation.org/618Gudf0t Архивировано из первоисточника 22 августа 2011].
  166. Web User. [www.webuser.co.uk/news/top-stories/432076/microsoft-issues-ie-flaw-advice Microsoft issues IE flaw advice] (англ.)(недоступная ссылка — история) (24 November 2009). Проверено 24 ноября 2009.
  167. hdm. [www.securityfocus.com/bid/19030/info Microsoft WebViewFolderIcon ActiveX Control Buffer Overflow Vulnerability] (англ.) (17 July 2006). Проверено 24 ноября 2009. [www.webcitation.org/618GvpOtg Архивировано из первоисточника 22 августа 2011].
  168. [www.fusionauthority.com/security/3234-macromedia-flash-activex-buffer-overflow.htm Macromedia Flash Activex Buffer Overflow] (англ.) (1 March 2002). Проверено 24 ноября 2009. [www.webcitation.org/618GwPiuw Архивировано из первоисточника 22 августа 2011].
  169. [www.net-security.org/secworld.php?id=8527 Zero-day vulnerabilities in Firefox extensions discovered] (англ.) (20 November 2009). Проверено 24 ноября 2009. [www.webcitation.org/618Gwvt1j Архивировано из первоисточника 22 августа 2011].
  170. Manion, Art [www.kb.cert.org/vuls/id/713878 Microsoft Internet Explorer does not properly validate source of redirected frame] (англ.) (3 June 2004). Проверено 24 ноября 2009.
  171. [www.mozilla.org/security/announce/2005/mfsa2005-41.html Privilege escalation via DOM property overrides] (англ.) (2005). Проверено 24 ноября 2009. [www.webcitation.org/618GxgMka Архивировано из первоисточника 22 августа 2011].
  172. Canavan, John [www.symantec.com/security_response/writeup.jsp?docid=2003-100111-0931-99 JS.Seeker.K] (англ.) (1 October 2003). Проверено 24 ноября 2009. [www.webcitation.org/618GyBelK Архивировано из первоисточника 22 августа 2011].

Спецификации

  1. [www.ecma-international.org/publications/standards/Ecma-262.htm Standard ECMA-262. 7th edition] (англ.). ecma-international.org (14 June 2016). Проверено 23 июня 2016.
  2. [www.w3.org/TR/html4/interact/scripts.html#h-18.2.1 18.2.1 Элемент SCRIPT] (англ.). Спецификация HTML 4.01. W3C (24 декабря 1999 г.). — Описание элемента Script. Проверено 25 сентября 2009. [www.webcitation.org/618BkFEN1 Архивировано из первоисточника 22 августа 2011].
  3. TC39. 4. Overview // [www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf ECMAScript Language Specification]. — 5th ed. — 2009. — P. 1, 2.
  4. [www.w3.org/TR/DOM-Level-3-Core/ Document Object Model (DOM) Level 3 Core Specification] (англ.). W3C (7 April 2004). Проверено 6 ноября 2009. [www.webcitation.org/618DwDYM7 Архивировано из первоисточника 22 августа 2011].
  5. [www.whatwg.org/specs/web-apps/current-work/multipage/ HTML5. Draft Standard — 8 December 2009] (англ.). W3C (8 December 2009). Проверено 9 декабря 2009. [www.webcitation.org/618DydmQD Архивировано из первоисточника 22 августа 2011].
  6. [www.w3.org/TR/2006/WD-Window-20060407/ Window Object 1.0 W3C Working Draft 07 April 2006] (англ.). W3C (7 April 2006). Проверено 9 декабря 2009. [www.webcitation.org/618Dz7xID Архивировано из первоисточника 22 августа 2011].
  7. [www.w3.org/TR/html401/interact/scripts.html#h-18.2.1 18.2.1 The SCRIPT element] (рус.). Спецификация HTML 5. W3C (18 декабря 2013 г.). Проверено 18 июня 2013. [www.webcitation.org/618DzYnzo Архивировано из первоисточника 18 июня 2013].
  8. 1 2 [www.w3.org/TR/html5/scripting-1.html#the-script-element 4.11.1 The script element] (англ.). Спецификация HTML5. W3C (28 октября 2014 г.). Проверено 11 июня 2015.
  9. [www.w3.org/TR/html401/interact/scripts.html#h-18.2.3 18.2.3 Intrinsic events] (англ.). Спецификация HTML 4.01. W3C (24 декабря 1999 г.). Проверено 15 ноября 2009. [www.webcitation.org/618DzYnzo Архивировано из первоисточника 22 августа 2011].
  10. [www.w3.org/TR/html4/index/attributes.html Перечень атрибутов] (англ.). Спецификация HTML 4.01. W3C (24 декабря 1999 г.). — Сводная таблица атрибутов HTML. Проверено 25 сентября 2009. [www.webcitation.org/618E278cU Архивировано из первоисточника 22 августа 2011].
  11. TC39. Introduction // [www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf ECMAScript Language Specification]. — 5th ed. — 2009.

Комментарии

  1. C#, PHP, Perl, Python, Java.
  2. Имеется в виде отдельной библиотеки JSAN (англ.).
  3. Однако это не мешает рассматривать DOM как составную часть языка, приложения или библиотеки. Так например, при описании целей ES-Harmony Брендан Айх [wiki.ecmascript.org/doku.php?id=harmony:harmony&rev=1241476466&do=diff оговаривает] как одну из целей создания языка, что он должен хорошо подходить для создания библиотек, которые, в том числе, могут включать и DOM.
  4. [github.com/nzakas/computer-science-in-javascript Проект 'Computer science in JavaScript'] включает набор классических парадигм, алгоритмов и подходов, написанных на JavaScript и доступных под лицензией MIT.

Ссылки

Документация

  • [www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf Пятая редакция спецификации ECMA-262]  (англ.)
  • [www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf Третья редакция спецификации ECMA-262]  (англ.)
  • [developer.mozilla.org/ru/JavaScript Mozilla. Документация по JavaScript]  (рус.)

Справочники

  • [www.webdevout.net/browser-support-ecmascript/ Поддержка ECMAScript браузерами]  (англ.)
  • [www.webdevout.net/browser-support-dom/ Поддержка DOM браузерами]  (англ.)

Тематические ресурсы

  • [javascript.crockford.com/ Крокфорд Д. JavaScript Дугласа Крокфорда]  (англ.)

Блоги известных авторов книг по JavaScript

  • [www.nczonline.net/ Блог Николаса Закаса]  (англ.)
  • [ejohn.org/blog/ Блог Джона Резига]  (англ.)
  • [www.phpied.com/ Блог Стояна Стефанова]  (англ.)
  • [www.davidflanagan.com/ Блог Дэвида Флэнагана]  (англ.)

См. также

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

С вечера, возвращаясь домой, он в памятной книжке записывал 4 или 5 необходимых визитов или rendez vous [свиданий] в назначенные часы. Механизм жизни, распоряжение дня такое, чтобы везде поспеть во время, отнимали большую долю самой энергии жизни. Он ничего не делал, ни о чем даже не думал и не успевал думать, а только говорил и с успехом говорил то, что он успел прежде обдумать в деревне.
Он иногда замечал с неудовольствием, что ему случалось в один и тот же день, в разных обществах, повторять одно и то же. Но он был так занят целые дни, что не успевал подумать о том, что он ничего не думал.
Сперанский, как в первое свидание с ним у Кочубея, так и потом в середу дома, где Сперанский с глазу на глаз, приняв Болконского, долго и доверчиво говорил с ним, сделал сильное впечатление на князя Андрея.
Князь Андрей такое огромное количество людей считал презренными и ничтожными существами, так ему хотелось найти в другом живой идеал того совершенства, к которому он стремился, что он легко поверил, что в Сперанском он нашел этот идеал вполне разумного и добродетельного человека. Ежели бы Сперанский был из того же общества, из которого был князь Андрей, того же воспитания и нравственных привычек, то Болконский скоро бы нашел его слабые, человеческие, не геройские стороны, но теперь этот странный для него логический склад ума тем более внушал ему уважения, что он не вполне понимал его. Кроме того, Сперанский, потому ли что он оценил способности князя Андрея, или потому что нашел нужным приобресть его себе, Сперанский кокетничал перед князем Андреем своим беспристрастным, спокойным разумом и льстил князю Андрею той тонкой лестью, соединенной с самонадеянностью, которая состоит в молчаливом признавании своего собеседника с собою вместе единственным человеком, способным понимать всю глупость всех остальных, и разумность и глубину своих мыслей.
Во время длинного их разговора в середу вечером, Сперанский не раз говорил: «У нас смотрят на всё, что выходит из общего уровня закоренелой привычки…» или с улыбкой: «Но мы хотим, чтоб и волки были сыты и овцы целы…» или: «Они этого не могут понять…» и всё с таким выраженьем, которое говорило: «Мы: вы да я, мы понимаем, что они и кто мы ».
Этот первый, длинный разговор с Сперанским только усилил в князе Андрее то чувство, с которым он в первый раз увидал Сперанского. Он видел в нем разумного, строго мыслящего, огромного ума человека, энергией и упорством достигшего власти и употребляющего ее только для блага России. Сперанский в глазах князя Андрея был именно тот человек, разумно объясняющий все явления жизни, признающий действительным только то, что разумно, и ко всему умеющий прилагать мерило разумности, которым он сам так хотел быть. Всё представлялось так просто, ясно в изложении Сперанского, что князь Андрей невольно соглашался с ним во всем. Ежели он возражал и спорил, то только потому, что хотел нарочно быть самостоятельным и не совсем подчиняться мнениям Сперанского. Всё было так, всё было хорошо, но одно смущало князя Андрея: это был холодный, зеркальный, не пропускающий к себе в душу взгляд Сперанского, и его белая, нежная рука, на которую невольно смотрел князь Андрей, как смотрят обыкновенно на руки людей, имеющих власть. Зеркальный взгляд и нежная рука эта почему то раздражали князя Андрея. Неприятно поражало князя Андрея еще слишком большое презрение к людям, которое он замечал в Сперанском, и разнообразность приемов в доказательствах, которые он приводил в подтверждение своих мнений. Он употреблял все возможные орудия мысли, исключая сравнения, и слишком смело, как казалось князю Андрею, переходил от одного к другому. То он становился на почву практического деятеля и осуждал мечтателей, то на почву сатирика и иронически подсмеивался над противниками, то становился строго логичным, то вдруг поднимался в область метафизики. (Это последнее орудие доказательств он особенно часто употреблял.) Он переносил вопрос на метафизические высоты, переходил в определения пространства, времени, мысли и, вынося оттуда опровержения, опять спускался на почву спора.
Вообще главная черта ума Сперанского, поразившая князя Андрея, была несомненная, непоколебимая вера в силу и законность ума. Видно было, что никогда Сперанскому не могла притти в голову та обыкновенная для князя Андрея мысль, что нельзя всё таки выразить всего того, что думаешь, и никогда не приходило сомнение в том, что не вздор ли всё то, что я думаю и всё то, во что я верю? И этот то особенный склад ума Сперанского более всего привлекал к себе князя Андрея.
Первое время своего знакомства с Сперанским князь Андрей питал к нему страстное чувство восхищения, похожее на то, которое он когда то испытывал к Бонапарте. То обстоятельство, что Сперанский был сын священника, которого можно было глупым людям, как это и делали многие, пошло презирать в качестве кутейника и поповича, заставляло князя Андрея особенно бережно обходиться с своим чувством к Сперанскому, и бессознательно усиливать его в самом себе.
В тот первый вечер, который Болконский провел у него, разговорившись о комиссии составления законов, Сперанский с иронией рассказывал князю Андрею о том, что комиссия законов существует 150 лет, стоит миллионы и ничего не сделала, что Розенкампф наклеил ярлычки на все статьи сравнительного законодательства. – И вот и всё, за что государство заплатило миллионы! – сказал он.
– Мы хотим дать новую судебную власть Сенату, а у нас нет законов. Поэтому то таким людям, как вы, князь, грех не служить теперь.
Князь Андрей сказал, что для этого нужно юридическое образование, которого он не имеет.
– Да его никто не имеет, так что же вы хотите? Это circulus viciosus, [заколдованный круг,] из которого надо выйти усилием.

Через неделю князь Андрей был членом комиссии составления воинского устава, и, чего он никак не ожидал, начальником отделения комиссии составления вагонов. По просьбе Сперанского он взял первую часть составляемого гражданского уложения и, с помощью Code Napoleon и Justiniani, [Кодекса Наполеона и Юстиниана,] работал над составлением отдела: Права лиц.


Года два тому назад, в 1808 году, вернувшись в Петербург из своей поездки по имениям, Пьер невольно стал во главе петербургского масонства. Он устроивал столовые и надгробные ложи, вербовал новых членов, заботился о соединении различных лож и о приобретении подлинных актов. Он давал свои деньги на устройство храмин и пополнял, на сколько мог, сборы милостыни, на которые большинство членов были скупы и неаккуратны. Он почти один на свои средства поддерживал дом бедных, устроенный орденом в Петербурге. Жизнь его между тем шла по прежнему, с теми же увлечениями и распущенностью. Он любил хорошо пообедать и выпить, и, хотя и считал это безнравственным и унизительным, не мог воздержаться от увеселений холостых обществ, в которых он участвовал.
В чаду своих занятий и увлечений Пьер однако, по прошествии года, начал чувствовать, как та почва масонства, на которой он стоял, тем более уходила из под его ног, чем тверже он старался стать на ней. Вместе с тем он чувствовал, что чем глубже уходила под его ногами почва, на которой он стоял, тем невольнее он был связан с ней. Когда он приступил к масонству, он испытывал чувство человека, доверчиво становящего ногу на ровную поверхность болота. Поставив ногу, он провалился. Чтобы вполне увериться в твердости почвы, на которой он стоял, он поставил другую ногу и провалился еще больше, завяз и уже невольно ходил по колено в болоте.
Иосифа Алексеевича не было в Петербурге. (Он в последнее время отстранился от дел петербургских лож и безвыездно жил в Москве.) Все братья, члены лож, были Пьеру знакомые в жизни люди и ему трудно было видеть в них только братьев по каменьщичеству, а не князя Б., не Ивана Васильевича Д., которых он знал в жизни большею частию как слабых и ничтожных людей. Из под масонских фартуков и знаков он видел на них мундиры и кресты, которых они добивались в жизни. Часто, собирая милостыню и сочтя 20–30 рублей, записанных на приход, и большею частию в долг с десяти членов, из которых половина были так же богаты, как и он, Пьер вспоминал масонскую клятву о том, что каждый брат обещает отдать всё свое имущество для ближнего; и в душе его поднимались сомнения, на которых он старался не останавливаться.
Всех братьев, которых он знал, он подразделял на четыре разряда. К первому разряду он причислял братьев, не принимающих деятельного участия ни в делах лож, ни в делах человеческих, но занятых исключительно таинствами науки ордена, занятых вопросами о тройственном наименовании Бога, или о трех началах вещей, сере, меркурии и соли, или о значении квадрата и всех фигур храма Соломонова. Пьер уважал этот разряд братьев масонов, к которому принадлежали преимущественно старые братья, и сам Иосиф Алексеевич, по мнению Пьера, но не разделял их интересов. Сердце его не лежало к мистической стороне масонства.
Ко второму разряду Пьер причислял себя и себе подобных братьев, ищущих, колеблющихся, не нашедших еще в масонстве прямого и понятного пути, но надеющихся найти его.
К третьему разряду он причислял братьев (их было самое большое число), не видящих в масонстве ничего, кроме внешней формы и обрядности и дорожащих строгим исполнением этой внешней формы, не заботясь о ее содержании и значении. Таковы были Виларский и даже великий мастер главной ложи.
К четвертому разряду, наконец, причислялось тоже большое количество братьев, в особенности в последнее время вступивших в братство. Это были люди, по наблюдениям Пьера, ни во что не верующие, ничего не желающие, и поступавшие в масонство только для сближения с молодыми богатыми и сильными по связям и знатности братьями, которых весьма много было в ложе.
Пьер начинал чувствовать себя неудовлетворенным своей деятельностью. Масонство, по крайней мере то масонство, которое он знал здесь, казалось ему иногда, основано было на одной внешности. Он и не думал сомневаться в самом масонстве, но подозревал, что русское масонство пошло по ложному пути и отклонилось от своего источника. И потому в конце года Пьер поехал за границу для посвящения себя в высшие тайны ордена.

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


На Пьера опять нашла та тоска, которой он так боялся. Он три дня после произнесения своей речи в ложе лежал дома на диване, никого не принимая и никуда не выезжая.
В это время он получил письмо от жены, которая умоляла его о свидании, писала о своей грусти по нем и о желании посвятить ему всю свою жизнь.
В конце письма она извещала его, что на днях приедет в Петербург из за границы.
Вслед за письмом в уединение Пьера ворвался один из менее других уважаемых им братьев масонов и, наведя разговор на супружеские отношения Пьера, в виде братского совета, высказал ему мысль о том, что строгость его к жене несправедлива, и что Пьер отступает от первых правил масона, не прощая кающуюся.
В это же самое время теща его, жена князя Василья, присылала за ним, умоляя его хоть на несколько минут посетить ее для переговоров о весьма важном деле. Пьер видел, что был заговор против него, что его хотели соединить с женою, и это было даже не неприятно ему в том состоянии, в котором он находился. Ему было всё равно: Пьер ничто в жизни не считал делом большой важности, и под влиянием тоски, которая теперь овладела им, он не дорожил ни своею свободою, ни своим упорством в наказании жены.
«Никто не прав, никто не виноват, стало быть и она не виновата», думал он. – Ежели Пьер не изъявил тотчас же согласия на соединение с женою, то только потому, что в состоянии тоски, в котором он находился, он не был в силах ничего предпринять. Ежели бы жена приехала к нему, он бы теперь не прогнал ее. Разве не всё равно было в сравнении с тем, что занимало Пьера, жить или не жить с женою?
Не отвечая ничего ни жене, ни теще, Пьер раз поздним вечером собрался в дорогу и уехал в Москву, чтобы повидаться с Иосифом Алексеевичем. Вот что писал Пьер в дневнике своем.
«Москва, 17 го ноября.
Сейчас только приехал от благодетеля, и спешу записать всё, что я испытал при этом. Иосиф Алексеевич живет бедно и страдает третий год мучительною болезнью пузыря. Никто никогда не слыхал от него стона, или слова ропота. С утра и до поздней ночи, за исключением часов, в которые он кушает самую простую пищу, он работает над наукой. Он принял меня милостиво и посадил на кровати, на которой он лежал; я сделал ему знак рыцарей Востока и Иерусалима, он ответил мне тем же, и с кроткой улыбкой спросил меня о том, что я узнал и приобрел в прусских и шотландских ложах. Я рассказал ему всё, как умел, передав те основания, которые я предлагал в нашей петербургской ложе и сообщил о дурном приеме, сделанном мне, и о разрыве, происшедшем между мною и братьями. Иосиф Алексеевич, изрядно помолчав и подумав, на всё это изложил мне свой взгляд, который мгновенно осветил мне всё прошедшее и весь будущий путь, предлежащий мне. Он удивил меня, спросив о том, помню ли я, в чем состоит троякая цель ордена: 1) в хранении и познании таинства; 2) в очищении и исправлении себя для воспринятия оного и 3) в исправлении рода человеческого чрез стремление к таковому очищению. Какая есть главнейшая и первая цель из этих трех? Конечно собственное исправление и очищение. Только к этой цели мы можем всегда стремиться независимо от всех обстоятельств. Но вместе с тем эта то цель и требует от нас наиболее трудов, и потому, заблуждаясь гордостью, мы, упуская эту цель, беремся либо за таинство, которое недостойны воспринять по нечистоте своей, либо беремся за исправление рода человеческого, когда сами из себя являем пример мерзости и разврата. Иллюминатство не есть чистое учение именно потому, что оно увлеклось общественной деятельностью и преисполнено гордости. На этом основании Иосиф Алексеевич осудил мою речь и всю мою деятельность. Я согласился с ним в глубине души своей. По случаю разговора нашего о моих семейных делах, он сказал мне: – Главная обязанность истинного масона, как я сказал вам, состоит в совершенствовании самого себя. Но часто мы думаем, что, удалив от себя все трудности нашей жизни, мы скорее достигнем этой цели; напротив, государь мой, сказал он мне, только в среде светских волнений можем мы достигнуть трех главных целей: 1) самопознания, ибо человек может познавать себя только через сравнение, 2) совершенствования, только борьбой достигается оно, и 3) достигнуть главной добродетели – любви к смерти. Только превратности жизни могут показать нам тщету ее и могут содействовать – нашей врожденной любви к смерти или возрождению к новой жизни. Слова эти тем более замечательны, что Иосиф Алексеевич, несмотря на свои тяжкие физические страдания, никогда не тяготится жизнию, а любит смерть, к которой он, несмотря на всю чистоту и высоту своего внутреннего человека, не чувствует еще себя достаточно готовым. Потом благодетель объяснил мне вполне значение великого квадрата мироздания и указал на то, что тройственное и седьмое число суть основание всего. Он советовал мне не отстраняться от общения с петербургскими братьями и, занимая в ложе только должности 2 го градуса, стараться, отвлекая братьев от увлечений гордости, обращать их на истинный путь самопознания и совершенствования. Кроме того для себя лично советовал мне первее всего следить за самим собою, и с этою целью дал мне тетрадь, ту самую, в которой я пишу и буду вписывать впредь все свои поступки».
«Петербург, 23 го ноября.
«Я опять живу с женой. Теща моя в слезах приехала ко мне и сказала, что Элен здесь и что она умоляет меня выслушать ее, что она невинна, что она несчастна моим оставлением, и многое другое. Я знал, что ежели я только допущу себя увидать ее, то не в силах буду более отказать ей в ее желании. В сомнении своем я не знал, к чьей помощи и совету прибегнуть. Ежели бы благодетель был здесь, он бы сказал мне. Я удалился к себе, перечел письма Иосифа Алексеевича, вспомнил свои беседы с ним, и из всего вывел то, что я не должен отказывать просящему и должен подать руку помощи всякому, тем более человеку столь связанному со мною, и должен нести крест свой. Но ежели я для добродетели простил ее, то пускай и будет мое соединение с нею иметь одну духовную цель. Так я решил и так написал Иосифу Алексеевичу. Я сказал жене, что прошу ее забыть всё старое, прошу простить мне то, в чем я мог быть виноват перед нею, а что мне прощать ей нечего. Мне радостно было сказать ей это. Пусть она не знает, как тяжело мне было вновь увидать ее. Устроился в большом доме в верхних покоях и испытываю счастливое чувство обновления».


Как и всегда, и тогда высшее общество, соединяясь вместе при дворе и на больших балах, подразделялось на несколько кружков, имеющих каждый свой оттенок. В числе их самый обширный был кружок французский, Наполеоновского союза – графа Румянцева и Caulaincourt'a. В этом кружке одно из самых видных мест заняла Элен, как только она с мужем поселилась в Петербурге. У нее бывали господа французского посольства и большое количество людей, известных своим умом и любезностью, принадлежавших к этому направлению.
Элен была в Эрфурте во время знаменитого свидания императоров, и оттуда привезла эти связи со всеми Наполеоновскими достопримечательностями Европы. В Эрфурте она имела блестящий успех. Сам Наполеон, заметив ее в театре, сказал про нее: «C'est un superbe animal». [Это прекрасное животное.] Успех ее в качестве красивой и элегантной женщины не удивлял Пьера, потому что с годами она сделалась еще красивее, чем прежде. Но удивляло его то, что за эти два года жена его успела приобрести себе репутацию
«d'une femme charmante, aussi spirituelle, que belle». [прелестной женщины, столь же умной, сколько красивой.] Известный рrince de Ligne [князь де Линь] писал ей письма на восьми страницах. Билибин приберегал свои mots [словечки], чтобы в первый раз сказать их при графине Безуховой. Быть принятым в салоне графини Безуховой считалось дипломом ума; молодые люди прочитывали книги перед вечером Элен, чтобы было о чем говорить в ее салоне, и секретари посольства, и даже посланники, поверяли ей дипломатические тайны, так что Элен была сила в некотором роде. Пьер, который знал, что она была очень глупа, с странным чувством недоуменья и страха иногда присутствовал на ее вечерах и обедах, где говорилось о политике, поэзии и философии. На этих вечерах он испытывал чувство подобное тому, которое должен испытывать фокусник, ожидая всякий раз, что вот вот обман его откроется. Но оттого ли, что для ведения такого салона именно нужна была глупость, или потому что сами обманываемые находили удовольствие в этом обмане, обман не открывался, и репутация d'une femme charmante et spirituelle так непоколебимо утвердилась за Еленой Васильевной Безуховой, что она могла говорить самые большие пошлости и глупости, и всё таки все восхищались каждым ее словом и отыскивали в нем глубокий смысл, которого она сама и не подозревала.
Пьер был именно тем самым мужем, который нужен был для этой блестящей, светской женщины. Он был тот рассеянный чудак, муж grand seigneur [большой барин], никому не мешающий и не только не портящий общего впечатления высокого тона гостиной, но, своей противоположностью изяществу и такту жены, служащий выгодным для нее фоном. Пьер, за эти два года, вследствие своего постоянного сосредоточенного занятия невещественными интересами и искреннего презрения ко всему остальному, усвоил себе в неинтересовавшем его обществе жены тот тон равнодушия, небрежности и благосклонности ко всем, который не приобретается искусственно и который потому то и внушает невольное уважение. Он входил в гостиную своей жены как в театр, со всеми был знаком, всем был одинаково рад и ко всем был одинаково равнодушен. Иногда он вступал в разговор, интересовавший его, и тогда, без соображений о том, были ли тут или нет les messieurs de l'ambassade [служащие при посольстве], шамкая говорил свои мнения, которые иногда были совершенно не в тоне настоящей минуты. Но мнение о чудаке муже de la femme la plus distinguee de Petersbourg [самой замечательной женщины в Петербурге] уже так установилось, что никто не принимал au serux [всерьез] его выходок.
В числе многих молодых людей, ежедневно бывавших в доме Элен, Борис Друбецкой, уже весьма успевший в службе, был после возвращения Элен из Эрфурта, самым близким человеком в доме Безуховых. Элен называла его mon page [мой паж] и обращалась с ним как с ребенком. Улыбка ее в отношении его была та же, как и ко всем, но иногда Пьеру неприятно было видеть эту улыбку. Борис обращался с Пьером с особенной, достойной и грустной почтительностию. Этот оттенок почтительности тоже беспокоил Пьера. Пьер так больно страдал три года тому назад от оскорбления, нанесенного ему женой, что теперь он спасал себя от возможности подобного оскорбления во первых тем, что он не был мужем своей жены, во вторых тем, что он не позволял себе подозревать.
– Нет, теперь сделавшись bas bleu [синим чулком], она навсегда отказалась от прежних увлечений, – говорил он сам себе. – Не было примера, чтобы bas bleu имели сердечные увлечения, – повторял он сам себе неизвестно откуда извлеченное правило, которому несомненно верил. Но, странное дело, присутствие Бориса в гостиной жены (а он был почти постоянно), физически действовало на Пьера: оно связывало все его члены, уничтожало бессознательность и свободу его движений.
– Такая странная антипатия, – думал Пьер, – а прежде он мне даже очень нравился.
В глазах света Пьер был большой барин, несколько слепой и смешной муж знаменитой жены, умный чудак, ничего не делающий, но и никому не вредящий, славный и добрый малый. В душе же Пьера происходила за всё это время сложная и трудная работа внутреннего развития, открывшая ему многое и приведшая его ко многим духовным сомнениям и радостям.


Он продолжал свой дневник, и вот что он писал в нем за это время:
«24 ro ноября.
«Встал в восемь часов, читал Св. Писание, потом пошел к должности (Пьер по совету благодетеля поступил на службу в один из комитетов), возвратился к обеду, обедал один (у графини много гостей, мне неприятных), ел и пил умеренно и после обеда списывал пиесы для братьев. Ввечеру сошел к графине и рассказал смешную историю о Б., и только тогда вспомнил, что этого не должно было делать, когда все уже громко смеялись.
«Ложусь спать с счастливым и спокойным духом. Господи Великий, помоги мне ходить по стезям Твоим, 1) побеждать часть гневну – тихостью, медлением, 2) похоть – воздержанием и отвращением, 3) удаляться от суеты, но не отлучать себя от а) государственных дел службы, b) от забот семейных, с) от дружеских сношений и d) экономических занятий».
«27 го ноября.
«Встал поздно и проснувшись долго лежал на постели, предаваясь лени. Боже мой! помоги мне и укрепи меня, дабы я мог ходить по путям Твоим. Читал Св. Писание, но без надлежащего чувства. Пришел брат Урусов, беседовали о суетах мира. Рассказывал о новых предначертаниях государя. Я начал было осуждать, но вспомнил о своих правилах и слова благодетеля нашего о том, что истинный масон должен быть усердным деятелем в государстве, когда требуется его участие, и спокойным созерцателем того, к чему он не призван. Язык мой – враг мой. Посетили меня братья Г. В. и О., была приуготовительная беседа для принятия нового брата. Они возлагают на меня обязанность ритора. Чувствую себя слабым и недостойным. Потом зашла речь об объяснении семи столбов и ступеней храма. 7 наук, 7 добродетелей, 7 пороков, 7 даров Святого Духа. Брат О. был очень красноречив. Вечером совершилось принятие. Новое устройство помещения много содействовало великолепию зрелища. Принят был Борис Друбецкой. Я предлагал его, я и был ритором. Странное чувство волновало меня во всё время моего пребывания с ним в темной храмине. Я застал в себе к нему чувство ненависти, которое я тщетно стремлюсь преодолеть. И потому то я желал бы истинно спасти его от злого и ввести его на путь истины, но дурные мысли о нем не оставляли меня. Мне думалось, что его цель вступления в братство состояла только в желании сблизиться с людьми, быть в фаворе у находящихся в нашей ложе. Кроме тех оснований, что он несколько раз спрашивал, не находится ли в нашей ложе N. и S. (на что я не мог ему отвечать), кроме того, что он по моим наблюдениям не способен чувствовать уважения к нашему святому Ордену и слишком занят и доволен внешним человеком, чтобы желать улучшения духовного, я не имел оснований сомневаться в нем; но он мне казался неискренним, и всё время, когда я стоял с ним с глазу на глаз в темной храмине, мне казалось, что он презрительно улыбается на мои слова, и хотелось действительно уколоть его обнаженную грудь шпагой, которую я держал, приставленною к ней. Я не мог быть красноречив и не мог искренно сообщить своего сомнения братьям и великому мастеру. Великий Архитектон природы, помоги мне находить истинные пути, выводящие из лабиринта лжи».
После этого в дневнике было пропущено три листа, и потом было написано следующее:
«Имел поучительный и длинный разговор наедине с братом В., который советовал мне держаться брата А. Многое, хотя и недостойному, мне было открыто. Адонаи есть имя сотворившего мир. Элоим есть имя правящего всем. Третье имя, имя поизрекаемое, имеющее значение Всего . Беседы с братом В. подкрепляют, освежают и утверждают меня на пути добродетели. При нем нет места сомнению. Мне ясно различие бедного учения наук общественных с нашим святым, всё обнимающим учением. Науки человеческие всё подразделяют – чтобы понять, всё убивают – чтобы рассмотреть. В святой науке Ордена всё едино, всё познается в своей совокупности и жизни. Троица – три начала вещей – сера, меркурий и соль. Сера елейного и огненного свойства; она в соединении с солью, огненностью своей возбуждает в ней алкание, посредством которого притягивает меркурий, схватывает его, удерживает и совокупно производит отдельные тела. Меркурий есть жидкая и летучая духовная сущность – Христос, Дух Святой, Он».
«3 го декабря.
«Проснулся поздно, читал Св. Писание, но был бесчувствен. После вышел и ходил по зале. Хотел размышлять, но вместо того воображение представило одно происшествие, бывшее четыре года тому назад. Господин Долохов, после моей дуэли встретясь со мной в Москве, сказал мне, что он надеется, что я пользуюсь теперь полным душевным спокойствием, несмотря на отсутствие моей супруги. Я тогда ничего не отвечал. Теперь я припомнил все подробности этого свидания и в душе своей говорил ему самые злобные слова и колкие ответы. Опомнился и бросил эту мысль только тогда, когда увидал себя в распалении гнева; но недостаточно раскаялся в этом. После пришел Борис Друбецкой и стал рассказывать разные приключения; я же с самого его прихода сделался недоволен его посещением и сказал ему что то противное. Он возразил. Я вспыхнул и наговорил ему множество неприятного и даже грубого. Он замолчал и я спохватился только тогда, когда было уже поздно. Боже мой, я совсем не умею с ним обходиться. Этому причиной мое самолюбие. Я ставлю себя выше его и потому делаюсь гораздо его хуже, ибо он снисходителен к моим грубостям, а я напротив того питаю к нему презрение. Боже мой, даруй мне в присутствии его видеть больше мою мерзость и поступать так, чтобы и ему это было полезно. После обеда заснул и в то время как засыпал, услыхал явственно голос, сказавший мне в левое ухо: – „Твой день“.
«Я видел во сне, что иду я в темноте, и вдруг окружен собаками, но иду без страха; вдруг одна небольшая схватила меня за левое стегно зубами и не выпускает. Я стал давить ее руками. И только что я оторвал ее, как другая, еще большая, стала грызть меня. Я стал поднимать ее и чем больше поднимал, тем она становилась больше и тяжеле. И вдруг идет брат А. и взяв меня под руку, повел с собою и привел к зданию, для входа в которое надо было пройти по узкой доске. Я ступил на нее и доска отогнулась и упала, и я стал лезть на забор, до которого едва достигал руками. После больших усилий я перетащил свое тело так, что ноги висели на одной, а туловище на другой стороне. Я оглянулся и увидал, что брат А. стоит на заборе и указывает мне на большую аллею и сад, и в саду большое и прекрасное здание. Я проснулся. Господи, Великий Архитектон природы! помоги мне оторвать от себя собак – страстей моих и последнюю из них, совокупляющую в себе силы всех прежних, и помоги мне вступить в тот храм добродетели, коего лицезрения я во сне достигнул».
«7 го декабря.
«Видел сон, будто Иосиф Алексеевич в моем доме сидит, я рад очень, и желаю угостить его. Будто я с посторонними неумолчно болтаю и вдруг вспомнил, что это ему не может нравиться, и желаю к нему приблизиться и его обнять. Но только что приблизился, вижу, что лицо его преобразилось, стало молодое, и он мне тихо что то говорит из ученья Ордена, так тихо, что я не могу расслышать. Потом, будто, вышли мы все из комнаты, и что то тут случилось мудреное. Мы сидели или лежали на полу. Он мне что то говорил. А мне будто захотелось показать ему свою чувствительность и я, не вслушиваясь в его речи, стал себе воображать состояние своего внутреннего человека и осенившую меня милость Божию. И появились у меня слезы на глазах, и я был доволен, что он это приметил. Но он взглянул на меня с досадой и вскочил, пресекши свой разговор. Я обробел и спросил, не ко мне ли сказанное относилось; но он ничего не отвечал, показал мне ласковый вид, и после вдруг очутились мы в спальне моей, где стоит двойная кровать. Он лег на нее на край, и я будто пылал к нему желанием ласкаться и прилечь тут же. И он будто у меня спрашивает: „Скажите по правде, какое вы имеете главное пристрастие? Узнали ли вы его? Я думаю, что вы уже его узнали“. Я, смутившись сим вопросом, отвечал, что лень мое главное пристрастие. Он недоверчиво покачал головой. И я ему, еще более смутившись, отвечал, что я, хотя и живу с женою, по его совету, но не как муж жены своей. На это он возразил, что не должно жену лишать своей ласки, дал чувствовать, что в этом была моя обязанность. Но я отвечал, что я стыжусь этого, и вдруг всё скрылось. И я проснулся, и нашел в мыслях своих текст Св. Писания: Живот бе свет человеком, и свет во тме светит и тма его не объят . Лицо у Иосифа Алексеевича было моложавое и светлое. В этот день получил письмо от благодетеля, в котором он пишет об обязанностях супружества».
«9 го декабря.
«Видел сон, от которого проснулся с трепещущимся сердцем. Видел, будто я в Москве, в своем доме, в большой диванной, и из гостиной выходит Иосиф Алексеевич. Будто я тотчас узнал, что с ним уже совершился процесс возрождения, и бросился ему на встречу. Я будто его целую, и руки его, а он говорит: „Приметил ли ты, что у меня лицо другое?“ Я посмотрел на него, продолжая держать его в своих объятиях, и будто вижу, что лицо его молодое, но волос на голове нет, и черты совершенно другие. И будто я ему говорю: „Я бы вас узнал, ежели бы случайно с вами встретился“, и думаю между тем: „Правду ли я сказал?“ И вдруг вижу, что он лежит как труп мертвый; потом понемногу пришел в себя и вошел со мной в большой кабинет, держа большую книгу, писанную, в александрийский лист. И будто я говорю: „это я написал“. И он ответил мне наклонением головы. Я открыл книгу, и в книге этой на всех страницах прекрасно нарисовано. И я будто знаю, что эти картины представляют любовные похождения души с ее возлюбленным. И на страницах будто я вижу прекрасное изображение девицы в прозрачной одежде и с прозрачным телом, возлетающей к облакам. И будто я знаю, что эта девица есть ничто иное, как изображение Песни песней. И будто я, глядя на эти рисунки, чувствую, что я делаю дурно, и не могу оторваться от них. Господи, помоги мне! Боже мой, если это оставление Тобою меня есть действие Твое, то да будет воля Твоя; но ежели же я сам причинил сие, то научи меня, что мне делать. Я погибну от своей развратности, буде Ты меня вовсе оставишь».


Денежные дела Ростовых не поправились в продолжение двух лет, которые они пробыли в деревне.
Несмотря на то, что Николай Ростов, твердо держась своего намерения, продолжал темно служить в глухом полку, расходуя сравнительно мало денег, ход жизни в Отрадном был таков, и в особенности Митенька так вел дела, что долги неудержимо росли с каждым годом. Единственная помощь, которая очевидно представлялась старому графу, это была служба, и он приехал в Петербург искать места; искать места и вместе с тем, как он говорил, в последний раз потешить девчат.
Вскоре после приезда Ростовых в Петербург, Берг сделал предложение Вере, и предложение его было принято.
Несмотря на то, что в Москве Ростовы принадлежали к высшему обществу, сами того не зная и не думая о том, к какому они принадлежали обществу, в Петербурге общество их было смешанное и неопределенное. В Петербурге они были провинциалы, до которых не спускались те самые люди, которых, не спрашивая их к какому они принадлежат обществу, в Москве кормили Ростовы.
Ростовы в Петербурге жили так же гостеприимно, как и в Москве, и на их ужинах сходились самые разнообразные лица: соседи по Отрадному, старые небогатые помещики с дочерьми и фрейлина Перонская, Пьер Безухов и сын уездного почтмейстера, служивший в Петербурге. Из мужчин домашними людьми в доме Ростовых в Петербурге очень скоро сделались Борис, Пьер, которого, встретив на улице, затащил к себе старый граф, и Берг, который целые дни проводил у Ростовых и оказывал старшей графине Вере такое внимание, которое может оказывать молодой человек, намеревающийся сделать предложение.
Берг недаром показывал всем свою раненую в Аустерлицком сражении правую руку и держал совершенно не нужную шпагу в левой. Он так упорно и с такою значительностью рассказывал всем это событие, что все поверили в целесообразность и достоинство этого поступка, и Берг получил за Аустерлиц две награды.
В Финляндской войне ему удалось также отличиться. Он поднял осколок гранаты, которым был убит адъютант подле главнокомандующего и поднес начальнику этот осколок. Так же как и после Аустерлица, он так долго и упорно рассказывал всем про это событие, что все поверили тоже, что надо было это сделать, и за Финляндскую войну Берг получил две награды. В 19 м году он был капитан гвардии с орденами и занимал в Петербурге какие то особенные выгодные места.
Хотя некоторые вольнодумцы и улыбались, когда им говорили про достоинства Берга, нельзя было не согласиться, что Берг был исправный, храбрый офицер, на отличном счету у начальства, и нравственный молодой человек с блестящей карьерой впереди и даже прочным положением в обществе.
Четыре года тому назад, встретившись в партере московского театра с товарищем немцем, Берг указал ему на Веру Ростову и по немецки сказал: «Das soll mein Weib werden», [Она должна быть моей женой,] и с той минуты решил жениться на ней. Теперь, в Петербурге, сообразив положение Ростовых и свое, он решил, что пришло время, и сделал предложение.
Предложение Берга было принято сначала с нелестным для него недоумением. Сначала представилось странно, что сын темного, лифляндского дворянина делает предложение графине Ростовой; но главное свойство характера Берга состояло в таком наивном и добродушном эгоизме, что невольно Ростовы подумали, что это будет хорошо, ежели он сам так твердо убежден, что это хорошо и даже очень хорошо. Притом же дела Ростовых были очень расстроены, чего не мог не знать жених, а главное, Вере было 24 года, она выезжала везде, и, несмотря на то, что она несомненно была хороша и рассудительна, до сих пор никто никогда ей не сделал предложения. Согласие было дано.
– Вот видите ли, – говорил Берг своему товарищу, которого он называл другом только потому, что он знал, что у всех людей бывают друзья. – Вот видите ли, я всё это сообразил, и я бы не женился, ежели бы не обдумал всего, и это почему нибудь было бы неудобно. А теперь напротив, папенька и маменька мои теперь обеспечены, я им устроил эту аренду в Остзейском крае, а мне прожить можно в Петербурге при моем жалованьи, при ее состоянии и при моей аккуратности. Прожить можно хорошо. Я не из за денег женюсь, я считаю это неблагородно, но надо, чтоб жена принесла свое, а муж свое. У меня служба – у нее связи и маленькие средства. Это в наше время что нибудь такое значит, не так ли? А главное она прекрасная, почтенная девушка и любит меня…
Берг покраснел и улыбнулся.
– И я люблю ее, потому что у нее характер рассудительный – очень хороший. Вот другая ее сестра – одной фамилии, а совсем другое, и неприятный характер, и ума нет того, и эдакое, знаете?… Неприятно… А моя невеста… Вот будете приходить к нам… – продолжал Берг, он хотел сказать обедать, но раздумал и сказал: «чай пить», и, проткнув его быстро языком, выпустил круглое, маленькое колечко табачного дыма, олицетворявшее вполне его мечты о счастьи.
Подле первого чувства недоуменья, возбужденного в родителях предложением Берга, в семействе водворилась обычная в таких случаях праздничность и радость, но радость была не искренняя, а внешняя. В чувствах родных относительно этой свадьбы были заметны замешательство и стыдливость. Как будто им совестно было теперь за то, что они мало любили Веру, и теперь так охотно сбывали ее с рук. Больше всех смущен был старый граф. Он вероятно не умел бы назвать того, что было причиной его смущенья, а причина эта была его денежные дела. Он решительно не знал, что у него есть, сколько у него долгов и что он в состоянии будет дать в приданое Вере. Когда родились дочери, каждой было назначено по 300 душ в приданое; но одна из этих деревень была уж продана, другая заложена и так просрочена, что должна была продаваться, поэтому отдать имение было невозможно. Денег тоже не было.
Берг уже более месяца был женихом и только неделя оставалась до свадьбы, а граф еще не решил с собой вопроса о приданом и не говорил об этом с женою. Граф то хотел отделить Вере рязанское именье, то хотел продать лес, то занять денег под вексель. За несколько дней до свадьбы Берг вошел рано утром в кабинет к графу и с приятной улыбкой почтительно попросил будущего тестя объявить ему, что будет дано за графиней Верой. Граф так смутился при этом давно предчувствуемом вопросе, что сказал необдуманно первое, что пришло ему в голову.
– Люблю, что позаботился, люблю, останешься доволен…
И он, похлопав Берга по плечу, встал, желая прекратить разговор. Но Берг, приятно улыбаясь, объяснил, что, ежели он не будет знать верно, что будет дано за Верой, и не получит вперед хотя части того, что назначено ей, то он принужден будет отказаться.
– Потому что рассудите, граф, ежели бы я теперь позволил себе жениться, не имея определенных средств для поддержания своей жены, я поступил бы подло…
Разговор кончился тем, что граф, желая быть великодушным и не подвергаться новым просьбам, сказал, что он выдает вексель в 80 тысяч. Берг кротко улыбнулся, поцеловал графа в плечо и сказал, что он очень благодарен, но никак не может теперь устроиться в новой жизни, не получив чистыми деньгами 30 тысяч. – Хотя бы 20 тысяч, граф, – прибавил он; – а вексель тогда только в 60 тысяч.
– Да, да, хорошо, – скороговоркой заговорил граф, – только уж извини, дружок, 20 тысяч я дам, а вексель кроме того на 80 тысяч дам. Так то, поцелуй меня.


Наташе было 16 лет, и был 1809 год, тот самый, до которого она четыре года тому назад по пальцам считала с Борисом после того, как она с ним поцеловалась. С тех пор она ни разу не видала Бориса. Перед Соней и с матерью, когда разговор заходил о Борисе, она совершенно свободно говорила, как о деле решенном, что всё, что было прежде, – было ребячество, про которое не стоило и говорить, и которое давно было забыто. Но в самой тайной глубине ее души, вопрос о том, было ли обязательство к Борису шуткой или важным, связывающим обещанием, мучил ее.
С самых тех пор, как Борис в 1805 году из Москвы уехал в армию, он не видался с Ростовыми. Несколько раз он бывал в Москве, проезжал недалеко от Отрадного, но ни разу не был у Ростовых.
Наташе приходило иногда к голову, что он не хотел видеть ее, и эти догадки ее подтверждались тем грустным тоном, которым говаривали о нем старшие:
– В нынешнем веке не помнят старых друзей, – говорила графиня вслед за упоминанием о Борисе.
Анна Михайловна, в последнее время реже бывавшая у Ростовых, тоже держала себя как то особенно достойно, и всякий раз восторженно и благодарно говорила о достоинствах своего сына и о блестящей карьере, на которой он находился. Когда Ростовы приехали в Петербург, Борис приехал к ним с визитом.
Он ехал к ним не без волнения. Воспоминание о Наташе было самым поэтическим воспоминанием Бориса. Но вместе с тем он ехал с твердым намерением ясно дать почувствовать и ей, и родным ее, что детские отношения между ним и Наташей не могут быть обязательством ни для нее, ни для него. У него было блестящее положение в обществе, благодаря интимности с графиней Безуховой, блестящее положение на службе, благодаря покровительству важного лица, доверием которого он вполне пользовался, и у него были зарождающиеся планы женитьбы на одной из самых богатых невест Петербурга, которые очень легко могли осуществиться. Когда Борис вошел в гостиную Ростовых, Наташа была в своей комнате. Узнав о его приезде, она раскрасневшись почти вбежала в гостиную, сияя более чем ласковой улыбкой.
Борис помнил ту Наташу в коротеньком платье, с черными, блестящими из под локон глазами и с отчаянным, детским смехом, которую он знал 4 года тому назад, и потому, когда вошла совсем другая Наташа, он смутился, и лицо его выразило восторженное удивление. Это выражение его лица обрадовало Наташу.
– Что, узнаешь свою маленькую приятельницу шалунью? – сказала графиня. Борис поцеловал руку Наташи и сказал, что он удивлен происшедшей в ней переменой.
– Как вы похорошели!
«Еще бы!», отвечали смеющиеся глаза Наташи.
– А папа постарел? – спросила она. Наташа села и, не вступая в разговор Бориса с графиней, молча рассматривала своего детского жениха до малейших подробностей. Он чувствовал на себе тяжесть этого упорного, ласкового взгляда и изредка взглядывал на нее.
Мундир, шпоры, галстук, прическа Бориса, всё это было самое модное и сomme il faut [вполне порядочно]. Это сейчас заметила Наташа. Он сидел немножко боком на кресле подле графини, поправляя правой рукой чистейшую, облитую перчатку на левой, говорил с особенным, утонченным поджатием губ об увеселениях высшего петербургского света и с кроткой насмешливостью вспоминал о прежних московских временах и московских знакомых. Не нечаянно, как это чувствовала Наташа, он упомянул, называя высшую аристократию, о бале посланника, на котором он был, о приглашениях к NN и к SS.
Наташа сидела всё время молча, исподлобья глядя на него. Взгляд этот всё больше и больше, и беспокоил, и смущал Бориса. Он чаще оглядывался на Наташу и прерывался в рассказах. Он просидел не больше 10 минут и встал, раскланиваясь. Всё те же любопытные, вызывающие и несколько насмешливые глаза смотрели на него. После первого своего посещения, Борис сказал себе, что Наташа для него точно так же привлекательна, как и прежде, но что он не должен отдаваться этому чувству, потому что женитьба на ней – девушке почти без состояния, – была бы гибелью его карьеры, а возобновление прежних отношений без цели женитьбы было бы неблагородным поступком. Борис решил сам с собою избегать встреч с Наташей, нo, несмотря на это решение, приехал через несколько дней и стал ездить часто и целые дни проводить у Ростовых. Ему представлялось, что ему необходимо было объясниться с Наташей, сказать ей, что всё старое должно быть забыто, что, несмотря на всё… она не может быть его женой, что у него нет состояния, и ее никогда не отдадут за него. Но ему всё не удавалось и неловко было приступить к этому объяснению. С каждым днем он более и более запутывался. Наташа, по замечанию матери и Сони, казалась по старому влюбленной в Бориса. Она пела ему его любимые песни, показывала ему свой альбом, заставляла его писать в него, не позволяла поминать ему о старом, давая понимать, как прекрасно было новое; и каждый день он уезжал в тумане, не сказав того, что намерен был сказать, сам не зная, что он делал и для чего он приезжал, и чем это кончится. Борис перестал бывать у Элен, ежедневно получал укоризненные записки от нее и всё таки целые дни проводил у Ростовых.


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

На другой день графиня, пригласив к себе Бориса, переговорила с ним, и с того дня он перестал бывать у Ростовых.


31 го декабря, накануне нового 1810 года, le reveillon [ночной ужин], был бал у Екатерининского вельможи. На бале должен был быть дипломатический корпус и государь.
На Английской набережной светился бесчисленными огнями иллюминации известный дом вельможи. У освещенного подъезда с красным сукном стояла полиция, и не одни жандармы, но полицеймейстер на подъезде и десятки офицеров полиции. Экипажи отъезжали, и всё подъезжали новые с красными лакеями и с лакеями в перьях на шляпах. Из карет выходили мужчины в мундирах, звездах и лентах; дамы в атласе и горностаях осторожно сходили по шумно откладываемым подножкам, и торопливо и беззвучно проходили по сукну подъезда.
Почти всякий раз, как подъезжал новый экипаж, в толпе пробегал шопот и снимались шапки.
– Государь?… Нет, министр… принц… посланник… Разве не видишь перья?… – говорилось из толпы. Один из толпы, одетый лучше других, казалось, знал всех, и называл по имени знатнейших вельмож того времени.
Уже одна треть гостей приехала на этот бал, а у Ростовых, долженствующих быть на этом бале, еще шли торопливые приготовления одевания.
Много было толков и приготовлений для этого бала в семействе Ростовых, много страхов, что приглашение не будет получено, платье не будет готово, и не устроится всё так, как было нужно.
Вместе с Ростовыми ехала на бал Марья Игнатьевна Перонская, приятельница и родственница графини, худая и желтая фрейлина старого двора, руководящая провинциальных Ростовых в высшем петербургском свете.
В 10 часов вечера Ростовы должны были заехать за фрейлиной к Таврическому саду; а между тем было уже без пяти минут десять, а еще барышни не были одеты.
Наташа ехала на первый большой бал в своей жизни. Она в этот день встала в 8 часов утра и целый день находилась в лихорадочной тревоге и деятельности. Все силы ее, с самого утра, были устремлены на то, чтобы они все: она, мама, Соня были одеты как нельзя лучше. Соня и графиня поручились вполне ей. На графине должно было быть масака бархатное платье, на них двух белые дымковые платья на розовых, шелковых чехлах с розанами в корсаже. Волоса должны были быть причесаны a la grecque [по гречески].
Все существенное уже было сделано: ноги, руки, шея, уши были уже особенно тщательно, по бальному, вымыты, надушены и напудрены; обуты уже были шелковые, ажурные чулки и белые атласные башмаки с бантиками; прически были почти окончены. Соня кончала одеваться, графиня тоже; но Наташа, хлопотавшая за всех, отстала. Она еще сидела перед зеркалом в накинутом на худенькие плечи пеньюаре. Соня, уже одетая, стояла посреди комнаты и, нажимая до боли маленьким пальцем, прикалывала последнюю визжавшую под булавкой ленту.
– Не так, не так, Соня, – сказала Наташа, поворачивая голову от прически и хватаясь руками за волоса, которые не поспела отпустить державшая их горничная. – Не так бант, поди сюда. – Соня присела. Наташа переколола ленту иначе.
– Позвольте, барышня, нельзя так, – говорила горничная, державшая волоса Наташи.
– Ах, Боже мой, ну после! Вот так, Соня.
– Скоро ли вы? – послышался голос графини, – уж десять сейчас.
– Сейчас, сейчас. – А вы готовы, мама?
– Только току приколоть.
– Не делайте без меня, – крикнула Наташа: – вы не сумеете!
– Да уж десять.
На бале решено было быть в половине одиннадцатого, a надо было еще Наташе одеться и заехать к Таврическому саду.
Окончив прическу, Наташа в коротенькой юбке, из под которой виднелись бальные башмачки, и в материнской кофточке, подбежала к Соне, осмотрела ее и потом побежала к матери. Поворачивая ей голову, она приколола току, и, едва успев поцеловать ее седые волосы, опять побежала к девушкам, подшивавшим ей юбку.
Дело стояло за Наташиной юбкой, которая была слишком длинна; ее подшивали две девушки, обкусывая торопливо нитки. Третья, с булавками в губах и зубах, бегала от графини к Соне; четвертая держала на высоко поднятой руке всё дымковое платье.
– Мавруша, скорее, голубушка!
– Дайте наперсток оттуда, барышня.
– Скоро ли, наконец? – сказал граф, входя из за двери. – Вот вам духи. Перонская уж заждалась.
– Готово, барышня, – говорила горничная, двумя пальцами поднимая подшитое дымковое платье и что то обдувая и потряхивая, высказывая этим жестом сознание воздушности и чистоты того, что она держала.
Наташа стала надевать платье.
– Сейчас, сейчас, не ходи, папа, – крикнула она отцу, отворившему дверь, еще из под дымки юбки, закрывавшей всё ее лицо. Соня захлопнула дверь. Через минуту графа впустили. Он был в синем фраке, чулках и башмаках, надушенный и припомаженный.
– Ах, папа, ты как хорош, прелесть! – сказала Наташа, стоя посреди комнаты и расправляя складки дымки.
– Позвольте, барышня, позвольте, – говорила девушка, стоя на коленях, обдергивая платье и с одной стороны рта на другую переворачивая языком булавки.
– Воля твоя! – с отчаянием в голосе вскрикнула Соня, оглядев платье Наташи, – воля твоя, опять длинно!
Наташа отошла подальше, чтоб осмотреться в трюмо. Платье было длинно.
– Ей Богу, сударыня, ничего не длинно, – сказала Мавруша, ползавшая по полу за барышней.
– Ну длинно, так заметаем, в одну минутую заметаем, – сказала решительная Дуняша, из платочка на груди вынимая иголку и опять на полу принимаясь за работу.
В это время застенчиво, тихими шагами, вошла графиня в своей токе и бархатном платье.
– Уу! моя красавица! – закричал граф, – лучше вас всех!… – Он хотел обнять ее, но она краснея отстранилась, чтоб не измяться.
– Мама, больше на бок току, – проговорила Наташа. – Я переколю, и бросилась вперед, а девушки, подшивавшие, не успевшие за ней броситься, оторвали кусочек дымки.
– Боже мой! Что ж это такое? Я ей Богу не виновата…
– Ничего, заметаю, не видно будет, – говорила Дуняша.
– Красавица, краля то моя! – сказала из за двери вошедшая няня. – А Сонюшка то, ну красавицы!…
В четверть одиннадцатого наконец сели в кареты и поехали. Но еще нужно было заехать к Таврическому саду.
Перонская была уже готова. Несмотря на ее старость и некрасивость, у нее происходило точно то же, что у Ростовых, хотя не с такой торопливостью (для нее это было дело привычное), но также было надушено, вымыто, напудрено старое, некрасивое тело, также старательно промыто за ушами, и даже, и так же, как у Ростовых, старая горничная восторженно любовалась нарядом своей госпожи, когда она в желтом платье с шифром вышла в гостиную. Перонская похвалила туалеты Ростовых.
Ростовы похвалили ее вкус и туалет, и, бережа прически и платья, в одиннадцать часов разместились по каретам и поехали.


Наташа с утра этого дня не имела ни минуты свободы, и ни разу не успела подумать о том, что предстоит ей.
В сыром, холодном воздухе, в тесноте и неполной темноте колыхающейся кареты, она в первый раз живо представила себе то, что ожидает ее там, на бале, в освещенных залах – музыка, цветы, танцы, государь, вся блестящая молодежь Петербурга. То, что ее ожидало, было так прекрасно, что она не верила даже тому, что это будет: так это было несообразно с впечатлением холода, тесноты и темноты кареты. Она поняла всё то, что ее ожидает, только тогда, когда, пройдя по красному сукну подъезда, она вошла в сени, сняла шубу и пошла рядом с Соней впереди матери между цветами по освещенной лестнице. Только тогда она вспомнила, как ей надо было себя держать на бале и постаралась принять ту величественную манеру, которую она считала необходимой для девушки на бале. Но к счастью ее она почувствовала, что глаза ее разбегались: она ничего не видела ясно, пульс ее забил сто раз в минуту, и кровь стала стучать у ее сердца. Она не могла принять той манеры, которая бы сделала ее смешною, и шла, замирая от волнения и стараясь всеми силами только скрыть его. И эта то была та самая манера, которая более всего шла к ней. Впереди и сзади их, так же тихо переговариваясь и так же в бальных платьях, входили гости. Зеркала по лестнице отражали дам в белых, голубых, розовых платьях, с бриллиантами и жемчугами на открытых руках и шеях.
Наташа смотрела в зеркала и в отражении не могла отличить себя от других. Всё смешивалось в одну блестящую процессию. При входе в первую залу, равномерный гул голосов, шагов, приветствий – оглушил Наташу; свет и блеск еще более ослепил ее. Хозяин и хозяйка, уже полчаса стоявшие у входной двери и говорившие одни и те же слова входившим: «charme de vous voir», [в восхищении, что вижу вас,] так же встретили и Ростовых с Перонской.
Две девочки в белых платьях, с одинаковыми розами в черных волосах, одинаково присели, но невольно хозяйка остановила дольше свой взгляд на тоненькой Наташе. Она посмотрела на нее, и ей одной особенно улыбнулась в придачу к своей хозяйской улыбке. Глядя на нее, хозяйка вспомнила, может быть, и свое золотое, невозвратное девичье время, и свой первый бал. Хозяин тоже проводил глазами Наташу и спросил у графа, которая его дочь?
– Charmante! [Очаровательна!] – сказал он, поцеловав кончики своих пальцев.
В зале стояли гости, теснясь у входной двери, ожидая государя. Графиня поместилась в первых рядах этой толпы. Наташа слышала и чувствовала, что несколько голосов спросили про нее и смотрели на нее. Она поняла, что она понравилась тем, которые обратили на нее внимание, и это наблюдение несколько успокоило ее.
«Есть такие же, как и мы, есть и хуже нас» – подумала она.
Перонская называла графине самых значительных лиц, бывших на бале.
– Вот это голландский посланик, видите, седой, – говорила Перонская, указывая на старичка с серебряной сединой курчавых, обильных волос, окруженного дамами, которых он чему то заставлял смеяться.
– А вот она, царица Петербурга, графиня Безухая, – говорила она, указывая на входившую Элен.
– Как хороша! Не уступит Марье Антоновне; смотрите, как за ней увиваются и молодые и старые. И хороша, и умна… Говорят принц… без ума от нее. А вот эти две, хоть и нехороши, да еще больше окружены.
Она указала на проходивших через залу даму с очень некрасивой дочерью.
– Это миллионерка невеста, – сказала Перонская. – А вот и женихи.
– Это брат Безуховой – Анатоль Курагин, – сказала она, указывая на красавца кавалергарда, который прошел мимо их, с высоты поднятой головы через дам глядя куда то. – Как хорош! неправда ли? Говорят, женят его на этой богатой. .И ваш то соusin, Друбецкой, тоже очень увивается. Говорят, миллионы. – Как же, это сам французский посланник, – отвечала она о Коленкуре на вопрос графини, кто это. – Посмотрите, как царь какой нибудь. А всё таки милы, очень милы французы. Нет милей для общества. А вот и она! Нет, всё лучше всех наша Марья то Антоновна! И как просто одета. Прелесть! – А этот то, толстый, в очках, фармазон всемирный, – сказала Перонская, указывая на Безухова. – С женою то его рядом поставьте: то то шут гороховый!
Пьер шел, переваливаясь своим толстым телом, раздвигая толпу, кивая направо и налево так же небрежно и добродушно, как бы он шел по толпе базара. Он продвигался через толпу, очевидно отыскивая кого то.
Наташа с радостью смотрела на знакомое лицо Пьера, этого шута горохового, как называла его Перонская, и знала, что Пьер их, и в особенности ее, отыскивал в толпе. Пьер обещал ей быть на бале и представить ей кавалеров.
Но, не дойдя до них, Безухой остановился подле невысокого, очень красивого брюнета в белом мундире, который, стоя у окна, разговаривал с каким то высоким мужчиной в звездах и ленте. Наташа тотчас же узнала невысокого молодого человека в белом мундире: это был Болконский, который показался ей очень помолодевшим, повеселевшим и похорошевшим.
– Вот еще знакомый, Болконский, видите, мама? – сказала Наташа, указывая на князя Андрея. – Помните, он у нас ночевал в Отрадном.
– А, вы его знаете? – сказала Перонская. – Терпеть не могу. Il fait a present la pluie et le beau temps. [От него теперь зависит дождливая или хорошая погода. (Франц. пословица, имеющая значение, что он имеет успех.)] И гордость такая, что границ нет! По папеньке пошел. И связался с Сперанским, какие то проекты пишут. Смотрите, как с дамами обращается! Она с ним говорит, а он отвернулся, – сказала она, указывая на него. – Я бы его отделала, если бы он со мной так поступил, как с этими дамами.


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


После князя Андрея к Наташе подошел Борис, приглашая ее на танцы, подошел и тот танцор адъютант, начавший бал, и еще молодые люди, и Наташа, передавая своих излишних кавалеров Соне, счастливая и раскрасневшаяся, не переставала танцовать целый вечер. Она ничего не заметила и не видала из того, что занимало всех на этом бале. Она не только не заметила, как государь долго говорил с французским посланником, как он особенно милостиво говорил с такой то дамой, как принц такой то и такой то сделали и сказали то то, как Элен имела большой успех и удостоилась особенного внимания такого то; она не видала даже государя и заметила, что он уехал только потому, что после его отъезда бал более оживился. Один из веселых котильонов, перед ужином, князь Андрей опять танцовал с Наташей. Он напомнил ей о их первом свиданьи в отрадненской аллее и о том, как она не могла заснуть в лунную ночь, и как он невольно слышал ее. Наташа покраснела при этом напоминании и старалась оправдаться, как будто было что то стыдное в том чувстве, в котором невольно подслушал ее князь Андрей.
Князь Андрей, как все люди, выросшие в свете, любил встречать в свете то, что не имело на себе общего светского отпечатка. И такова была Наташа, с ее удивлением, радостью и робостью и даже ошибками во французском языке. Он особенно нежно и бережно обращался и говорил с нею. Сидя подле нее, разговаривая с ней о самых простых и ничтожных предметах, князь Андрей любовался на радостный блеск ее глаз и улыбки, относившейся не к говоренным речам, а к ее внутреннему счастию. В то время, как Наташу выбирали и она с улыбкой вставала и танцовала по зале, князь Андрей любовался в особенности на ее робкую грацию. В середине котильона Наташа, окончив фигуру, еще тяжело дыша, подходила к своему месту. Новый кавалер опять пригласил ее. Она устала и запыхалась, и видимо подумала отказаться, но тотчас опять весело подняла руку на плечо кавалера и улыбнулась князю Андрею.
«Я бы рада была отдохнуть и посидеть с вами, я устала; но вы видите, как меня выбирают, и я этому рада, и я счастлива, и я всех люблю, и мы с вами всё это понимаем», и еще многое и многое сказала эта улыбка. Когда кавалер оставил ее, Наташа побежала через залу, чтобы взять двух дам для фигур.
«Ежели она подойдет прежде к своей кузине, а потом к другой даме, то она будет моей женой», сказал совершенно неожиданно сам себе князь Андрей, глядя на нее. Она подошла прежде к кузине.
«Какой вздор иногда приходит в голову! подумал князь Андрей; но верно только то, что эта девушка так мила, так особенна, что она не протанцует здесь месяца и выйдет замуж… Это здесь редкость», думал он, когда Наташа, поправляя откинувшуюся у корсажа розу, усаживалась подле него.