Предметно-ориентированный язык

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

Предметно-ориентированный язык (англ. Domain-specific language, DSL — «язык, специфический для предметной области») — язык программированияК:Википедия:Статьи без источников (тип: не указан)[источник не указан 2904 дня], специализированный для конкретной области применения (в противоположность языку общего назначения[en], применимому к широкому спектру областей и не учитывающему особенности конкретных сфер знаний). Построение такого языка и/или его структура данных отражают специфику решаемых с его помощью задач[1]. Является ключевым понятием языково-ориентированного программирования.

Строго говоря, деление языков программирования на языки общего назначения и предметно-ориентированные весьма условно, особенно, если учесть, что формально любой протокол или формат файлов является языком. Существует масса языков общего назначения, применяемых в качестве предметно-ориентированных для определённых задач, и наоборот, предметно-ориентированных языков, применяемых в качестве языков общего назначения. Ярким примером является язык Си, разработанный в качестве кроссплатформенного ассемблера, но на практике применяемый гораздо шире. Язык ML, породивший целое семейство языков общего назначения (включая Haskell, ныне наиболее предпочитаемый разработчиками предметно-ориентированных языков в качестве базового), — изначально разрабатывался в качестве DSL для системы автоматического доказательства теорем LCF[en]. Примером, показывающим условность классификации, служит язык БНФ (и компилятор с него Lex/Yacc): с одной стороны, это яркий пример метаязыка, с другой — он предназначен для одной конкретной задачи.





Терминология

Простейшие предметно-ориентированные языки, используемые в одном конкретном приложении, часто называют «мини-языками»[2].

Мартин Уорд (англ. Martin Ward)[3] в работе «Language Oriented Programming»[4] (которая считается отправной точкой развития ЯОП), использовал термины «problem oriented» и «domain oriented», но в англоязычном научном сообществе прижился термин «domain-specific», причём именно «domain-specific language», а не «domain-specific programming language». В русскоязычной литературе по программированию встречаются варианты «доменно-специфичный», «проблемно-ориентированный», «предметно-ориентированный».

Фаулер[5] и Дмитриев[6] определяют понятие DSL как «урезанный язык программирования (в большинстве случаев неполный по Тьюрингу)».

Примеры

Ведущие исследователи языково-ориентированного программирования (Мартин Уорд, Пол Хьюдак[en], Валид Таха и другие) приводят следующие примеры предметно-специфичных языков в качестве классических[4][7][8]:

По мнению Валида Тахи, с позиции ЯОП Microsoft Excel оказывается едва ли не наиболее широко применяемым в мире языком программирования[8].

Другими примерами предметно-ориентированных языков служат FoxPro, командные языки операционных систем (языки пакетных заданий, такие как JCL, языки интерактивной командной оболочки — сценарные и пакетные), неполные по Тьюрингу языки структурирования данных (XML, .ini, .conf), язык Вики-разметки, языки моделирования (UML, GPSS), Erlang для многопользовательских серверов, функционирующих в бесперебойном режиме. Следует отметить, что примеры не всегда являются показательными, некоторые[какие?] предметно-ориентированные языки подвергаются критике.

Существуют языки программирования, встроенные в систему управления ресурсами предприятия (язык ABAP в SAP/R3, языки систем Галактика, Парус, 1С)К:Википедия:Статьи без источников (тип: не указан)[источник не указан 3018 дней] и применяемые для их дополнения специфичными для конкретной организации модулями. Использование встроенного языка упрощает программирование специфичных задач, поскольку в языке изначально присутствуют понятия предметной области. Некоторые[какие?] геоинформационные системы и САПР также имеют встроенные языки программирования.

Ещё одним примером является G-код язык программирования устройств с числовым программным управлением (ЧПУ).

Встраиваемые языки

Временами компьютерные языки реализуются зависимым образом, т.е. «внутри» транслируемого языка, без которого эти языки не только не способны исполняться, но и зачастую не образуют целостную символьную систему и не обладают Тьюринг-полнотой. Такие языки называются «встраиваемыми предметно-специфичными языками» (англ. Embedded DSL, EDSL; иногда DSEL) или просто «встраиваемыми языками» (Embedded language)[7][9], а также «языками, реализованными поверх или на основе данного языка».

Текстовые языки

В дополнение к традиционному делению языков на интерпретируемые и компилируемые, встраиваемые языки вводят ещё несколько видов реализации языка:

  • чистое встраивание[7];
  • использование макросредств языка (и нередко отождествление их с термином «метапрограммирование»), которое, в свою очередь, подразделяется на[10]:
    • многостадийные вычисления (англ. multistage computations);
    • квазицитирование (известное из языка Lisp);
    • использование шаблонов.

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

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

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

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

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

Вторая группа встраиваемых языков наиболее полно представлена в сообществе языка Haskell, и потому сам Haskell временами определяют как «DSL для денотационной семантики»[7]. Примерами могут служить Elm и другие языки, представляющие функциональную реактивную парадигму, а также язык Curry. Временами также встречается похожее выражение в отношении Лиспа: «Lisp — это не язык, а среда для разработки языков». Примером языка, реализованного поверх Лиспа, может служить Qi[en]. Масса встраиваемых мини-языков реализована в языке OCaml посредством модуля CamlpX[en] компилятора. Язык Rebol также проектировался для программирования посредством интенсивной реализации встраиваемых мини-языков. В диалекте Лиспа Scheme посредством языка S-выражений реализован не полный по Тьюрингу язык SXML[en], воплощающий протокол XML встраиваемым образом.

Встраиваемый язык может иметь самодостаточную полную по Тьюрингу семантику, но тем не менее вместо независимой реализации ре-использовать компоненты базового языка (третья группа, смешение первых двух). Ярким примером является язык Schelog[14], реализующий семантику Пролога внутри диалекта Лиспа Scheme посредством продолжений, и превращающий Пролог из «самостоятельного» языка во встраиваемый. Традиционной учебной или «спортивной» задачей для многих функциональных языков служит реализация поверх рассматриваемого языка какого-либо другого, чаще всего языка логики предикатов первого порядка[15].

В контексте метаязыков самостоятельные языки временами называют «языками первого класса» (по аналогии с сущностями первого класса в языках), а встраиваемые — «объектными языками».

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

Визуальные языки

Один из языков (базовый или встраиваемый) может быть визуальным, что нередко применяется в пользовательском программировании[en] (англ. End-user development). Типичными примерами таких пар могут служить AutoLispAutoCAD и VBAMicrosoft Excel. Подобные пары образуют целостную интерактивную систему, и с точки зрения пользователя невозможно (и не нужно) определить, являются ли визуальные инструменты надстройкой, имитирующей команды встроенного текстового языка, или же текстовый язык управляет визуальными инструментами. Действительные взаимоотношения в этих парах определяются разработчиком.

В паре EmacsEmacs Lisp отношения более определённые. Лисп традиционно относится к метаязыкам, и в данном случае текстовый редактор надстраивается над ним как визуальный DSL, что и делает последний изменяемым и расширяемым.

В случае, когда оба языка являются визуальными, встраиваемые языки обычно называют иными терминами — плагинами, фильтрами и др., и не используют терминологию языково-ориентированного программирования. Формально же можно говорить, например, что для визуального мета-языка обработки графики Adobe Photoshop есть множество встраиваемых визуальных мини-языков (см. Photoshop plugin[en]).

Функциональные и логические языки программирования выглядят неестественно в визуальном окружении, т.к. ФП и ЛП в чистом виде запрещает побочные эффекты, и для взаимодействия с GUI их концептуальную целостность приходится нарушать. С педагогической т.з. считается желательным преподавание программирования с использованием консольных средств, чтобы сосредоточить внимание студентов на основах алгоритмизации, а не эргономики и тем более не процедурных навыков использования тех или иных IDE[16].

Преимущества и недостатки

Преимущества и недостатки использования в конкретной задаче конкретного DSL вместо языка общего назначения определяются гораздо явственнее, чем преимущества и недостатки использования одного языка общего назначения вместо другого: в большинстве случаев уже разработанный DSL оказывается концептуально неприменим к одним задачам и даёт бесспорный выигрыш по большинству показателей качества в других, а некоторые подзадачи вообще остаются нерешёнными до разработки DSL[4].

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

См. также

Напишите отзыв о статье "Предметно-ориентированный язык"

Примечания

  1. А.Я. Фридланд, Л.С. Чанамирова. [books.google.com/books?id=cNvqKgAACAAJ Информатика и компьютерные технологии: основные термины : толковый словарь]. — Астрель, 2003-01-01. — 270 с. — ISBN 9785170145461.
  2. Bentley - Little languages, 1986.
  3. [www.cse.dmu.ac.uk/~mward/ Martin Ward's Homepage]
  4. 1 2 3 Ward - Language Oriented Programming, 1994.
  5. Фаулер [www.maxkir.com/sd/languageWorkbenches.html Языковой инструментарий: новая жизнь языков предметной области]. — 2005.
  6. Сергей Дмитриев (JetBrains) [www.rsdn.ru/article/philosophy/LOP.xml Языково-ориентированное программирование: следующая парадигма] // = RSDN Magazine. — 2005.
  7. 1 2 3 4 Hudak - Modular Domain Specific Languages and Tools, 1998.
  8. 1 2 Taha - Domain-Specific Languages, 2008.
  9. Mernik - Formal and Practical Aspects of Domain-Specific Languages, 2012.
  10. 1 2 Czarnecki, O’Donnell, Striegnitz, Taha - DSL implementation in metaocaml, template haskell, and C++, 2004.
  11. Bernard Berthomieu [homepages.laas.fr/bernard/oo/ooml.html OO Programming Styles in ML]. — LAAS Report #2000111, Centre National De La Recherche Scientifique Laboratoire d'Analyse et d'Architecture des Systèmes, 2000.
  12. [libcello.org/ Cello — library that introduces higher level programming to C]
  13. Хопкрофт, Мотвани, Ульман - Теория автоматов, языков и вычислений, 2001.
  14. Schelog, 2003.
  15. Paulson - ML for the Working Programmer, 1996.
  16. Игорь Головин, Андрей Столяров Мультипарадигмальный подход к преподаванию программирования и роль свободного ПО // МГУ им.Ломоносова, Тезисы докладов II конференции разработчиков свободных программ "На Протве". — г. Обнинск, 2005.

Литература

  • [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.
  • Paul Hudak [haskell.cs.yale.edu/?post_type=publication&p=125 Modular Domain Specific Languages and Tools]. — IEEE Computer Society Press, Department of Computer Science, Yale University, 1998.
  • Jon Bentley [academic.research.microsoft.com/Publication/774283/little-languages Little languages]. — CACM, 29(8):711–721, 1986.
  • [www.hh.se/english/research/professors/walidmohamedtaha.10235.html Walid Taha] [www.cs.rice.edu/~taha/publications/conference/icces08.pdf Domain-Specific Languages]. — Department of Computer Science, Rice University, 2008.
  • Marjan Mernik [sharebookfree.com/formal-and-practical-aspects-of-domain-specific-languages-recent-developments/ Formal and Practical Aspects of Domain-Specific Languages]. — IGI Global, 2012. — ISBN 978-1-4666-2092-6.
  • Джон Хопкрофт, Раджив Мотвани, Джеффри Ульман. Введение в теорию автоматов, языков и вычислений. — 2-е. — Cornell University, Stanford University: Addison-Wesley Publishing Company, Издательский дом «Вильямс», 2001. — 528 с. — ISBN 5-8459-0261-4 (рус.), 0-201-44124-1 (англ.).
  • Lawrence C. Paulson. ML for the Working Programmer. — 2nd. — Cambridge, Great Britain: Cambridge University Press, 1996. — 492 с. — ISBN 0-521-57050-6 (твёрдый переплёт), 0-521-56543-X (мягкий переплёт).
  • K. Czarnecki, J. O’Donnell, J. Striegnitz, W. Taha [camlunity.ru/swap/Library/Computer%20Science/Metaprogramming/Domain-Specific%20Languages/DSL%20Implementation%20in%20MetaOCaml,%20Template%20Haskell%20and%20C++.pdf DSL implementation in metaocaml, template haskell, and C++]. — University of Waterloo, University of Glasgow, Research Centre Julich, Rice University, 2004.

Ссылки

  • Dorai Sitaram. [www.ccs.neu.edu/home/dorai/schelog/schelog.html Programming in Schelog] (2003).
  • [www.haskell.org/haskellwiki/Applications_and_libraries/Compilers_and_interpreters Compilers and interpreters implemented in Haskell].

Отрывок, характеризующий Предметно-ориентированный язык

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

Х
Письмо это еще не было подано государю, когда Барклай за обедом передал Болконскому, что государю лично угодно видеть князя Андрея, для того чтобы расспросить его о Турции, и что князь Андрей имеет явиться в квартиру Бенигсена в шесть часов вечера.
В этот же день в квартире государя было получено известие о новом движении Наполеона, могущем быть опасным для армии, – известие, впоследствии оказавшееся несправедливым. И в это же утро полковник Мишо, объезжая с государем дрисские укрепления, доказывал государю, что укрепленный лагерь этот, устроенный Пфулем и считавшийся до сих пор chef d'?uvr'ом тактики, долженствующим погубить Наполеона, – что лагерь этот есть бессмыслица и погибель русской армии.
Князь Андрей приехал в квартиру генерала Бенигсена, занимавшего небольшой помещичий дом на самом берегу реки. Ни Бенигсена, ни государя не было там, но Чернышев, флигель адъютант государя, принял Болконского и объявил ему, что государь поехал с генералом Бенигсеном и с маркизом Паулучи другой раз в нынешний день для объезда укреплений Дрисского лагеря, в удобности которого начинали сильно сомневаться.
Чернышев сидел с книгой французского романа у окна первой комнаты. Комната эта, вероятно, была прежде залой; в ней еще стоял орган, на который навалены были какие то ковры, и в одном углу стояла складная кровать адъютанта Бенигсена. Этот адъютант был тут. Он, видно, замученный пирушкой или делом, сидел на свернутой постеле и дремал. Из залы вели две двери: одна прямо в бывшую гостиную, другая направо в кабинет. Из первой двери слышались голоса разговаривающих по немецки и изредка по французски. Там, в бывшей гостиной, были собраны, по желанию государя, не военный совет (государь любил неопределенность), но некоторые лица, которых мнение о предстоящих затруднениях он желал знать. Это не был военный совет, но как бы совет избранных для уяснения некоторых вопросов лично для государя. На этот полусовет были приглашены: шведский генерал Армфельд, генерал адъютант Вольцоген, Винцингероде, которого Наполеон называл беглым французским подданным, Мишо, Толь, вовсе не военный человек – граф Штейн и, наконец, сам Пфуль, который, как слышал князь Андрей, был la cheville ouvriere [основою] всего дела. Князь Андрей имел случай хорошо рассмотреть его, так как Пфуль вскоре после него приехал и прошел в гостиную, остановившись на минуту поговорить с Чернышевым.
Пфуль с первого взгляда, в своем русском генеральском дурно сшитом мундире, который нескладно, как на наряженном, сидел на нем, показался князю Андрею как будто знакомым, хотя он никогда не видал его. В нем был и Вейротер, и Мак, и Шмидт, и много других немецких теоретиков генералов, которых князю Андрею удалось видеть в 1805 м году; но он был типичнее всех их. Такого немца теоретика, соединявшего в себе все, что было в тех немцах, еще никогда не видал князь Андрей.
Пфуль был невысок ростом, очень худ, но ширококост, грубого, здорового сложения, с широким тазом и костлявыми лопатками. Лицо у него было очень морщинисто, с глубоко вставленными глазами. Волоса его спереди у висков, очевидно, торопливо были приглажены щеткой, сзади наивно торчали кисточками. Он, беспокойно и сердито оглядываясь, вошел в комнату, как будто он всего боялся в большой комнате, куда он вошел. Он, неловким движением придерживая шпагу, обратился к Чернышеву, спрашивая по немецки, где государь. Ему, видно, как можно скорее хотелось пройти комнаты, окончить поклоны и приветствия и сесть за дело перед картой, где он чувствовал себя на месте. Он поспешно кивал головой на слова Чернышева и иронически улыбался, слушая его слова о том, что государь осматривает укрепления, которые он, сам Пфуль, заложил по своей теории. Он что то басисто и круто, как говорят самоуверенные немцы, проворчал про себя: Dummkopf… или: zu Grunde die ganze Geschichte… или: s'wird was gescheites d'raus werden… [глупости… к черту все дело… (нем.) ] Князь Андрей не расслышал и хотел пройти, но Чернышев познакомил князя Андрея с Пфулем, заметив, что князь Андрей приехал из Турции, где так счастливо кончена война. Пфуль чуть взглянул не столько на князя Андрея, сколько через него, и проговорил смеясь: «Da muss ein schoner taktischcr Krieg gewesen sein». [«То то, должно быть, правильно тактическая была война.» (нем.) ] – И, засмеявшись презрительно, прошел в комнату, из которой слышались голоса.
Видно, Пфуль, уже всегда готовый на ироническое раздражение, нынче был особенно возбужден тем, что осмелились без него осматривать его лагерь и судить о нем. Князь Андрей по одному короткому этому свиданию с Пфулем благодаря своим аустерлицким воспоминаниям составил себе ясную характеристику этого человека. Пфуль был один из тех безнадежно, неизменно, до мученичества самоуверенных людей, которыми только бывают немцы, и именно потому, что только немцы бывают самоуверенными на основании отвлеченной идеи – науки, то есть мнимого знания совершенной истины. Француз бывает самоуверен потому, что он почитает себя лично, как умом, так и телом, непреодолимо обворожительным как для мужчин, так и для женщин. Англичанин самоуверен на том основании, что он есть гражданин благоустроеннейшего в мире государства, и потому, как англичанин, знает всегда, что ему делать нужно, и знает, что все, что он делает как англичанин, несомненно хорошо. Итальянец самоуверен потому, что он взволнован и забывает легко и себя и других. Русский самоуверен именно потому, что он ничего не знает и знать не хочет, потому что не верит, чтобы можно было вполне знать что нибудь. Немец самоуверен хуже всех, и тверже всех, и противнее всех, потому что он воображает, что знает истину, науку, которую он сам выдумал, но которая для него есть абсолютная истина. Таков, очевидно, был Пфуль. У него была наука – теория облического движения, выведенная им из истории войн Фридриха Великого, и все, что встречалось ему в новейшей истории войн Фридриха Великого, и все, что встречалось ему в новейшей военной истории, казалось ему бессмыслицей, варварством, безобразным столкновением, в котором с обеих сторон было сделано столько ошибок, что войны эти не могли быть названы войнами: они не подходили под теорию и не могли служить предметом науки.
В 1806 м году Пфуль был одним из составителей плана войны, кончившейся Иеной и Ауерштетом; но в исходе этой войны он не видел ни малейшего доказательства неправильности своей теории. Напротив, сделанные отступления от его теории, по его понятиям, были единственной причиной всей неудачи, и он с свойственной ему радостной иронией говорил: «Ich sagte ja, daji die ganze Geschichte zum Teufel gehen wird». [Ведь я же говорил, что все дело пойдет к черту (нем.) ] Пфуль был один из тех теоретиков, которые так любят свою теорию, что забывают цель теории – приложение ее к практике; он в любви к теории ненавидел всякую практику и знать ее не хотел. Он даже радовался неуспеху, потому что неуспех, происходивший от отступления в практике от теории, доказывал ему только справедливость его теории.
Он сказал несколько слов с князем Андреем и Чернышевым о настоящей войне с выражением человека, который знает вперед, что все будет скверно и что даже не недоволен этим. Торчавшие на затылке непричесанные кисточки волос и торопливо прилизанные височки особенно красноречиво подтверждали это.
Он прошел в другую комнату, и оттуда тотчас же послышались басистые и ворчливые звуки его голоса.


Не успел князь Андрей проводить глазами Пфуля, как в комнату поспешно вошел граф Бенигсен и, кивнув головой Болконскому, не останавливаясь, прошел в кабинет, отдавая какие то приказания своему адъютанту. Государь ехал за ним, и Бенигсен поспешил вперед, чтобы приготовить кое что и успеть встретить государя. Чернышев и князь Андрей вышли на крыльцо. Государь с усталым видом слезал с лошади. Маркиз Паулучи что то говорил государю. Государь, склонив голову налево, с недовольным видом слушал Паулучи, говорившего с особенным жаром. Государь тронулся вперед, видимо, желая окончить разговор, но раскрасневшийся, взволнованный итальянец, забывая приличия, шел за ним, продолжая говорить:
– Quant a celui qui a conseille ce camp, le camp de Drissa, [Что же касается того, кто присоветовал Дрисский лагерь,] – говорил Паулучи, в то время как государь, входя на ступеньки и заметив князя Андрея, вглядывался в незнакомое ему лицо.
– Quant a celui. Sire, – продолжал Паулучи с отчаянностью, как будто не в силах удержаться, – qui a conseille le camp de Drissa, je ne vois pas d'autre alternative que la maison jaune ou le gibet. [Что же касается, государь, до того человека, который присоветовал лагерь при Дрисее, то для него, по моему мнению, есть только два места: желтый дом или виселица.] – Не дослушав и как будто не слыхав слов итальянца, государь, узнав Болконского, милостиво обратился к нему:
– Очень рад тебя видеть, пройди туда, где они собрались, и подожди меня. – Государь прошел в кабинет. За ним прошел князь Петр Михайлович Волконский, барон Штейн, и за ними затворились двери. Князь Андрей, пользуясь разрешением государя, прошел с Паулучи, которого он знал еще в Турции, в гостиную, где собрался совет.
Князь Петр Михайлович Волконский занимал должность как бы начальника штаба государя. Волконский вышел из кабинета и, принеся в гостиную карты и разложив их на столе, передал вопросы, на которые он желал слышать мнение собранных господ. Дело было в том, что в ночь было получено известие (впоследствии оказавшееся ложным) о движении французов в обход Дрисского лагеря.
Первый начал говорить генерал Армфельд, неожиданно, во избежание представившегося затруднения, предложив совершенно новую, ничем (кроме как желанием показать, что он тоже может иметь мнение) не объяснимую позицию в стороне от Петербургской и Московской дорог, на которой, по его мнению, армия должна была, соединившись, ожидать неприятеля. Видно было, что этот план давно был составлен Армфельдом и что он теперь изложил его не столько с целью отвечать на предлагаемые вопросы, на которые план этот не отвечал, сколько с целью воспользоваться случаем высказать его. Это было одно из миллионов предположений, которые так же основательно, как и другие, можно было делать, не имея понятия о том, какой характер примет война. Некоторые оспаривали его мнение, некоторые защищали его. Молодой полковник Толь горячее других оспаривал мнение шведского генерала и во время спора достал из бокового кармана исписанную тетрадь, которую он попросил позволения прочесть. В пространно составленной записке Толь предлагал другой – совершенно противный и плану Армфельда и плану Пфуля – план кампании. Паулучи, возражая Толю, предложил план движения вперед и атаки, которая одна, по его словам, могла вывести нас из неизвестности и западни, как он называл Дрисский лагерь, в которой мы находились. Пфуль во время этих споров и его переводчик Вольцоген (его мост в придворном отношении) молчали. Пфуль только презрительно фыркал и отворачивался, показывая, что он никогда не унизится до возражения против того вздора, который он теперь слышит. Но когда князь Волконский, руководивший прениями, вызвал его на изложение своего мнения, он только сказал:
– Что же меня спрашивать? Генерал Армфельд предложил прекрасную позицию с открытым тылом. Или атаку von diesem italienischen Herrn, sehr schon! [этого итальянского господина, очень хорошо! (нем.) ] Или отступление. Auch gut. [Тоже хорошо (нем.) ] Что ж меня спрашивать? – сказал он. – Ведь вы сами знаете все лучше меня. – Но когда Волконский, нахмурившись, сказал, что он спрашивает его мнение от имени государя, то Пфуль встал и, вдруг одушевившись, начал говорить:
– Все испортили, все спутали, все хотели знать лучше меня, а теперь пришли ко мне: как поправить? Нечего поправлять. Надо исполнять все в точности по основаниям, изложенным мною, – говорил он, стуча костлявыми пальцами по столу. – В чем затруднение? Вздор, Kinder spiel. [детские игрушки (нем.) ] – Он подошел к карте и стал быстро говорить, тыкая сухим пальцем по карте и доказывая, что никакая случайность не может изменить целесообразности Дрисского лагеря, что все предвидено и что ежели неприятель действительно пойдет в обход, то неприятель должен быть неминуемо уничтожен.
Паулучи, не знавший по немецки, стал спрашивать его по французски. Вольцоген подошел на помощь своему принципалу, плохо говорившему по французски, и стал переводить его слова, едва поспевая за Пфулем, который быстро доказывал, что все, все, не только то, что случилось, но все, что только могло случиться, все было предвидено в его плане, и что ежели теперь были затруднения, то вся вина была только в том, что не в точности все исполнено. Он беспрестанно иронически смеялся, доказывал и, наконец, презрительно бросил доказывать, как бросает математик поверять различными способами раз доказанную верность задачи. Вольцоген заменил его, продолжая излагать по французски его мысли и изредка говоря Пфулю: «Nicht wahr, Exellenz?» [Не правда ли, ваше превосходительство? (нем.) ] Пфуль, как в бою разгоряченный человек бьет по своим, сердито кричал на Вольцогена:
– Nun ja, was soll denn da noch expliziert werden? [Ну да, что еще тут толковать? (нем.) ] – Паулучи и Мишо в два голоса нападали на Вольцогена по французски. Армфельд по немецки обращался к Пфулю. Толь по русски объяснял князю Волконскому. Князь Андрей молча слушал и наблюдал.
Из всех этих лиц более всех возбуждал участие в князе Андрее озлобленный, решительный и бестолково самоуверенный Пфуль. Он один из всех здесь присутствовавших лиц, очевидно, ничего не желал для себя, ни к кому не питал вражды, а желал только одного – приведения в действие плана, составленного по теории, выведенной им годами трудов. Он был смешон, был неприятен своей ироничностью, но вместе с тем он внушал невольное уважение своей беспредельной преданностью идее. Кроме того, во всех речах всех говоривших была, за исключением Пфуля, одна общая черта, которой не было на военном совете в 1805 м году, – это был теперь хотя и скрываемый, но панический страх перед гением Наполеона, страх, который высказывался в каждом возражении. Предполагали для Наполеона всё возможным, ждали его со всех сторон и его страшным именем разрушали предположения один другого. Один Пфуль, казалось, и его, Наполеона, считал таким же варваром, как и всех оппонентов своей теории. Но, кроме чувства уважения, Пфуль внушал князю Андрею и чувство жалости. По тому тону, с которым с ним обращались придворные, по тому, что позволил себе сказать Паулучи императору, но главное по некоторой отчаянности выражении самого Пфуля, видно было, что другие знали и он сам чувствовал, что падение его близко. И, несмотря на свою самоуверенность и немецкую ворчливую ироничность, он был жалок с своими приглаженными волосами на височках и торчавшими на затылке кисточками. Он, видимо, хотя и скрывал это под видом раздражения и презрения, он был в отчаянии оттого, что единственный теперь случай проверить на огромном опыте и доказать всему миру верность своей теории ускользал от него.