Подтвердить что ты не робот

Современный дизайн С++. Прикладное программирование и шаблоны проектирования.

У меня есть покупка этой книги для нашей группы в компании, возможно, для улучшения наших дизайнерских навыков и, в конечном итоге, лучшей практики программирования. Когда я его прочитал, я обнаружил, в основном, набор полезных трюков, которые можно использовать с шаблоном, и не уверен, что стоит - и не вредно - включить его в наш код, таким образом внедряя сложность кода/удобочитаемость и не ремонтируемость,

Я хотел бы узнать из последующих практикующих, что вы используете из этой книги? Что важно и важно для профессионального развития программного обеспечения, чего следует избегать?

Общее мнение об этой книге и о том, как она вписывается в разработку программного обеспечения крупномасштабной системы (по одной и той же, мне нравится книга Джона Лакоса)?

Что такое эффект Alexandrescu?

4b9b3361

Ответ 1

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

У меня был большой успех, делающий это на работе. Уверен, что он производит совершенно нечитаемые сообщения, и мои коллеги время от времени заходят и говорят: "Что это такое в мире?". Но каждый раз это была ошибка, и они не могли ее скомпилировать. Я также очень сильно комментирую конкретные ошибки в надежде на то, что он умеренно понятен.

Ответ 2

Примерно в 2005 году я сильно вошел в шаблоны выражений и различные трюки с компиляцией для создания библиотек, которые были очень выразительными в использовании, например, для внутренних языков, встроенных в С++. В частности, довольно полная встроенная SQL-вещь, похожая на то, что с тех пор появилось как Linq на .NET.

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

Это отлично подходит для широко используемых библиотек классов, которые, как правило, пользователям не нужно понимать в кишках. Но для "внутренних" библиотек, принадлежащих определенной команде, они, вероятно, все должны уметь исправлять или расширять ее разумно. По-видимому, более загадочные возможности шаблонов С++, по моему опыту, исключают это.

Было очень весело, хотя.

Ответ 3

Если ваша компания/проект позволяет повысить. Эта книга поможет вам раскрыть некоторую магию повышения только для вашего собственного удовлетворения.

Если компания/проект не позволяет повысить. Эта книга станет хорошим руководством для воссоздания некоторых частей ускорения, которые вам больше всего нужны, например boost:: function.

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

И больше всего эта книга покажет, как вы можете пересмотреть некоторые шаблоны проектирования GOF, изменяя полиморфизм времени выполнения со статикой.

Ответ 4

  • Что я использую непосредственно из книги? Ничего - я не использую Loki или Boost.
  • Это повлияло на мой код? Не совсем - я был знаком с концепцией политики, прежде чем я прочитал книгу.
  • Стоит ли читать? Определенно!

Ответ 5

Для меня это было скорее усилием разума. Я прочитал книгу и продолжал изучать детали и трюки, некоторые из которых я использовал позже. Но самая важная часть заключается в том, что дизайн с капиталом D обсуждается в книге все время (каламбур не предназначен для языка D).

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

Часть политики, основанной на политике, должна сделать вас при разработке того, могут ли ваши классы лучше/лучше разделены на более мелкие ортогональные единицы. Хотя в большинстве случаев я не заканчиваю разделение на все эти классы политик, код обычно заканчивается тем, что чище, поскольку разные ортогональные части становятся менее запутанными.

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

Ответ 6

IMHO, чтение (и понимание!), первая глава книги полезна (я верю, что она доступна онлайн бесплатно). Остальная часть книги в значительной степени описывает внутренности библиотеки Loki, и я действительно не рекомендую ее.

Ответ 7

Я не использую Loki, но я активно использовал boost на моей предыдущей работе. Boost реализовала много идей из этой красивой книги;

Вещи из этой книги не предназначены для использования в Business Logic, они должны быть реализованы в библиотеках (Boost, Loki, что-то свое) и библиотек, используемых в Business Logic. Это другое дело "использование этих трюков в коде" или "реализация разделенной библиотеки с использованием этого трюка и использование красивых библиотек в большинстве ваших кодов (например, boost:: bind - уродливая реализация, но приятная в использовании), но вы почти никогда не видите эта реализация)"

Также эта книга демонстрирует мощное мета-программирование С++ и хорошее обучение мозгу.

Ответ 8

Я действительно испытывал некоторые грубые реакции со стороны людей, когда я говорил, используя материал из Modern С++ design. Во-первых, комментарии WTF. За этим последовали комментарии "Не пытайтесь быть слишком умными". Затем, лучшее понимание идей. И затем, наконец, принятие идей до такой степени, что они являются частью общей лексики.

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