Язык программирования

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

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

Со времени создания первых программируемых машин человечество придумало более восьми тысяч языков программирования (включая нестандартные, визуальные и эзотерические языки)[1]. Каждый год их число увеличивается. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты могут владеть десятком и более разных языков программирования.

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

Как правило, язык программирования существует в нескольких, но существенно отличающихся видах:

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




История

Ранние этапы развития

Можно сказать, что первые языки программирования возникали ещё до появления современных электронных вычислительных машин: уже в XIX веке были изобретены устройства, которые можно с долей условности назвать программируемыми — к примеру, механические пианино и ткацкие станки. Для управления ими использовались наборы инструкций, которые в рамках современной классификации можно считать прототипами предметно-ориентированных языков программирования. Значимым можно считать «язык», на котором леди Ада Августа графиня Лавлейс написала программу для вычисления чисел Бернулли для Аналитической машины Чарльза Бэббиджа, ставшей бы, в случае реализации, первым компьютером — хотя и механическим, с паровым двигателем — в мире.

В 19301940 годах, А. Чёрч, А. Тьюринг, А. Марков разработали математические абстракции (лямбда-исчисление, машину Тьюринга, нормальные алгоритмы) соответственно — для формализации алгоритмов.

В это же время, в 1940-е годы, появились электрические цифровые компьютеры и был разработан язык, который можно считать первым высокоуровневым языком программирования для ЭВМ — «Plankalkül», созданный немецким инженером К. Цузе в период с 1943 по 1945 годы[2].

Программисты ЭВМ начала 1950-х годов, в особенности таких, как UNIVAC и IBM 701, при создании программ пользовались непосредственно машинным кодом, запись программы на котором состояла из единиц и нулей и который принято считать языком программирования первого поколения (при этом разные машины разных производителей использовали различные коды, что требовало переписывать программу при переходе на другую ЭВМ). Вскоре на смену такому методу программирования пришло применение языков второго поколения, также ограниченных спецификациями конкретных машин, но более простых для использования человеком за счет использования мнемоник (символьных обозначений машинных команд) и возможности сопоставления имен адресам в машинной памяти. Они традиционно известны под наименованием языков ассемблера и автокодов. Однако, при использовании ассемблера становился необходимым процесс перевода программы на язык машинных кодов перед её выполнением, для чего были разработаны специальные программы, также получившие название ассемблеров. Сохранялись и проблемы с переносимостью программы с ЭВМ одной архитектуры на другую, и необходимость для программиста при решении задачи мыслить терминами «низкого уровня» — ячейка, адрес, команда. Позднее языки второго поколения были усовершенствованы: в них появилась поддержка макрокоманд.

С середины 1950-х начали появляться языки третьего поколения, такие как Фортран, Лисп и Кобол[3]. Языки программирования этого типа более абстрактны (их ещё называют «языками высокого уровня») и универсальны, не имеют жесткой зависимости от конкретной аппаратной платформы и используемых на ней машинных команд. Программа на языке высокого уровня может исполняться (по крайней мере, в теории, на практике обычно имеются ряд специфических версий или диалектов реализации языка) на любой ЭВМ, на которой для этого языка имеется транслятор (инструмент, переводящий программу на язык машины, после чего она может быть выполнена процессором).

Обновлённые версии перечисленных языков до сих пор имеют хождение в разработке программного обеспечения, и каждый из них оказал определенное влияние на последующее развитие языков программирования[4]. Тогда же, в конце 1950-х годов, появился Алгол, также послуживший основой для ряда дальнейших разработок в этой сфере. Необходимо заметить, что на формат и применение ранних языков программирования в значительной степени влияли интерфейсные ограничения[5].

Совершенствование

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

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

Кроме того, в 1960—1970-х годах активно велись споры о необходимости поддержки структурного программирования в тех или иных языках[8]. В частности, голландский специалист Э. Дейкстра выступал в печати с предложениями о полном отказе от использования инструкций GOTO во всех высокоуровневых языках. Развивались также приёмы, направленные на сокращение объёма программ и повышение продуктивности работы программиста и пользователя.

Объединение и развитие

В 1980-е годы наступил период, который можно условно назвать временем консолидации. Язык С++ объединил в себе черты объектно-ориентированного и системного программирования, правительство США стандартизировало язык Ада, производный от Паскаля и предназначенный для использования в бортовых системах управления военными объектами, в Японии и других странах мира осуществлялись значительные инвестиции в изучение перспектив так называемых языков пятого поколения, которые включали бы в себя конструкции логического программирования[9]. Сообщество функциональных языков приняло в качестве стандарта ML и Лисп. В целом этот период характеризовался скорее опорой на заложенный в предыдущем десятилетии фундамент, нежели разработкой новых парадигм.

Важной тенденцией, которая наблюдалась в разработке языков программирования для крупномасштабных систем, было сосредоточение на применении модулей — объемных единиц организации кода. Хотя некоторые языки, такие, как ПЛ/1, уже поддерживали соответствующую функциональность, модульная система нашла своё отражение и применение также и в языках Модула-2, Оберон, Ада и ML. Часто модульные системы объединялись с конструкциями обобщённого программирования[10].

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

В 1990-х годах в связи с активным развитием Интернета распространение получили языки, позволяющие создавать сценарии для веб-страниц — главным образом Perl, развившийся из скриптового инструмента для Unix-систем, и Java. Возрастала также и популярность технологий виртуализации. Эти изменения, однако, также не представляли собой фундаментальных новаций, являясь скорее совершенствованием уже существовавших парадигм и языков (в последнем случае — главным образом семейства Си).

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

Стандартизация языков программирования

Для многих широко распространённых языков программирования созданы международные стандарты. Специальные организации проводят регулярное обновление и публикацию спецификаций и формальных определений соответствующего языка. В рамках таких комитетов продолжается разработка и модернизация языков программирования и решаются вопросы о расширении или поддержке уже существующих и новых языковых конструкций.

Типы данных

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

Особая система, по которой данные организуются в программе, — это система типов языка программирования; разработка и изучение систем типов известна под названием теория типов. Языки можно поделить на имеющие статическую типизацию и динамическую типизацию, а также бестиповые языки (например, Forth).

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

Структуры данных

Системы типов в языках высокого уровня позволяют определять сложные, составные типы, так называемые структуры данных. Есть две принципиальных возможности их образования: произведения типов и суммы типов (подробнее см. полиморфизм записей). Эти операции могут применяться как к примитивным типам, так и к ранее определённым составным.

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

Семантика языков программирования

Существует несколько подходов к определению семантики языков программирования.

Наиболее широко распространены разновидности следующих трёх: операционного, деривационного (аксиоматического) и денотационного (математического).

  • При описании семантики в рамках операционного подхода обычно исполнение конструкций языка программирования интерпретируется с помощью некоторой воображаемой (абстрактной) ЭВМ.
  • Аксиоматическая семантика описывает последствия выполнения конструкций языка с помощью языка логики и задания пред- и постусловий.
  • Денотационная семантика оперирует понятиями, типичными для математики — множества, соответствия, а также суждения, утверждения и др.

Классификация

Языки низкого и высокого уровня

Формально язык программирования не имеет такого критерия как «уровень». Условно этот термин означает степень отличия семантики языка от целевой платформы, то есть машинного языка предполагаемой архитектуры микропроцессора, для которой планируется порождать исполнимый код. Однако, история знает случаи, когда язык, являющийся «низкоуровневым» на одной платформе, компилировался как «высокоуровневый» на другой (таким образом программы на ассемблере VAX использовались на DEC Alpha), или когда язык, считающийся «высокоуровневым», реализовывался аппаратно (см. Лисп-машина, Java Optimized Processor[en]).

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

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

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

Термин «язык программирования высокого уровня» предполагает, что особенности конкретных компьютерных архитектур в нём не учитываются, поэтому созданные приложения легко переносятся с компьютера на компьютер. На практике, мейнстримные языки лишь претендуют на звание «высокоуровневых», но реально предоставляют лишь те «высокоуровневые» конструкции, что находят однозначное соответствие инструкциям в машине фон-Неймана[11]

Язык C изначально позиционировался как «язык среднего уровня» или как «высокоуровневый ассемблер».

Функциональные языки зачастую рассматриваются как «высокоуровневые», хотя, вообще говоря, это не обязательно так — существуют и низкоуровневые функциональные языки, например, BitC.

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

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

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

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

Компилируемые и интерпретируемые языки

Языки программирования могут быть реализованы как компилируемые, интерпретируемые и встраиваемые. Распространено заблуждение, согласно которому способ реализации является присущим конкретному языку свойством. В действительности, это деление весьма условно. В ряде случаев язык имеет формальную семантику, ориентированную на интерпретацию, но все или почти все его действительные реализации являются компиляторами, порой весьма эффективно оптимизирующими (примерами могут служить языки семейства ML, такие как Standard ML, Haskell).

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

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

