C Sharp

Поделись знанием:
(перенаправлено с «Си-шарп»)
Перейти к: навигация, поиск
Правильный заголовок этой статьи — C#. Он показан некорректно из-за технических ограничений.
С#
Класс языка:

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

Появился в:

2000

Автор:

Андерс Хейлсберг

Выпуск:

6.0 (20 июля 2015)

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

статическая, динамическая, строгая, утиная, вывод типов

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

Visual C#, .NET Framework, Mono, DotGNU

Диалекты:

, Spec#, Polyphonic C#

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

C++, Java[1][2][3], Delphi, Модула-3 и Smalltalk

Повлиял на:

, F#, Nemerle, Vala, Windows PowerShell, Kotlin

C# (произносится си шарп) — объектно-ориентированный язык программирования. Разработан в 19982001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.

C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.

Переняв многое от своих предшественников — языков C++, Pascal, Модула, Smalltalk и, в особенности, Java — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов (между тем допускается множественное наследование интерфейсов).





Особенности языка

C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем (однако, эта закономерность была нарушена с выходом C# 3.0, представляющего собой расширения языка, не опирающиеся на расширения платформы .NET). CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, Сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J# и др.

Название языка

Название «Си шарп» (от англ. sharp — диез) происходит от музыкальной нотации, где знак диез означает повышение соответствующего ноте звука на полутон[4], что аналогично названию языка C++, где «++» обозначает инкремент переменной. Название также является игрой с цепочкой C → C++ → C++++(C#), так как символ «#» можно составить из 4 знаков «+».[5]

Вследствие технических ограничений на отображение (стандартные шрифты, браузеры и т. д.) и того обстоятельства, что знак диез ♯ не представлен на стандартной клавиатуре, знак номера # был выбран для представления знака диез при записи имени языка программирования.[6] Это соглашение отражено в Спецификации Языка C# ECMA-334.[7] Тем не менее, на практике (например, при размещении рекламы и коробочном дизайне[8]), Майкрософт использует предназначенный музыкальный знак.

Названия языков программирования не принято переводить, поэтому язык следует называть по-английски «Си шарп».

Стандартизация

C# стандартизирован в ECMA (ECMA-334)[9] и ISO (ISO/IEC 23270)[10].

Известно как минимум о трёх независимых реализациях C#, базирующихся на этой спецификации и находящихся в настоящее время на различных стадиях разработки:

Версии

На протяжении разработки языка C# было выпущено несколько его версий:

Версия Спецификация языка Дата .NET Framework Visual Studio
ECMA ISO/IEC Microsoft
C# 1.0 [www.ecma-international.org/publications/files/ECMA-ST-WITHDRAWN/ECMA-334,%202nd%20edition,%20December%202002.pdf Декабрь 2002] [download.www.techstreet.com/cgi-bin/pdf/free/378672/ISO+IEC+23270-2003.pdf Апрель 2003] [download.microsoft.com/download/a/9/e/a9e229b9-fee5-4c3e-8476-917dee385062/CSharp%20Language%20Specification%20v1.0.doc Январь 2002] Январь 2002 .NET Framework 1.0 Visual Studio .NET (2002)
C# 1.2 [download.microsoft.com/download/5/e/5/5e58be0a-b02b-41ac-a4a3-7a22286214ff/csharp%20language%20specification%20v1.2.doc Октябрь 2003] Апрель 2003 .NET Framework 1.1 Visual Studio .NET 2003
C# 2.0 [www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf Июнь 2006] [standards.iso.org/ittf/PubliclyAvailableStandards/c042926_ISO_IEC_23270_2006(E).zip Сентябрь 2006] [download.microsoft.com/download/9/8/f/98fdf0c7-2bbd-40d3-9fd1-5a4159fa8044/csharp%202.0%20specification_sept_2005.doc Сентябрь 2005][11] Ноябрь 2005 .NET Framework 2.0 Visual Studio 2005
C# 3.0 Отсутствует[12] [download.microsoft.com/download/3/8/8/388e7205-bc10-4226-b2a8-75351c669b09/CSharp%20Language%20Specification.doc Август 2007] Ноябрь 2007 .NET Framework 3.5 Visual Studio 2008
C# 4.0 [www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=dfbf523c-f98c-4804-afbd-459e846b268e Апрель 2010] Апрель 2010 .NET Framework 4 Visual Studio 2010
C# 5.0 [www.microsoft.com/en-us/download/details.aspx?id=7029 Июнь 2013] Август 2012 .NET Framework 4.5 Visual Studio 2012
C# 6.0 Отсутствует Июль 2015 Июль 2015 .NET Framework 4.6 Visual Studio 2015
Общая информация по версиям
C# 2.0 C# 3.0 C# 4.0 C# 5.0 C# 6.0
Новые
возможности
  • Обобщения
  • Смешанные типы
  • Анонимные методы
  • Итераторы
  • Нуль-типы
  • Неявно типизируемые локальные переменные
  • Инициализаторы объектов и коллекций
  • Автоматическая реализация свойств
  • Анонимные типы
  • Методы расширения
  • Запросы
  • Лямбда-выражения
  • Деревья выражений
  • Асинхронные методы
  • Сведения о вызывающем объекте
  • Компилятор как сервис
  • Импорт членов статических типов в пространство имён
  • Фильтры исключений
  • Await в блоках catch/finally
  • Инициализаторы автосвойств
  • Значения по умолчанию для get-свойств
  • Операторы с условием NULL
  • Интерполяция строк
  • Оператор nameof
  • Инициализатор словаря

Версия 1.0

Проект C# был начат в декабре 1998 и получил кодовое название COOL (C-style Object Oriented Language). Версия 1.0 была анонсирована вместе с платформой .NET в июне 2000 года, тогда же появилась и первая общедоступная бета-версия; C# 1.0 окончательно вышел вместе с Microsoft Visual Studio .NET в феврале 2002 года.

Первая версия C# напоминала по своим возможностям Java 1.4, несколько их расширяя: так, в C# имелись свойства (выглядящие в коде как поля объекта, но на деле вызывающие при обращении к ним методы класса), индексаторы (подобные свойствам, но принимающие параметр как индекс массива), события, делегаты, циклы foreach, структуры, передаваемые по значению, автоматическое преобразование встроенных типов в объекты при необходимости (boxing), атрибуты, встроенные средства взаимодействия с неуправляемым кодом (DLL, COM) и прочее.

Кроме того, в C# решено было перенести некоторые возможности C++, отсутствовавшие в Java: беззнаковые типы, перегрузку операторов (с некоторыми ограничениями, в отличие от C++), передача параметров в метод по ссылке, методы с переменным числом параметров, оператор goto (с ограничениями). Также в C# оставили ограниченную возможность работы с указателями — в местах кода, специально обозначенных словом unsafe и при указании специальной опции компилятору.

Версия 2.0

Проект спецификации C# 2.0 впервые был опубликован Microsoft в октябре 2003 года; в 2004 году выходили бета-версии (проект с кодовым названием Whidbey), C# 2.0 окончательно вышел 7 ноября 2005 года вместе с Visual Studio 2005 и .NET 2.0.

Новые возможности в версии 2.0
  • Частичные типы (разделение реализации класса более чем на один файл).
  • Обобщённые, или параметризованные типы (generics). В отличие от шаблонов C++, они поддерживают некоторые дополнительные возможности и работают на уровне виртуальной машины. Вместе с тем, параметрами обобщённого типа не могут быть выражения, они не могут быть полностью или частично специализированы, не поддерживают шаблонных параметров по умолчанию, от шаблонного параметра нельзя наследоваться, и т. д.[13]
  • Новая форма итератора, позволяющая создавать сопрограммы с помощью ключевого слова yield, подобно Python и Ruby.
  • Анонимные методы, обеспечивающие функциональность замыкания.
  • Оператор '??': return obj1 ?? obj2; означает (в нотации C# 1.0) return obj1!=null ? obj1 : obj2;.
  • Обнуляемые ('nullable') типы-значения (обозначаемые вопросительным знаком, например, int? i = null;), представляющие собой те же самые типы-значения, способные принимать также значение null. Такие типы позволяют улучшить взаимодействие с базами данных через язык SQL.
  • Возможность создавать хранимые процедуры, триггеры и даже типы данных на .Net языках (в том числе и на C#).
  • Поддержка 64-разрядных вычислений, что кроме всего прочего, позволяет увеличить адресное пространство и использовать 64-разрядные примитивные типы данных.

Версия 3.0

В июне 2004 года Андерс Хейлсберг впервые рассказал на сайте Microsoft о планируемых расширениях языка в C#3.0.[14] В сентябре 2005 года вышли проект спецификации C# 3.0 и бета-версия C# 3.0, устанавливаемая в виде дополнения к существующим Visual Studio 2005 и .NET 2.0. Окончательно эта версия языка вошла в Visual Studio 2008 и .NET 3.5.

Новые возможности в версии 3.0

В C# 3.0 появились следующие радикальные добавления к языку:

  • ключевые слова select, from, where, позволяющие делать запросы из XML документов, коллекций и т. п. Эти запросы имеют сходство с запросами SQL и реализуются компонентом LINQ. (Сама фраза "language integrated query" переводится "запрос, интегрированный в язык".)
  • Инициализация объекта вместе с его свойствами:
Customer c = new Customer(); c.Name = "James"; c.Age=30;
можно записать как
Customer c = new Customer { Name = "James", Age = 30 };
listOfFoo.Where(delegate(Foo x) { return x.size > 10; });
теперь можно записать как
listOfFoo.Where(x => x.size > 10);
  • Деревья выражений:
лямбда-выражения теперь могут представляться в виде структуры данных, доступной для обхода во время выполнения, тем самым позволяя транслировать строго типизированные C#-выражения в другие домены (например, выражения SQL).
  • Вывод типов локальной переменной: var x = "hello"; вместо string x = "hello";
  • Безымянные типы: var x = new { Name = "James" };
  • Методы-расширения — добавление метода в существующий класс с помощью ключевого слова this при первом параметре статической функции.
public static class StringExtensions
{
  public static int ToInt32(this string val)
  {
    return Int32.Parse(val);
  }
}
// ...
string s = "10";
int x = s.ToInt32();
  • Автоматические свойства: компилятор сгенерирует закрытое (private) поле и соответствующие аксессор и мутатор для кода вида
public string Name { get; private set; }

C# 3.0 совместим с C# 2.0 по генерируемому MSIL-коду; улучшения в языке — чисто синтаксические и реализуются на этапе компиляции. Например, многие из интегрированных запросов LINQ можно осуществить, используя безымянные делегаты в сочетании с предикатными методами над контейнерами наподобие List.FindAll и List.RemoveAll.

Версия 4.0

Превью C# 4.0 было представлено в конце 2008 года, вместе с CTP-версией Visual Studio 2010.

Visual Basic 10.0 и C# 4.0 были выпущены в апреле 2010 года, одновременно с выпуском Visual Studio 2010.

Новые возможности в версии 4.0[15]
  • Возможность использования позднего связывания, для использования:
    • с языками с динамической типизацией (Python, Ruby)
    • с COM-объектами
    • отражения (reflection)
    • объектов с изменяемой структурой (DOM). Появляется ключевое слово dynamic.
  • Именованные и опциональные параметры
  • Новые возможности COM interop
  • Ковариантность и контравариантность
  • Контракты в коде (Code Contracts)

Примеры:

dynamic calc = GetCalculator();
int sum = calc.Add(10, 20); // Динамический вызов
public void SomeMethod(int x, int y = 5, int z = 7); // Опциональные параметры

Пример «Hello, World!»

Ниже представлен код классической программы «Hello world» на C# для консольного приложения:

using System;

namespace Example
{
    class Program
    {
        static void Main()
        {
            Console.WriteLine("Hello World!"); // Вывод заданного текста в консоль
            Console.ReadKey(); // Ожидание нажатия клавиши пользователем
        }
    }
}

и код этой же программы для приложения Windows Forms:

// assembly: System.dll
// assembly: System.Drawing.dll
// assembly: System.Windows.Forms.dll
using System;
using System.Drawing;
using System.Windows.Forms;

namespace WindowsForms
{
    public class Program
    {
        [STAThread]
        public static void Main()
        {
            new DemoForm().ShowDialog();
        }
    }

    public class DemoForm : Form
    {
        Label label = new Label();

        public DemoForm()
        {
            label.Text = "Hello World!";
            this.Controls.Add(label);
            this.StartPosition = FormStartPosition.CenterScreen;
            this.BackColor = Color.White;
            this.FormBorderStyle = FormBorderStyle.Fixed3D;
        }
    }
}

Реализации

Существует несколько реализаций C#:

См. также

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

Примечания

  1. «Поскольку язык С# унаследовал свой синтаксис от C++ и Java…» (Трей Нэш «C# 2010: ускоренный курс для профессионалов» («Accelerated C# 2010») — М.: Вильямс, 2010. — С. 592. — ISBN 978-5-8459-1638-9; стр. 17)
  2. «Язык C# <…> унаследовал много полезных возможностей от других языков программирования и напрямую связан с двумя наиболее широко применяемыми в мире компьютерными языками — C и C++, а также с языком Java», однако далее: «Связь между C# и Java более сложная. Оба языка разработаны для создания переносимого кода, базируются на C и C++, используют их синтаксис и объектную модель. Однако между этими языками нет прямой связи, они больше похожи на двоюродных братьев, имеющих общих предков, но отличающихся многими признаками» (Герберт Шилдт «C# учебный курс». — М.: Питер. 2003. — стр. 20).
  3. Герберт Шилдт Полный справочник по С#. : Пер. с англ. — М. : Издательский дом "Вильямс", 2004. — 752 с. : ил. — Парал. тит. англ. ISBN 5-8459-0563-X (рус.) стр. 26-27.
  4. Kovacs, James [www.jameskovacs.com/blog/CNETHistoryLesson.aspx C#/.NET History Lesson] (September 7, 2007). Проверено 23 марта 2011. [www.webcitation.org/616vU96EP Архивировано из первоисточника 21 августа 2011].
  5. [www.computerworld.com.au/article/261958/a-z_programming_languages_c_/?pp=2 The A-Z of Programming Languages: C#] (англ.). [www.computerworld.com.au computerworld.com.au] (1 October 2008). Проверено 2 сентября 2014.
  6. [msdn.microsoft.com/ru-ru/library/67ef8sbd.aspx Microsoft C# FAQ](недоступная ссылка — история). Microsoft. Проверено 25 марта 2008. [web.archive.org/20030430202730/msdn.microsoft.com/vcsharp/previous/2002/FAQ/default.aspx Архивировано из первоисточника 30 апреля 2003].
  7. [www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf C# Language Specification]. — 4th. — ECMA International, 2006.
  8. [www.microsoft.com/presspass/images/gallery/boxshots/web/visual-c-sharp03.jpg Visual C#.net Standard] (JPEG). Microsoft (September 4, 2003). Проверено 18 июня 2009. [www.webcitation.org/616vVNZ7G Архивировано из первоисточника 21 августа 2011].
  9. [www.ecma-international.org/publications/standards/Ecma-334.htm Standard ECMA-334 C# Language Specification, 4rd edition (June 2006)]
  10. [standards.iso.org/ittf/PubliclyAvailableStandards/c036768_ISO_IEC_23270_2003(E).zip ISO/IEC 23270:2003, Information technology — C# Language Specification]
  11. Спецификация по Microsoft C# 2.0 содержит описание лишь новых возможностей версии 2.0. Особенности версии описаны в спецификации 1.2, приведенной выше.
  12. Для версий языка C# 3.0, 4.0 и 5.0 пока нет утверждённых ECMA или ISO/IEC спецификаций.
  13. [msdn2.microsoft.com/en-us/library/c6cyy67b.aspx Differences Between C++ Templates and C# Generics (C# Programming Guide)]
  14. [channel9.msdn.com/ShowPost.aspx?PostID=10276 MSDN News]
  15. [code.msdn.microsoft.com/csharpfuture C# Future]
  16. [dotnetanywhere.org/ Dot Net Anywhere]

Литература

  • Джон Скит. C# для профессионалов: тонкости программирования, 3-е издание, новый перевод = C# in Depth, 3rd ed.. — М.: «Вильямс», 2014. — 608 с. — ISBN 978-5-8459-1909-0.
  • Кристиан Нейгел и др. C# 5.0 и платформа .NET 4.5 для профессионалов = Professional C# 5.0 and .NET 4.5. — М.: «Диалектика», 2013. — 1440 с. — ISBN 978-5-8459-1850-5.
  • А. Хейлсберг, М. Торгерсен, С. Вилтамут, П. Голд. [www.piter.com/book.phtml?978545900283 Язык программирования C#. Классика Computers Science. 4-е издание] = C# Programming Language (Covering C# 4.0), 4th Ed. — СПб.: «Питер», 2012. — 784 с. — ISBN 978-5-459-00283-6.
  • Э. Стиллмен, Дж. Грин. [www.piter.com/book.phtml?978544610105 Изучаем C#. 2-е издание] = Head First C#, 2ed. — СПб.: «Питер», 2012. — 704 с. — ISBN 978-5-4461-0105-4.
  • Эндрю Троелсен. [www.williamspublishing.com/Books/978-5-8459-1814-7.html Язык программирования C# 5.0 и платформа .NET 4.5, 6-е издание] = Pro C# 5.0 and the .NET 4.5 Framework, 6th edition. — М.: «Вильямс», 2013. — 1312 с. — ISBN 978-5-8459-1814-7.
  • Джозеф Албахари, Бен Албахари. [www.williamspublishing.com/Books/978-5-8459-1819-2.html C# 5.0. Справочник. Полное описание языка] = C# 5.0 in a Nutshell: The Definitive Reference. — М.: «Вильямс», 2013. — 1008 с. — ISBN 978-5-8459-1819-2.
  • Герберт Шилдт. C# 4.0: полное руководство = C# 4.0 The Complete Reference. — М.: «Вильямс», 2010. — С. 1056. — ISBN 978-5-8459-1684-6.
  • Кристиан Нейгел, Карли Уотсон и др. Visual C# 2010: полный курс = Beginning Microsoft Visual C# 2010. — М.: Диалектика, 2010. — ISBN 978-5-8459-1699-0.

Ссылки

  • [msdn.microsoft.com/ru-ru/vcsharp/default.aspx Основные материалы по Visual C# ]
  • [msdn.microsoft.com/ru-ru/library/67ef8sbd.aspx Руководство по программированию на C# ]
  • [msdn.microsoft.com/ru-ru/library/ms186214.aspx Язык C# (инструкции по C#) ]
  • [msdn.microsoft.com/ru-ru/library/360kwx3z.aspx Практическое руководство. Создание приложений Windows Forms на C# ]
  • [www.techdays.ru/videos/2669.html Доклад, подробно описывающий новшества в языке С# версии 4.0 ]

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

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

Ежели бы Наполеон не выехал вечером 24 го числа на Колочу и не велел бы тотчас же вечером атаковать редут, а начал бы атаку на другой день утром, то никто бы не усомнился в том, что Шевардинский редут был левый фланг нашей позиции; и сражение произошло бы так, как мы его ожидали. В таком случае мы, вероятно, еще упорнее бы защищали Шевардинский редут, наш левый фланг; атаковали бы Наполеона в центре или справа, и 24 го произошло бы генеральное сражение на той позиции, которая была укреплена и предвидена. Но так как атака на наш левый фланг произошла вечером, вслед за отступлением нашего арьергарда, то есть непосредственно после сражения при Гридневой, и так как русские военачальники не хотели или не успели начать тогда же 24 го вечером генерального сражения, то первое и главное действие Бородинского сражения было проиграно еще 24 го числа и, очевидно, вело к проигрышу и того, которое было дано 26 го числа.
После потери Шевардинского редута к утру 25 го числа мы оказались без позиции на левом фланге и были поставлены в необходимость отогнуть наше левое крыло и поспешно укреплять его где ни попало.
Но мало того, что 26 го августа русские войска стояли только под защитой слабых, неконченных укреплений, – невыгода этого положения увеличилась еще тем, что русские военачальники, не признав вполне совершившегося факта (потери позиции на левом фланге и перенесения всего будущего поля сражения справа налево), оставались в своей растянутой позиции от села Нового до Утицы и вследствие того должны были передвигать свои войска во время сражения справа налево. Таким образом, во все время сражения русские имели против всей французской армии, направленной на наше левое крыло, вдвое слабейшие силы. (Действия Понятовского против Утицы и Уварова на правом фланге французов составляли отдельные от хода сражения действия.)
Итак, Бородинское сражение произошло совсем не так, как (стараясь скрыть ошибки наших военачальников и вследствие того умаляя славу русского войска и народа) описывают его. Бородинское сражение не произошло на избранной и укрепленной позиции с несколько только слабейшими со стороны русских силами, а Бородинское сражение, вследствие потери Шевардинского редута, принято было русскими на открытой, почти не укрепленной местности с вдвое слабейшими силами против французов, то есть в таких условиях, в которых не только немыслимо было драться десять часов и сделать сражение нерешительным, но немыслимо было удержать в продолжение трех часов армию от совершенного разгрома и бегства.


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


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