MoreKnig.org

Программирование, как вид человеческой деятельности: читать книгу онлайн полностью и бесплатно

Автор: Дейкстра Эдсгер



Шрифт:

Введение

В качестве введения мне хотелось бы начать разговор с истории и цитат.

История эта — о физике Людвиге Больцмане, который хотел достичь своих результатов путем громоздких вычислений. Кто-то однажды пожаловался на то, что его методы ужасны, на что Больцман заявил, что «об элегантности должны заботиться портные и сапожники», дав тем самым понять, что его самого это никоим образом не беспокоит.

В противоположность ему, я хотел бы процитировать другого известного ученого XIX века, Джорджа Буля. В своей книге «Исследование законов мышления», в главе «Условия совершенного метода», он писал: «Я говорю здесь не только о том совершенстве, которое состоит в могуществе, но и о том, которое основывается на концепции изящества и красоты. Вполне возможно, что тщательное изучение этого вопроса приведет нас к выводу, что совершенный метод должен быть не только эффективным по отношению к объектам, для которых он разработан, но и демонстрировать определенное единство и гармонию всех своих частей и процессов». Вряд ли кто-то не заметит коренного различия в этих подходах.

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

О качестве результатов

Даже полагая, что машины работают безупречно, мы должны задать себе вопрос: «Когда компьютер выдает результаты, почему мы должны им доверять, если только мы им действительно доверяем?», а затем: «Какие меры мы можем предпринять, чтобы повысить степень нашей уверенности в том, что выданные результаты — это то, что нам нужно на самом деле?».

Насколько важен первый вопрос, можно проиллюстрировать на простом, даже несколько упрощенном примере. Предположим, что математик, работающий в области теории чисел, имеет в своем распоряжении машину с программой факторизации чисел. Этот процесс может завершиться двумя способами: либо он выдает факторизацию данного числа, либо отвечает, что заданное число является простым. Предположим теперь, что наш математик хочет подставить в этот процесс, скажем, число с 20-ю десятичными знаками, для которого у него есть веские причины полагать, что оно простое. Если машина подтверждает это ожидание, он будет счастлив; если она находит факторизацию, математик будет разочарован, так как интуиция снова подвела его, но, если он сомневается, он может взять счетную машинку и перемножить полученные множители, чтобы проверить, получится ли в результате исходное число. Если же, наоборот, машина выдает ответ, что данное число, согласно его ожиданиям и горячему желанию, является простым, с чего бы ему верить этому? Наш пример демонстрирует, что даже в полностью абстрактных задачах получение результата не является четко определенным процессом, четко определенным в том смысле, что можно сказать: «Я сделал это», не беспокоясь за убедительность результата, то есть его «качество».

Ситуация, в которой находятся программисты, очень похожа на ту, в которой находятся чистые математики, которые разрабатывают теорию и доказывают результаты. Долгое время чистые математики думали — а некоторые из них до сих пор думают — что теорема может быть доказана полностью, что вопрос о том, является ли предложенное доказательство теоремы адекватным или нет, допускает абсолютный ответ «да» или «нет». Но это иллюзия, потому что как только кто-то начинает думать, что доказал что-то, он должен доказать, что его доказательство безукоризненно, и так далее, до бесконечности! Никто не может гарантировать, что доказательство корректно, в лучшем случае он может сказать: «Я не нашел ни одной ошибки». Порой мы льстим себе мыслью о неопровержимом доказательстве, но на самом деле все, что мы делаем, это лишь придаем правдоподобный вид своим заключениям.

Несмотря на все свои недостатки, математические рассуждения представляют замечательную модель того, как можно охватить чрезвычайно сложные структуры посредством мозга, возможности которого ограничены. Кажется, стоит разобраться, до какой степени эти проверенные методы могут быть перенесены в искусство использования компьютеров. В разработке языков программирования можно позволить себе руководствоваться в первую очередь тем, «что машина может делать». Впрочем, учитывая, что язык программирования — это мост между пользователем и машиной и фактически может рассматриваться как его инструмент, кажется столь же важным рассматривать, «что Человек может придумать». Именно в этом русле мы продолжим наше исследование.