Для любого традиционно компилируемого языка (такого как Паскаль) можно написать интерпретатор. Но многие интерпретируемые языки включают такие возможности как динамическая генерация кода (см. eval[en]), так что их компиляция должна быть динамической — см. динамическая компиляция (в этом случае составной термин «язык + способ его реализации» в достаточной степени оказывается уместен). Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макрокоманд). Есть языки, размывающие границы между интерпретацией и компиляцией — например, Forth.

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

Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# — Common Language Runtime. Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов.

Языки первого и высшего порядка

Начальные сведения

Математическая логика классифицируется по порядку — см. логика первого порядка и логика высшего порядка. Эта терминология естественным образом наследуется информатикой. Языки первого порядка позволяют определять только зависимости первого порядка между величинами. Например, значение sqare x зависит от значения x. Такие зависимости называются процедурами или функциями (некоторые языки проводят различия между этими понятиями, но в общем случае принципиальных отличий нет, разница лишь в наличии возвращаемого значения). Языки высшего порядка позволяют определять зависимости между зависимостями. Например, значение map f x зависит от значений f и x, где значение f само выражает абстрактную зависимость (другими словами, параметр f варьируется над множеством функций определённой сигнатуры). При этом говорят, что такой язык рассматривает зависимости (функции) как объекты первого класса, иначе говоря, допускает функции первого класса[12].

Выразительность

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

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

Эффективность

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

Безопасные и небезопасные языки

Язык называется безопасным, если программы на нём, которые могут быть приняты компилятором как правильно построенные, в динамике никогда не выйдут за рамки допустимого поведения[14]. Это не значит, что такие программы не содержат ошибок вообще. Термин «хорошее поведение программы» (англ. well behavior) означает, что даже если программа содержит некий баг (в частности, логическую ошибку), она тем не менее не способна нарушить целостность данных и обрушиться[en] (англ. go wrong). Хотя термины неформальны, безопасность некоторых языков (например, Standard ML) математически доказуема. Безопасность других (например, Ada) была обеспечена ad hoc-образом, что может обернуться катастрофами, если положиться на них в ответственных задачах (см. пример такой катастрофы). Неформальная терминология была популяризована Робином Милнером, одним из авторов теории формальной верификации и собственно языка Standard ML.

Степень контроля ошибок и реакция языка на них могут различаться. Например, Standard ML не допускает над данными никаких операций, кроме тех, что разрешены явно и формализованы; однако, программы на нём всё же могут завершаться порождением необработанного исключения. Его потомок, MLPolyR гарантирует также и отсутствие необработанных исключений. Java и C# менее строги и контролируют лишь утечки памяти, поэтому в их контексте чаще используют более узкий термин «безопасность типов в отношении доступа к памяти» (англ. memory type safety). Сильно динамически типизируемые языки отслеживают поведение программ в динамике (что влечёт снижение быстродействия) и реагируют на ошибки порождением исключения. Все эти языки ориентированы на практичность, предоставляя оптимальный компромисс между пресечением серьёзных сбоев и высокой скоростью разработки программ. Но существуют и языки, предназначенные для написания программ, которые верны по построению, то есть обеспечивающие гарантию того, что исполнимая программа по структуре и поведению будет тождественна её спецификации (см. параметричность[en], зависимый тип). Как следствие, программы на таких языках часто называют «исполнимыми спецификациями». Однако, трудоёмкость разработки на таких языках возрастает на порядки, кроме того, они требуют очень высокой квалификации разработчика. Поэтому такие языки используются только в формальной верификации. Примерами таких языков служат Agda, Coq.

Языки Си и его потомок C++ являются небезопасными[15]. В программах на них обширно встречаются ситуации ослабления типизации (приведение типов) и прямого её нарушения (каламбур типизации), так что ошибки доступа к памяти являются в них статистической нормой. Самые мощные системы статического анализа для них способны обнаруживать не более 70 — 80 % ошибок (см. PVS-Studio[en], [16][17]), и их использование обходится очень дорого в денежном смысле, а достоверно гарантировать безотказность программ на этих языках невозможно, не прибегая к формальной верификации, что не только ещё дороже, но и требует специальных знаний (см. примеры (англ.)). У Си есть также безопасный потомок — Cyclone.

Язык Forth не претендует на звание «безопасного», но, тем не менее, на практике существование программ, способных повредить данные, почти исключено, так как содержащая потенциально опасную ошибку программа аварийно завершается на первом же тестовом запуске, принуждая к коррекции исходного кода. В сообществе Erlang принят подход «let it crash» (рус. дай ей обрушиться), также нацеленный на раннее выявление ошибок.

Языки для программирования в мелком и крупном масштабе

Программы могут решать задачи различного масштаба: одна программа строит график для заданной функции, а другая управляет документооборотом крупного предприятия. Различные языки программирования расчитаны на разный исходный масштаб задачи и, что ещё более важно, по-разному справляются с ростом сложности программных систем. Некоторые языки (например, Basic или классический Pascal Вирта) ориентированы исключительно на разработку мелких, структурно простых программ. Язык Си создавался как «высокоуровневый ассемблер», что само по себе не предполагает разработку систем выше некоторого порога сложности, поэтому поддержка крупномасштабного программирования в него заложена также не была. Другие языки (Erlang, Smalltalk, Prolog) предоставляют в качестве базовых примитивных элементов концепции, которые в других языках представляются конструктивно и алгоритмически сложными (процессы, классы, базы знаний). Такие языки нередко рассматриваются в роли предметно-специфичных — на них выглядит простыми некоторые (но далеко не все) задачи, которые на других языках выглядят сложными. Однако, масштабирование этих задач в них может оборачиваться затруднениями. Некоторые языки (Lisp, Forth) позволяют наращивать системы произвольно и безгранично, в том числе позволяя создавать встраиваемые предметно-специфичные языки внутри себя (как своё синтаксическое и семантическое подмножество) — поэтому их нередко называют метаязыками. Standard ML и его родственники расслаиваются на два языка, из которых один — «язык-ядро» (англ. core language) — ориентирован на разработку простых программ, а другой — «язык модулей» (англ. module language),— соответственно, на нелинейную компоновку их в сложные программные системы. Со временем были построены варианты слияния их воедино (1ML). Многие другие языки также включают системы модулей, но зачастую они позволяют лишь разбить монолитную программу на физически одноранговые фрагменты, так что иерархические зависимости организуются условно и не контролируются компилятором. В отличие от таких систем, язык модулей ML обеспечивает типобезопасность зависимостей между исходно заданными и вычисляемыми компонентами сложных программ.

Парадигма программирования

Парадигмы программирования
 • Императивная
(контрастирует с декларативной)
Процедурная
Структурная
Аспектно-ориентированная
Объектно-ориентированная
Агентно-ориентированная
Компонентно-ориентированная
Прототипно-ориентированная
Обобщённое программирование

 • Декларативная
(контрастирует с императивной)

Чистота языка
Чистота функции
Функциональная
В терминах Рефал-машины
Аппликативная
Комбинаторная
Бесточечная
(чистая конкатенативная)
Логическая
Ограничениями

 • Конкатенативная
 • Векторная[en]
 • Метапрограммирование

Языково-ориентированная
Предметно-ориентированная
Пользователями[en]
Автоматизация процесса программирования
Рефлексивность
Гомоиконность[en]

 • Связанные темы

Программирование в крупном и мелком масштабе[en]
Модульность
Полиморфизм
Продолжения и CPS
Параллелизм и конкурентность

 • Методы и алгоритмы

Автоматное
Динамическое
Потоков данных
Событийно-ориентированное
Реактивное
Сервис-ориентированное

Язык программирования строится в соответствии с той или иной базовой моделью вычислений и парадигмой программирования.

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

Математически обоснованные языки программирования

Ряд известных авторов[18][19] выделяет в особую категорию «языки, наследованные от математики» (англ. mathematically-derived languages). Алан Кэй также отделяет языки, являющиеся «стилем во плоти» (англ. crystalization of style) от прочих языков, являющихся «склеиванием возможностей» (англ. agglutination of features)[20].

Это языки, семантика которых является непосредственным воплощением некой математической модели, незначительно адаптированной (без нарушения целостности) для того, чтобы быть более практичным языком для разработки реальных программ. Лишь некоторые языки попадают под эту категорию; большинство же языков проектируются приоритетно исходя из возможности эффективной трансляции в машину Тьюринга, и имеют лишь некое подмножество в своём составе, воплощающее ту или иную математическую модель, от арифметики до средств параллелизма. Например, Occam-π[en] — это Occam, дополненный набором конструкций, воплощающих <math>\pi</math>-исчисление.

Примеры математически обоснованных языков и воплощаемых ими математических моделей:

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

  • Существенное повышение стабильности программ. В одних случаях — за счёт построения доказательства надёжности для самого языка (см. типобезопасность), существенного упрощения формальной верификации программ, и даже получения языка, который сам является системой автоматического доказательства (Coq, Agda). В других случаях — за счёт раннего обнаружения ошибок на первых же пробных запусках программ (Forth и регулярные выражения).
  • Обеспечение потенциально более высокой эффективности программ. Даже если семантика языка далека от архитектуры целевой платформы компиляции, к нему могут быть применимы формальные методики глобального анализа программ (хотя трудоёмкость написания даже тривиального транслятора может оказаться выше). Например, для языков Scheme и Standard ML существуют развитые полнопрограммно-оптимизирующие компиляторы и суперкомпиляторы, результат работы которых может уверенно конкурировать по скорости с языком низкого уровня Си и даже опережать последний (хотя ресурсоёмкость работы самих компиляторов оказывается значительно выше). Одна из самых быстрых СУБД — KDB[23] — написана на языке K. Язык Scala (унаследовавший математику от ML) обеспечивает на платформе JVM более высокую скорость, чем «родной» для неё язык Java. С другой стороны, Forth имеет репутацию одного из самых нетребовательных к ресурсам языков (менее требователен, чем Си) и используется для разработки приложений реального времени под самые маломощные ЭВМ; кроме того, транслятор Форта является одним из наименее трудоёмких в реализации на ассемблере.
  • Заранее известный (неограниченный или, наоборот, чётко очерченный) предел роста сложности программных компонентов, систем и комплексов, которые можно выразить средствами этого языка с сохранением показателей качества[18][24]. Языки, не имеющие математического обоснования (а именно такие наиболее часто применяются в мейнстриме: C++, Java, C#, Delphi и др.), на практике ограничивают реализуемую функциональность и/или снижают качество по мере усложнения системы[25], так как им присущи экспоненциальные кривые роста сложности как касательно работы одного отдельно взятого человека, так и касательно сложности управления проектом в целом[26][27]. Прогнозируемая сложность системы приводит либо к поэтапной декомпозиции проекта на множество более мелких задач, каждая из которых решается соответствующим языком; либо к языково-ориентированному программированию для случая, когда адресуемой языком задачей является как раз описание семантик и/или символьные вычисления (Lisp, ML, Haskell, Рефал, Регулярные выражения). Языки с неограниченным пределом роста сложности программ нередко относят к метаязыкам (что в непосредственном толковании термина не верно, но практике сводимо, так как всякий мини-язык, выбранный для решения некоторой подзадачи в составе общей задачи, может быть представлен в виде синтаксического и семантического подмножества данного языка, не требуя трансляции[28]).
  • Удобство для человека при решении задач, на которые этот язык ориентирован по своей природе (см. проблемно-ориентированный язык), что в некоторой степени также способно (косвенно) повлиять на повышение стабильности результирующих программ за счёт повышения вероятности обнаружения ошибок в исходном коде и снижения дублирования кода.

Следует иметь в виду, что языки, наследованные от «наследованных от математики» уже не обязательно будут обладать этими свойствами. Например, язык Python соединяет в себе несколько упомянутых моделей, но для их совмещения не существует обоснования, поэтому он не может считаться «наследованным от математики», и, как следствие, ему присуще лишь последнее из указанных свойств.

Используемые символы

Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ ' :

Заметным исключением является язык APL, в котором используется очень много специальных символов.

Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большу́ю популярность подобные языки не завоевали (исключение составляет Встроенный язык программирования 1С:Предприятие).

Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других — арабскими, а третьих — китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode.

См. также

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

Примечания

  1. [people.ku.edu/~nkinners/LangList/Extras/langlist.htm Список языков программирования] (англ.).  ??? (???). Проверено ???. [www.webcitation.org/6171oHmhT Архивировано из первоисточника 22 августа 2011].
  2. Rojas, Raúl, et al. (2000). «Plankalkül: The First High-Level Programming Language and its Implementation». Institut für Informatik, Freie Universität Berlin, Technical Report B-3/2000. [www.zib.de/zuse/Inhalt/Programme/Plankalkuel/Plankalkuel-Report/Plankalkuel-Report.htm (full text)]
  3. Linda Null, Julia Lobur, The essentials of computer organization and architecture, Edition 2, Jones & Bartlett Publishers, 2006, ISBN 0-7637-3769-0, p. 435
  4. O'Reilly Media. [www.oreilly.com/news/graphics/prog_lang_poster.pdf History of programming languages] (PDF). Проверено 5 октября 2006. [www.webcitation.org/6GVpy3SXM Архивировано из первоисточника 10 мая 2013].
  5. Frank da Cruz. [www.columbia.edu/acis/history/cards.html IBM Punch Cards] [www.columbia.edu/acis/history/index.html Columbia University Computing History].
  6. Richard L. Wexelblat: History of Programming Languages, Academic Press, 1981, chapter XIV.
  7. François Labelle. [www.cs.berkeley.edu/~flab/languages.html Programming Language Usage Graph]. SourceForge. Проверено 21 июня 2006. [www.webcitation.org/6GVpybs0I Архивировано из первоисточника 10 мая 2013].
  8. (2006) «The Semicolon Wars». American Scientist 94 (4): 299–303.
  9. Tetsuro Fujise, Takashi Chikayama, Kazuaki Rokusawa, Akihiko Nakase (December 1994). «KLIC: A Portable Implementation of KL1» Proc. of FGCS '94, ICOT Tokyo, December 1994. www.icot.or.jp/ARCHIVE/HomePage-E.html KLIC is a portable implementation of a concurrent logic programming language KL1.
  10. Jim Bender. [readscheme.org/modules/ Mini-Bibliography on Modules for Functional Programming Languages]. ReadScheme.org (15 марта 2004). Проверено 27 сентября 2006. [www.webcitation.org/6GVpz5qeM Архивировано из первоисточника 10 мая 2013].
  11. Lawrence C. Paulson[en]. ML for the Working Programmer. — 2nd. — Cambridge, Great Britain: Cambridge University Press, 1996. — 492 с. — ISBN 0-521-57050-6 (твёрдый переплёт), 0-521-56543-X (мягкий переплёт)., с.1.
  12. Strachey - Fundamental Concepts, 1967, 3.5.1. First and second class objects., с. 32-34.
  13. SICP.
  14. Harper - Practical Foundations for Programming Languages, Chapter 4. Statics, с. 35.
  15. Mitchel - Concepts in Programming Languages, 2004, 6.2.1 Type Safety, с. 132-133.
  16. [www.viva64.com/en/b/0241/ Comparison of static code analyzers: CppCat, Cppcheck, PVS-Studio and Visual Studio]
  17. [www.viva64.com/en/a/0052/#ID0EBKAE Comparing PVS-Studio with other code analyzers]
  18. 1 2 Andrew W. Appel [www.cs.princeton.edu/research/techreps/TR-364-92 A Critique of Standard ML]. — Princeton University, revised version of CS-TR-364-92, 1992.
  19. Greg Nelson. Systems Programming with Modula-3. — NJ: Prentice Hall, Englewood Cliffs, 1991. — 288 с. — ISBN 978-0135904640.
  20. Алан Кэй [stephane.ducasse.free.fr/FreeBooks/SmalltalkHistoryHOPL.pdf The Early History of Smalltalk]. — Apple Computer, ACM SIGPLAN Notices, vol.28, №3, March 1993.
  21. Thomas Noll, Chanchal Kumar Roy [citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.113.3913&rep=rep1&type=pdf Modeling Erlang in the Pi–Calculus]. — ACM 1-59593-066-3/05/0009, 2005.
  22. [c2.com/cgi/wiki?DesignPrinciplesBehindSmalltalk Design Principles Behind Smalltalk]
  23. [kx.com/benchmarks.php kx: Calibrated performance]
  24. Luca Cardelli [www.lucacardelli.name/Papers/TypefulProg.pdf Typeful programming]. — IFIP State-of-the-Art Reports, Springer-Verlag, 1991.
  25. [www.cse.dmu.ac.uk/~mward/ Martin Ward] [www.cse.dmu.ac.uk/~mward/martin/papers/middle-out-t.pdf Language Oriented Programming]. — Computer Science Department, Science Labs, 1994.
    There is a fundamental limit to complexity of any software system for it to be still manageable: if it requires more than "one brainfull" of information to understand a component of the system, then that component will not be understood fully. It will be extremely difficult to make enhancements or fix bugs, and each fix is likely to introduce further errors due to this incomplete knowledge.
  26. Фредерик Брукс. Мифический человеко-месяц или Как создаются программные системы. — Addison-Wesley, 1975. — ISBN ISBN 5-93286-005-7.
  27. Роберт Гласс. [www.rsdn.ru/res/book/prog/Facts_and_Fallacies.xml Факты и заблуждения профессионального программирования]. — "Символ-Плюс", 2007. — 240 с. — ISBN 5-93286-092-8, 978-5-93286-092-2.
  28. Czarnecki, O’Donnell, Striegnitz, Taha - DSL implementation in metaocaml, template haskell, and C++, 2004.

Литература

  • Харольд Абельсон, Джеральд Джей Сассман, Джули Сассман. Структура и интерпретация компьютерных программ (SICP).
  • Роберт У. Себеста. Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. — 672 с. — 5000 экз. — ISBN 5-8459-0192-8 (рус.), ISBN 0-201-75295-6 (англ.).
  • Вольфенгаген В. Э. Конструкции языков программирования. Приёмы описания. — М.: Центр ЮрИнфоР, 2001. — 276 с. — ISBN 5-89158-079-9.
  • Паронджанов В. Д. Как улучшить работу ума. Алгоритмы без программистов — это очень просто! — М.: Дело, 2001. — 360 с. — ISBN 5-7749-0211-0.
  • Ф. Бьянкуцци, Ш. Уорден. [www.symbol.ru/alphabet/792588.html Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования]. — СПб.: Символ-Плюс, 2010. — 608 с. — ISBN 978-5-93286-170-7.
  • Christopher Strachey. [www.itu.dk/courses/BPRD/E2009/fundamental-1967.pdf Fundamental Concepts in Programming Languages] ( (англ.)). — 1967.
  • Альфред Ахо, Рави Сети, Джеффри Ульман. Компиляторы: принципы, технологии и инструменты. — Addison-Wesley Publishing Company, Издательский дом «Вильямс», 1985, 2001, 2003. — 768 с. — ISBN 5-8459-0189-8 (рус.), 0-201-10088-6 (ориг.).
  • Лука Карделли[en] [www.lucacardelli.name/Papers/TypefulProg.pdf Typeful programming] ( (англ.)) // IFIP State-of-the-Art Reports. — Springer-Verlag, 1991. — Вып. Formal Description of Programming Concepts. — С. 431–507.
  • John C. Reynolds. [booksee.org/book/696403 Theories of programming languages]. — Cambridge University Press, 1998. — ISBN 978-0-521-59414-1 (hardback), 978-0-521-10697-9 (paperback).
  • Andrew W. Appel. Modern compiler implementation in ML (in C, in Java). — Cambridge, Great Britain: Cambridge University Press, 1998. — 538 с. — ISBN (ML) 0-521-58274-1 (hardback), 0-521-60764-7 (paperback).
  • John C. Mitchell. Concepts in Programming Languages. — Cambridge University Press, 2004. — ISBN 0-511-04091-1 (eBook in netLibrary); 0-521-78098-5 (hardback).
  • Robert Harper[en]. [bookfi.org/book/1076504 Practical Foundations for Programming Languages]. — version 1.37 (revised 01.11.2014). — licensed under the Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License., 2012. — 544 с.

Ссылки

  • [people.ku.edu/~nkinners/LangList/Extras/langlist.htm The Language List] (англ.) — более 2500 языков с кратким описанием
  • [www.levenez.com/lang/ Computer Languages History] (англ.) — история языков программирования (с 1954 по май 2004) (содержит регулярно обновляемую диаграмму)
  • [www.ntecs.de/old-hp/uu9r/lang/html/lang.en.html Examples] (англ.) — примеры программирования на 162 языках
  • [www.langpop.com/ Programming Language Popularity] (англ.) — регулярно обновляемое исследование популярности языков программирования
  • [www.realcoding.net/articles/10-yazykov-programmirovanie-kotorye-stoit-izuchat.html 10 языков программирования, которые стоит изучать (2006 г.)]
  • [www.tiobe.com/tpci.htm Programming Community Index] (англ.) — регулярно обновляемый рейтинг популярности языков программирования
  • [shootout.alioth.debian.org/ Computer Language Shootout Benchmarks] (англ.) — сравнение языков программирования по эффективности
  • [bluebones.net/2004/04/programming-languages-that-are-loved/ Programming Languages that are Loved] (англ.) — сравнение языков программирования по «любви» и «ненависти» к ним

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

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


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


Вечером 1 го сентября, после своего свидания с Кутузовым, граф Растопчин, огорченный и оскорбленный тем, что его не пригласили на военный совет, что Кутузов не обращал никакого внимания на его предложение принять участие в защите столицы, и удивленный новым открывшимся ему в лагере взглядом, при котором вопрос о спокойствии столицы и о патриотическом ее настроении оказывался не только второстепенным, но совершенно ненужным и ничтожным, – огорченный, оскорбленный и удивленный всем этим, граф Растопчин вернулся в Москву. Поужинав, граф, не раздеваясь, прилег на канапе и в первом часу был разбужен курьером, который привез ему письмо от Кутузова. В письме говорилось, что так как войска отступают на Рязанскую дорогу за Москву, то не угодно ли графу выслать полицейских чиновников, для проведения войск через город. Известие это не было новостью для Растопчина. Не только со вчерашнего свиданья с Кутузовым на Поклонной горе, но и с самого Бородинского сражения, когда все приезжавшие в Москву генералы в один голос говорили, что нельзя дать еще сражения, и когда с разрешения графа каждую ночь уже вывозили казенное имущество и жители до половины повыехали, – граф Растопчин знал, что Москва будет оставлена; но тем не менее известие это, сообщенное в форме простой записки с приказанием от Кутузова и полученное ночью, во время первого сна, удивило и раздражило графа.
Впоследствии, объясняя свою деятельность за это время, граф Растопчин в своих записках несколько раз писал, что у него тогда было две важные цели: De maintenir la tranquillite a Moscou et d'en faire partir les habitants. [Сохранить спокойствие в Москве и выпроводить из нее жителей.] Если допустить эту двоякую цель, всякое действие Растопчина оказывается безукоризненным. Для чего не вывезена московская святыня, оружие, патроны, порох, запасы хлеба, для чего тысячи жителей обмануты тем, что Москву не сдадут, и разорены? – Для того, чтобы соблюсти спокойствие в столице, отвечает объяснение графа Растопчина. Для чего вывозились кипы ненужных бумаг из присутственных мест и шар Леппиха и другие предметы? – Для того, чтобы оставить город пустым, отвечает объяснение графа Растопчина. Стоит только допустить, что что нибудь угрожало народному спокойствию, и всякое действие становится оправданным.
Все ужасы террора основывались только на заботе о народном спокойствии.
На чем же основывался страх графа Растопчина о народном спокойствии в Москве в 1812 году? Какая причина была предполагать в городе склонность к возмущению? Жители уезжали, войска, отступая, наполняли Москву. Почему должен был вследствие этого бунтовать народ?
Не только в Москве, но во всей России при вступлении неприятеля не произошло ничего похожего на возмущение. 1 го, 2 го сентября более десяти тысяч людей оставалось в Москве, и, кроме толпы, собравшейся на дворе главнокомандующего и привлеченной им самим, – ничего не было. Очевидно, что еще менее надо было ожидать волнения в народе, ежели бы после Бородинского сражения, когда оставление Москвы стало очевидно, или, по крайней мере, вероятно, – ежели бы тогда вместо того, чтобы волновать народ раздачей оружия и афишами, Растопчин принял меры к вывозу всей святыни, пороху, зарядов и денег и прямо объявил бы народу, что город оставляется.
Растопчин, пылкий, сангвинический человек, всегда вращавшийся в высших кругах администрации, хотя в с патриотическим чувством, не имел ни малейшего понятия о том народе, которым он думал управлять. С самого начала вступления неприятеля в Смоленск Растопчин в воображении своем составил для себя роль руководителя народного чувства – сердца России. Ему не только казалось (как это кажется каждому администратору), что он управлял внешними действиями жителей Москвы, но ему казалось, что он руководил их настроением посредством своих воззваний и афиш, писанных тем ёрническим языком, который в своей среде презирает народ и которого он не понимает, когда слышит его сверху. Красивая роль руководителя народного чувства так понравилась Растопчину, он так сжился с нею, что необходимость выйти из этой роли, необходимость оставления Москвы без всякого героического эффекта застала его врасплох, и он вдруг потерял из под ног почву, на которой стоял, в решительно не знал, что ему делать. Он хотя и знал, но не верил всею душою до последней минуты в оставление Москвы и ничего не делал с этой целью. Жители выезжали против его желания. Ежели вывозили присутственные места, то только по требованию чиновников, с которыми неохотно соглашался граф. Сам же он был занят только тою ролью, которую он для себя сделал. Как это часто бывает с людьми, одаренными пылким воображением, он знал уже давно, что Москву оставят, но знал только по рассуждению, но всей душой не верил в это, не перенесся воображением в это новое положение.
Вся деятельность его, старательная и энергическая (насколько она была полезна и отражалась на народ – это другой вопрос), вся деятельность его была направлена только на то, чтобы возбудить в жителях то чувство, которое он сам испытывал, – патриотическую ненависть к французам и уверенность в себе.
Но когда событие принимало свои настоящие, исторические размеры, когда оказалось недостаточным только словами выражать свою ненависть к французам, когда нельзя было даже сражением выразить эту ненависть, когда уверенность в себе оказалась бесполезною по отношению к одному вопросу Москвы, когда все население, как один человек, бросая свои имущества, потекло вон из Москвы, показывая этим отрицательным действием всю силу своего народного чувства, – тогда роль, выбранная Растопчиным, оказалась вдруг бессмысленной. Он почувствовал себя вдруг одиноким, слабым и смешным, без почвы под ногами.
Получив, пробужденный от сна, холодную и повелительную записку от Кутузова, Растопчин почувствовал себя тем более раздраженным, чем более он чувствовал себя виновным. В Москве оставалось все то, что именно было поручено ему, все то казенное, что ему должно было вывезти. Вывезти все не было возможности.
«Кто же виноват в этом, кто допустил до этого? – думал он. – Разумеется, не я. У меня все было готово, я держал Москву вот как! И вот до чего они довели дело! Мерзавцы, изменники!» – думал он, не определяя хорошенько того, кто были эти мерзавцы и изменники, но чувствуя необходимость ненавидеть этих кого то изменников, которые были виноваты в том фальшивом и смешном положении, в котором он находился.
Всю эту ночь граф Растопчин отдавал приказания, за которыми со всех сторон Москвы приезжали к нему. Приближенные никогда не видали графа столь мрачным и раздраженным.
«Ваше сиятельство, из вотчинного департамента пришли, от директора за приказаниями… Из консистории, из сената, из университета, из воспитательного дома, викарный прислал… спрашивает… О пожарной команде как прикажете? Из острога смотритель… из желтого дома смотритель…» – всю ночь, не переставая, докладывали графу.
На все эта вопросы граф давал короткие и сердитые ответы, показывавшие, что приказания его теперь не нужны, что все старательно подготовленное им дело теперь испорчено кем то и что этот кто то будет нести всю ответственность за все то, что произойдет теперь.
– Ну, скажи ты этому болвану, – отвечал он на запрос от вотчинного департамента, – чтоб он оставался караулить свои бумаги. Ну что ты спрашиваешь вздор о пожарной команде? Есть лошади – пускай едут во Владимир. Не французам оставлять.
– Ваше сиятельство, приехал надзиратель из сумасшедшего дома, как прикажете?
– Как прикажу? Пускай едут все, вот и всё… А сумасшедших выпустить в городе. Когда у нас сумасшедшие армиями командуют, так этим и бог велел.
На вопрос о колодниках, которые сидели в яме, граф сердито крикнул на смотрителя:
– Что ж, тебе два батальона конвоя дать, которого нет? Пустить их, и всё!
– Ваше сиятельство, есть политические: Мешков, Верещагин.
– Верещагин! Он еще не повешен? – крикнул Растопчин. – Привести его ко мне.


К девяти часам утра, когда войска уже двинулись через Москву, никто больше не приходил спрашивать распоряжений графа. Все, кто мог ехать, ехали сами собой; те, кто оставались, решали сами с собой, что им надо было делать.
Граф велел подавать лошадей, чтобы ехать в Сокольники, и, нахмуренный, желтый и молчаливый, сложив руки, сидел в своем кабинете.
Каждому администратору в спокойное, не бурное время кажется, что только его усилиями движется всо ему подведомственное народонаселение, и в этом сознании своей необходимости каждый администратор чувствует главную награду за свои труды и усилия. Понятно, что до тех пор, пока историческое море спокойно, правителю администратору, с своей утлой лодочкой упирающемуся шестом в корабль народа и самому двигающемуся, должно казаться, что его усилиями двигается корабль, в который он упирается. Но стоит подняться буре, взволноваться морю и двинуться самому кораблю, и тогда уж заблуждение невозможно. Корабль идет своим громадным, независимым ходом, шест не достает до двинувшегося корабля, и правитель вдруг из положения властителя, источника силы, переходит в ничтожного, бесполезного и слабого человека.
Растопчин чувствовал это, и это то раздражало его. Полицеймейстер, которого остановила толпа, вместе с адъютантом, который пришел доложить, что лошади готовы, вошли к графу. Оба были бледны, и полицеймейстер, передав об исполнении своего поручения, сообщил, что на дворе графа стояла огромная толпа народа, желавшая его видеть.
Растопчин, ни слова не отвечая, встал и быстрыми шагами направился в свою роскошную светлую гостиную, подошел к двери балкона, взялся за ручку, оставил ее и перешел к окну, из которого виднее была вся толпа. Высокий малый стоял в передних рядах и с строгим лицом, размахивая рукой, говорил что то. Окровавленный кузнец с мрачным видом стоял подле него. Сквозь закрытые окна слышен был гул голосов.
– Готов экипаж? – сказал Растопчин, отходя от окна.
– Готов, ваше сиятельство, – сказал адъютант.
Растопчин опять подошел к двери балкона.
– Да чего они хотят? – спросил он у полицеймейстера.
– Ваше сиятельство, они говорят, что собрались идти на французов по вашему приказанью, про измену что то кричали. Но буйная толпа, ваше сиятельство. Я насилу уехал. Ваше сиятельство, осмелюсь предложить…
– Извольте идти, я без вас знаю, что делать, – сердито крикнул Растопчин. Он стоял у двери балкона, глядя на толпу. «Вот что они сделали с Россией! Вот что они сделали со мной!» – думал Растопчин, чувствуя поднимающийся в своей душе неудержимый гнев против кого то того, кому можно было приписать причину всего случившегося. Как это часто бывает с горячими людьми, гнев уже владел им, но он искал еще для него предмета. «La voila la populace, la lie du peuple, – думал он, глядя на толпу, – la plebe qu'ils ont soulevee par leur sottise. Il leur faut une victime, [„Вот он, народец, эти подонки народонаселения, плебеи, которых они подняли своею глупостью! Им нужна жертва“.] – пришло ему в голову, глядя на размахивающего рукой высокого малого. И по тому самому это пришло ему в голову, что ему самому нужна была эта жертва, этот предмет для своего гнева.
– Готов экипаж? – в другой раз спросил он.
– Готов, ваше сиятельство. Что прикажете насчет Верещагина? Он ждет у крыльца, – отвечал адъютант.
– А! – вскрикнул Растопчин, как пораженный каким то неожиданным воспоминанием.
И, быстро отворив дверь, он вышел решительными шагами на балкон. Говор вдруг умолк, шапки и картузы снялись, и все глаза поднялись к вышедшему графу.
– Здравствуйте, ребята! – сказал граф быстро и громко. – Спасибо, что пришли. Я сейчас выйду к вам, но прежде всего нам надо управиться с злодеем. Нам надо наказать злодея, от которого погибла Москва. Подождите меня! – И граф так же быстро вернулся в покои, крепко хлопнув дверью.
По толпе пробежал одобрительный ропот удовольствия. «Он, значит, злодеев управит усех! А ты говоришь француз… он тебе всю дистанцию развяжет!» – говорили люди, как будто упрекая друг друга в своем маловерии.
Через несколько минут из парадных дверей поспешно вышел офицер, приказал что то, и драгуны вытянулись. Толпа от балкона жадно подвинулась к крыльцу. Выйдя гневно быстрыми шагами на крыльцо, Растопчин поспешно оглянулся вокруг себя, как бы отыскивая кого то.
– Где он? – сказал граф, и в ту же минуту, как он сказал это, он увидал из за угла дома выходившего между, двух драгун молодого человека с длинной тонкой шеей, с до половины выбритой и заросшей головой. Молодой человек этот был одет в когда то щегольской, крытый синим сукном, потертый лисий тулупчик и в грязные посконные арестантские шаровары, засунутые в нечищеные, стоптанные тонкие сапоги. На тонких, слабых ногах тяжело висели кандалы, затруднявшие нерешительную походку молодого человека.
– А ! – сказал Растопчин, поспешно отворачивая свой взгляд от молодого человека в лисьем тулупчике и указывая на нижнюю ступеньку крыльца. – Поставьте его сюда! – Молодой человек, брянча кандалами, тяжело переступил на указываемую ступеньку, придержав пальцем нажимавший воротник тулупчика, повернул два раза длинной шеей и, вздохнув, покорным жестом сложил перед животом тонкие, нерабочие руки.
Несколько секунд, пока молодой человек устанавливался на ступеньке, продолжалось молчание. Только в задних рядах сдавливающихся к одному месту людей слышались кряхтенье, стоны, толчки и топот переставляемых ног.
Растопчин, ожидая того, чтобы он остановился на указанном месте, хмурясь потирал рукою лицо.
– Ребята! – сказал Растопчин металлически звонким голосом, – этот человек, Верещагин – тот самый мерзавец, от которого погибла Москва.
Молодой человек в лисьем тулупчике стоял в покорной позе, сложив кисти рук вместе перед животом и немного согнувшись. Исхудалое, с безнадежным выражением, изуродованное бритою головой молодое лицо его было опущено вниз. При первых словах графа он медленно поднял голову и поглядел снизу на графа, как бы желая что то сказать ему или хоть встретить его взгляд. Но Растопчин не смотрел на него. На длинной тонкой шее молодого человека, как веревка, напружилась и посинела жила за ухом, и вдруг покраснело лицо.
Все глаза были устремлены на него. Он посмотрел на толпу, и, как бы обнадеженный тем выражением, которое он прочел на лицах людей, он печально и робко улыбнулся и, опять опустив голову, поправился ногами на ступеньке.
– Он изменил своему царю и отечеству, он передался Бонапарту, он один из всех русских осрамил имя русского, и от него погибает Москва, – говорил Растопчин ровным, резким голосом; но вдруг быстро взглянул вниз на Верещагина, продолжавшего стоять в той же покорной позе. Как будто взгляд этот взорвал его, он, подняв руку, закричал почти, обращаясь к народу: – Своим судом расправляйтесь с ним! отдаю его вам!
Народ молчал и только все теснее и теснее нажимал друг на друга. Держать друг друга, дышать в этой зараженной духоте, не иметь силы пошевелиться и ждать чего то неизвестного, непонятного и страшного становилось невыносимо. Люди, стоявшие в передних рядах, видевшие и слышавшие все то, что происходило перед ними, все с испуганно широко раскрытыми глазами и разинутыми ртами, напрягая все свои силы, удерживали на своих спинах напор задних.
– Бей его!.. Пускай погибнет изменник и не срамит имя русского! – закричал Растопчин. – Руби! Я приказываю! – Услыхав не слова, но гневные звуки голоса Растопчина, толпа застонала и надвинулась, но опять остановилась.
– Граф!.. – проговорил среди опять наступившей минутной тишины робкий и вместе театральный голос Верещагина. – Граф, один бог над нами… – сказал Верещагин, подняв голову, и опять налилась кровью толстая жила на его тонкой шее, и краска быстро выступила и сбежала с его лица. Он не договорил того, что хотел сказать.
– Руби его! Я приказываю!.. – прокричал Растопчин, вдруг побледнев так же, как Верещагин.
– Сабли вон! – крикнул офицер драгунам, сам вынимая саблю.
Другая еще сильнейшая волна взмыла по народу, и, добежав до передних рядов, волна эта сдвинула переднии, шатая, поднесла к самым ступеням крыльца. Высокий малый, с окаменелым выражением лица и с остановившейся поднятой рукой, стоял рядом с Верещагиным.
– Руби! – прошептал почти офицер драгунам, и один из солдат вдруг с исказившимся злобой лицом ударил Верещагина тупым палашом по голове.
«А!» – коротко и удивленно вскрикнул Верещагин, испуганно оглядываясь и как будто не понимая, зачем это было с ним сделано. Такой же стон удивления и ужаса пробежал по толпе.
«О господи!» – послышалось чье то печальное восклицание.
Но вслед за восклицанием удивления, вырвавшимся У Верещагина, он жалобно вскрикнул от боли, и этот крик погубил его. Та натянутая до высшей степени преграда человеческого чувства, которая держала еще толпу, прорвалось мгновенно. Преступление было начато, необходимо было довершить его. Жалобный стон упрека был заглушен грозным и гневным ревом толпы. Как последний седьмой вал, разбивающий корабли, взмыла из задних рядов эта последняя неудержимая волна, донеслась до передних, сбила их и поглотила все. Ударивший драгун хотел повторить свой удар. Верещагин с криком ужаса, заслонясь руками, бросился к народу. Высокий малый, на которого он наткнулся, вцепился руками в тонкую шею Верещагина и с диким криком, с ним вместе, упал под ноги навалившегося ревущего народа.
Одни били и рвали Верещагина, другие высокого малого. И крики задавленных людей и тех, которые старались спасти высокого малого, только возбуждали ярость толпы. Долго драгуны не могли освободить окровавленного, до полусмерти избитого фабричного. И долго, несмотря на всю горячечную поспешность, с которою толпа старалась довершить раз начатое дело, те люди, которые били, душили и рвали Верещагина, не могли убить его; но толпа давила их со всех сторон, с ними в середине, как одна масса, колыхалась из стороны в сторону и не давала им возможности ни добить, ни бросить его.
«Топором то бей, что ли?.. задавили… Изменщик, Христа продал!.. жив… живущ… по делам вору мука. Запором то!.. Али жив?»
Только когда уже перестала бороться жертва и вскрики ее заменились равномерным протяжным хрипеньем, толпа стала торопливо перемещаться около лежащего, окровавленного трупа. Каждый подходил, взглядывал на то, что было сделано, и с ужасом, упреком и удивлением теснился назад.
«О господи, народ то что зверь, где же живому быть!» – слышалось в толпе. – И малый то молодой… должно, из купцов, то то народ!.. сказывают, не тот… как же не тот… О господи… Другого избили, говорят, чуть жив… Эх, народ… Кто греха не боится… – говорили теперь те же люди, с болезненно жалостным выражением глядя на мертвое тело с посиневшим, измазанным кровью и пылью лицом и с разрубленной длинной тонкой шеей.
Полицейский старательный чиновник, найдя неприличным присутствие трупа на дворе его сиятельства, приказал драгунам вытащить тело на улицу. Два драгуна взялись за изуродованные ноги и поволокли тело. Окровавленная, измазанная в пыли, мертвая бритая голова на длинной шее, подворачиваясь, волочилась по земле. Народ жался прочь от трупа.
В то время как Верещагин упал и толпа с диким ревом стеснилась и заколыхалась над ним, Растопчин вдруг побледнел, и вместо того чтобы идти к заднему крыльцу, у которого ждали его лошади, он, сам не зная куда и зачем, опустив голову, быстрыми шагами пошел по коридору, ведущему в комнаты нижнего этажа. Лицо графа было бледно, и он не мог остановить трясущуюся, как в лихорадке, нижнюю челюсть.
– Ваше сиятельство, сюда… куда изволите?.. сюда пожалуйте, – проговорил сзади его дрожащий, испуганный голос. Граф Растопчин не в силах был ничего отвечать и, послушно повернувшись, пошел туда, куда ему указывали. У заднего крыльца стояла коляска. Далекий гул ревущей толпы слышался и здесь. Граф Растопчин торопливо сел в коляску и велел ехать в свой загородный дом в Сокольниках. Выехав на Мясницкую и не слыша больше криков толпы, граф стал раскаиваться. Он с неудовольствием вспомнил теперь волнение и испуг, которые он выказал перед своими подчиненными. «La populace est terrible, elle est hideuse, – думал он по французски. – Ils sont сошше les loups qu'on ne peut apaiser qu'avec de la chair. [Народная толпа страшна, она отвратительна. Они как волки: их ничем не удовлетворишь, кроме мяса.] „Граф! один бог над нами!“ – вдруг вспомнились ему слова Верещагина, и неприятное чувство холода пробежало по спине графа Растопчина. Но чувство это было мгновенно, и граф Растопчин презрительно улыбнулся сам над собою. „J'avais d'autres devoirs, – подумал он. – Il fallait apaiser le peuple. Bien d'autres victimes ont peri et perissent pour le bien publique“, [У меня были другие обязанности. Следовало удовлетворить народ. Много других жертв погибло и гибнет для общественного блага.] – и он стал думать о тех общих обязанностях, которые он имел в отношении своего семейства, своей (порученной ему) столице и о самом себе, – не как о Федоре Васильевиче Растопчине (он полагал, что Федор Васильевич Растопчин жертвует собою для bien publique [общественного блага]), но о себе как о главнокомандующем, о представителе власти и уполномоченном царя. „Ежели бы я был только Федор Васильевич, ma ligne de conduite aurait ete tout autrement tracee, [путь мой был бы совсем иначе начертан,] но я должен был сохранить и жизнь и достоинство главнокомандующего“.
Слегка покачиваясь на мягких рессорах экипажа и не слыша более страшных звуков толпы, Растопчин физически успокоился, и, как это всегда бывает, одновременно с физическим успокоением ум подделал для него и причины нравственного успокоения. Мысль, успокоившая Растопчина, была не новая. С тех пор как существует мир и люди убивают друг друга, никогда ни один человек не совершил преступления над себе подобным, не успокоивая себя этой самой мыслью. Мысль эта есть le bien publique [общественное благо], предполагаемое благо других людей.
Для человека, не одержимого страстью, благо это никогда не известно; но человек, совершающий преступление, всегда верно знает, в чем состоит это благо. И Растопчин теперь знал это.
Он не только в рассуждениях своих не упрекал себя в сделанном им поступке, но находил причины самодовольства в том, что он так удачно умел воспользоваться этим a propos [удобным случаем] – наказать преступника и вместе с тем успокоить толпу.
«Верещагин был судим и приговорен к смертной казни, – думал Растопчин (хотя Верещагин сенатом был только приговорен к каторжной работе). – Он был предатель и изменник; я не мог оставить его безнаказанным, и потом je faisais d'une pierre deux coups [одним камнем делал два удара]; я для успокоения отдавал жертву народу и казнил злодея».
Приехав в свой загородный дом и занявшись домашними распоряжениями, граф совершенно успокоился.
Через полчаса граф ехал на быстрых лошадях через Сокольничье поле, уже не вспоминая о том, что было, и думая и соображая только о том, что будет. Он ехал теперь к Яузскому мосту, где, ему сказали, был Кутузов. Граф Растопчин готовил в своем воображении те гневные в колкие упреки, которые он выскажет Кутузову за его обман. Он даст почувствовать этой старой придворной лисице, что ответственность за все несчастия, имеющие произойти от оставления столицы, от погибели России (как думал Растопчин), ляжет на одну его выжившую из ума старую голову. Обдумывая вперед то, что он скажет ему, Растопчин гневно поворачивался в коляске и сердито оглядывался по сторонам.
Сокольничье поле было пустынно. Только в конце его, у богадельни и желтого дома, виднелась кучки людей в белых одеждах и несколько одиноких, таких же людей, которые шли по полю, что то крича и размахивая руками.
Один вз них бежал наперерез коляске графа Растопчина. И сам граф Растопчин, и его кучер, и драгуны, все смотрели с смутным чувством ужаса и любопытства на этих выпущенных сумасшедших и в особенности на того, который подбегал к вим.
Шатаясь на своих длинных худых ногах, в развевающемся халате, сумасшедший этот стремительно бежал, не спуская глаз с Растопчина, крича ему что то хриплым голосом и делая знаки, чтобы он остановился. Обросшее неровными клочками бороды, сумрачное и торжественное лицо сумасшедшего было худо и желто. Черные агатовые зрачки его бегали низко и тревожно по шафранно желтым белкам.
– Стой! Остановись! Я говорю! – вскрикивал он пронзительно и опять что то, задыхаясь, кричал с внушительными интонациями в жестами.
Он поравнялся с коляской и бежал с ней рядом.
– Трижды убили меня, трижды воскресал из мертвых. Они побили каменьями, распяли меня… Я воскресну… воскресну… воскресну. Растерзали мое тело. Царствие божие разрушится… Трижды разрушу и трижды воздвигну его, – кричал он, все возвышая и возвышая голос. Граф Растопчин вдруг побледнел так, как он побледнел тогда, когда толпа бросилась на Верещагина. Он отвернулся.
– Пош… пошел скорее! – крикнул он на кучера дрожащим голосом.
Коляска помчалась во все ноги лошадей; но долго еще позади себя граф Растопчин слышал отдаляющийся безумный, отчаянный крик, а перед глазами видел одно удивленно испуганное, окровавленное лицо изменника в меховом тулупчике.
Как ни свежо было это воспоминание, Растопчин чувствовал теперь, что оно глубоко, до крови, врезалось в его сердце. Он ясно чувствовал теперь, что кровавый след этого воспоминания никогда не заживет, но что, напротив, чем дальше, тем злее, мучительнее будет жить до конца жизни это страшное воспоминание в его сердце. Он слышал, ему казалось теперь, звуки своих слов:
«Руби его, вы головой ответите мне!» – «Зачем я сказал эти слова! Как то нечаянно сказал… Я мог не сказать их (думал он): тогда ничего бы не было». Он видел испуганное и потом вдруг ожесточившееся лицо ударившего драгуна и взгляд молчаливого, робкого упрека, который бросил на него этот мальчик в лисьем тулупе… «Но я не для себя сделал это. Я должен был поступить так. La plebe, le traitre… le bien publique», [Чернь, злодей… общественное благо.] – думал он.
У Яузского моста все еще теснилось войско. Было жарко. Кутузов, нахмуренный, унылый, сидел на лавке около моста и плетью играл по песку, когда с шумом подскакала к нему коляска. Человек в генеральском мундире, в шляпе с плюмажем, с бегающими не то гневными, не то испуганными глазами подошел к Кутузову и стал по французски говорить ему что то. Это был граф Растопчин. Он говорил Кутузову, что явился сюда, потому что Москвы и столицы нет больше и есть одна армия.
– Было бы другое, ежели бы ваша светлость не сказали мне, что вы не сдадите Москвы, не давши еще сражения: всего этого не было бы! – сказал он.
Кутузов глядел на Растопчина и, как будто не понимая значения обращенных к нему слов, старательно усиливался прочесть что то особенное, написанное в эту минуту на лице говорившего с ним человека. Растопчин, смутившись, замолчал. Кутузов слегка покачал головой и, не спуская испытующего взгляда с лица Растопчина, тихо проговорил:
– Да, я не отдам Москвы, не дав сражения.
Думал ли Кутузов совершенно о другом, говоря эти слова, или нарочно, зная их бессмысленность, сказал их, но граф Растопчин ничего не ответил и поспешно отошел от Кутузова. И странное дело! Главнокомандующий Москвы, гордый граф Растопчин, взяв в руки нагайку, подошел к мосту и стал с криком разгонять столпившиеся повозки.


В четвертом часу пополудни войска Мюрата вступали в Москву. Впереди ехал отряд виртембергских гусар, позади верхом, с большой свитой, ехал сам неаполитанский король.
Около середины Арбата, близ Николы Явленного, Мюрат остановился, ожидая известия от передового отряда о том, в каком положении находилась городская крепость «le Kremlin».
Вокруг Мюрата собралась небольшая кучка людей из остававшихся в Москве жителей. Все с робким недоумением смотрели на странного, изукрашенного перьями и золотом длинноволосого начальника.
– Что ж, это сам, что ли, царь ихний? Ничево! – слышались тихие голоса.
Переводчик подъехал к кучке народа.
– Шапку то сними… шапку то, – заговорили в толпе, обращаясь друг к другу. Переводчик обратился к одному старому дворнику и спросил, далеко ли до Кремля? Дворник, прислушиваясь с недоумением к чуждому ему польскому акценту и не признавая звуков говора переводчика за русскую речь, не понимал, что ему говорили, и прятался за других.
Мюрат подвинулся к переводчику в велел спросить, где русские войска. Один из русских людей понял, чего у него спрашивали, и несколько голосов вдруг стали отвечать переводчику. Французский офицер из передового отряда подъехал к Мюрату и доложил, что ворота в крепость заделаны и что, вероятно, там засада.
– Хорошо, – сказал Мюрат и, обратившись к одному из господ своей свиты, приказал выдвинуть четыре легких орудия и обстрелять ворота.
Артиллерия на рысях выехала из за колонны, шедшей за Мюратом, и поехала по Арбату. Спустившись до конца Вздвиженки, артиллерия остановилась и выстроилась на площади. Несколько французских офицеров распоряжались пушками, расстанавливая их, и смотрели в Кремль в зрительную трубу.
В Кремле раздавался благовест к вечерне, и этот звон смущал французов. Они предполагали, что это был призыв к оружию. Несколько человек пехотных солдат побежали к Кутафьевским воротам. В воротах лежали бревна и тесовые щиты. Два ружейные выстрела раздались из под ворот, как только офицер с командой стал подбегать к ним. Генерал, стоявший у пушек, крикнул офицеру командные слова, и офицер с солдатами побежал назад.
Послышалось еще три выстрела из ворот.
Один выстрел задел в ногу французского солдата, и странный крик немногих голосов послышался из за щитов. На лицах французского генерала, офицеров и солдат одновременно, как по команде, прежнее выражение веселости и спокойствия заменилось упорным, сосредоточенным выражением готовности на борьбу и страдания. Для них всех, начиная от маршала и до последнего солдата, это место не было Вздвиженка, Моховая, Кутафья и Троицкие ворота, а это была новая местность нового поля, вероятно, кровопролитного сражения. И все приготовились к этому сражению. Крики из ворот затихли. Орудия были выдвинуты. Артиллеристы сдули нагоревшие пальники. Офицер скомандовал «feu!» [пали!], и два свистящие звука жестянок раздались один за другим. Картечные пули затрещали по камню ворот, бревнам и щитам; и два облака дыма заколебались на площади.
Несколько мгновений после того, как затихли перекаты выстрелов по каменному Кремлю, странный звук послышался над головами французов. Огромная стая галок поднялась над стенами и, каркая и шумя тысячами крыл, закружилась в воздухе. Вместе с этим звуком раздался человеческий одинокий крик в воротах, и из за дыма появилась фигура человека без шапки, в кафтане. Держа ружье, он целился во французов. Feu! – повторил артиллерийский офицер, и в одно и то же время раздались один ружейный и два орудийных выстрела. Дым опять закрыл ворота.
За щитами больше ничего не шевелилось, и пехотные французские солдаты с офицерами пошли к воротам. В воротах лежало три раненых и четыре убитых человека. Два человека в кафтанах убегали низом, вдоль стен, к Знаменке.
– Enlevez moi ca, [Уберите это,] – сказал офицер, указывая на бревна и трупы; и французы, добив раненых, перебросили трупы вниз за ограду. Кто были эти люди, никто не знал. «Enlevez moi ca», – сказано только про них, и их выбросили и прибрали потом, чтобы они не воняли. Один Тьер посвятил их памяти несколько красноречивых строк: «Ces miserables avaient envahi la citadelle sacree, s'etaient empares des fusils de l'arsenal, et tiraient (ces miserables) sur les Francais. On en sabra quelques'uns et on purgea le Kremlin de leur presence. [Эти несчастные наполнили священную крепость, овладели ружьями арсенала и стреляли во французов. Некоторых из них порубили саблями, и очистили Кремль от их присутствия.]
Мюрату было доложено, что путь расчищен. Французы вошли в ворота и стали размещаться лагерем на Сенатской площади. Солдаты выкидывали стулья из окон сената на площадь и раскладывали огни.
Другие отряды проходили через Кремль и размещались по Маросейке, Лубянке, Покровке. Третьи размещались по Вздвиженке, Знаменке, Никольской, Тверской. Везде, не находя хозяев, французы размещались не как в городе на квартирах, а как в лагере, который расположен в городе.
Хотя и оборванные, голодные, измученные и уменьшенные до 1/3 части своей прежней численности, французские солдаты вступили в Москву еще в стройном порядке. Это было измученное, истощенное, но еще боевое и грозное войско. Но это было войско только до той минуты, пока солдаты этого войска не разошлись по квартирам. Как только люди полков стали расходиться по пустым и богатым домам, так навсегда уничтожалось войско и образовались не жители и не солдаты, а что то среднее, называемое мародерами. Когда, через пять недель, те же самые люди вышли из Москвы, они уже не составляли более войска. Это была толпа мародеров, из которых каждый вез или нес с собой кучу вещей, которые ему казались ценны и нужны. Цель каждого из этих людей при выходе из Москвы не состояла, как прежде, в том, чтобы завоевать, а только в том, чтобы удержать приобретенное. Подобно той обезьяне, которая, запустив руку в узкое горло кувшина и захватив горсть орехов, не разжимает кулака, чтобы не потерять схваченного, и этим губит себя, французы, при выходе из Москвы, очевидно, должны были погибнуть вследствие того, что они тащили с собой награбленное, но бросить это награбленное им было так же невозможно, как невозможно обезьяне разжать горсть с орехами. Через десять минут после вступления каждого французского полка в какой нибудь квартал Москвы, не оставалось ни одного солдата и офицера. В окнах домов видны были люди в шинелях и штиблетах, смеясь прохаживающиеся по комнатам; в погребах, в подвалах такие же люди хозяйничали с провизией; на дворах такие же люди отпирали или отбивали ворота сараев и конюшен; в кухнях раскладывали огни, с засученными руками пекли, месили и варили, пугали, смешили и ласкали женщин и детей. И этих людей везде, и по лавкам и по домам, было много; но войска уже не было.
В тот же день приказ за приказом отдавались французскими начальниками о том, чтобы запретить войскам расходиться по городу, строго запретить насилия жителей и мародерство, о том, чтобы нынче же вечером сделать общую перекличку; но, несмотря ни на какие меры. люди, прежде составлявшие войско, расплывались по богатому, обильному удобствами и запасами, пустому городу. Как голодное стадо идет в куче по голому полю, но тотчас же неудержимо разбредается, как только нападает на богатые пастбища, так же неудержимо разбредалось и войско по богатому городу.
Жителей в Москве не было, и солдаты, как вода в песок, всачивались в нее и неудержимой звездой расплывались во все стороны от Кремля, в который они вошли прежде всего. Солдаты кавалеристы, входя в оставленный со всем добром купеческий дом и находя стойла не только для своих лошадей, но и лишние, все таки шли рядом занимать другой дом, который им казался лучше. Многие занимали несколько домов, надписывая мелом, кем он занят, и спорили и даже дрались с другими командами. Не успев поместиться еще, солдаты бежали на улицу осматривать город и, по слуху о том, что все брошено, стремились туда, где можно было забрать даром ценные вещи. Начальники ходили останавливать солдат и сами вовлекались невольно в те же действия. В Каретном ряду оставались лавки с экипажами, и генералы толпились там, выбирая себе коляски и кареты. Остававшиеся жители приглашали к себе начальников, надеясь тем обеспечиться от грабежа. Богатств было пропасть, и конца им не видно было; везде, кругом того места, которое заняли французы, были еще неизведанные, незанятые места, в которых, как казалось французам, было еще больше богатств. И Москва все дальше и дальше всасывала их в себя. Точно, как вследствие того, что нальется вода на сухую землю, исчезает вода и сухая земля; точно так же вследствие того, что голодное войско вошло в обильный, пустой город, уничтожилось войско, и уничтожился обильный город; и сделалась грязь, сделались пожары и мародерство.

Французы приписывали пожар Москвы au patriotisme feroce de Rastopchine [дикому патриотизму Растопчина]; русские – изуверству французов. В сущности же, причин пожара Москвы в том смысле, чтобы отнести пожар этот на ответственность одного или несколько лиц, таких причин не было и не могло быть. Москва сгорела вследствие того, что она была поставлена в такие условия, при которых всякий деревянный город должен сгореть, независимо от того, имеются ли или не имеются в городе сто тридцать плохих пожарных труб. Москва должна была сгореть вследствие того, что из нее выехали жители, и так же неизбежно, как должна загореться куча стружек, на которую в продолжение нескольких дней будут сыпаться искры огня. Деревянный город, в котором при жителях владельцах домов и при полиции бывают летом почти каждый день пожары, не может не сгореть, когда в нем нет жителей, а живут войска, курящие трубки, раскладывающие костры на Сенатской площади из сенатских стульев и варящие себе есть два раза в день. Стоит в мирное время войскам расположиться на квартирах по деревням в известной местности, и количество пожаров в этой местности тотчас увеличивается. В какой же степени должна увеличиться вероятность пожаров в пустом деревянном городе, в котором расположится чужое войско? Le patriotisme feroce de Rastopchine и изуверство французов тут ни в чем не виноваты. Москва загорелась от трубок, от кухонь, от костров, от неряшливости неприятельских солдат, жителей – не хозяев домов. Ежели и были поджоги (что весьма сомнительно, потому что поджигать никому не было никакой причины, а, во всяком случае, хлопотливо и опасно), то поджоги нельзя принять за причину, так как без поджогов было бы то же самое.
Как ни лестно было французам обвинять зверство Растопчина и русским обвинять злодея Бонапарта или потом влагать героический факел в руки своего народа, нельзя не видеть, что такой непосредственной причины пожара не могло быть, потому что Москва должна была сгореть, как должна сгореть каждая деревня, фабрика, всякий дом, из которого выйдут хозяева и в который пустят хозяйничать и варить себе кашу чужих людей. Москва сожжена жителями, это правда; но не теми жителями, которые оставались в ней, а теми, которые выехали из нее. Москва, занятая неприятелем, не осталась цела, как Берлин, Вена и другие города, только вследствие того, что жители ее не подносили хлеба соли и ключей французам, а выехали из нее.


Расходившееся звездой по Москве всачивание французов в день 2 го сентября достигло квартала, в котором жил теперь Пьер, только к вечеру.
Пьер находился после двух последних, уединенно и необычайно проведенных дней в состоянии, близком к сумасшествию. Всем существом его овладела одна неотвязная мысль. Он сам не знал, как и когда, но мысль эта овладела им теперь так, что он ничего не помнил из прошедшего, ничего не понимал из настоящего; и все, что он видел и слышал, происходило перед ним как во сне.
Пьер ушел из своего дома только для того, чтобы избавиться от сложной путаницы требований жизни, охватившей его, и которую он, в тогдашнем состоянии, но в силах был распутать. Он поехал на квартиру Иосифа Алексеевича под предлогом разбора книг и бумаг покойного только потому, что он искал успокоения от жизненной тревоги, – а с воспоминанием об Иосифе Алексеевиче связывался в его душе мир вечных, спокойных и торжественных мыслей, совершенно противоположных тревожной путанице, в которую он чувствовал себя втягиваемым. Он искал тихого убежища и действительно нашел его в кабинете Иосифа Алексеевича. Когда он, в мертвой тишине кабинета, сел, облокотившись на руки, над запыленным письменным столом покойника, в его воображении спокойно и значительно, одно за другим, стали представляться воспоминания последних дней, в особенности Бородинского сражения и того неопределимого для него ощущения своей ничтожности и лживости в сравнении с правдой, простотой и силой того разряда людей, которые отпечатались у него в душе под названием они. Когда Герасим разбудил его от его задумчивости, Пьеру пришла мысль о том, что он примет участие в предполагаемой – как он знал – народной защите Москвы. И с этой целью он тотчас же попросил Герасима достать ему кафтан и пистолет и объявил ему свое намерение, скрывая свое имя, остаться в доме Иосифа Алексеевича. Потом, в продолжение первого уединенно и праздно проведенного дня (Пьер несколько раз пытался и не мог остановить своего внимания на масонских рукописях), ему несколько раз смутно представлялось и прежде приходившая мысль о кабалистическом значении своего имени в связи с именем Бонапарта; но мысль эта о том, что ему, l'Russe Besuhof, предназначено положить предел власти зверя, приходила ему еще только как одно из мечтаний, которые беспричинно и бесследно пробегают в воображении.