Автор: | Александреску А. |
Страниц: | 544 |
Масса: | 825 |
Обложка: | мягкая |
Издана: | Апрель 2012 |
D - это язык программирования, цель которого - помочь программистам справиться с непростыми современными проблемами разработки программного обеспечения. Он создает все условия для организации взаимодействия модулей через точные интерфейсы, поддерживает целую федерацию тесно взаимосвязанных парадигм программирования (императивное, объектно-ориентированное, функциональное и метапрограммирование), обеспечивает изоляцию потоков, модульную безопасность типов, предоставляет рациональную модель памяти и многое другое.
"Язык программирования D" - это введение в D, автору которого можно доверять. Это книга в фирменном стиле Александреску - она написана неформальным языком, но без лишних слов и не в ущерб точности. Андрей рассказывает о выражениях и инструкциях, о функциях, контрактах, модулях и о многом другом, что есть в языке D. Андрей Александреску - один из ведущих разработчиков D. Язык D2 сформировался в основном благодаря его серьезной теоретической базе по программированию, а также неиссякаемому потоку инновационных решений проблем программного проектирования. И эта книга во многом развивалась совместно с D. Ее ценность в том, что это не простое перечисление возможностей языка, а ответы на вопросы, почему были выбраны те или иные проектные решения. Зная, по каким причинам язык стал именно таким, гораздо легче и быстрее понять его и начать программировать на нем.
В книге вы найдете:
Книга "Язык программирования D" написана для практикующего программиста, причем она не просто знакомит с языком - это настоящий справочник полезных методик и идиом, которые облегчат жизнь не только программиста на D, но и программиста вообще. Знание одного из языков, произошедших от Алгола (C, C++, Java или C#), вознаградит вас некоторым преимуществом перед другими читателями - синтаксис сразу покажется вам знакомым, а риск встретить "мнимых друзей" (одинаковый синтаксис с разной семантикой) будет минимальным.
За 10 лет развития язык D эволюционировал от скромных основ до очень мощного языка, виртуозно решающего задачи программирования разными способами.
При использовании языка D нет острой потребности в IDE, поскольку вместо того чтобы полагаться на фокусы генерации "заготовок" разного рода "помощниками", D исключает саму идею стандартных заготовок, применяя интроспекцию и собственные возможности генерации кода. Программист уже не увидит стандартный код. О присущей программам сложности заботится язык, а не IDE. Да, D - сложный язык, но зато программы на нем проще и изящнее. А чтобы легко и изящно писать код, реализующий широкий спектр задач, необходим язык с поддержкой нескольких разных парадигм программирования.
Однако только простоты и изящества написания кода мало для того, чтобы назвать язык программирования хорошим. Сегодня программы быстро растут в объеме, поэтому для обеспечения корректности их работы все менее целесообразно полагаться на знания и опыт программиста и традиционные способы проверки работоспособности кода. Все более стоящим кажется подход, когда выявление ошибок гарантирует машина. Здесь D может похвастаться множеством стратегий, применяя которые, программист получит такие гарантии. Эти средства включают контракты, безопасность памяти, различные атрибуты функций, свойство неизменности, защиту от "угона имен" (hijack), ограничители области видимости, чистые функции, юнит-тесты и изоляцию данных при многопоточном программировании.
Система основных типов D творит маленькие чудеса в границах, задаваемых его принадлежностью к семейству статически типизированных компилируемых языков. Определение типа по контексту, распространение интервала значений, всевозможные стратегии перегрузки операторов и тщательно спроектированная сеть автоматических преобразований вместе делают систему типизации D дотошным, но сдержанным помощником, который если и придирается, требуя внимания, то обычно не зря.
Разработчики D не забыли и о производительности. D разрабатывался как язык для системного программирования, значит, на D можно писать операционную систему, равно как и код приложений и драйверов устройств. С более технической точки зрения это значит, что программы на D имеют доступ ко всем возможностям машины. То есть можно использовать указатели, совмещать указатели и выполнять над ними арифметические операции, обходить систему типизации и даже писать код прямо на ассемблере. Нет ничего, что программисту на D было бы полностью недоступно. Например, реализация сборщика мусора для самого языка D написана полностью на D.
Вы скажете, разве такое возможно? Каким образом язык может одновременно предоставлять и немыслимые гарантии безопасности, и неподвластные никакому контролю операции с указателями? Ответ в том, что гарантии этого типа основаны на используемых конструкциях языка. Например, с помощью атрибутов функций и конструкторов типов можно предотвратить ошибки в режиме компиляции. Контракты и инварианты предоставляют гарантии корректности работы программы во время исполнения.
Большинство качеств D в той или иной форме когдато уже появлялись в других языках. Взятые по отдельности, они не оправдывают появление нового языка. Но их комбинация - это больше, чем просто сумма частей. И комбинация D позволяет ему претендовать на звание привлекательного языка с изящными и эффективными средствами для решения необычайно широкого круга задач программирования.
Об авторе
Андрей Александреску - автор неофициального термина "современный C++". Сегодня под этим понимают множество полезных стилей и идей программирования на C++. Книга Александреску "Современное проектирование на C++: обобщенное программирование и прикладные шаблоны проектирования" (Вильямс, 2004) полностью изменила методику программирования на C++ и оказала огромное влияние не только на непосредственную работу на C++, но и на другие языки и системы. В соавторстве с Гербом Саттером Андрей написал "Стандарты программирования на C++: 101 правило и рекомендация" (Вильямс, 2005). Благодаря разработанным им многочисленным библиотекам и приложениям, а также исследовательской работе в области машинного обучения и обработки естественных языков, Андрей снискал уважение как практиков, так и теоретиков. С 2006 года он стал правой рукой Уолтера Брайта - автора языка программирования D и первого, кто взялся за его реализацию. Именно Андрей Александреску предложил многие важные средства D и создал большую часть стандартной библиотеки D. Все это позволило ему написать авторитетную книгу о новом языке D. Вашингтонский университет присудил Андрею степень доктора философии компьютерных наук, а университет "Политехника" в Бухаресте - степень бакалавра электротехники. Он также является научным сотрудником Facebook.
Отзывы читателей
Язык программирования D
Книга лаконична и остроумна. Автор славно поработал, объяснив, почему язык программирования D стал именно таким, каким мы его видим. Кроме того, Андрей подробно объясняет, почему язык программирования D реализует идеи программирования лучше, чем C++. Мне понравился стиль изложения и наличие в конце большинства глав справочных таблиц. В отличие от многих авторов подобных книг с примерами кода, Александреску не наводит скуку пересказом того, что делает каждый такой фрагмент, а просто использует утверждения и вызовы функции enforce. "Язык программирования D" - не руководство по программированию на D, поэтому если вам нужно нечто подобное, не останавливайтесь на этой книге. Но если вы ищете очень хорошее руководство по языку D, то оно перед вами. Тем, кто не видит разницы, пожалуй, тоже не стоит обзаводиться этой книгой.
Фрэнсис Джонс
Объяснение D для программистов, знакомых с C. Отлично сделано и достойно внимания
Язык программирования D проектировался как язык для системного программирования, способный заменить C++. D - один из языков, широко использующих наследие C. Большинство средств языка D применяют синтаксис соответствующих средств C. И конечно, эта связь постоянно напоминает о себе - вот почему книга "Язык программирования D" написана для тех, кто неплохо знаком с этим наследием.
Кроме того, читатель должен разбираться в объектно-ориентированных средствах этих языков, особенно C++. Такие темы, как порождение и обработка исключений, конструкторы, деструкторы, перегрузка и наследование, преподносятся так, будто вы уже знакомы с ними. На самом деле, соответствующие главы, скорее всего, будут понятны лишь тому, кто достаточно хорошо владеет перечисленными темами.
Цель этой книги - объяснять язык, а не обучать ему. Здесь нет ни упражнений, ни обучающих примеров (в привычном смысле); это книга-обзор для действующих программистов. Для них "Язык программирования D" - прекрасная книга, рассказ об отличиях и расширениях D в сравнении c С++. Изначально предполагать знакомство читателя с материалом - отличная находка, иначе книга была бы вдвое толще.
Богатый набор средств языка D позволяет ему всерьез претендовать на место C++ во многих областях программирования. D задумывался как язык для системного программирования, но, судя по Java, исходное предназначение и реальное применение языка не всегда совпадают. В любом случае программистам со стажем стоит присмотреться к D и попытаться понять, что это такое. И книга Александреску в этом поможет.
Чарльз Эшбечер
Современная классика
Сначала немного о том, как складывались мои отношения с D. Я несколько лет вхожу в сообщество разработчиков D, веду блог для пользователей D, сопровождаю проект с открытым исходным кодом на D, а в 2007 году участвовал в создании книги "Learn to Tango with D". И все это время я в основном имел дело с D1. Я сомневался, стоит ли переходить на D2, - перемена меня не привлекала. Ведь по некоторым вопросам D2 принципиально отличается от D1. Книга Андрея развеяла все мои сомнения насчет того, куда двигаться дальше: я непременно буду работать со второй версией D.
D2 сочетает в себе несколько разных парадигм программирования. Одно из коренных отличий от существующих C-подобных языков - понятие диапазонов, которые задумывались как усовершенствование и замена более привычных итераторов из других языков. Без этой книги, когда диапазоны только появились в альфа-версиях D2, было непросто понять, как работать с новым средством языка. А здесь Андрей объясняет эту тему так, что любой поймет, что к чему, и с ходу начнет использовать диапазоны. А освоить диапазоны просто необходимо, ведь Phobos, стандартная библиотека D (о которой в книге намеренно сказано не слишком много), была переработана и теперь основана именно на них.
Кроме диапазонов и более базовых средств D, которые не так уж новы, вы познакомитесь с понятиями константности и неизменяемости (ключевые слова языка D const и immutable призваны заменить то месиво, какое представляет собой квалификатор const из С++), а также со стилем параллельного программирования D. Язык D готов занять свое место в мире многоядерного программирования; встроенные средства D помогут тем разработчикам, кто, как и я, неспособен мыслить на низком уровне. Рассказ Андрея о западнях параллельных вычислений и предлагаемых решениях D прольет свет на проблемы, в которых у вас еще нет ясности.
Я перечислил именно те аспекты, которые эта книга прояснила для меня самого. Но и другие части книги не хуже. В целом книга написана талантливо - остроумно и доходчиво. Если вы пока не написали на D ни строчки, то, прочитав "Язык программирования D", легко начнете программировать на этом языке. Не знаю, будет ли книга Александреску полезна начинающим, но безусловно рекомендую ее всем, кто хоть немного знаком с любым языком семейства C. У Андрея редкий дар делать заведомо скучный или сложный для понимания материал не просто доступным, но забавным и увлекательным.
Майкл Паркер