О структуре убедительных программ

Техника управления сложностью известна с древних времен: «Divide et impera» (разделяй и властвуй). Аналогия между построением доказательства и построением программы, пожалуй, просто поразительна. В обоих случаях даны отправные точки (аксиомы и существующая теория против примитивов и доступных библиотечных программ), в обоих случаях задана цель (доказанная теорема против желаемых результатов), в обоих случаях сложность преодолевается делением на части (леммы против подпрограмм и процедур).

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

«Он разрабатывает полные спецификации отдельных частей».

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

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

Очевидно, что построение каждой такой отдельной части может снова оказаться сложной задачей, так что для данной части задачи потребуется дальнейшее разбиение.

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

Предположение о том, что программист сделал подходящее разбиение, находит подтверждение в том, что становится возможным выполнить первые два этапа: спецификацию частей и проверку, что они совместно решают задачу. Здесь элегантность, точность, ясность и тщательное понимание задачи являются необходимыми предпосылками. Но в целом техника разбиения основывается на том, что обсуждалось значительно меньше, а именно на том, я назвал бы «принципом невмешательства». На втором этапе подразумевается, что правильная работа целого может быть установлена путем рассмотрения только внешних спецификаций частей, без деталей их внутреннего строения. На третьем этапе принцип невмешательства всплывает снова; здесь подразумевается, что отдельные части могут быть поняты и построены независимо друг от друга.

Возможно, здесь уместно заметить, что если я правильно понял нынешнее отношение к проблеме определения языка, при несколько более формальном подходе состоятельность техники разбиения подвергается сомнению. Те, кто выдвигает возражения, аргументируют свою точку зрения следующим образом. Когда вы используете механизм, подобный описанному двухэтапному, во-первых, должны быть созданы спецификации, а во-вторых, описано, как все это работает. При этом вы вынуждены в лучшем случае сказать дважды одно и то же, но вероятнее всего, вы придете к противоречию. С точки зрения статистики, как ни грустно мне об этом говорить, последнее замечание достаточно серьезно. Единственный ясный путь к определению языка, возражают они, это просто определение механизмов, потому что все, что они будут делать, следует из этого. Мой вопрос: «А как оно следует?» мудро оставляют без ответа, и я боюсь, что это тонкое, но порой значительное различие между понятиями «определено» и «известно» сделают их работу интеллектуальным упражнением, которое ведет в тупик.

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

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

Сравнение некоторых альтернатив

Развернутое сравнение кода машины Фон-неймановского типа — хорошо известное отсутствием ясности — и различных типов алгоритмических языков было бы не лишним. Выполнение программы всегда состоит в периодическом взаимодействии двух информационных потоков, одного постоянного во времени («программы»), другого изменяющегося («данные»). Много лет одним из основных достоинств кода Фон-неймановского типа считалась возможность программы изменять свои собственные инструкции. Со временем мы обнаружили, что именно эта возможность в немалой степени ответственна за отсутствие ясности в программах на машинном коде. Тут же была поставлена под вопрос необходимость этого: все алгебраические компиляторы, которые я знаю, производят объектные программы, остающиеся неизменными все время выполнения.

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

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

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

Но у меня есть причины спросить: будучи примененным в качестве спасительного средства, оператор goto не хуже ли сам по себе, чем тот дефект, который он призван исправить? Например, два менеджера программных отделов из разных стран и разной квалификации — один в основном ученый, другой в основном коммерсант — сообщили мне независимо друг от друга и по собственной инициативе о своем наблюдении, что квалификация их программистов обратно пропорциональна частоте появления оператора goto в их программах. Это было стимулом к тому, чтобы попытаться обойтись без оператора goto.

