IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Grand projet C++, jusqu'où personaliser le language ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Janvier 2012
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 12
    Par défaut Grand projet C++, jusqu'où personaliser le language ?
    Bonjour,

    Ayant une bonen experience en C++. Je me suis lancer dans la creation d'un jeu (je vous rassure, c'est du serieu). A base de C++, Qt5 et DirectX.

    Plus je m'avance dans le C++, plus il me parait bancale, avec plein de problemme et de bizarerie. Avec le temp j'ai ecris pas mal d'utilitaire pour le languege (classe de pointeur inteligent, wrapper pour les proprieter, wrapper pour les classes etc). Il m'est meme venue a l'idee de creer un precompilateur pour pouvoir ajouter des fonctionaliter en c++ (un peu comme qt).

    Bien evidement tous ont quelque chose de plus que leurs analogues, je ne suis pas du genre a faire du code pour du code.

    Sauf que apres pas mal de temp, je me retrouve avec un code plutot bien a moi. Avec pas mal de feature (j'essayer en gros de rendre le C++ plus C#, tous en gardant les performances).

    Ma question est plutot simple, est ce que sa vaut le coup ? Je crain que ces module ne se font des miserer entre eux (les pointeur inteligent fonctionnent mal avec une classe sous singelton par exemple), et qu'au finale, sa fasse plus de mal que de bien.
    J'aimerais avoir l'avis de quelqu'un ayant beaucoup d'experience en C++. Je doute que quelqu'un qui n'as jamais bosser sur de grans projet pourais bien saisire le problemme.

    Amicalement.

  2. #2
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Avant tout: C++ est un des rares languages ou il te sera possible de faire ce que tu as fais, c'est a dire construire des abstractions autour de tes problemes recurents, qui sont suffisamment generiques pour tes cas d'utilisation.

    Dis toi que c'est pareil pour tout le monde en C++ sur des gros projets. C++ est fait de maniere a permettre les abstractions les plus generiques possibles (avec des limites qui sautent au fur et a mesure des evolutions du language).

    Ensuite, dis toi qu'avec d'autres languages, si le projet est effectivement gros, tu aurais le meme probleme, sauf si tu decides de faire du code qui n'utilise que ce qui est standard. C++, cote bibliotheque standard, ne peut pas encore lutter avec les autres languages tres utilises. C'est une des choses qui est en ligne de mire du c++17.

    Bref, tout ca pour dire que ca ne devrait pas etre un souci lie au language. Si tu vois que tu utilises beaucoup de logique a la C# dans ton C++, c'est que:

    1. tu ne fais pas du C++ idiomatique (par exemple je doute que tu exploites correctement RAII...);
    2. peut etre que le C# est plus adapte a ta maniere de travailler ou tes projets specifiques?


    En conclusion:

    Dans tous les cas OUI on se retrouve toujours a ajouter des bibliotheques maisons ou pas sur les gros projets, c'est naturel, quel que soit le language.
    En C++ tu as juste une bibliotheque standard moins fournie.
    Par contre, si on omet la metaprogrammation en C++, si tu sens qu'il y a des regles du language lui meme (pas la bibliotheque standard) qui sont bizarre dans le C++ et que tu fais du bricolage pour le corriger, soit:

    1. Tu ne comprends pas suffisamment bien le sujet en question (ce qui arrive souvent avec C++, quand on a pas l'habitude de verifier aupres du standard ou de quelqu'un qui sait le lire) - et donc tu t'y prends mal - tu ne fais pas du code idiomatique;
    2. Tu as raison et c'est un problemes qui est en cours de correction (voir les prochaines versions du language) ou qui est connu pour ne pas avoir de solution dans le cadre vise par le language (comme definir une ABI standard...);
    3. Tu reinventes la roue sans le savoir (meme si tu penses que c'est pas le cas);
    4. Tu utilises des abstractions specifiques a un domaine ou il y a peu de bibliotheques accessibles, alors tu dois forcement t'en faire une (ce qui arrives souvent pour les gros projets innovants);

    Mon conseil:

    Si tu peux, mets ta bibliotheques de trucs utils du C++ quelque part de publique (sans forcement mettre une license libre, fais comme tu veux, l'idee est juste de nous permettre de voir le code) et on te diras si tu te trompes, si tu as raison, si tu reinventes la roue (le plus probable!), etc.

    On peut pas dire grand chose sans que tu nous donnes des exemples concrets qui vont alors refleter a la fois le type de projet, de domaine et le type d'experience que tu as, ce qui peut changer pas mal de choses.

    Par exemple j'ai un gros projet (open source, Qt) d'outil d'edition visuel, et a cote j'ai un gros projet (closed source, pas Qt) de jeu video. Dans les deux j'utilises des bibliotheques communes (notemment Boost et TBB), mais pour chacune j'ai une bibliotheque "utilite c++" qui se ressemble mais qui est legerement specifique parceque les deux projets n'ont pas les memes contraintes et le memes utilisations du tout.
    Mais dans les deux j'ai ces trucs utils. Cela dis ils sont progressivement suprime parceque Boost et la bibliotheque standard fournis progressivement ce qui me manque.

    Enfin, dans le cadre d'un gros projet, je le repete, c'est normal d'avoir des outils particuliers au projet. C'est pour ca qu'on fais de frameworks ou de smoteurs de jeux, mais que si tu en utilises un et bien ton code s'ecrire d'une maniere associee a ce moteur/framework.
    C'est naturel.

    EN REVANCHE: mefie toi de cette envie de faire comme un autre language dans ton language actuel. Ca peut souvent etre signe que tu ne comprends pas ce que tu fais, et c'est mon impression en te lisant. Mais c'est peut etre juste une meconnaissance des subtilite du C++, ce qui ne s'apprends qu'avec beaucoup de perseverance et de patience.

    EDIT> Juste pour etre clair: les features que tu dis avoir ajoute pour combler ton C++ m'indique fortement que tu ne comprends pas comment il faut faire en C++ et qu'il y a de grandes chances pour que viennes du C# et que tu n'ais pas pris le temps de comprendre ce qu'est du C++ idiomatique. C'est l'impression que j'ai mais comme dis il faudrait voir le code pour etre sur.

  3. #3
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    Je suis assez d'accord avec Klaim. (*)

    Le langage a sa logique, et l'utilisation du langage ces idiomes. Tant que tu restes dans une utilisation "usuel" il est assez aisé de comprendre une certaine logique du langage, par contre quand tu sors de cette utilisation, là tu peux te retrouver avec une logique qui peut choquer un peu.

    Et comme le dit Klaim dans on edit, ce que tu cites dans ton message comme utilitaire (pointeur intelligent en tête), me fait aussi pense que tu réinventes la roue, peut-être par connaissance trop superficielle du langage ?

    (*) Le seul point sur lequel je ne suis pas d'accord c'est "si on omet la metaprogrammation en C++". Et que j'inclus boost dans l'utilisation idiomatique du C++ (d'où "l'absence" de problème, outre mesure, en méta-prog avec mpl).

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    En effet, c++ a ses limitations (comme n'importe quel langage). Mais avant d'en arriver à ce que ces limitations deviennent un réel problème, je pense qu'il faut le pousser vraiment très loin dans ses retranchements.

    Enfin je sais pas, bien que j'ai travaillé sur d'énorme projets et malgré mes 10+ années d'expérience, je n'ai pas encore rencontré de problème insoluble. Parfois il faut faire une petite pirouette certes, mais il est toujours possible de le faire proprement.

    Mais après je ne sais pas, je ne prétend pas non plus avoir "poussé le langage dans ses retranchements" justement. Il y a beaucoup de facettes du C++ que je ne maîtrise pas du tout.

  5. #5
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Par défaut
    Citation Envoyé par Flob90 Voir le message
    (*) Le seul point sur lequel je ne suis pas d'accord c'est "si on omet la metaprogrammation en C++". Et que j'inclus boost dans l'utilisation idiomatique du C++ (d'où "l'absence" de problème, outre mesure, en méta-prog avec mpl).
    Si tu consideres l#utilisation de Boost comme idiomatique alors on est d'accord. Mais c'est une collection de bibliotheque, or je considerait les elements de language seulement. En particulier si on compare avec la meta programmation en D, le C++ a vraiment l'air d'un ancien prototype... (ce qu'il est pour D).
    Note aussi le manque de reflection meme juste a genere a la compilation, mais c'est en cours de proposition a ce que j'ai compris.

    Citation Envoyé par rod
    Enfin je sais pas, bien que j'ai travaillé sur d'énorme projets et malgré mes 10+ années d'expérience, je n'ai pas encore rencontré de problème insoluble. Parfois il faut faire une petite pirouette certes, mais il est toujours possible de le faire proprement.
    Pareil, les seuls veritables inconvenients du C++ sont finalement la lenteur du developpement (a cause de la compilation essentiellement...) et le manque de reflection statique ou de standardisation de la modularisation des bibliotheques. Les iterations sont plus lentes au moins au depart, ce qui peut etre tres tres impactant sur plein de domaine de la vie d'un projet.

    Cela etant dis, le language n'est pas ou peu une barriere, mais le manque de bibliotheques standards ou a divers niveaux de genericite est bien relou. L'autre jour je me suis rendu compte qu'en terme de bibliotheques pour representer des graphs, on a le choix entre Boost.Graph, qui est bizarre parceque pense pour etre parcouru par des algorithmes au lieu d'etre base sur une notion de curseur (controle par un algorithm mais legerement different), et des bibliotheques qui font ca bien mais sont construites autour d'un seul algorithm (A*) et sont souvent sous-performantes. Pas etonnant que chaque moteur de jeux ai sa propre implementation de graphs generiques...

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Par défaut
    @Klaim: Pour la réflexion, je suis d'accord que le C++ n'a rien pour

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 288
    Billets dans le blog
    2
    Par défaut
    Il n'y a pas une lib de boost qui permet de faire de la réflexion?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Par défaut C++ what a wonderful language
    Je vais assez dans le sens de koala01 et Klaim, chercher à reproduire en C++ des concepts issus du monde managé ne me semble pas être une bonne idée. En effet, les langages managés sont extrêmement plus productifs (contre partie ils restent beaucoup plus lent même avec les meilleurs JIT et GC du monde).

    Mais dire que c++ est bancale me semble dur. C'est à mon goût le plus beau, le plus puissant et le plus complet des langages.

    La philosophie est incomparable, les langages managés sont en général designés dans l'idée de pouvoir exploiter au mieux le framework avec lesquels ils sont livrés et c'est génial pour beaucoup d'applications.

    En revanche, C++ est plutôt brut de décoffrage sans framework d'où le besoin de se créer des utilitaires, mais la philosophie objet est franchement différente notament dûs à la puissance des templates C++ les problèmes ne doivent pas être abordés avec les mêmes techniques. De nombreux ouvrages notamment celui de Andrei Alexandrescu "modern c++ design" traite de sujets qui seraient intraitable de la sorte dans le monde managé.

    Bref, la reproduction en c++ de mécanisme c# me semble contre-productif et tout du moins ne tire pas partis des concepts (bien plus nombreux) de c++.

    M'enfin pour les librairies disponibles, je pense que C++ est plutôt gâté : Qt, boost, la merveilleuse ACE ... et puis C++11 moi, j'aime bien

Discussions similaires

  1. Quels language/technologie pour un grand projet
    Par Zosma dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 10/06/2015, 22h15
  2. Qu'est ce qu'un grand projet ?
    Par Geronimo dans le forum Débats sur le développement - Le Best Of
    Réponses: 62
    Dernier message: 04/04/2013, 14h52
  3. lenteur d'éclipse sur un grand projet
    Par ouedmouss dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 15/03/2008, 21h15
  4. Réponses: 0
    Dernier message: 19/11/2007, 11h53
  5. L'animation et les grands projets.
    Par AsmCode dans le forum OpenGL
    Réponses: 22
    Dernier message: 18/08/2005, 19h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo