web-dev-qa-db-fra.com

Vos réflexions sur "Conception de logiciels C ++ à grande échelle"

La lecture de critiques sur Amazon et ACCU suggère que le livre de John Lakos, Large-Scale La conception de logiciels C++ peut être la pierre de Rosetta pour la modularisation.

Dans le même temps, le livre semble être vraiment rare: peu de gens l'ont lu et aucune copie électronique pirate ne flotte.

Alors qu'est-ce que tu en penses?

42
mlvljr

Je l'ai lu et je le considère comme un livre très utile sur certains problèmes pratiques liés aux grands projets C++. Si vous avez déjà beaucoup lu sur le C++ et que vous en savez un peu sur la conception physique et ses implications, vous ne trouverez peut-être pas grand-chose de vraiment "nouveau" dans ce livre.

D'un autre côté, si votre build prend 4 heures et que vous ne savez pas comment le réduire, en obtenir une copie, le lire et tout intégrer.

Vous commencerez à écrire du code physiquement meilleur assez rapidement.

[Modifier] Si vous voulez commencer quelque part et que vous ne pouvez pas immédiatement vous procurer le livre, j'ai trouvé la série Games From Within sur la structure physique utile même après avoir lu la conception C++ à grande échelle.

37
Joris Timmermans

Fait intéressant, "More C++ Gems" contient une version abrégée (à 88 (!) Pages) du livre de Lakos, qui peut également être parcourue (entièrement, je crois, car elle appartient à la première moitié de le livre) en ligne sur Google books .

Alors, profitez de tout le monde intéressé :)

18
mlvljr

Lakos travaillait pour Mentor Graphics, qui fabrique des logiciels EDA. Il a été impliqué dans la construction de logiciels EDA en C++, où ils voulaient utiliser C++ efficacement (`` pas plus de 5% de frais généraux par rapport au code C '') et déterminer comment construire des logiciels sur les premiers postes de travail qui prendraient vraiment beaucoup de temps pour compiler un grande application C++.

Le livre est assez bien lu - il aborde une grande variété de sujets, et Lakos connaissait vraiment son affaire. Il vient vraiment du fait d'avoir à extraire du code efficace d'un compilateur C++, ainsi que de la façon de configurer un programme C++ afin qu'il soit maintenable et compile et lie assez rapidement.

Je pense que Lakos a beaucoup de perspicacité, et je vous recommande de le lire. Cependant, il s'agit de C++ "trad" datant d'une époque antérieure à la disponibilité de fonctionnalités telles que les modèles. Ma copie n'est pas à vendre; ^)

Je pensais que le livre avait été bien lu à la fin des années 1990. Il était obsolète à l'époque, maintenant aussi pertinent que l'annuaire téléphonique des années 1950.

J'ai travaillé avec Lakos pendant plusieurs années où il a essayé de mettre en œuvre ces idées. J'ai également eu mon projet C++ moderne que j'ai construit à partir d'environ 2000 fichiers source - assez grande échelle, et j'en ai construit quelques autres depuis. Les temps de construction sont facilement réduits par des constructions distribuées parallèles, en utilisant des programmes comme icecream. Chaque compliant mettra en cache les en-têtes ouverts - seulement en faisant quelque chose de vraiment scandaleux, tout outil de construction moderne comme scons évoluera sur des milliers d'unités de traduction sans rien de vraiment spécial, avec des temps de construction, y compris des tests, prend quelques minutes de nettoyage.

Limiter votre interface de bibliothèques à quelques "types de vocabulaire" (pas le même sens que le concept OO, il signifie simplement utiliser Int, float, string, char, et quelques autres je ne ' t rappel) est un conseil extrêmement médiocre pour mettre à l'échelle quoi que ce soit. Votre build va chercher une incompatibilité de type, vous ne voulez pas cela au moment de l'exécution juste pour faciliter l'écriture d'un fichier make.

Et c'est en grande partie l'essentiel du livre - comment puis-je écrire C++ pour qu'il fonctionne avec des outils de 1993? De plus, le projet Mentor Graphic décrit dans le livre a été un désastre pour tous les comptes. Même le livre lui-même y fait allusion.

Le C++ à grande échelle est fourni sous forme de code source - ce sont les "dépendances physiques", pas les bibliothèques de liens (et le livre ne mentionne jamais d'autres dépendances plus importantes (bases de données, sockets, architecture de processeur, etc.).

Le livre regorge d'idées qui sonnent bien, mais il existe de bien meilleures façons de passer à l'échelle dans la pratique. Si vous souhaitez étudier de grandes bibliothèques C++, jetez un œil à Boost ou Xerces et voyez ce qu'ils ont fait. Ils mettent vraiment en œuvre de grands projets, sans écrire à leur sujet.

11
Lance Diduck

C'est un peu dépassé (en fait, il était dépassé quand il a été écrit). Si je me souviens bien, il s'agissait en grande partie de réduire les dépendances que vous feriez probablement maintenant avec des modèles.

Bien que ce soit probablement l'une des leçons à tirer sur les projets à grande échelle, vous n'utilisez généralement pas de fonctionnalités et d'outils de pointe.

5
Martin Beckett

La "conception logicielle C++ à grande échelle" de John Lakos est-elle un joyau qui fait réfléchir (mais qui est généralement ignoré)?

Oui .

4
Robert Grant

C'est un excellent livre et important d'un point de vue historique.

Notez que pour mettre en œuvre les pratiques décrites dans le livre, vous avez besoin d'une discipline et d'un accord considérables au sein de l'équipe. Voici quelques éléments à noter:

  1. Lakos a des définitions précises de ce qu'il appelle des "composants" et des "packages". Ce sont des éléments clés pour la conception à grande échelle. Cependant, ils nécessitent le respect des conventions sur la façon dont les fichiers source et d'en-tête sont nommés et la séquence dans laquelle ils sont inclus. Il est dommage que la plupart des gens (y compris ceux qui citent les Lakos) suivent rarement ces conventions.

  2. Le livre est entièrement consacré au C++ mais les concepts sont plus largement applicables. Cependant, comme C++ est un langage si complexe, une grande partie du livre vous apprend à utiliser efficacement C++. Si vous pouvez dépasser cela, vous pouvez le trouver utile même si vous utilisez d'autres langues.

  3. Certaines des prescriptions telles que l'utilisation des "espaces de noms" peuvent être considérées comme controversées maintenant. Beaucoup pensent que les espaces de noms devraient être utilisés de manière limitée en C++.

4
Neeraj Sangal

Oui, à certains égards, le livre est un peu daté et certains sont spécifiques au C++. Néanmoins, il offre de nombreux conseils utiles sur la gestion de la complexité et du couplage dans les grands programmes, et la plupart de ses conseils s'appliquent à tout langage orienté objet. Je l'ai également trouvé très lisible.

Si vous pouvez retrouver une copie, je suis sûr que vous la trouverez intéressante à lire. C'est dans ma liste des dix meilleurs livres de programmation.

4
Stephen C. Steel

Je l'ai lu il y a longtemps, mais je me souviens en avoir beaucoup tiré; bien que comme le souligne MadKeithV, c'est peut-être simplement que je savais moins alors;)

Certainement du point de vue "comment puis-je réduire le temps nécessaire à la construction", il a beaucoup de choses utiles, en particulier autour de la réduction des dépendances de temps de compilation, bien que certaines d'entre elles ne soient peut-être plus pertinentes, voire possibles, compte tenu de la quantité de modèles utilisés ces jours-ci.

Et non, vous ne pouvez pas non plus avoir ma copie :)

3
Len Holgate