Scala (язык программирования)

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

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

Появился в:

2003

Автор:

Мартин Одерски

Выпуск:

2.11.8 (8 марта 2016[1])

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

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

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

Java, Haskell, Erlang, Standard ML, Objective Caml, Smalltalk, Scheme, Algol68, Lisp

Повлиял на:

Kotlin

Сайт:

[www.scala-lang.org/ la-lang.org]

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

Первые версии языка созданы в 2003 году коллективом лаборатории методов программирования Федеральной политехнической школы Лозанны под руководством Мартина Одерски, язык реализован для платформ Java и .Net. По мнению Джеймса Стрэчена (англ. James Strachan), создателя языка программирования Groovy, Scala может стать преемником языка Java[2].





История

Язык был создан в 2001—2004 годах в Лаборатории методов программирования EPFL. Он стал результатом исследований, направленных на разработку улучшенной языковой поддержки компонентного ПО. За основу при разработке языка были взяты 2 идеи:

  1. Язык программирования компонентного ПО должен быть масштабируемым в том смысле, что должна быть возможность с помощью одних и тех же концепций описать как маленькие, так и большие части. Поэтому внимание было сконцентрировано на механизмах абстракции, композиции и декомпозиции вместо введения большого количества примитивов, которые могут быть полезными только на каком-то одном уровне масштабирования.
  2. Масштабируемая поддержка компонентов может быть предоставлена языком программирования, унифицирующим и обобщающим объектно-ориентированное и функциональное программирование. Некоторые из основных технических новшеств Scala — это концепции, представляющие собой сплав этих парадигм программирования. В статически типизированных языках, к которым относится Scala, эти парадигмы до сих пор были почти полностью разделены.

Scala была выпущена для общего пользования на платформе JVM в январе 2004 года и на платформе .NET в июне 2004 года. Планируется продолжить работу над формализацией ключевых аспектов языка и над разработкой оптимизаций, выполняемых компилятором.

Истоки дизайна

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

Scala впитала значительное число концепций и синтаксических соглашений Java и C#. Способ выражения свойств во многом заимствован из Sather (англ.). Из Smalltalk взята концепция унифицированной объектной модели. Из BETA пришла идея, что всё, включая классы, должно допускать вложенность. Абстрактные типы в Scala очень похожи на абстрактные типы сигнатур в SML и OCaml, обобщённые в контексте полноценных компонентов. В некотором смысле Scala — это продолжение работы Pizza (англ.). Как и Pizza, Scala компилируется под Java VM, добавляя функции высшего порядка, сопоставление с образцом, конструкции, которые исходно были созданы в сообществе функционального программирования. В то время как Pizza обратно совместима с Java, цель Scala — всего лишь возможность взаимодействия, так что у неё больше степеней свободы в дизайне. Ещё одна цель Scala — предоставить расширенные конструкции для абстракции и композиции компонентов — общая с несколькими недавними исследовательскими разработками.

Ключевые аспекты языка

  • Scala-программы во многом похожи на Java-программы, и могут свободно взаимодействовать с Java-кодом.
  • Scala включает единообразную объектную модель — в том смысле, что любое значение является объектом, а любая операция — вызовом метода.
  • Scala — это также функциональный язык в том смысле, что функции — это полноправные значения.
  • В Scala включены мощные и единообразные концепции абстракций как для типов, так и для значений.
  • Она содержит гибкие симметричные конструкции примесей (mixin) для композиции классов и trait-ов.
  • Она позволяет производить декомпозицию объектов путём сравнения с образцом.
  • Образцы и выражения были обобщены для поддержки естественной обработки XML-документов.
  • В целом, эти конструкции позволяют легко выражать самостоятельные компоненты, использующие библиотеки Scala, не пользуясь специальными языковыми конструкциями.
  • Scala допускает внешние расширения компонентов с использованием видов (views)
  • Наличие шаблонов (generics) и шаблонов высших порядков(generics of a higher kind).
  • Есть поддержка структурных и экзистенциальных типов.
  • На текущий момент Scala реализована на платформах Java и .NET.

Объектно-ориентированный язык

В Scala используется чистая объектно-ориентированная модель, похожая на применяемую в Smalltalk: каждое значение — это объект, и каждая операция — это отправка сообщения. Например, сложение x+y интерпретируется как x.+(y), то есть как вызов метода + с аргументом y и x в качестве объекта-приёмника. Рассмотрим другой пример: 1+2<tt>. Это выражение интерпретируется как <tt>(1).+(2)<tt>.Обратите внимание, что скобки вокруг чисел обязательны, потому что лексический анализатор Scala разбивает выражение на лексемы по принципу самого длинного возможного сопоставления. Таким образом, выражение <tt>1.+(2)<tt> разобьется на лексемы <tt>1.<tt>,<tt>+<tt> и <tt>2<tt>, потому что лексема <tt>1.<tt> длиннее лексемы <tt>1<tt> и первый аргумент сложения будет интерпретирован, как тип Double вместо Int[3].

