programmation générique, à quelle fréquence est-elle utilisée dans l'industrie


11

Je fais de la programmation en milieu universitaire en ce moment, donc je peux utiliser ce que je veux. J'utilise la bibliothèque de graphiques boost pour quelques choses, et je me demande si investir des efforts pour comprendre le GP plus profondément en vaut la peine.

Je suis curieux - la programmation générique (GP) est-elle beaucoup utilisée dans l'industrie? Je suppose que la plupart des programmeurs sont beaucoup plus à l'aise avec la POO ou utilisent des langages qui ne mettent pas l'accent ou ne prennent pas en charge GP, de sorte qu'en dehors d'appeler des structures / fonctions de données STL en C ++, j'ai l'impression que GP n'est pas utilisé très fréquemment en pratique. Mais, étant en dehors de l'industrie en ce moment, ce serait bien d'entendre des pratiquants à ce sujet.

(Au moment où j'écris ceci, je vois que la programmation générique n'est même pas une balise valide!)


La distribution des balises sur StackOverflow est probablement beaucoup plus utile comme preuve statistique que celle ici. Voir stackoverflow.com/questions/tagged/generic-programming , stackoverflow.com/questions/tagged/generics
Péter Török

Réponses:


7

Je suis curieux - la programmation générique (GP) est-elle beaucoup utilisée dans l'industrie?

Cela dépend vraiment largement du contexte de l'équipe et du projet.

Par exemple, dans les jeux vidéo, le code est souvent le "plus simple" possible (et même parfois trop simple) mais dans les grandes architectures. C'est parce que les développeurs de jeux ont beaucoup de problèmes à résoudre et ne veulent pas s'embêter avec la méta-programmation (c'est un langage séparé très abstrait et difficile à saisir en C ++).

Dans le même temps, l'utilisation de base des modèles est courante même dans ces boutiques et vous pouvez voir des optimisations basées sur des modèles dans certaines fonctions très spécifiques de certains moteurs.

Mais dans le développement de jeux, la plupart des gens éviteront tout métaprogrammation.

Maintenant, d'un autre côté extrême, certaines applications de traitement vraiment complexes ou lourdes, qui ne sont pas courantes, nécessitent une sorte de métaprogrammation lourde en raison d'exigences de performances et de flexibilité (au moment de la compilation) qui ne sont pas courantes. Je travaille dans un en ce moment.

Ce n'est pas courant, mais il existe et certains domaines de niche (dans certains contextes scientifiques ou embarqués) exigent que les gens en connaissent beaucoup sur la métaprogrammation ou souhaitent apprendre.

Au milieu, la plupart des gens utiliseront simplement la méta-proggramme comme "client", pas comme "concepteur". La plupart du code de méta-programmation sont regroupés dans des bibliothèques car les bibliothèques sont des outils pour le code et quoi de mieux qu'une bibliothèque qui peut s'adapter aux types personnalisés avec lesquels vous avez travaillé jusqu'à présent?

Boost (http://boost.org) est un ensemble de bibliothèques, certaines étant faites de métaprogrammation de magie noire lourde, et sont utilisées dans de nombreux magasins C ++ sous le nom de "STL ++", une extension de la STL (et elle l'est). Toutes les boutiques ne l'utilisent pas pour plusieurs raisons, comme la compatibilité du compilateur (certaines bibliothèques de boost peuvent faire pardonner à votre compilateur chaque fois qu'il vous fait du mal ...) et plus souvent parce que certains développeurs n'aiment pas ne pas pouvoir comprendre comment fonctionne un outil à l'intérieur (essayez de comprendre Boost.Spirit ...)

Quelles que soient les entreprises pour lesquelles vous travaillerez, certaines utiliseront ce paradigme, d'autres moins ou pas du tout ou même les interdiront.

Il n'y a pas de consensus car personne n'a les mêmes besoins, le même contexte ou la même équipe.

Mais encore, évidemment, il est utilisé. Peut-être demandez-vous qui utilise boost sur leur liste de diffusion pour avoir plus d'exemples concrets?


1
+1 pour le client contre le concepteur. D'après mon expérience, assez peu de développeurs comprennent leur implémentation que cela n'a pas de sens de créer un nouveau code générique dans une application à moins que cela n'apporte une grande amélioration de la maintenabilité. Les bibliothèques conçues pour une large réutilisation tombent dans cette condition beaucoup plus fréquemment que les applications individuelles.
Karl Bielefeldt

Merci pour la réponse détaillée. Je suis moi-même un fan de Boost et je me demande si je dois creuser dans BGL, ce qui nécessite beaucoup plus de connaissances en GP que les autres bibliothèques Boost. Votre commentaire sur le monde du développement de jeux est assez intrigant. Je suis étonné des exploits de développement des jeux modernes et il est intéressant d'entendre qu'ils sont probablement isolés des méthodologies de programmation plus récentes plutôt qu'à la pointe de ceux-ci.
bd1

Eh bien, les développeurs de jeux gèrent un niveau de complexité élevé simplement en ayant à concevoir des concepts de jeux. L'ajout de méta-instructions ne fait que complexifier tout ce qui doit être vraiment bien justifié. L'autre chose est que beaucoup de développeurs de jeux fonctionnent sur des consoles qui sont du matériel très spécifique avec des compilateurs très spécifiques qui ne permettent pas tout ce que boost essaie de faire (par exemple, aucune exception ou aucun héritage multiple ou ne fonctionne pas correctement à partir du doc ​​de le compilateur (histoire vraie)). Il y a donc de bonnes raisons.
Klaim

5

Je suis curieux - la programmation générique (GP) est-elle beaucoup utilisée dans l'industrie?

La programmation générique, académiquement appelée polymorphisme paramétrique , est très souvent utilisée dans les domaines. Dans mon entreprise, nous l'utilisons principalement pour créer des éditeurs indépendants de types de données, quel que soit leur type. Vous n'en avez tout simplement pas besoin aussi souvent que d'autres fonctionnalités, mais c'est certainement une fonctionnalité que je ne voudrais pas manquer. Vous l'utilisez lorsqu'un comportement correspond à un grand nombre de types. C'est un signe clair que vous avez besoin de génériques lorsque vous vous retrouvez à écrire plusieurs fois le même code pour différents types.

Je suppose que la plupart des programmeurs sont beaucoup plus à l'aise avec la POO ou utilisent des langages qui ne mettent pas l'accent ou ne prennent pas en charge GP, de sorte qu'en dehors d'appeler des structures / fonctions de données STL en C ++, j'ai l'impression que GP n'est pas utilisé très fréquemment en pratique.

Au moins d'après mon expérience, votre point de vue est faux. La programmation orientée objet et la programmation générique ne s'excluent pas mutuellement. En fait, vous devez utiliser les effets de synergie de leur combinaison. Comme je l'ai déjà dit, la raison pour laquelle vous ne la voyez pas apparaître aussi souvent que les autres techniques est que vous n'en avez pas besoin si souvent. Mais c'est une fonctionnalité puissante à avoir et vous aide grandement à garder votre code SEC . Quelles langues ne mettent pas vraiment l'accent sur le support du GP dans la programmation de haut niveau? 3 des 5 langues du Tiobe Top 5 prennent en charge les génériques / modèles. Et PHP est typé dynamiquement donc il n'en a pas vraiment besoin. Et alors?


point pris, je ne voulais pas dire impliquer que OOP et GP est un choix soit / ou. Cependant, bon nombre des projets que j'ai vus semblent être strictement OOP en Java. Je pense que les versions plus récentes de Java prennent en charge GP, mais quelle fraction des programmeurs Java utilise vraiment cette fonctionnalité? Comme je l'ai dit, je ne travaille pas dans l'industrie et mon point de vue est peut-être biaisé, c'est pourquoi j'ai posé la question.
bd1

@ bd1: les applications plus anciennes qui ont été écrites avant les génériques pris en charge par Java, ou avant qu'un jeu d'outils particulier ne prenne en charge cette version de Java n'auront pas de génériques, et les développeurs peuvent continuer à éviter les génériques sur ce projet particulier, pour maintenir la cohérence du code. Je l'ai vu, et cela varie selon le projet et les développeurs. Tous les projets que j'ai vus qui ont été lancés après la prise en charge généralisée des génériques Java ont tendance à les utiliser souvent, le cas échéant.
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner: les génériques en Java sont complètement différents des modèles C ++. Les génériques Java sont 100% purement syntaxiques et ne prennent pas en charge la méta-programmation.
kevin cline le

"La POO et la programmation générique ne s'excluent pas mutuellement.": En effet, les deux sont des formes de polymorphisme, respectivement polymorphisme ad-hoc et paramétrique. Ce sont donc deux outils différents pour différents types de polymorphisme.
Giorgio

4

Les modèles C ++ sont largement utilisés pour des choses différentes des conteneurs - du moins dans mon domaine problématique (finance quantitative). J'irais même jusqu'à dire qu'il est parfois utilisé trop souvent, à des fins où de simples vieilles fonctions virtuelles seraient suffisantes (et n'augmenteraient pas tellement le temps de compilation).

Les gens l'utilisent pour éviter la duplication de code et pour obtenir un polymorphisme au moment de la compilation (sans répartition virtuelle).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.