Идея состоит в следующем: то, то нам известно как «передача управления», т. е. подмена счетчика инструкций, — это операция, обычно подразумеваемая как часть более содержательного действия. Я упомяну переход на следующий оператор, вызов процедуры и возврат из нее, условные конструкции и оператор for. Это еще вопрос, не собьет ли программиста с толку наличие отдельного средства управления передачей управления. Я поставил несколько программных экспериментов и сравнил текст на ALGOL с текстом, полученным мной на модифицированной версии ALGOL 60, в котором оператор goto был упразднен, а оператор for — будучи слишком помпезным и сложным — заменен более простой конструкцией повтора. Последние версии было потруднее создавать: мы так хорошо знакомы с командой перехода, что требовались некоторые усилия, чтобы забыть его! Во всех попытках, впрочем, программы без goto оказались короче и понятнее. Начальный шаг в повышении ясности достаточно понятен. Хорошо известно, что не существует алгоритма для определения, завершится данная программа или нет. Другими словами: каждый программист, который хочет создать безукоризненную программу, должен хотя бы убедиться сам, проверив, действительно ли завершается его программа. В программе, где goto применен в неограниченных количествах, этот анализ может оказаться очень трудным, учитывая большое разнообразие путей, по которым программа может зациклиться. После упразднения goto остаются только два способа, которыми программа может зациклиться: либо бесконечная рекурсия — т. е. через механизм процедур — либо конструкция цикла. Это весьма упрощает проверку.

Понятие цикла, столь фундаментальное в программировании, имеет еще один аспект. Нет ничего необычного в том, что среди последовательности повторяющихся операторов появляется одно или более подвыражений, которые не изменяют значение в ходе цикла. Если такая последовательность должна повторяться много раз, было бы досадной потерей машинного времени перевычислять одни и те же значения снова и снова. Один из способов избежать этого — переложить на оптимизирующий транслятор выявление подобных константных подвыражений, чтобы он мог вынести вычисление их значений за пределы цикла. При отсутствии оптимизирующего транслятора очевидное решение — предложить программисту расписать их явно путем введения стольких дополнительных переменных, сколько константных подвыражений имеется в цикле, и присвоения им значений перед входом в цикл. Я должен подчеркнуть, что оба способа написания программ в равной степени сбивают с толку. В первом случае транслятор сталкивается с ненужной головоломкой по выявлению константности, во втором — мы вводим переменную, единственное назначение которой — обозначать константное значение. Последнее рассмотрение указывает выход из этого затруднения: помимо переменных, в распоряжении программиста должны быть «локальные константы», т. е. идентифицируемые величины с ограниченным временем жизни, в течение которого они сохраняют постоянное значение, заданное в момент появления величины. Эти величины не новы: формальные параметры процедур уже демонстрируют это свойство. Вышеупомянутое — это призыв осознать, что концепция «локальной константы» имеет право на существование. Если меня правильно информировали, это уже было заложено в CPL, язык программирования, разработанный совместными усилиями в математической лаборатории Кембриджского университета в Англии.

Перейти на стр:
Шрифт:
Продолжить читать на другом устройстве:
QR code

Новые книги

Смотреть все
Книга сердца. Светлый источник любви. Боль в твоём сердце
Книга сердца. Светлый источник любви. Боль в твоём сердце
[Здоровье / Эзотерика, оккультизм, фэн-шуй, йога]
Лууле Виилма (1950–2002) – известная эстонская целительница и парапсихолог. Общаясь с пациентами, она поняла, что любая болезнь – результат обид и стрессов, которые мы порой копим в себе годами.
0
"Зарубежный детектив 2026-30". Компиляция. Книги 1-12
[Детективы / Криминальный детектив / Полицейский детектив / Триллер]
Настоящий томик зарубежного детектива содержит детективы разных жанров и и вполне сможет завоевать симпатии читателей детективами включёнными в сборник! Приятого чтения, уважаемый читатель!
0
Ночь, когда он исчез
Ночь, когда он исчез
[Детективы / Триллер]
Новинка от автора супербестселлера №1 The New York Times! Долгожданный роман Лоры Дейв – автора феномена «Последнее, что он сказал мне», покорившего мир и экранизированного Apple TV+! Иногда,
0
Чайная под солнцем Тосканы
Чайная под солнцем Тосканы
[О любви / Современные любовные романы]
В свои тридцать четыре Тилли привыкла жить осторожно: черно-белые фотографии, крепкий кофе и никаких лишних надежд. Но после пожара, уничтожившего ее галерею, и предательства любимого человека
0
Я не мертва
Я не мертва
[Полицейский детектив / Детективы / Триллер]
Три года детектив Джуди Фонтейн была изолирована от внешнего мира. Заключенная в подземной камере, она общалась только со своим садистом-похитителем, и чтение его мыслей по выражению лица стало
0
Рождество с подвохом
Рождество с подвохом
[Классический детектив / Детективы]
Идеальное уютное чтение для поклонников «Убийств и кексиков» Питера Боланда, «Опасной игры бабули» Кристен Перрин и «Рецепта убийства для настоящей лентяйки» М. С. Битон. Детективы Вероники Хэли
0
Гнездо кабана: Истории из заповедника
Гнездо кабана: Истории из заповедника
[Современная проза / Биология]
Книга «Гнездо кабана: Истории из заповедника» написана человеком, для которого кабаны – не просто объект исследования. По мнению автора, кабан – зверь выдающийся и достоин особого внимания. Надежда
0
Магия Мастера Сефирот: тайные знания предков. Практики, ритуалы, заклинания, Таро
Магия Мастера Сефирот: тайные знания предков. Практики, ритуалы, заклинания, Таро
[Эзотерика, оккультизм, фэн-шуй, йога]
Если вы мечтали обучаться магии у настоящего Мастера, узнать все тайны сильнейших заклинаний, то у вас в руках – исполнение вашей мечты. В книге собраны уникальные техники, которые сделают из вас
0
Американский Освенцим. История больницы Пенхёрст
Американский Освенцим. История больницы Пенхёрст
[Публицистика / Военная документалистика / Документалистика]
Психиатрическая больница Пенхёрст — кровавое пятно в истории Соединённых Штатов. С 1908 по 1987 год там проводились бесчеловечные опыты над больными, в том числе над детьми. Им делали лоботомию,
0
Американская глубинка. Реднеки, хиллбилли и трейлеры
Американская глубинка. Реднеки, хиллбилли и трейлеры
[Публицистика / Документалистика / Обществознание]
Книга рассказывает о жизни американской глубинки так называемого Deep South — Глубокого Юга или Диксиленда. Автор книги, после многолетних путешествий по Югу США, повествует о жизни хиллбилли (горцах
0
Лейтенант. Том 3
Лейтенант. Том 3
[Альтернативная история / Исторические приключения / Попаданцы / Самиздат]
Весна 1905-го. Артур выстоял, блокада прорвана, море — своё. Но война не кончена: через полсвета идёт Вторая эскадра, и в книгах, которые помнит капитан 2 ранга Андрей Маринин, её дорога кончается
0
Стример из иного мира. Том 2
Стример из иного мира. Том 2
[Книги про волшебников / РеалРПГ (RealRPG) / Попаданцы / Самиздат]
Пусть и не по своей воле, но я попал в иной мир. Здесь я, по сути, продолжаю заниматься тем же, что и раньше, — стримить для зрителей. Вот только теперь за мной следят так называемые Небожители, а
1

Самые популярные книги

Железный характер Кристианы Морли
Железный характер Кристианы Морли
[Любовная фантастика / Попаданцы / Классическое фэнтези]
Удар копытом лошади рушит блестящие перспективы дебютантки. По мнению общества, хромота испортила не только плавную поступь девицы, но и характер! Это ж надо умудриться — вместо монастыря или
30
Хозяйка Тиховодья. Развод на краю болот
Хозяйка Тиховодья. Развод на краю болот
[Любовное фэнтези / Попаданцы]
- Двадцать четыре года, Веста. Наследника нет. Подпиши, и получишь Тиховодье. - А где это? - На краю Хляби. Тихо, сыро, никого. Утром я собирала клюкву в Мещёре и шагнула в болотное окно. Очнулась в
9
Хорошая, плохая, грешная 2
Хорошая, плохая, грешная 2
[Любовное фэнтези / Книги про волшебников / Попаданцы / Самиздат]
Новый Свет полон самых разных неожиданностей, как приятных, так и не очень. Новый Свет полон шикарных возможностей, только успевай их реализовывать. Новый Свет полон сильных мужчин и
6
Те, кто приходит в тишине
Те, кто приходит в тишине
[Альтернативная история / Попаданцы / Самиздат / Боевая фантастика]
Редкий бой бывает похож на предыдущий. Мы учимся. На своих и на чужих ошибках. Стараемся расти над собой. Противник – тоже. Он анализирует наши ошибки, учитывает остроумные решения. То есть
6
Комдив
Комдив
[Попаданцы / Альтернативная история / Самиздат]
Комдив Алексей Турчин отправляется в Соединенные Штаты Америки для изучения военно-промышленного комплекса и перспективных образцов вооружения. Удастся ли ему подтолкнуть развитие Рабоче-Крестьянской
5
Измена. Я тебя (не) любил
Измена. Я тебя (не) любил
[Современные любовные романы]
— Как тебе… — слышу прерывистый голос подруги, — мой подарок в честь твоего дня рождения?По меньшей мере иду я в верном направлении. Но вот предчувствие не из лучших. Голос Светы перемешивается со
6
Я попал в мужа любимой супергероини и теперь буду оберегать её от посягательств других суперов
Я попал в мужа любимой супергероини и теперь буду оберегать её от посягательств других суперов
[Попаданцы / Городское фэнтези / Юмористическое фэнтези / Самиздат]
Попытка создания пародии на попаданцев в комикс. Не фанфик, все герои и сюжет комикса, известные герою книги, выдуманы и не являются калькой с какого-то существующего произведения. Ну а главный
5
Мир без вуали
Мир без вуали
[Любовная фантастика / Самиздат]
Незаконное потребление наркотических средств, психотропных веществ, их аналогов причиняет вред здоровью, их незаконный оборот запрещен и влечет установленную законодательством ответственность.
4
Возлюбленная ишхасса
Возлюбленная ишхасса
[Любовная фантастика / Попаданцы / Классическое фэнтези]
Когда рушатся все планы и надежды, что делать, если нет сил пойти и убивать врага? Что если все что у тебя есть только гостиница, работники и интриги конкурентов? Да ничего, жить дальше, разбираться
4
Хорошая, плохая, грешная 3
Хорошая, плохая, грешная 3
[Попаданцы]
У Эвирейл Миардо нет ни единой свободной минутки на грусть и рефлексию! Да и когда? Столько дел, столько дел! Шахту выкопай, лавку открой, артефакты создай, эльфа за попу укуси... Ничего не
4
Майор: Сорокапятка 3
Майор: Сорокапятка 3
[Альтернативная история / Попаданцы / Самиздат]
Бобруйск. Минск. Брест. Висла. Одер. Красная армия наконец идёт туда, куда должна была идти с самого начала войны, — на запад. Так быстро, что карты не успевают за передовыми частями. А
4
Имперец. Ранг 4. Воевода
Имперец. Ранг 4. Воевода
[Боевая фантастика / Боевое фэнтези]
Спасение цесаревича от пули принесло Александру титул, должность личного телохранителя и редкую магию стихий. Теперь он – правая рука наследника престола и командир его личного отряда особого
5

Самые комментируемые

Семья для брошенки. Вторая жизнь с нуля
Семья для брошенки. Вторая жизнь с нуля
[Любовная фантастика / Самиздат / Попаданцы]
Семь лет унижений, презрения и пустой постели. Герцог Дрейк Ашфорд объявил свою истинную жену бракованной и отправил в ссылку на Ольцег — умирать среди таких же «ненужных». Он думал, что сломал
22
Отбор невест, или Три орешка для темного
Отбор невест, или Три орешка для темного
[Любовная фантастика]
Каждая приличная драконица должна пройти отбор невест, иначе внукам у камина будет нечего рассказать. Так говорила моя маменька, а ей можно верить — за ее спиной аж четыре таких отбора! Так что я
13
Печать Забытой Эпохи
Печать Забытой Эпохи
[Любовная фантастика / Попаданцы]
— Скажи спасибо, что не оставил босой на улице, Верадель. Забирай свои проклятые северные руины и убирайся, — самодовольно бросил мне бывший муж, швырнув на стол бумаги о разводе. Он думал, что
23
Хозяйка Тиховодья. Развод на краю болот
Хозяйка Тиховодья. Развод на краю болот
[Любовное фэнтези / Попаданцы]
- Двадцать четыре года, Веста. Наследника нет. Подпиши, и получишь Тиховодье. - А где это? - На краю Хляби. Тихо, сыро, никого. Утром я собирала клюкву в Мещёре и шагнула в болотное окно. Очнулась в
9
Шахматистка. Выжить на Арене Смерти
Шахматистка. Выжить на Арене Смерти
[Любовное фэнтези / Попаданцы / Книги про волшебников / Самиздат]
Кто-то попадает в имбовых персов: Избранных, Тёмных властелинов и прочих крутых ребят. А я попала в тело бездарной адептки магической академии. Как она сюда поступила-то, без грамма магии? Неважно,
12
Диагноз
Диагноз
[Самиздат / Детективная фантастика / Городское фэнтези / Юмористическая фантастика]
Некромантия в нашем мире давно стала такой же частью жизни, как радио, кино, телефоны и аэропланы. Но разве могла я подумать, что однажды приду наниматься на службу к лучшему некроманту столицы! Он —
17
Ведьма и Экзорцист. Второй шанс на жизнь
Ведьма и Экзорцист. Второй шанс на жизнь
[Детективы / Триллер / Любовное фэнтези / Фэнтези]
Приказ ясен: отравить Дерека вель Гранна. Последствия – костёр и пепел. Белладонна уже прошла этот круг, сгорела и получила второй шанс. Теперь она знает, что приказ – лишь верхушка заговора, в
4
Последняя Гадина империи
Последняя Гадина империи
[Попаданцы / Бояръ-Аниме / Русское фэнтези / Самиздат]
Пятьсот лет назад я была прославленным зельеваром, матриархом и почтенной основательницей династии. А сегодня очнулась в теле изнеженной барышни на пепелище семейной усадьбы и обнаружила, что весь
3
Хорошая, плохая, грешная 2
Хорошая, плохая, грешная 2
[Любовное фэнтези / Книги про волшебников / Попаданцы / Самиздат]
Новый Свет полон самых разных неожиданностей, как приятных, так и не очень. Новый Свет полон шикарных возможностей, только успевай их реализовывать. Новый Свет полон сильных мужчин и
6
Пулеметчик Федя
Пулеметчик Федя
[Альтернативная история / Юмористическая фантастика / Попаданцы / Самиздат]
Пулеметчик — это не звание, это диагноз. Тридцать пять лет, пулемёт «Печенег», рукавица прилипла к раскалённому кожуху — и здравствуйте: июнь сорок первого, чужие двадцать два года, чужие руки,
8
Регистрация
Регистрация
[Современная проза]
Может быть, если подождать, оно само рассосется. Надо только не думать про него: вот как оно туманом или тенью болтается где-то рядом, так пусть там и болтается. Имени ему не давать, не вызывать его.
15
Драконий брак, где всё не так
Драконий брак, где всё не так
[Любовная фантастика / Попаданцы]
Я оказалась в другом мире, у моего питомца тяжёлая психотравма, а всё из-за того, что один бестолковый дракон за сыном недосмотрел. И хоть бы извинился за своего драконёнка! Так нет, рычит,
2

Прямо сейчас читают

На распутье семи дорог
На распутье семи дорог
[Космическая фантастика]
Пелена темных туч закрыла будущее Земли, России и главного героя. Всему виной космические цивилизации, пришедшие на Землю со своими планами. Его путь пролег через учебку ЧВК и поля боя на окраинах
0
Некроманты пьют кофе со сливками
Некроманты пьют кофе со сливками
[Юмористическое фэнтези]
Хорошо быть некромантом! Ровно до того момента, как у тебя появляется назойливый поклонник с группой поддержки. А другой парень сбегает со свидания, стоит услышать о твоем призвании. Третий... Ну
0
Озверение
Озверение
[Боевое фэнтези / Книги про волшебников / Попаданцы]
Кажется, чем ближе столица, тем сложнее в неё попасть. Но зато скоро станет понятно, что именно не поделили Настоятель и глава Бурого Приората и почему им так нужны одарённые первушники. Первая мера
0
Где умирают хорошие девочки
Где умирают хорошие девочки
[Современные любовные романы / Эротика, Секс]
Попаданка в 1812: Любить и не сдаваться
Попаданка в 1812: Любить и не сдаваться
[Любовная фантастика / Самиздат / Попаданцы]
Я попала в прошлое, в 1812 год. Самый разгар войны с Наполеоном. Моё имение разорено солдатами французской армии. Мои люди убиты. Однако война подарила мне дочь и встречу с мужчиной, которого я могла
4
Шанхай [litres]
Шанхай [litres]
[Проза / Историческая проза / Старинная литература: прочее]
Имя Риити Ёкомицу (1898–1947) не так хорошо известно отечественному читателю, как имена его знаменитых современников – Акутагава Рюноскэ, Дзюнъитиро Танидзаки, Ясунари Кавабата – а между тем в
0
Роковой обмен
Роковой обмен
[Любовная фантастика]
Он — ее враг. Тот, кто пытался убить ее. И кого она пыталась убить. Но только он сможет спасти ее от жестокого безумного отца. Но что ей ему предложить? Он равнодушен к красоте. Он жесток. Ему никто
1
Убийство в доме свиданий
Убийство в доме свиданий
[Исторический детектив / Триллер]
«Убитая проститутка была совсем нагой. Она лежала на спине в своей холодной доступности, и тело ее, уже успевшее пожелтеть, напоминало хорошо полированную кость мамонта. Из-под ее правой груди
0
Ванька 13
Ванька 13
[Попаданцы / Боевая фантастика / Альтернативная история / Самиздат]
Три войны, плен, каторга, пара революций, вообще непонятно что... Эй, а нормальная-то жизнь здесь будет? Нет? Не в то время попал? Понятно...
3
Волк под кроватью. Человек-невидимка из седьмого «Б»
Волк под кроватью. Человек-невидимка из седьмого «Б»
[Детская литература: прочее / Детские приключения]
В сборник Лады Кутузовой вошли очень разные по жанру произведения: мистические рассказы «Волк под кроватью» и повесть «Человек-невидимка из седьмого “Б”». Мистические рассказы – это не добрые
0
Обратная сторона Луны
Обратная сторона Луны
[Современная проза]
Когда любимый человек умирает, все мы начинаем верить в потусторонний мир — ну, или хотя бы хотим верить. Когда ты учёный до мозга костей, сделать это труднее. Но всё-таки можно. А там, глядишь, и
0
Добрые люди
Добрые люди
[Книги про волшебников / Самиздат]
Наёмница. Воительница. Посланница богов? Никто точно не знает кто она и откуда пришла, но не стоит становиться у неё на пути.
0