Функциональный язык

Каждая функция — это значение. Язык предоставляет легковесный синтаксис для определения анонимных и карринговых функций. Каждая конструкция возвращает значение. Сопоставление с образцом естественно расширяется к обработке XML c помощью регулярных выражений.

Повторное использование и адаптация

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

Scala представляет новую концепцию решения проблемы внешней расширяемости — виды (views). Они позволяют расширять класс новыми членами и trait-ами. Виды в Scala переводят в объектно-ориентированное представление используемые в Haskell классы типов. В отличие от классов типов, область видимости видов можно контролировать, причем в разных частях программы могут сосуществовать параллельные виды.

Примеры программ

Программа, как и в Java, представляет собой объект. Это пример консольной программы, которая выводит строчку текста на экран.

 object HelloWorld {
  def main(args: Array[String]) =
    println("Привет, МИР!")
 }
// Более короткая версия
 object HelloWorld extends App {
   println("Привет, МИР!")
 }

Следующий простой пример программы написан на Java, Scala и C#, демонстрирующий некоторые различия в синтаксисе (постфиксная запись типов переменных, отсутствие специального синтаксиса для доступа к массивам). В этом примере описывается консольная программа, которая выводит все опции, переданные через командную строку. Опции начинаются с символа «-» (минус).

 // Java:
 class PrintOptions {
    public static void main(String args[]) {
      System.out.println("Выбраны опции:");
      for (String arg: args) if (arg.startsWith("-")) System.out.println(" " + arg.substring(1));
    }
 }
 // Scala:
 object PrintOptions {
   def main(args: Array[String]) {
     println("Выбраны опции:")
     for (arg <- args if arg startsWith "-") println(" " + (arg substring 1))
   }
 }
 // В функциональном стиле Scala:
 object PrintOptions {
   def main(args: Array[String]) =
     println("Выбраны опции:" +: (args filter (_ startsWith "-") map (" " + _.drop(1))) mkString "\n")
 }
 // В функциональном стиле C#:
 class PrintOptions {
   static void Main(String[] args) {
     Console.WriteLine("Выбраны опции:" + args.Where(x => x.StartsWith("-")).Aggregate((r, x) => r + " " + x.Substring(1)));
   }
 }
 // В функциональном стиле Java:
 class PrintOptions {
    public static void main(String[] args) {
      System.out.println("Выбраны опции:");
      Arrays.stream(args).filter(o -> o.startsWith("-")).forEach(o -> System.out.println(" " + o.substring(1)));
    }
 }

Обратите внимание, что в Scala объявляется не класс объекта, а сразу экземпляр объекта. Так естественным способом реализуется шаблон проектирования, где в программе должен быть только один экземпляр класса («Одиночка» — «Singleton»).

Пример программы, которая суммирует все элементы списка, который передаётся через аргументы.

 object Main {
   def main(args: Array[String]) {
     try {
       val elems = args map Integer.parseInt
       println("Сумма аргументов: " + elems.foldRight(0) (_ + _))
     } catch {
       case e: NumberFormatException =>
         println("Ошибка в аргументах. Использовать следует так: scala Main <число1> <число2> ... ")
     }
   }
 }

На Java:

public class Main {

    public static void main(String[] args) {
        try {
            System.out.println("Сумма аргументов: " + Arrays.stream(args).mapToInt(Integer::parseInt).sum());
        } catch (NumberFormatException e) { 
            System.out.println("Ошибка в аргументах. Использовать следует так: java Main <число1> <число2> ... ");
        }
    }
}

С помощью метода map перебираются все аргументы. Все они преобразовываются в целое число методом Integer.parseInt и добавляются в список (массив) elems. Затем с помощью метода свёртки списка foldRight вычисляется сумма элементов.

Интеграция с Java

Scala может взаимодействовать с кодом, написанным на Java. Все классы из пакета java.lang уже подключены по умолчанию, в то же время другие должны быть подключены явно.

Пример

Задача: получить и отформатировать текущую дату в локализации определённой страны, например — Франции.

