Ruby

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

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

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

интерпретируемый

Появился в:

1995[1]

Автор:

Юкихиро Мацумото

Расширение файлов:

.rb, .rbw[2]

Выпуск:

2.3.1 (26 апреля 2016[3])

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

строгая, динамическая (утиная)

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

Ruby MRI (англ.), JRuby,Rubinius

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

Perl, Smalltalk, Eiffel, Ada, Lisp[1], Python, Dylan, CLU, C++, Lua

Повлиял на:

Groovy, Amber, CoffeeScript, Perl 6, CrystalК:Википедия:Статьи без источников (тип: не указан)[источник не указан 3012 дней]

Лицензия:

лицензия Ruby[4], Лицензия BSD или GNU GPL v2[5][6]

Сайт:

[www.ruby-lang.org/ru/ ruby-lang.org]

Ruby (англ. ruby — рубин, произносится ['ru:bɪ] — ру́би) — динамический, рефлективный, интерпретируемый высокоуровневый язык программирования[7][8]. Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, сборщиком мусора и многими другими возможностями[⇨]. По особенностям синтаксиса он близок к языкам Perl и Eiffel, по объектно-ориентированному подходу — к Smalltalk. Также некоторые черты языка взяты из Python, Lisp, Dylan и Клу.

Кроссплатформенная реализация интерпретатора языка является полностью свободной[5].





История создания и развития

Создатель Ruby — Юкихиро Мацумото (Matz) — интересовался языками программирования, ещё будучи студентом, но идея о разработке нового языка появилась позже. Ruby начал разрабатываться 23 февраля 1993 года и вышел в свет в 1995 году.

Название навеяно языком Perl, многие особенности синтаксиса и семантики из которого заимствованы в Ruby: англ. pearl — «жемчужина», ruby — «рубин».

Целью разработки было создание «настоящего объектно-ориентированного», лёгкого в разработке, интерпретируемого языка программирования. Из письма автора[9]:

Ruby родился 23 февраля 1993 года. В тот день я беседовал со своим коллегой о возможности существования объектно-ориентированного сценарного языка. Я знал Perl (Perl4, а не Perl5), но он мне не нравился — был в нём некий привкус игрушечного языка (да и поныне есть). А объектно-ориентированный интерпретируемый язык казался многообещающим. В то время я знал Python. Но он мне не нравился потому, что я не считал его настоящим объектно-ориентированным языком. Его OO свойства казались надстройкой над языком. Мне, как языковому маньяку и фанату объектно-ориентированного программирования с пятнадцатилетним стажем, очень, очень хотелось, чтобы был истинно объектно-ориентированный, простой в использовании язык. Я пытался найти такой язык, но его не было.

Тогда я решил его создать. Прошло несколько месяцев, прежде чем интерпретатор заработал. Я добавил в мой язык то, что мне хотелось — итераторы, обработку исключений, автоматическую сборку мусора. Затем я переорганизовал свойства Perl и реализовал их как библиотеку классов. В декабре 1995 года я опубликовал Ruby 0.95 в японских новостных группах. С тех пор появились сайты, списки рассылок. В списках рассылок идут жаркие обсуждения. Самый старый список сейчас содержит 14 789 писем.

В Японии Ruby стал популярным с момента появления первой общедоступной версии в 1995 году, однако наличие документации только на японском языке сдерживало его дальнейшее распространение. Лишь в 1997 году появилось описание Ruby на английском языке, а в 1998 году открылся форум «ruby-talk». Это положило начало росту известности языка в остальном мире. Издано несколько книг на различных языках, в том числе на русском. Сейчас Ruby входит в большинство дистрибутивов ОС Linux, поставляется вместе с Mac OS X, доступен пользователям других операционных систем.

24 февраля 2014 года исполнился 21 год с момента анонса языка программирования Ruby. Такое событие разработчики решили отметить выпуском патча для Ruby 2.1, который назвали Ruby 2.1.1[10].

Хронология выхода версий

В списке ниже перечислены лишь наиболее крупные обновления[11].

Название версии Дата выхода Примечания
0.06 7 января 1994 Первая версия, указанная в Changelog’ах
1.0-961225 25 декабря 1996 Данная версия следовала сразу за версией 0.99.4-961224, выпущенной накануне. Номер после числа 1.0 — дата выпуска версии. Новые версии линейки 1.0 выходили ещё год (до 1.0-971225).
1.1 alpha0 13 августа 1997 Альфа-версии выходили вплоть до 7 октября 1997 (1.1 alpha9)
1.1b0 4 декабря 1997 Следующая версия после 1.1 alpha9. 27 февраля 1998 вышла версия 1.1b9, затем вплоть до середины 1998 выходили экспериментальные выпуски с обозначением вида 1.1b9_31 (версия 1.1b9_31 была выпущена, но в документации не отмечена).
1.1c0 17 июля 1998 Данная версия следовала за версией 1.1b9_31. Модификации этой версии выходили вплоть до 26 ноября 1998 (1.1c9).
1.1d0 (pre1.2) 16 декабря 1998 Данная версия следовала за версией 1.1c9. 22 декабря 1998 была выпущена экспериментальная версия 1.1d1, завершившая данную линейку.
1.2 (stable) 25 декабря 1998 В дальнейшем выходили модификации данной версии вплоть до версии 1.2.5, выпущенной 13 апреля 1999 года. 21 июня 1999 года была выпущена версия 1.2.6, объявленная как финальная версия 1.2 (1.2 final). 15 июля 1999 года вышла переупакованная (repacked) версия 1.2.6.
1.3 (development) 24 декабря 1998 Отдельная ветка модификаций, разрабатываемая независимо от линейки 1.2 (по аналогии с ядром ОС Linux). Первая версия была объявлена как версия для разработки (development version) и следовала за версией 1.1d1. В дальнейшем последовало множество промежуточных модификаций: ruby-1.3.1-990215 — ruby-1.3.4-990625, после чего от указания даты в номере отказались и выпустили 1.3.5 — 1.4 alpha (15 июля 1999), 1.3.6 — 1.4 alpha (28 июля 1999), 1.3.7 — 1.4 beta (6 августа 1999).
1.4.0 (stable) 13 августа 1999 Данная версия появилась через несколько дней после выхода 1.3.7 — 1.4 beta. В дальнейшем выходили новые модификации вплоть до версии 1.4.6, вышедшей 16 августа 2000 года.
1.5.0 (development) 20 ноября 1999 Данная линейка предназначалась исключительно для проверки различных нововведений при разработке. Модификации данной линейки доступны исключительно в репозитории проекта и, соответственно, сборки данной версии на официальный сервер не выкладывались.
1.6.0 (stable) 19 сентября 2000 В дальнейшем выпускались модификации этой версии вплоть до версии 1.6.8 (24 декабря 2002). 21 сентября 2005 года был выпущен патч для версии 1.6.8.
1.7.0 (development) 24 февраля 2001 Данная линейка предназначалась исключительно для проверки различных нововведений при разработке. Модификации данной линейки доступны исключительно в репозитории проекта и, соответственно, сборки данной версии на официальный сервер не выкладывались.
1.8.0 (stable) 4 августа 2003 В дальнейшем последовало большое число модификаций, которые выходят до сих пор (1 января 2011 года), например, промежуточная версия 1.8.7-p330 вышла 24 декабря 2010 года.
1.9.0 (development) 25 декабря 2007 Изначально экспериментальная ветка, созданная для практической проверки ряда нововведений.
1.9.3 (stable) 31 октября 2011 Отличия от 1.9.2 — существенны.
2.0.0 (stable) 24 февраля 2013
2.1.0 (stable) 25 декабря 2013
2.2.0 (stable) 25 декабря 2014 Поддержка Unicode 7.0, добавлена сборка мусора для объектов типа Symbol.
2.3.0 (stable) 25 декабря 2015 Добавлен новый оператор «&.» для упрощения обработки значений nil при обращении к объектам. Реализована новая экспериментальная прагма frozen-string-literal, позволяющая заморозить состояние строковых литералов в исходных текстах.

Философия

Мацумото, фанат объектно-ориентированного программирования, мечтал о языке, более мощном, чем Perl, и более объектно-ориентированном, чем Python. Основное назначение Ruby — создание простых и в то же время понятных программ, где важна не скорость работы программы, а малое время разработки, понятность и простота синтаксиса.

Язык следует принципу «наименьшей неожиданности»: программа должна вести себя так, как ожидает программист. Однако в контексте Ruby это означает наименьшее удивление не при знакомстве с языком, а при его основательном изучении.

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

Ruby также унаследовал идеологию языка программирования Perl в части предоставления программисту возможностей достижения одного и того же результата несколькими различными способами. Люди различны, и им для свободы необходима возможность выбирать. «Я предпочитаю обеспечить много путей, если это возможно, но поощрять или вести пользователей, чтобы выбрать лучший путь, если это возможно» [12].

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

В противовес машинно-ориентированным языкам, работающим быстрее, целью этой разработки был язык, наиболее близкий к человеку. Любая работа с компьютером выполняется людьми и для людей, и необходимо заботиться в первую очередь о затрачиваемых усилиях людей. Язык позволяет максимально быстро и просто для человека выполнить задачу, хотя, возможно, это и потребует дополнительного времени работы компьютера.

Принципы программирования и устройства языка иногда выделяются в термин «Путь Ruby» (англ. Ruby Way). Хэл Фултон выделяет[13] такие принципы, как «просто, но не слишком просто», «принцип наименьшего удивления», вторичность скорости работы программы, динамичность, простые строгие правила, выполнение которых не доходит до педантизма, потребность создавать полезные и красивые программы как причина программирования. В целом они не имеют точной формулировки и иногда этот термин используется для критики [14].

Семантика

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

Ruby использует вызов по соиспользованию (call-by-sharing), хотя в сообществе Ruby часто говорят, что он использует вызов по ссылке. Для программиста, привыкшего к распространённым гибридным языкам программирования, некоторые эффекты такого решения могут показаться неожиданными. Например:

  a = "abcdefg"
  b = a
  b             #=> "abcdefg"
  a[3] = 'R'
  b             #=> "abcRefg"

то есть при изменении значения переменной a, неявно изменилось и значение b, так как они содержат ссылку на один объект. То есть механизм присваивания действует одинаково для всех объектов, в отличие от языков типа C, Object Pascal, где присваивание может означать как копирование значения, так и копирование ссылки на значение.

Ruby не поддерживает множественное наследование, но вместо него есть мощный механизм примесей. Все классы (напрямую или через другие классы) выведены из класса [ruby-doc.org/core/classes/Object.html Object], следовательно, любой объект может использовать определённые в нём методы (например, [ruby-doc.org/core/classes/Object.html#M001419 class], [ruby-doc.org/core/classes/Object.html#M001428 to_s], [ruby-doc.org/core/classes/Object.html#M001411 nil?]). Процедурный стиль также поддерживается, но все глобальные процедуры неявно являются закрытыми методами класса Object.

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

Возможности Ruby

  • Имеет лаконичный и простой синтаксис, частично разработанный под влиянием Ада, Eiffel и Python.
  • Позволяет обрабатывать исключения в стиле Java и Python.
  • Позволяет переопределять операторы, которые на самом деле являются методами.
  • Полностью объектно-ориентированный язык программирования. Все данные в Ruby являются объектами в понимании Smalltalk. Единственное исключение — управляющие конструкции, которые в Ruby, в отличие от Smalltalk, не являются объектами. Например, число «1» — это экземпляр класса [ruby-doc.org/core/classes/Fixnum.html Fixnum]. Также поддерживается добавление методов в класс и даже в конкретный экземпляр во время выполнения программы.
  • Не поддерживает множественное наследование, но вместо него может использоваться концепция «примесей», основанная в данном языке на механизме модулей.
  • Содержит автоматический сборщик мусора. Он работает для всех объектов Ruby, в том числе для внешних библиотек.
  • Создавать расширения для Ruby на Си очень просто частично из-за сборщика мусора, частично из-за несложного и удобного API.
  • Поддерживает замыкания с полной привязкой к переменным.
  • Поддерживает блоки кода (код заключается в {} или doend). Блоки могут использоваться в методах или преобразовываться в замыкания.
  • Целые переменные в Ruby автоматически конвертируются между типами [ruby-doc.org/core/classes/Fixnum.html Fixnum] (32-разрядные) и [ruby-doc.org/core/classes/Bignum.html Bignum] (больше 32 разрядов) в зависимости от их значения, что позволяет производить целочисленные математические расчёты со сколь угодно большой точностью.
  • Не требует предварительного объявления переменных, но для интерпретатора желательно, чтобы переменным присваивалось пустое значение nil (тогда интерпретатор знает, что идентификатор обозначает переменную, а не имя метода). Язык использует простые соглашения для обозначения области видимости. Пример: просто var — локальная переменная, @var — переменная экземпляра (член или поле объекта класса), @@var — переменная класса, $var — глобальная переменная.
  • В Ruby непосредственно в языке реализованы многие шаблоны проектирования, так, например, «одиночка» (singleton) может быть (хотя и не обязан) реализован добавлением необходимых методов к одному конкретному объекту (см. ниже).
  • Может динамически загружать расширения, если это позволяет операционная система.
  • Имеет независимую от ОС поддержку невытесняющей многопоточности.
  • Перенесён на множество платформ. Он разрабатывался на Linux, но работает на многих версиях Unix, DOS, Microsoft Windows (в частности, Win32), Mac OS, BeOS, OS/2 и т. д.

Примеры

В Ruby есть немало оригинальных решений, редко или вообще не встречающихся в распространённых языках программирования. Можно добавлять методы не только в любые классы, но и в любые объекты. Например, вы можете добавить к некоторой строке произвольный метод.

                   # всё от символа # и до конца строки - комментарий
                   # = является оператором присваивания,
                   # символы в «"» - строка, которой можно манипулировать средствами языка
  str = "Привет"   # здесь создаётся переменная str, типа String
                   # def - ключевое слово для объявления функции
  def str.bye      # str. указывает, кому принадлежит метод (по умолчанию Object)
                   # bye - имя метода, за ним может следовать необязательный, заключённый в
                   # круглые скобки список параметров функции
    "Пока!"        # из метода возвращается последнее вычисленное значение (здесь - строка)
  end              # ключевым словом end заканчиваются практически все инструкции Ruby
                   # puts - метод,
                   # str.bye - обращение к методу bye объекта str
                   # значение, полученное из метода bye, передаётся методу puts,
                   # который выводит на экран информацию
  puts str.bye     #=> Пока!

Этот пример также демонстрирует, как в Ruby можно использовать синглетон. В этом примере синглетоном является объект str.

Любая конструкция в Ruby возвращает значение. Например:

                   # конструкция if вычисляет выражение после него, и, если оно истинно,
                   # возвращает результат выражения между then и else, иначе между else и end
  puts( if 5 > 3 then "Одно" else "Другое" end )   #=> Одно
                   # происходит присваивание значения переменной var, и операция присваивания
                   # возвращает значение переменной var, которая выводится на экран
  puts( var = 5 )                                  #=> 5

Контейнеры

Работа с массивами — одна из сильных сторон Ruby. Они автоматически изменяют размер, могут содержать любые элементы, а язык предоставляет мощные средства для их обработки.

                           # создаём массив
 a = [1, 'hi', 3.14, 1, 2, [4, 5] * 3]
                           # => [1, "hi", 3.14, 1, 2, [4, 5, 4, 5, 4, 5]]

                           # обращение по индексу
 a[2]                      # => 3.14

                           # «разворачиваем» все внутренние массивы, удаляем одинаковые элементы
 a.flatten.uniq            # => [1, 'hi', 3.14, 2, 4, 5]

                           # пытаемся найти индекс элемента со значением 6
 a.index(6)                # => nil
                           # неудача: возвращается значение nil

                           # почти для всех функций предоставляется
                           # аналог с тем же названием, но заканчивающийся на «!»,
                           # который модифицирует контейнер
 a.flatten!                # => [1, "hi", 3.14, 1, 2, 4, 5, 4, 5, 4, 5]

                           # находим индекс первого элемента со значением 4
 a.index(4)                # => 5

Процедурные объекты и итераторы

В языке есть 2 эквивалентных способа записи блоков кода:

 { puts "Hello, World!" }

 do puts "Hello, World!" end

Сопрограммы применяются с большинством встроенных методов:

 File.open('file.txt', 'w') {|file| # открытие файла «file.txt» для записи («w» - write)
   file.puts 'Wrote some text.'
 } # Конструкция устраняет неопределённость с закрытием файла: закрывается здесь при любом исходе

Следующий пример показывает использование сопрограмм и итераторов для работы с массивами, который показывает краткость записи на Ruby многих достаточно сложных действий (случайно выбираем из последовательности квадратов чисел от «0» до «10» и распечатываем вместе с индексами):

# Для работы требуется Ruby 1.9
(0..10).collect{ |v| v ** 2 }.select{ rand(2).zero? }.map.with_index { |*v| v }

Классы, примеси, методы, перегрузка операторов

Следующий пример определяет класс с именем Person, предназначенный для хранения информации об имени и возрасте некоторой персоны.

 class Person < Object       # объявление класса начинается с ключевого слова class, за которым
                             # следует имя, класс Person наследуется от Object
   include Comparable        # подмешиваются к классу методы экземпляра
   mix MyModel               # подмешивание без наложения имен
   extend MyModel            # методы класса
                             # и добавляет методы <, <=, ==, >=, > и between?
                             # с использованием нижеопределённого
                             # в классе <=>
                             #
   @variable                 # переменная экземпляра
   @@count_obj = 0           # переменная класса для подсчёта числа созданных объектов
                             #
                             # конструктор для создания объектов с помощью new
   def initialize(name, age) # name, age - параметры метода
                             # название переменных объекта начинается с @
     @name, @age = name, age # создаём объекты и увеличиваем счётчик на 1
     @@count_obj += 1
   end

   def <=>(person)           # переопределение оператора <=>
                             # (это даёт возможность использовать метод sort)
     @age <=> person.age     # из метода возвращается последнее вычисленное выражение,
   end

   def to_s                  # для форматированного вывода информации puts
     "#{@name} (#{@age})"    # конструкция #{x} в 2-х кавычках замещается в Ruby значением x
   end

   def inspect               # похож на to_s, но используется для диагностического вывода
     "<#{@@count_obj}:#{to_s}>"
   end
                             # пример метапрограммирования: добавляет методы для доступа к
                             # переменным объекта
   attr_reader :name, :age
 end
                             # создаём массив объектов
 group = [ Person.new("John", 20),
          Person.new("Markus", 63),
          Person.new("Ash", 16) ]
                      # => [<3:John (20)>, <3:Markus (63)>, <3:Ash (16)>]
                      # здесь при работе с irb автоматически вызывается метод inspect
                      # вызываем методы массива сортировка и разворачивание его в обратном порядке
 puts group.sort.reverse # Печатает:
                         # Markus (63)
                         # John (20)
                         # Ash (16)
                                    # обращаемся к функции, которая была добавлена
                                    # автоматически (используя <=>) при включении Comparable
 group[0].between?(group[2], group[1]) # => true

Исключения

Исключения возбуждаются с помощью конструкции raise (или fail), опционально могут быть добавлены текст с сообщением, тип исключения и информация о стеке вызовов:

 raise ArgumentError, "Неверный аргумент", caller # caller - метод, возвращающий текущий стек выполнения

Обрабатываются исключения с использованием конструкции rescue. Опционально можно указать тип обрабатываемого исключения (по умолчанию обрабатываются все) и получение информации. Также можно добавлять блоки else (выполняется, если исключения отсутствовали) и ensure (выполняется в любом случае).

 begin
   # ...
 rescue RuntimeError => e
   # обрабатываем конкретный тип ошибок
   puts e # напечатаем сообщение об ошибке
 rescue
   # можно писать rescue => e, чтобы получить объект исключения
   # обрабатываем все исключения
 else
   # сработает, если исключений не было
 ensure
   # сработает в любом случае
 end

Реализация

Для Ruby существуют несколько реализаций: официальный интерпретатор, написанный на Си, JRuby — реализация для Java, интерпретатор для платформы .NET IronRuby, Rubinius — написанная в основном на Ruby и базирующаяся на идеях Smalltalk-80 VM[15], MagLev — другая базирующаяся на Smalltalk разработка от компании Gemstone[16], Blue Ruby — реализация Ruby для виртуальной машины ABAP[17], MacRuby — реализация для Mac OS с фокусом на максимальную интеграцию с возможностями операционной системы[18], mruby — реализация для встраивания в программы[19].

Официальный интерпретатор портирован под большинство платформ, включая Unix, Microsoft Windows (в том числе Windows CE), DOS, Mac OS X, OS/2, Amiga, BeOS, Syllable, Acorn RISC OS и другие. Для Windows существует специализированный установщик RubyInstaller и есть возможность запуска под Cygwin для большей совместимости с Unix[20].

Интерактивный Ruby

С официальной версией интерпретатора Ruby поставляется командная оболочка Ruby (Interactive Ruby Shell). Запускаемая командой irb в окне терминала (интерфейсе командной строки), она позволяет тестировать код программы очень быстро (построчно):

 $ irb
 irb(main):001:0> "Hello, World"
 => "Hello, World"
 irb(main):002:0> 2 ** 256             # ** - оператор возведения в степень
 => 115792089237316195423570985008687907853269984665640564039457584007913129639936

Программа irb выводит результат каждой строки после символов =>. В приведённых выше примерах для наглядности применяется аннотирование — результаты строк программы записываются в комментариях после =>. Имитацию irb можно запустить непосредственно в браузере.

В поставке дистрибутива One-Click Installer для Windows начиная с версии 1.8.2-15 поставляется утилита fxri, которая включает в себя справочную систему (ri) и интерактивный интерпретатор (irb).

Поддержка интегрированных сред разработки

Базовые возможности редактирования добавляются ко многим редакторам (Emacs, Bred, vim, jEdit, nano, SciTE, Kate и др.), здесь перечислены только IDE, предоставляющие обширный набор функций.

Название Лицензия Платформы Ссылка
ActiveState Komodo IDE Проприетарная Linux, Mac OS X, Solaris, Windows [activestate.com/Products/komodo_ide/]
Arachno Ruby IDE Проприетарная Win 2000/XP, Linux [www.ruby-ide.com]
Aptana (RadRails + RDT) GPL, APL + CPL Java [www.aptana.com/]
EasyEclipse for Ruby and Rails Win 2000/XP, Linux, Mac OS X [www.easyeclipse.org/site/distributions/ruby-rails.html]
Eclipse + RDT EPL + CPL Java [rubyeclipse.sourceforge.net/]
Embarcadero TurboRuby Проприетарная Windows, OS X, Linux [www.embarcadero.com/products/turboruby]
FreeRIDE Ruby License Windows, OS X, POSIX [rubyforge.org/projects/freeride/]
IntelliJ IDEA + Ruby plugin Проприетарная (на IDEA), Apache 2.0 (на сам plugin) Java, JRuby [plugins.intellij.net/plugin/?id=1293 Ruby plugin]
KDevelop GNU GPL Linux [kdevelop.org/]
Komodo Edit Проприетарная Windows, Mac, Linux [www.activestate.com/komodo-edit]
Mondrian Ruby IDE разработка прекращена, доступна старая версия MIT Ruby (+ FOX toolkit) [www.mondrian-ide.com/]
NetBeans IDE (версия 6.9.1 и более ранние) CDDL Java [www.netbeans.org/features/ruby/]
RDE Ruby License Windows [homepage2.nifty.com/sakazuki/rde_en/]
Ruby in steel Проприетарная Visual Studio 2005 [www.sapphiresteel.com/]
RubyMine Проприетарная (на базе IDEA) Java [www.jetbrains.com/ruby]
Visual Studio (реализация IronRuby) Проприетарная Windows [www.microsoft.com/visualstudio/en-us/products]
Xcode 3.1 Проприетарная Mac OS X 10.5 [developer.apple.com/tools/xcode/]

Библиотеки

Стандартная библиотека

Кроме мощных возможностей, встроенных в язык, Ruby поставляется с большой стандартной библиотекой. Это, прежде всего, библиотеки для работы с различными сетевыми протоколами на стороне сервера и клиента, средства для работы с различными форматами представления данных (XML, XSLT, YAML, PDF, RSS, CSV, WSDL). Кроме встроенных в язык средств отладки, с Ruby поставляются библиотеки для модульного тестирования, журналирования, профилирования. Также есть библиотеки для работы с архивами, датами, кодировками, матрицами, средства для системного администрирования, распределённых вычислений, поддержки многопоточности и т. д.

Расширения

В языке Ruby осуществлён простой и удобный механизм для расширения языка с помощью библиотек, написанных на Си, позволяющий легко разрабатывать дополнительные библиотеки.[22][23]

Для унифицированного доступа к базам данных разработана библиотека [ruby-dbi.rubyforge.org/ Ruby DBI] (поддерживает SQLite, Oracle Database, ODBC, MySQL, DB2, MS SQL, InterBase, ADO и др.). Также существуют библиотеки для конкретных баз данных, поддерживающих специфические для них операции. Для реализации ORM существуют несколько библиотек, такие, как ActiveRecord, Mongoid, DataMapper или Sequel.

Среди графических библиотек — FxRuby (интерфейс к графической библиотеке FOX), графический пакет разработчика wxRuby (интерфейс к кроссплатформенному пакету wxWidgets на C++), QtRuby/Korundum (привязка к Qt и KDE соответственно), графические библиотеки для работы с Tk[24] и Gtk. Также реализована библиотека для работы с OpenGL, позволяющая программировать трёхмерную графику.

Win32utils — позволяет обращаться к специфическим возможностям Win32 API.

Rmagick — библиотека для работы с изображениями, поддерживающая более 90 форматов (основана на ImageMagick и GraphicsMagick).

Библиотека Ruport (Ruby reports) предназначена для лёгкой реализации отчётов и создания диаграмм на основе данных из БД или прямо из текстовых файлов CSV. Причём результаты можно сохранять в форматах PDF, HTML, CSV и TXT.

RuTils — обработчик русского текста на Ruby. Позволяет реализовать сумму прописью и выбор числительного. Например, 231.propisju(2) => «двести тридцать одна» или 341.propisju_items(1, «чемодан», «чемодана», «чемоданов») => «триста сорок один чемодан». А также перевод в транслит и работу с датами.

Для управления библиотеками и программами Ruby в виде самодостаточных пакетов предназначена система управления пакетами RubyGems (англ. gems, gem — драгоценный камень).

Существует всемирный репозиторий программного обеспечения Ruby RAA (Ruby Application Archive). Репозиторий по состоянию на сентябрь 2007 года насчитывает более полутора тысяч проектов. Большое количество программного обеспечения, написанного на Ruby, пользуются хостингом проекта RubyForge, созданного специально с этой целью. 15 мая 2014 года RubyForge закрыт, архив программ при этом останется доступен для скачивания.

Большинство расширений распространяются под свободными лицензиями (LGPL, лицензия Ruby) и могут быть использованы в любом проекте практически без ограничений.

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

Система RDoc предназначена для автоматического извлечения документации из исходных кодов и программ на Ruby и её дальнейшей обработки. Является стандартом де-факто для подготовки документации по программному обеспечению, написанному на Ruby.

Для доступа к документации Ruby из командной строки Unix разработана программа ri. С её помощью можно получить информацию о модулях, классах и методах Ruby.

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

Ruby используется в NASA, NOAA (национальная администрация по океану и атмосфере), Motorola и других крупных организациях.[25] Следующие программы используют Ruby как скриптовый язык для расширения возможностей программы или написаны на нём (частично или полностью).

  • RPG Maker (RPG Maker XP) — RGSS (Ruby Game Scripting System)
  • Amarok
  • SketchUp
  • Inkscape — скрипты для обработки векторных изображений
  • Metasploit
  • Chef, Puppet — системы управления конфигурациями
  • Redmine — багтрекер
  • XChat
  • Для KOffice разрабатывается проект Kross — механизм для поддержки скриптов, который включает Ruby.
  • WATIR (англ. Web Application Testing in Ruby) — свободное средство для автоматического тестирования веб-приложений в браузере.

Разработка мобильных приложений

  • Titanium Studio — среда разработки мобильных приложений на HTML5, CSS3, Javascript, Ruby, Rails, Python, PHP
  • Ruboto — среда разработки Android приложений на Ruby
  • RubyMotion — среда разработки iOS приложений на Ruby
  • MobiRuby — инструмент разработки Android и iOS приложений на Ruby
  • Rhodes (англ.) — фреймворк для разработки Enteprise Mobility приложений для смартфонов и устройств Motorola[26]

См. также

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

Примечания

  1. 1 2 [www.ruby-lang.org/en/about/ О Ruby.]
  2. Расширения файлов Ruby:
    .rb — исходный код.
    .rbw — исходный код для выполнения программ с графическим интерфейсом в Windows, файлы с таким расширением будут выполнены интерпретатором rubyw без запуска консоли.
  3. [ftp.ruby-lang.org/pub/ruby Репозиторий Ruby.]
  4. Перевод на русский язык лицензии Ruby в Викитеке.
  5. 1 2 [www.ruby-lang.org/en/LICENSE.txt Лицензия Ruby] (англ.) (TXT). Проверено 14 августа 2006. [www.webcitation.org/617jSCkBK Архивировано из первоисточника 22 августа 2011]. Перевод лицензии Ruby в Викитеке.
  6. [www.ruby-lang.org/en/COPYING.txt COPYING.txt на официальном сайте Ruby.]
  7. Е. А. Роганов, Н. А. Роганова. [www.chair36.msiu.ru/images/books/roganov-roganova.pdf Программирование на языке Ruby. Учебное пособие] (PDF, 425 Кбайт). — М.: МГИУ, 2008. — 56 с. — ISBN 978-5-2760-1495-1.
  8. [www.ibm.com/developerworks/ru/library/wa-rails4/index.html?ca=drs-ru Брюс Тэйт Практическое использование Rails: Часть 4. Стратегии тестирования в Ruby on Rails.] 01.07.2008.
  9. Письмо Юкихиро Мацумото в рассылку ruby-talk [blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/382 ruby-talk:00382] от 4 июня 1999 года. Есть [www.msiu.ru/~radigin/docs/ruby-faq/node7.html перевод всего письма на русский]
  10. [www.ruby-lang.org/en/news/2014/02/24/ruby-2-1-1-is-released Ruby 2.1.1 is released]
  11. Информация взята из сопроводительных текстовых файлов Changelog. Документы различных версий различаются между собой, порой учитывая лишь версии, относящиеся к линейке, сопровождаемой данным документом.
  12. [www.artima.com/intv/ruby.html Интервью Юкихиро Мацумото] (англ.)
  13. Хэл Фултон. Программирование на языке Ruby. — 2-е изд. — М.: ДМК Пресс, 2007. — С. 24—27.
  14. [www.wonko.com/article/371 5 things I hate about Ruby] (англ.) (25 октября 2005). Проверено 30 июля 2007. [www.webcitation.org/617jShFr6 Архивировано из первоисточника 22 августа 2011].
  15. [rubini.us/ Rubinius Home]
  16. [maglev.gemstone.com/ MagLev /măg-lĕv/]
  17. [www.sdn.sap.com/irj/scn/wiki?path=/display/Research/BlueRuby Blue Ruby — New Exploratory Research]
  18. [www.macruby.org/ MacRuby]
  19. [github.com/mruby/mruby/ mruby github repository]
  20. [www.hugoestrada.net/node/164 Cygwin and Ruby Windows]
  21. Из-за слабой документированности Ruby в ранних версиях информация получена напрямую из исходников ([www.sunsite.org.uk/sites/helium.ruby-lang.org/ftp://ruby/ helium.ruby-lang.org/ftp://ruby(англ.)(недоступная ссылка — история). Проверено 16 августа 2006.). Указаны только стабильные (чётные) версии.
  22. Thomas, Dave. [www.rubycentral.com/book/ext_ruby.html Extending Ruby] (англ.). Programming Ruby — The Pragmatic Programmer’s Guide(недоступная ссылка — история). Addison Wesley Longman, Inc. Проверено 30 октября 2006. [web.archive.org/20060319005610/www.rubycentral.com/book/ext_ruby.html Архивировано из первоисточника 19 марта 2006].
  23. Rooney, Garrett. [www.onlamp.com/pub/a/onlamp/2004/11/18/extending_ruby.html Extending Ruby with C] (англ.). O’Reilly Media (18 ноября 2004). Проверено 30 октября 2006. [www.webcitation.org/617jTUgKe Архивировано из первоисточника 22 августа 2011].
  24. [members.chello.nl/~k.vangelder/ruby/learntk/ Ruby/Tk Tutorial]
  25. Хэл Фултон. Программирование на языке Ruby. — 2-е изд. — М.: ДМК Пресс, 2007. — С. 21.
  26. [www.motorola.com/Business/US-EN/RhoMobile+Suite/Rhodes Rhodes на сайте Motorola]

Литература

На русском языке
  • Д. Флэнаган, Ю. Мацумото. Язык программирования Ruby = The Ruby Programming Language / пер. с англ. Н. Вильчинский. — 1-е изд. — СПб.: Питер, 2011. — 496 с. — (Бестселлеры O’Reilly). — ISBN 978-5-459-00562-2.
  • Х. Фултон. Программирование на языке Ruby = The Ruby Way / пер. с англ. А. Слинкин. — 2-е изд. — М.: ДМК Пресс, 2007. — 688 с. — (Языки программирования). — ISBN 5-94074-357-9.
  • М. Фитцджеральд. Изучаем Ruby = Learning Ruby / пер. с англ. Н. Гаврилова. — 1-е изд. — СПб.: БХВ-Петербург, 2008. — 336 с. — ISBN 978-5-9775-0225-2.
  • Д. Х. Спольски. Лучшие примеры разработки ПО = The Best Software Writing / пер. с англ. Е. Матвеев. — СПб.: Питер, 2007. — 208 с. — (Библиотека программиста). — ISBN 5-469-01291-3.

В электронном формате:

  • Ю. Мацумото [www.opennet.ru/docs/RUS/ruby_guide/ Ruby — Руководство пользователя] = [www.rubyist.net/~slagell/ruby/index.html Ruby User’s Guide] / пер. на русский Александр Мячков на OpenNET — 2005—2008.
  • К. Пайн [www.shokhirev.com/mikhail/ruby/ltp/title.html Учись программировать] = [pine.fm/LearnToProgram/ Learn to Program] / пер. на русский Михаил Шохирев — 2003—2009.
  • Е. Охотников [www.rsdn.ru/article/ruby/ruby_edges.xml Ruby — новые грани.] Из журнала RSDN Magazine № 4/2006.
  • Е. А. Роганов, Н. А. Роганова. Программирование на языке Ruby. Учебное пособие ([www.chair36.msiu.ru/images/books/roganov-roganova.pdf PDF, 425 Кбайт], [www.chair36.msiu.ru/publications источник]). — М.: МГИУ, 2008. — 56 с. — ISBN 978-5-2760-1495-1.
  • [acm.mipt.ru/twiki/bin/view/Ruby Образовательный ресурс, посвящённый Ruby], на сайте МФТИ.
На английском языке
  • David Thomas, Chad Fowler, Andrew Hunt. Programming Ruby: The Pragmatic Programmer’s Guide, Second Edition. — Boston: Addison-Wesley, 2004. — 864 с. — ISBN 978-0-9745-1405-5.
  • Dave Thomas, Chad Fowler, Andy Hunt. Programming Ruby 1.9: The Pragmatic Programmers’ Guide. — Dallas: Pragmatic Bookshelf, 2009. — 944 с. — ISBN 978-1-93435-608-1.
  • Yukihiro Matsumoto. Ruby in a Nutshell. — Sebastopol, CA: O’Reilly, 2001. — 224 с. — ISBN 978-0-596-00214-5.

В электронном формате:

  • [www.ruby-doc.org/docs/ProgrammingRuby/ Programming Ruby. The Pragmatic Programmer’s Guide] — часто упоминаемая книга по Ruby, охватывающая основные стороны программирования на этом языке.
  • [www.sapphiresteel.com/The-Little-Book-Of-Ruby The Little Book Of Ruby. 2006—2008 (PDF).]

Ссылки

  • [www.ruby-lang.org/ Официальный сайт Ruby.] (англ.)
  • [ftp.ruby-lang.org/pub/ruby/ Репозиторий Ruby.]
  • [github.com/arbox/ruby-style-guide Руби: руководство по стилю оформления]
  • [www.ruby-lang.org/en/documentation/ Различные источники документации по Ruby.] (англ.)
  • [rubygems.org/ Репозиторий пакетов .gem] для менеджера пакетов RubyGems.
  • [ruby.hasbrains.org Видеоуроки на русском] (рус.)
  • Ruby в каталоге ссылок Open Directory Project (dmoz).
  • [rubycode.ru/ Блог о Ruby]

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


У Ростовых, как и всегда по воскресениям, обедал кое кто из близких знакомых.
Пьер приехал раньше, чтобы застать их одних.
Пьер за этот год так потолстел, что он был бы уродлив, ежели бы он не был так велик ростом, крупен членами и не был так силен, что, очевидно, легко носил свою толщину.
Он, пыхтя и что то бормоча про себя, вошел на лестницу. Кучер его уже не спрашивал, дожидаться ли. Он знал, что когда граф у Ростовых, то до двенадцатого часу. Лакеи Ростовых радостно бросились снимать с него плащ и принимать палку и шляпу. Пьер, по привычке клубной, и палку и шляпу оставлял в передней.
Первое лицо, которое он увидал у Ростовых, была Наташа. Еще прежде, чем он увидал ее, он, снимая плащ в передней, услыхал ее. Она пела солфеджи в зале. Он внал, что она не пела со времени своей болезни, и потому звук ее голоса удивил и обрадовал его. Он тихо отворил дверь и увидал Наташу в ее лиловом платье, в котором она была у обедни, прохаживающуюся по комнате и поющую. Она шла задом к нему, когда он отворил дверь, но когда она круто повернулась и увидала его толстое, удивленное лицо, она покраснела и быстро подошла к нему.
– Я хочу попробовать опять петь, – сказала она. – Все таки это занятие, – прибавила она, как будто извиняясь.
– И прекрасно.
– Как я рада, что вы приехали! Я нынче так счастлива! – сказала она с тем прежним оживлением, которого уже давно не видел в ней Пьер. – Вы знаете, Nicolas получил Георгиевский крест. Я так горда за него.
– Как же, я прислал приказ. Ну, я вам не хочу мешать, – прибавил он и хотел пройти в гостиную.
Наташа остановила его.
– Граф, что это, дурно, что я пою? – сказала она, покраснев, но, не спуская глаз, вопросительно глядя на Пьера.
– Нет… Отчего же? Напротив… Но отчего вы меня спрашиваете?
– Я сама не знаю, – быстро отвечала Наташа, – но я ничего бы не хотела сделать, что бы вам не нравилось. Я вам верю во всем. Вы не знаете, как вы для меля важны и как вы много для меня сделали!.. – Она говорила быстро и не замечая того, как Пьер покраснел при этих словах. – Я видела в том же приказе он, Болконский (быстро, шепотом проговорила она это слово), он в России и опять служит. Как вы думаете, – сказала она быстро, видимо, торопясь говорить, потому что она боялась за свои силы, – простит он меня когда нибудь? Не будет он иметь против меня злого чувства? Как вы думаете? Как вы думаете?
– Я думаю… – сказал Пьер. – Ему нечего прощать… Ежели бы я был на его месте… – По связи воспоминаний, Пьер мгновенно перенесся воображением к тому времени, когда он, утешая ее, сказал ей, что ежели бы он был не он, а лучший человек в мире и свободен, то он на коленях просил бы ее руки, и то же чувство жалости, нежности, любви охватило его, и те же слова были у него на устах. Но она не дала ему времени сказать их.
– Да вы – вы, – сказала она, с восторгом произнося это слово вы, – другое дело. Добрее, великодушнее, лучше вас я не знаю человека, и не может быть. Ежели бы вас не было тогда, да и теперь, я не знаю, что бы было со мною, потому что… – Слезы вдруг полились ей в глаза; она повернулась, подняла ноты к глазам, запела и пошла опять ходить по зале.
В это же время из гостиной выбежал Петя.
Петя был теперь красивый, румяный пятнадцатилетний мальчик с толстыми, красными губами, похожий на Наташу. Он готовился в университет, но в последнее время, с товарищем своим Оболенским, тайно решил, что пойдет в гусары.
Петя выскочил к своему тезке, чтобы переговорить о деле.
Он просил его узнать, примут ли его в гусары.
Пьер шел по гостиной, не слушая Петю.
Петя дернул его за руку, чтоб обратить на себя его вниманье.
– Ну что мое дело, Петр Кирилыч. Ради бога! Одна надежда на вас, – говорил Петя.
– Ах да, твое дело. В гусары то? Скажу, скажу. Нынче скажу все.
– Ну что, mon cher, ну что, достали манифест? – спросил старый граф. – А графинюшка была у обедни у Разумовских, молитву новую слышала. Очень хорошая, говорит.
– Достал, – отвечал Пьер. – Завтра государь будет… Необычайное дворянское собрание и, говорят, по десяти с тысячи набор. Да, поздравляю вас.
– Да, да, слава богу. Ну, а из армии что?
– Наши опять отступили. Под Смоленском уже, говорят, – отвечал Пьер.
– Боже мой, боже мой! – сказал граф. – Где же манифест?
– Воззвание! Ах, да! – Пьер стал в карманах искать бумаг и не мог найти их. Продолжая охлопывать карманы, он поцеловал руку у вошедшей графини и беспокойно оглядывался, очевидно, ожидая Наташу, которая не пела больше, но и не приходила в гостиную.
– Ей богу, не знаю, куда я его дел, – сказал он.
– Ну уж, вечно растеряет все, – сказала графиня. Наташа вошла с размягченным, взволнованным лицом и села, молча глядя на Пьера. Как только она вошла в комнату, лицо Пьера, до этого пасмурное, просияло, и он, продолжая отыскивать бумаги, несколько раз взглядывал на нее.
– Ей богу, я съезжу, я дома забыл. Непременно…
– Ну, к обеду опоздаете.
– Ах, и кучер уехал.
Но Соня, пошедшая в переднюю искать бумаги, нашла их в шляпе Пьера, куда он их старательно заложил за подкладку. Пьер было хотел читать.
– Нет, после обеда, – сказал старый граф, видимо, в этом чтении предвидевший большое удовольствие.
За обедом, за которым пили шампанское за здоровье нового Георгиевского кавалера, Шиншин рассказывал городские новости о болезни старой грузинской княгини, о том, что Метивье исчез из Москвы, и о том, что к Растопчину привели какого то немца и объявили ему, что это шампиньон (так рассказывал сам граф Растопчин), и как граф Растопчин велел шампиньона отпустить, сказав народу, что это не шампиньон, а просто старый гриб немец.
– Хватают, хватают, – сказал граф, – я графине и то говорю, чтобы поменьше говорила по французски. Теперь не время.
– А слышали? – сказал Шиншин. – Князь Голицын русского учителя взял, по русски учится – il commence a devenir dangereux de parler francais dans les rues. [становится опасным говорить по французски на улицах.]
– Ну что ж, граф Петр Кирилыч, как ополченье то собирать будут, и вам придется на коня? – сказал старый граф, обращаясь к Пьеру.
Пьер был молчалив и задумчив во все время этого обеда. Он, как бы не понимая, посмотрел на графа при этом обращении.
– Да, да, на войну, – сказал он, – нет! Какой я воин! А впрочем, все так странно, так странно! Да я и сам не понимаю. Я не знаю, я так далек от военных вкусов, но в теперешние времена никто за себя отвечать не может.
После обеда граф уселся покойно в кресло и с серьезным лицом попросил Соню, славившуюся мастерством чтения, читать.
– «Первопрестольной столице нашей Москве.
Неприятель вошел с великими силами в пределы России. Он идет разорять любезное наше отечество», – старательно читала Соня своим тоненьким голоском. Граф, закрыв глаза, слушал, порывисто вздыхая в некоторых местах.
Наташа сидела вытянувшись, испытующе и прямо глядя то на отца, то на Пьера.
Пьер чувствовал на себе ее взгляд и старался не оглядываться. Графиня неодобрительно и сердито покачивала головой против каждого торжественного выражения манифеста. Она во всех этих словах видела только то, что опасности, угрожающие ее сыну, еще не скоро прекратятся. Шиншин, сложив рот в насмешливую улыбку, очевидно приготовился насмехаться над тем, что первое представится для насмешки: над чтением Сони, над тем, что скажет граф, даже над самым воззванием, ежели не представится лучше предлога.
Прочтя об опасностях, угрожающих России, о надеждах, возлагаемых государем на Москву, и в особенности на знаменитое дворянство, Соня с дрожанием голоса, происходившим преимущественно от внимания, с которым ее слушали, прочла последние слова: «Мы не умедлим сами стать посреди народа своего в сей столице и в других государства нашего местах для совещания и руководствования всеми нашими ополчениями, как ныне преграждающими пути врагу, так и вновь устроенными на поражение оного, везде, где только появится. Да обратится погибель, в которую он мнит низринуть нас, на главу его, и освобожденная от рабства Европа да возвеличит имя России!»
– Вот это так! – вскрикнул граф, открывая мокрые глаза и несколько раз прерываясь от сопенья, как будто к носу ему подносили склянку с крепкой уксусной солью. – Только скажи государь, мы всем пожертвуем и ничего не пожалеем.
Шиншин еще не успел сказать приготовленную им шутку на патриотизм графа, как Наташа вскочила с своего места и подбежала к отцу.
– Что за прелесть, этот папа! – проговорила она, целуя его, и она опять взглянула на Пьера с тем бессознательным кокетством, которое вернулось к ней вместе с ее оживлением.
– Вот так патриотка! – сказал Шиншин.
– Совсем не патриотка, а просто… – обиженно отвечала Наташа. – Вам все смешно, а это совсем не шутка…
– Какие шутки! – повторил граф. – Только скажи он слово, мы все пойдем… Мы не немцы какие нибудь…
– А заметили вы, – сказал Пьер, – что сказало: «для совещания».
– Ну уж там для чего бы ни было…
В это время Петя, на которого никто не обращал внимания, подошел к отцу и, весь красный, ломающимся, то грубым, то тонким голосом, сказал:
– Ну теперь, папенька, я решительно скажу – и маменька тоже, как хотите, – я решительно скажу, что вы пустите меня в военную службу, потому что я не могу… вот и всё…
Графиня с ужасом подняла глаза к небу, всплеснула руками и сердито обратилась к мужу.
– Вот и договорился! – сказала она.
Но граф в ту же минуту оправился от волнения.
– Ну, ну, – сказал он. – Вот воин еще! Глупости то оставь: учиться надо.
– Это не глупости, папенька. Оболенский Федя моложе меня и тоже идет, а главное, все равно я не могу ничему учиться теперь, когда… – Петя остановился, покраснел до поту и проговорил таки: – когда отечество в опасности.
– Полно, полно, глупости…
– Да ведь вы сами сказали, что всем пожертвуем.
– Петя, я тебе говорю, замолчи, – крикнул граф, оглядываясь на жену, которая, побледнев, смотрела остановившимися глазами на меньшого сына.
– А я вам говорю. Вот и Петр Кириллович скажет…
– Я тебе говорю – вздор, еще молоко не обсохло, а в военную службу хочет! Ну, ну, я тебе говорю, – и граф, взяв с собой бумаги, вероятно, чтобы еще раз прочесть в кабинете перед отдыхом, пошел из комнаты.
– Петр Кириллович, что ж, пойдем покурить…
Пьер находился в смущении и нерешительности. Непривычно блестящие и оживленные глаза Наташи беспрестанно, больше чем ласково обращавшиеся на него, привели его в это состояние.
– Нет, я, кажется, домой поеду…
– Как домой, да вы вечер у нас хотели… И то редко стали бывать. А эта моя… – сказал добродушно граф, указывая на Наташу, – только при вас и весела…
– Да, я забыл… Мне непременно надо домой… Дела… – поспешно сказал Пьер.
– Ну так до свидания, – сказал граф, совсем уходя из комнаты.
– Отчего вы уезжаете? Отчего вы расстроены? Отчего?.. – спросила Пьера Наташа, вызывающе глядя ему в глаза.
«Оттого, что я тебя люблю! – хотел он сказать, но он не сказал этого, до слез покраснел и опустил глаза.
– Оттого, что мне лучше реже бывать у вас… Оттого… нет, просто у меня дела.
– Отчего? нет, скажите, – решительно начала было Наташа и вдруг замолчала. Они оба испуганно и смущенно смотрели друг на друга. Он попытался усмехнуться, но не мог: улыбка его выразила страдание, и он молча поцеловал ее руку и вышел.
Пьер решил сам с собою не бывать больше у Ростовых.


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


15 го числа утром, на третий день после этого, у Слободского дворца стояло бесчисленное количество экипажей.
Залы были полны. В первой были дворяне в мундирах, во второй купцы с медалями, в бородах и синих кафтанах. По зале Дворянского собрания шел гул и движение. У одного большого стола, под портретом государя, сидели на стульях с высокими спинками важнейшие вельможи; но большинство дворян ходило по зале.
Все дворяне, те самые, которых каждый день видал Пьер то в клубе, то в их домах, – все были в мундирах, кто в екатерининских, кто в павловских, кто в новых александровских, кто в общем дворянском, и этот общий характер мундира придавал что то странное и фантастическое этим старым и молодым, самым разнообразным и знакомым лицам. Особенно поразительны были старики, подслеповатые, беззубые, плешивые, оплывшие желтым жиром или сморщенные, худые. Они большей частью сидели на местах и молчали, и ежели ходили и говорили, то пристроивались к кому нибудь помоложе. Так же как на лицах толпы, которую на площади видел Петя, на всех этих лицах была поразительна черта противоположности: общего ожидания чего то торжественного и обыкновенного, вчерашнего – бостонной партии, Петрушки повара, здоровья Зинаиды Дмитриевны и т. п.
Пьер, с раннего утра стянутый в неловком, сделавшемся ему узким дворянском мундире, был в залах. Он был в волнении: необыкновенное собрание не только дворянства, но и купечества – сословий, etats generaux – вызвало в нем целый ряд давно оставленных, но глубоко врезавшихся в его душе мыслей о Contrat social [Общественный договор] и французской революции. Замеченные им в воззвании слова, что государь прибудет в столицу для совещания с своим народом, утверждали его в этом взгляде. И он, полагая, что в этом смысле приближается что то важное, то, чего он ждал давно, ходил, присматривался, прислушивался к говору, но нигде не находил выражения тех мыслей, которые занимали его.
Был прочтен манифест государя, вызвавший восторг, и потом все разбрелись, разговаривая. Кроме обычных интересов, Пьер слышал толки о том, где стоять предводителям в то время, как войдет государь, когда дать бал государю, разделиться ли по уездам или всей губернией… и т. д.; но как скоро дело касалось войны и того, для чего было собрано дворянство, толки были нерешительны и неопределенны. Все больше желали слушать, чем говорить.
Один мужчина средних лет, мужественный, красивый, в отставном морском мундире, говорил в одной из зал, и около него столпились. Пьер подошел к образовавшемуся кружку около говоруна и стал прислушиваться. Граф Илья Андреич в своем екатерининском, воеводском кафтане, ходивший с приятной улыбкой между толпой, со всеми знакомый, подошел тоже к этой группе и стал слушать с своей доброй улыбкой, как он всегда слушал, в знак согласия с говорившим одобрительно кивая головой. Отставной моряк говорил очень смело; это видно было по выражению лиц, его слушавших, и по тому, что известные Пьеру за самых покорных и тихих людей неодобрительно отходили от него или противоречили. Пьер протолкался в середину кружка, прислушался и убедился, что говоривший действительно был либерал, но совсем в другом смысле, чем думал Пьер. Моряк говорил тем особенно звучным, певучим, дворянским баритоном, с приятным грассированием и сокращением согласных, тем голосом, которым покрикивают: «Чеаек, трубку!», и тому подобное. Он говорил с привычкой разгула и власти в голосе.
– Что ж, что смоляне предложили ополченцев госуаю. Разве нам смоляне указ? Ежели буародное дворянство Московской губернии найдет нужным, оно может выказать свою преданность государю импературу другими средствами. Разве мы забыли ополченье в седьмом году! Только что нажились кутейники да воры грабители…
Граф Илья Андреич, сладко улыбаясь, одобрительно кивал головой.
– И что же, разве наши ополченцы составили пользу для государства? Никакой! только разорили наши хозяйства. Лучше еще набор… а то вернется к вам ни солдат, ни мужик, и только один разврат. Дворяне не жалеют своего живота, мы сами поголовно пойдем, возьмем еще рекрут, и всем нам только клич кликни гусай (он так выговаривал государь), мы все умрем за него, – прибавил оратор одушевляясь.
Илья Андреич проглатывал слюни от удовольствия и толкал Пьера, но Пьеру захотелось также говорить. Он выдвинулся вперед, чувствуя себя одушевленным, сам не зная еще чем и сам не зная еще, что он скажет. Он только что открыл рот, чтобы говорить, как один сенатор, совершенно без зубов, с умным и сердитым лицом, стоявший близко от оратора, перебил Пьера. С видимой привычкой вести прения и держать вопросы, он заговорил тихо, но слышно:
– Я полагаю, милостивый государь, – шамкая беззубым ртом, сказал сенатор, – что мы призваны сюда не для того, чтобы обсуждать, что удобнее для государства в настоящую минуту – набор или ополчение. Мы призваны для того, чтобы отвечать на то воззвание, которым нас удостоил государь император. А судить о том, что удобнее – набор или ополчение, мы предоставим судить высшей власти…
Пьер вдруг нашел исход своему одушевлению. Он ожесточился против сенатора, вносящего эту правильность и узкость воззрений в предстоящие занятия дворянства. Пьер выступил вперед и остановил его. Он сам не знал, что он будет говорить, но начал оживленно, изредка прорываясь французскими словами и книжно выражаясь по русски.
– Извините меня, ваше превосходительство, – начал он (Пьер был хорошо знаком с этим сенатором, но считал здесь необходимым обращаться к нему официально), – хотя я не согласен с господином… (Пьер запнулся. Ему хотелось сказать mon tres honorable preopinant), [мой многоуважаемый оппонент,] – с господином… que je n'ai pas L'honneur de connaitre; [которого я не имею чести знать] но я полагаю, что сословие дворянства, кроме выражения своего сочувствия и восторга, призвано также для того, чтобы и обсудить те меры, которыми мы можем помочь отечеству. Я полагаю, – говорил он, воодушевляясь, – что государь был бы сам недоволен, ежели бы он нашел в нас только владельцев мужиков, которых мы отдаем ему, и… chair a canon [мясо для пушек], которую мы из себя делаем, но не нашел бы в нас со… со… совета.
Многие поотошли от кружка, заметив презрительную улыбку сенатора и то, что Пьер говорит вольно; только Илья Андреич был доволен речью Пьера, как он был доволен речью моряка, сенатора и вообще всегда тою речью, которую он последнею слышал.
– Я полагаю, что прежде чем обсуждать эти вопросы, – продолжал Пьер, – мы должны спросить у государя, почтительнейше просить его величество коммюникировать нам, сколько у нас войска, в каком положении находятся наши войска и армии, и тогда…
Но Пьер не успел договорить этих слов, как с трех сторон вдруг напали на него. Сильнее всех напал на него давно знакомый ему, всегда хорошо расположенный к нему игрок в бостон, Степан Степанович Апраксин. Степан Степанович был в мундире, и, от мундира ли, или от других причин, Пьер увидал перед собой совсем другого человека. Степан Степанович, с вдруг проявившейся старческой злобой на лице, закричал на Пьера:
– Во первых, доложу вам, что мы не имеем права спрашивать об этом государя, а во вторых, ежели было бы такое право у российского дворянства, то государь не может нам ответить. Войска движутся сообразно с движениями неприятеля – войска убывают и прибывают…
Другой голос человека, среднего роста, лет сорока, которого Пьер в прежние времена видал у цыган и знал за нехорошего игрока в карты и который, тоже измененный в мундире, придвинулся к Пьеру, перебил Апраксина.
– Да и не время рассуждать, – говорил голос этого дворянина, – а нужно действовать: война в России. Враг наш идет, чтобы погубить Россию, чтобы поругать могилы наших отцов, чтоб увезти жен, детей. – Дворянин ударил себя в грудь. – Мы все встанем, все поголовно пойдем, все за царя батюшку! – кричал он, выкатывая кровью налившиеся глаза. Несколько одобряющих голосов послышалось из толпы. – Мы русские и не пожалеем крови своей для защиты веры, престола и отечества. А бредни надо оставить, ежели мы сыны отечества. Мы покажем Европе, как Россия восстает за Россию, – кричал дворянин.
Пьер хотел возражать, но не мог сказать ни слова. Он чувствовал, что звук его слов, независимо от того, какую они заключали мысль, был менее слышен, чем звук слов оживленного дворянина.
Илья Андреич одобривал сзади кружка; некоторые бойко поворачивались плечом к оратору при конце фразы и говорили:
– Вот так, так! Это так!
Пьер хотел сказать, что он не прочь ни от пожертвований ни деньгами, ни мужиками, ни собой, но что надо бы знать состояние дел, чтобы помогать ему, но он не мог говорить. Много голосов кричало и говорило вместе, так что Илья Андреич не успевал кивать всем; и группа увеличивалась, распадалась, опять сходилась и двинулась вся, гудя говором, в большую залу, к большому столу. Пьеру не только не удавалось говорить, но его грубо перебивали, отталкивали, отворачивались от него, как от общего врага. Это не оттого происходило, что недовольны были смыслом его речи, – ее и забыли после большого количества речей, последовавших за ней, – но для одушевления толпы нужно было иметь ощутительный предмет любви и ощутительный предмет ненависти. Пьер сделался последним. Много ораторов говорило после оживленного дворянина, и все говорили в том же тоне. Многие говорили прекрасно и оригинально.
Издатель Русского вестника Глинка, которого узнали («писатель, писатель! – послышалось в толпе), сказал, что ад должно отражать адом, что он видел ребенка, улыбающегося при блеске молнии и при раскатах грома, но что мы не будем этим ребенком.
– Да, да, при раскатах грома! – повторяли одобрительно в задних рядах.
Толпа подошла к большому столу, у которого, в мундирах, в лентах, седые, плешивые, сидели семидесятилетние вельможи старики, которых почти всех, по домам с шутами и в клубах за бостоном, видал Пьер. Толпа подошла к столу, не переставая гудеть. Один за другим, и иногда два вместе, прижатые сзади к высоким спинкам стульев налегающею толпой, говорили ораторы. Стоявшие сзади замечали, чего не досказал говоривший оратор, и торопились сказать это пропущенное. Другие, в этой жаре и тесноте, шарили в своей голове, не найдется ли какая мысль, и торопились говорить ее. Знакомые Пьеру старички вельможи сидели и оглядывались то на того, то на другого, и выражение большей части из них говорило только, что им очень жарко. Пьер, однако, чувствовал себя взволнованным, и общее чувство желания показать, что нам всё нипочем, выражавшееся больше в звуках и выражениях лиц, чем в смысле речей, сообщалось и ему. Он не отрекся от своих мыслей, но чувствовал себя в чем то виноватым и желал оправдаться.
– Я сказал только, что нам удобнее было бы делать пожертвования, когда мы будем знать, в чем нужда, – стараясь перекричать другие голоса, проговорил он.
Один ближайший старичок оглянулся на него, но тотчас был отвлечен криком, начавшимся на другой стороне стола.
– Да, Москва будет сдана! Она будет искупительницей! – кричал один.
– Он враг человечества! – кричал другой. – Позвольте мне говорить… Господа, вы меня давите…


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



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