В настоящее время я занимаюсь программированием в академической среде, поэтому могу использовать все, что захочу. Я использую библиотеку графов повышения для нескольких вещей, и мне интересно, стоит ли вкладывать усилия в более глубокое понимание GP.
Мне любопытно - универсальное программирование (GP) широко используется в промышленности? Я предполагаю, что большинству программистов гораздо удобнее с ООП или они используют языки, которые не подчеркивают и не поддерживают GP, поэтому вне вызова структур / функций данных STL в C ++ у меня сложилось впечатление, что GP не так часто используется. на практике. Но, будучи на данный момент вне отрасли, было бы приятно услышать об этом от практикующих.
(когда я пишу это, я вижу, что универсальное программирование даже не является допустимым тегом!)
Ответы:
Это действительно широко зависит от контекста команды и проекта.
Например, в видеоиграх часто код является «самым простым» возможным (и даже иногда слишком простым), но в больших архитектурах. Это потому, что разработчики игр имеют много проблем, которые нужно решить, и не хотят беспокоиться о метапрограммировании (это отдельный, очень абстрактный и сложный для понимания язык внутри C ++).
В то же время, базовое использование шаблонов распространено даже в этих магазинах, и вы можете увидеть некоторые оптимизации на основе шаблонов в некоторых очень специфических функциях некоторых движков.
Но в игровой разработке большинство людей просто избегают метапрограммирования.
Теперь, с другой стороны, некоторые действительно сложные или тяжелые приложения обработки, которые не являются распространенными, требуют некоторого тяжелого метапрограммирования из-за требований к производительности и гибкости (во время компиляции), которые не являются общими. Я работаю в одном прямо сейчас.
Это не распространено, но оно существует, и некоторые нишевые области (в некоторых научных или ограниченных по численности встроенных контекстах) действительно требуют, чтобы люди много знали о метапрограммировании или желали учиться.
В середине большинство людей будут просто использовать метапрограммирование как «клиент», а не как «дизайнер». Большая часть кода метапрограммирования объединена в библиотеки, потому что библиотеки являются инструментами для кода, и что может быть лучше библиотеки, которая может адаптироваться к пользовательским типам, с которыми вы работали до сих пор?
Boost (http://boost.org) - это набор библиотек, некоторые из которых сделаны из тяжелой метапрограммирующей черной магии и используются во многих магазинах C ++ как «STL ++», расширение STL (и так оно и есть). Не каждый магазин использует его по нескольким причинам, например, совместимость с компилятором (некоторые библиотеки надстроек могут заставить ваш компилятор извиняться за каждый раз, когда он причиняет вам боль ...) и чаще, потому что некоторым разработчикам не нравится неспособность понять как работает инструмент внутри (попытайтесь понять Boost.Spirit ...)
В каких бы компаниях вы ни работали, некоторые будут использовать эту парадигму, некоторые - меньше или не будут вообще или даже запретят их.
Нет единого мнения, потому что ни у кого нет одинаковых потребностей, контекста или команды.
Но все же, очевидно, он используется. Может быть, спросите, кто использует boost в своем списке рассылки, чтобы иметь больше примеров из реальной жизни?
источник
Универсальное программирование, академически называемое параметрическим полиморфизмом , очень часто используется в полях. В моей компании мы используем его в основном для создания независимых редакторов типов данных, независимо от их типа. Вам просто не нужно это так часто, как другим функциям, но это определенно функция, которую я бы не хотел пропустить. Вы используете его, когда поведение соответствует большому количеству типов. Это явный признак того, что вам нужны дженерики, когда вы пишете один и тот же код несколько раз для разных типов.
По крайней мере, по моему опыту, ваша точка зрения неверна. ООП и общее программирование не являются взаимоисключающими. На самом деле, вы должны использовать синергетические эффекты их объединения. Как я уже говорил ранее, причина, по которой вы не видите его так часто, как другие методы, заключается в том, что вам это не нужно так часто. Но это очень полезная функция, которая очень помогает вам сохранять ваш код СУХИМЫМ . Какие языки на самом деле не подчеркивают поддержку GP в высокоуровневом программировании? 3 из 5 языков Tiobe Top 5 поддерживают шаблоны / шаблоны. А PHP динамически типизирован, поэтому он действительно не нужен. Ну и что?
источник
Шаблоны C ++ широко используются для вещей, отличных от контейнеров - по крайней мере, в моей проблемной области (количественные финансы). Я бы даже рискнул сказать, что он иногда используется слишком часто, для целей, где было бы достаточно простых старых виртуальных функций (и не увеличивало бы время компиляции так сильно).
Люди используют его, чтобы избежать дублирования кода и добиться полиморфизма во время компиляции (без виртуальной отправки).
источник