В библиотеке классов Java уже есть требующаяся нам функциональность в классах Date и DateFormat. Для того, чтобы воспользоваться этим, достаточно просто импортировать эти классы из соответствующих Java-пакетов:

 import java.util.{Date, Locale}
 import java.text.DateFormat
 import java.text.DateFormat._

 object FrenchDate {
   def main(args: Array[String]) {
     val now = new Date
     val df = getDateInstance(LONG, Locale.FRANCE)
     println(df format now)
   }
 }

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

В апреле 2009 года Twitter объявил что перевёл значительную часть своего серверного кода с Ruby на Scala и собирается перевести оставшийся[4].

Gilt использует Scala и Play фреймворк[5].

Foursquare использует Lift[6].

Coursera использует Scala и фреймворк Play[7].

В апреле 2011, онлайн версия газеты The Guardian была переведена с Java на Scala[8].

Банк UBS[9].

LinkedIn использует микрофреймворк Scalatra для поддержки своего Signal API[10].

Meetup использует Unfiltered тулкит для своих API реального времени[11].

Remember the Milk использует Unfiltered, Scala и Akka для публичного API и обновлений реального времени[12].

Verizon собирается создать «фреймворк нового поколения» с использованием Scala[13].

Проекты фонда Apache: Apache Spark, Apache Ignite (переработанный продукт GridGain) и Apache Kafka написаны на Scala.

См. также

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

Примечания

  1. [www.scala-lang.org/news/2.11.8 Scala 2.11.8 is now available! | The Scala Programming Language]
  2. Strachan, James [macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html Scala as the long term replacement for java/javac?] (6 июля 2009). Проверено 7 января 2012. [www.webcitation.org/65LY4r0wg Архивировано из первоисточника 10 февраля 2012].
  3. www.scala-lang.org/docu/files/ScalaTutorial.pdf
  4. Greene, Kate [www.technologyreview.com/blog/editors/23282/?nlid=1908 The Secret Behind Twitter's Growth, How a new Web programming language is helping the company handle its increasing popularity.]. Technology Review. MIT (April 1, 2009). Проверено 6 апреля 2009.
  5. [www.typesafe.com/blog/play_framework_akka_and_scala_at_gilt July 15, 2013 | Play Framework, Akka and Scala at Gilt Groupe | Typesafe]
  6. [www.grenadesandwich.com/blog/steven/2009/11/27/scala-lift-and-future Scala, Lift, and the Future]
  7. [tech.coursera.org/blog/2014/02/18/why-we-love-scala-at-coursera/ Why we love Scala at Coursera]
  8. [www.h-online.com/open/news/item/Guardian-switching-from-Java-to-Scala-1221832.html Guardian switching from Java to Scala]. Heise Online (5 апреля 2011). Проверено 5 апреля 2011.
  9. Binstock, Andrew. [drdobbs.com/architecture-and-design/231001802 Interview with Scala's Martin Odersky]. Dr. Dobb's Journal (14 июля 2011). Проверено 10 февраля 2012.
  10. Synodinos, Dionysios G. [www.infoq.com/articles/linkedin-scala-jruby-voldemort LinkedIn Signal: A Case Study for Scala, JRuby and Voldemort]. InfoQ (11 октября 2010).
  11. [making.meetup.com/post/2929945070/real-life-meetups-deserve-real-time-apis Real-life Meetups Deserve Real-time APIs].
  12. [blog.rememberthemilk.com/2011/08/real-time-updating-comes-to-the-remember-the-milk-web-app Real time updating comes to the Remember The Milk web app].
  13. [www.verizon.com/jobs/santa-clara/network/jobid362082-scala-engineer-verizon-jobs/ Senior Scala Engineer]. Проверено 18 августа 2014.

Литература

Англоязычная

  • Joshua D. Suereth. Scala in Depth. — Manning Publications. — P. 225. — ISBN 978-1-935182-70-2.
  • Gregory Meredith. [github.com/leithaus/XTrace/blob/monadic/src/main/book/content/monadic.pdf Monadic Design Patterns for the Web]. — 1st. — 2011. — P. 300.
  • Nilanjan Raychaudhuri. Scala in Action. — 1st. — Manning. — P. 525. — ISBN 978-1-935182-75-7.
  • Dean Wampler, Alex Payne. [oreilly.com/catalog/9780596155957/ Programming Scala: Scalability = Functional Programming + Objects]. — 1st. — O'Reilly Media. — P. 448. — ISBN 0-596-15595-6.
  • Martin Odersky, Lex Spoon, Bill Venners. [www.artima.com/shop/programming_in_scala_2ed Programming in Scala: A Comprehensive Step-by-step Guide]. — 2nd. — Artima Inc. — P. 883/852. — ISBN 978-0-9815316-4-9.
  • David Pollak. [www.apress.com/book/view/9781430219897/ Beginning Scala]. — 1st. — Apress. — P. 776. — ISBN 1-4302-1989-0.
  • Lift in Action. — 1st. — Manning. — P. 450. — ISBN 978-1-935182-80-1.
  • Christos Loverdos, Apostolos Syropoulos. [www.cambridge.org/gb/knowledge/isbn/item2713441/?site_locale=en_GB Steps in Scala: An Introduction to Object-Functional Programming]. — 1st. — Cambridge University Press. — P. xviii + 485. — ISBN 978-0-521-74758-5.
  • Venkat Subramaniam. [www.pragprog.com/titles/vsscala/programming-scala Programming Scala: Tackle Multi-Core Complexity on the Java Virtual Machine]. — 1st. — Pragmatic Bookshelf. — P. 250. — ISBN 1-934356-31-X.
  • Cay Horstmann. [www.informit.com/title/0321774094 Scala for the Impatient]. — 1st. — Addison-Wesley Professional. — P. 360. — ISBN 0-321-77409-4.

Русскоязычная

  • Хорстман К. Scala для нетерпеливых. — ДМК пресс, 2013. — 408 с. — 300 экз. — ISBN 978-5-94074-920-2, 978-0-321-77409-5.
  • Scala в примерах, перевод руководства Мартина Одерски в викиучебнике
  • [twitter.github.io/scala_school/ru/index.html Scala Школа!] и [twitter.github.io/effectivescala/index-ru.html Эффективная Scala] — русские версии открытых учебников от Twitter
  • [www.ibm.com/developerworks/ru/views/java/libraryview.jsp?search_by=%20scala Путеводитель по Scala: серия статей на сайте IBM developerWorks]

Ссылки

  • [scala-lang.org/ The Scala Programming Language] (англ.) — веб-сайт языка программирования Scala.
  • [www.scala-lang.org/docu/files/ScalaReference.pdf The Scala Language Specification] (англ.) — спецификация языка программирования Scala.
  • [www.scala-lang.org/sites/default/files/linuxsoft_archives/docu/files/ScalaTutorial-ru_RU.pdf Руководство по Scala] (рус.) перевод англоязычного руководства
  • [www.rsdn.ru/article/philosophy/Scala.xml Обзор языка программирования Scala] — перевод статьи, описывающей причину разработки, идеи, возможности языка.

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

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


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


Петя, после полученного им решительного отказа, ушел в свою комнату и там, запершись от всех, горько плакал. Все сделали, как будто ничего не заметили, когда он к чаю пришел молчаливый и мрачный, с заплаканными глазами.
На другой день приехал государь. Несколько человек дворовых Ростовых отпросились пойти поглядеть царя. В это утро Петя долго одевался, причесывался и устроивал воротнички так, как у больших. Он хмурился перед зеркалом, делал жесты, пожимал плечами и, наконец, никому не сказавши, надел фуражку и вышел из дома с заднего крыльца, стараясь не быть замеченным. Петя решился идти прямо к тому месту, где был государь, и прямо объяснить какому нибудь камергеру (Пете казалось, что государя всегда окружают камергеры), что он, граф Ростов, несмотря на свою молодость, желает служить отечеству, что молодость не может быть препятствием для преданности и что он готов… Петя, в то время как он собирался, приготовил много прекрасных слов, которые он скажет камергеру.
Петя рассчитывал на успех своего представления государю именно потому, что он ребенок (Петя думал даже, как все удивятся его молодости), а вместе с тем в устройстве своих воротничков, в прическе и в степенной медлительной походке он хотел представить из себя старого человека. Но чем дальше он шел, чем больше он развлекался все прибывающим и прибывающим у Кремля народом, тем больше он забывал соблюдение степенности и медлительности, свойственных взрослым людям. Подходя к Кремлю, он уже стал заботиться о том, чтобы его не затолкали, и решительно, с угрожающим видом выставил по бокам локти. Но в Троицких воротах, несмотря на всю его решительность, люди, которые, вероятно, не знали, с какой патриотической целью он шел в Кремль, так прижали его к стене, что он должен был покориться и остановиться, пока в ворота с гудящим под сводами звуком проезжали экипажи. Около Пети стояла баба с лакеем, два купца и отставной солдат. Постояв несколько времени в воротах, Петя, не дождавшись того, чтобы все экипажи проехали, прежде других хотел тронуться дальше и начал решительно работать локтями; но баба, стоявшая против него, на которую он первую направил свои локти, сердито крикнула на него: