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

Affichage des résultats du sondage: Pourquoi C et C++ auraient-ils encore de nombreuses années devant eux ?

Votants
75. Vous ne pouvez pas participer à ce sondage.
  • C et C++ permettent d'avoir plus de contrôle sur le matériel

    41 54,67%
  • C et C++ vous permettent d'écrire du code très efficace

    38 50,67%
  • Les langages C et C++ sont portables

    35 46,67%
  • C et C++ sont des langages qui évoluent

    19 25,33%
  • C et C++ sont largement utilisés

    48 64,00%
  • C++ a peut-être de l'avenir, mais je doute que ça soit le cas de C

    8 10,67%
  • C a peut-être de l'avenir, mais je doute que ça soit le cas de C++

    3 4,00%
  • Je pense qu'ils n'ont plus beaucoup d'années devant eux

    6 8,00%
  • Autre (à préciser)

    3 4,00%
  • Pas d'avis

    3 4,00%
Sondage à choix multiple
Langages de programmation Discussion :

Pourquoi les langages C et C++ auraient-ils encore de nombreuses années devant eux ?


Sujet :

Langages de programmation

  1. #401
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 123
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par wolinn Voir le message
    Moi, je trouve qu'il y a un peu de progrès, thierryc reconnait avoir vu un magnifique projet en C++
    Reste à reconnaitre que le fait que le logiciel final ne réponde pas aux besoins du client ici n'est pas imputable au langage utilisé, et que pour un logiciel de calcul, C++ était même le meilleur choix
    J'ai dit le contraire: avoir choisi le C++ a fait oublier à l'équipe les besoins des utilisateurs... C'est totalement imputable au choix du langage.

  2. #402
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 123
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par SimonDecoline Voir le message
    Je n'ai pas le temps de répondre à tous vos trolls mais juste sur ce point : bien sûr que C++ détecte les dépendances cycliques. Où alors on se comprend mal et dans ce cas donnez-nous un exemple minimal de code C++ illustrant le problème.
    Exemple :

    Car.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    #ifndef HEADERFILE_CAR
    #define HEADERFILE_CAR
    
    using namespace std;
    
    class Car;
    
    #include "Wheel.h"
    
    class Car {
      private:
        Wheel wheels[4];
      public:
        Car();
    };
    
    
    #endif
    Wheel.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #ifndef HEADERFILE_WHEEL
    #define HEADERFILE_WHEEL
    
    using namespace std;
    
    class Wheel;
    
    #include "Car.h"
    
    class Wheel {
      private:
       double size;
       Car* onCar;
      public:
        Wheel();
        Wheel( double aSize, Car* car);
    };
    
    
    #endif
    Car.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "Car.h"
    
    Car:Car()
        {
          for (int iWheel=0; iWheel<4; iWheel++)
          {
            wheels[iWheel] = Wheel( 17, this);
          }
        };
    Wheel.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "Wheel.h"
    Wheel:Wheel()
    {
      size = 0.0;
      onCar = 0;
    };
    Wheel:Wheel(double aSize, Car* car)
    {
      size = aSize;
      onCar = car;
    };
    main.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <stdio.h>
    #include <stdlib.h>
    #include "Car.h"
    
    int main()
    {
      Car car();
      printf("new car is made! \n"); 
    }
    "Car.h" dépend de "Wheel.h" et vice-versa. Graphe cyclique des interfaces des modules. No warning du compilateur => catastrophe sur les projets. La même chose est également possible en Java. Tout langage digne de ce nom doit interdire les dépendances cycliques. C'est amusant que ce soit moi qui doivent vous enseigner les défauts de votre environnement favori. Sur les vrais projets, je vois des cycles sur 20, 30 modules. Une vraie catastrophe. Et à démêler tout cela, un budget refactoring monstrueux.

    CQFD. Passez à autre chose, votre outil ne vaut pas un clou.

    PS. Je ne trolle pas, mais je vous donne des arguments détaillés, expliqués, chiffrés. Vous n'avez même pas la politesse de les vérifier vous-même. Clairement, vous n'avez aucune maîtrise du langage que vous prétendez défendre, vu votre incapacité à comprendre ne serait-ce que ses défauts les plus évidents. Si j'avais à auditer vos projets, que ne trouverai-je pas????

  3. #403
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 469
    Points : 6 102
    Points
    6 102
    Par défaut
    Le C++ n'empêche généralement pas les dépendances cycliques, mais tu viens de choisir un mauvais exemple.

    Avec GCC, si j'essaie de compiler Wheel.cpp, j'ai l'erreur de compilation suivante :
    error: field 'wheels' has incomplete type 'Wheel [4]'

    Wheel.cpp fait #include "Wheel.h".
    Wheel.h définit la macro HEADERFILE_WHEEL puis fait class Wheel; puis #include "Car.h".
    Car.h fait #include "Wheel.h" qui n'a aucun effet car la macro HEADERFILE_WHEEL est définie. Donc le type Wheel n'est toujours pas un type complet.
    Dans Car.h, on tombe alors sur Wheel wheels[4];, qui ne peut compiler que si Wheel est un type complet, car le compilateur a besoin de connaître sizeof(Wheel).

    Remarque : Il y a aussi d'autres problèmes qui empêchent le code de compiler, comme Wheel:Wheel au lieu de Wheel::Wheel.

  4. #404
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 123
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Pyramidev Voir le message
    Le C++ n'empêche généralement pas les dépendances cycliques, mais tu viens de choisir un mauvais exemple.

    Avec GCC, si j'essaie de compiler Wheel.cpp, j'ai l'erreur de compilation suivante :
    error: field 'wheels' has incomplete type 'Wheel [4]'

    Wheel.cpp fait #include "Wheel.h".
    Wheel.h définit la macro HEADERFILE_WHEEL puis fait class Wheel; puis #include "Car.h".
    Car.h fait #include "Wheel.h" qui n'a aucun effet car la macro HEADERFILE_WHEEL est définie. Donc le type Wheel n'est toujours pas un type complet.
    Dans Car.h, on tombe alors sur Wheel wheels[4];, qui ne peut compiler que si Wheel est un type complet, car le compilateur a besoin de connaître sizeof(Wheel).

    Remarque : Il y a aussi d'autres problèmes qui empêchent le code de compiler, comme Wheel:Wheel au lieu de Wheel::Wheel.
    Ca compile chez moi, comme quoi le compilateur ne vérifie rien... Et quelles que soient les erreurs de syntaxe, toujours infernales un ':' ou deux '::', etc., la dépendance cyclique est bien présente en C++, donc outil à poubelliser.

  5. #405
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 123
    Points : 97
    Points
    97
    Par défaut Pour résumer
    En résumé, d'après les propres dires des défenseurs du C++ qui se sont exprimés sur le forum:
    - le C++ permet des cycles de dépendances, ce qui est très préjudiciable dès qu'il faut maintenir un projet de taille normale,
    - le C++ est inutilisable par des étudiants en 1ere année, il ne devrait pas leur être enseigné,
    - le C++ est inutilisable par des spécialistes de la haute disponibilité et de la haute fiabilité, car certaines constructions parfaitement sûres en Ada deviennent très dangereuses en C++,
    - le C++ est très long à la compilation, dès qu'il y a beaucoup de .h, et des inlines dans le .h,
    - le C++ est impropre au développement Agile, car il compile trop lentement, sauf à précompiler les entêtes, et en nombre limité, mais on retombe sur le problème du graphe cyclique des dépendances,
    - le C++ manque de certaines caractéristiques très importantes, comme l'approche composant, les propriétés, etc.,
    - si on veut développer avec sécurité (des intervalles), alors on perd la lisibilité, déjà qu'on en avait pas beaucoup...
    - le C++ n'est pas lisible par les clients,
    - les développeurs C++ sont condamnés en Europe par la concurrence asiatique.

    Il me semble que le dossier est bien rempli. La plupart des remarques sont également applicables à Java (en particulier le graphe de dépendances). Au vu de ce dossier, je vous invite à regarder les alternatives et à laisser tomber C++ et Java. S vous ne pouvez pas accepter Pascal ou Ada, que j'ai simplement utilisés à titre d'exemple, il y a de nombreux autres langages qui ont de belles propriétés. Ou prenez une combinaison de langages...

    Bien cordialement,
    ThierryC

  6. #406
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 469
    Points : 6 102
    Points
    6 102
    Par défaut
    Citation Envoyé par thierryc Voir le message
    Ca compile chez moi, comme quoi le compilateur ne vérifie rien...
    ???

    Avec un compilateur qui respecte le standard C++, il est impossible que ce code compile. Quand le compilateur tombe sur la variable membre Wheel wheels[4];, il a besoin de connaître la taille en bytes du type Wheel.

    Quel compilateur utilises-tu ? Es-tu sûr que tu as compilé exactement le code que tu viens de publier ?

  7. #407
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 123
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Pyramidev Voir le message
    ???

    Avec un compilateur qui respecte le standard C++, il est impossible que ce code compile. Quand le compilateur tombe sur la variable membre Wheel wheels[4];, il a besoin de connaître la taille en bytes du type Wheel.

    Quel compilateur utilises-tu ? Es-tu sûr que tu as compilé exactement le code que tu viens de publier ?
    Je vérifie à nouveau
    Il ne plante pas sur les .h, mais il y a effectivement un problème sur les .cpp. Je cherche.

  8. #408
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 123
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par thierryc Voir le message
    Je vérifie à nouveau
    Il ne plante pas sur les .h, mais il y a effectivement un problème sur les .cpp. Je cherche.
    J'utilise gcc 5.4.0 sur Ubuntu 16.04. Ci-joint le code débogué. Désolé pour la première version livrée trop vite:

    Car.h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #ifndef HEADERFILE_CAR
    #define HEADERFILE_CAR
    using namespace std;
    class Car;
    #include "Wheel.h"
    class Car {
      private:
        Wheel* wheels[4];
      public:
        Car();
    };
    #endif
    Wheel.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef HEADERFILE_WHEEL
    #define HEADERFILE_WHEEL
    using namespace std;
    class Wheel;
    #include "Car.h"
    class Wheel {
      private:
       double size;
       Car* onCar;
      public:
        Wheel();
        Wheel( double aSize, Car* car);
    };
    #endif
    Car.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "Car.h"
    Car::Car()
        {
          for (int iWheel=0; iWheel<4; iWheel++)
          {
            wheels[iWheel] = new Wheel();
          }
        };
    Wheel.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include "Wheel.h"
    Wheel::Wheel()
    {
      size = 0.0;
      onCar = 0;
    };
    Wheel::Wheel(double aSize, Car* car)
    {
      size = aSize;
      onCar = car;
    };
    et le main.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <stdio.h>
    #include <stdlib.h>
    #include "Car.h"
    int main(int argc, char** argv)
    {
      Car car();
      printf("new car is made! \n");
    }
    Je confirme : pas de vérification du graphe de dépendances par le compilateur C++.

  9. #409
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par thierryc Voir le message
    Je confirme : pas de vérification du graphe de dépendances par le compilateur C++.
    Evidemment que le compilateur considère cette dépendance mutuelle comme valide puisque vous la lui demandez explicitement avec les "class Car;" et "class Wheel;". C'est même une fonctionnalité très pratique dans les MVC pour permettre des appels mutuels entre certains composants. Par défaut, cette dépendance n'est pas permise par le compilateur, ce qui ne pose donc pas de problème particuliers.

  10. #410
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 469
    Points : 6 102
    Points
    6 102
    Par défaut
    Je ne suis pas choqué qu'un langage interdise les dépendances circulaires entre modules, tant qu'un module peut contenir plusieurs classes, par exemple un conteneur et ses itérateurs. Je pense que c'est une bonne chose.

    Si plusieurs modules forment un petit cycle, alors ils peuvent être regroupés en un seul module.
    Si plusieurs modules forment un grand cycle, alors il y a un problème de conception.

    Cela dit, si les développeurs d'un projet ont besoin d'un tel contrôle du compilateur pour améliorer la qualité du code, cela signifie qu'il y a un problème de gestion derrière, par exemple une pression pour faire du quick & dirty et un manque de revue de code par les pairs. Or, dans de telles conditions, même si certains langages empêchent mieux certaines bêtises que d'autres, la qualité du code sera toujours mauvaise à la fin.

  11. #411
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 123
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par SimonDecoline Voir le message
    Evidemment que le compilateur considère cette dépendance mutuelle comme valide puisque vous la lui demandez explicitement avec les "class Car;" et "class Wheel;". C'est même une fonctionnalité très pratique dans les MVC pour permettre des appels mutuels entre certains composants. Par défaut, cette dépendance n'est pas permise par le compilateur, ce qui ne pose donc pas de problème particuliers.
    Ce que vous dites est complétement idiot : un compilateur n'est pas censé accepter n'importe quelle c...ie écrite par le développeur. Cette dépendance devrait être interdite tout le temps et sans exception par le compilateur quelles que soient les pseudo-raisons invoquées par le développeur. C'est au développeur de s'adapter aux contraintes du respect de la non-cyclicité du graphe de dépendances. Il y a de nombreux moyens pour cela, dont, par exemple, l'inversion des dépendances...

    Votre explication montre en plus que vous n'avez aucune connaissance de la construction de grands logiciels. Je vous invite à relire Booch, qui reste le meilleur auteur sur le sujet. Si jamais j'avais à auditer un de vos logiciels, cela ne devrait pas être piqué des hannetons, comme on dit....

    Bien cordialement,
    ThierryC

  12. #412
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 123
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par Pyramidev Voir le message
    Je ne suis pas choqué qu'un langage interdise les dépendances circulaires entre modules, tant qu'un module peut contenir plusieurs classes, par exemple un conteneur et ses itérateurs. Je pense que c'est une bonne chose.

    Si plusieurs modules forment un petit cycle, alors ils peuvent être regroupés en un seul module.
    Si plusieurs modules forment un grand cycle, alors il y a un problème de conception.

    Cela dit, si les développeurs d'un projet ont besoin d'un tel contrôle du compilateur pour améliorer la qualité du code, cela signifie qu'il y a un problème de gestion derrière, par exemple une pression pour faire du quick & dirty et un manque de revue de code par les pairs. Or, dans de telles conditions, même si certains langages empêchent mieux certaines bêtises que d'autres, la qualité du code sera toujours mauvaise à la fin.
    il n'y a pas de dépendances circulaires dans UN module, si par exemple celui-ci déclare une classe et ses itérateurs. Le sujet est bien la dépendance cyclique ENTRE modules, entre unités de compilation. C'est l'une des grandes erreurs de Java d'avoir confondu la classe avec l'unité de compilation, le module. Grosse erreur.

    Je vous en prie, programmez en assembleur, il n'y a aucun contrôle, et vous pourrez faire ce que vous voulez... voyez-vous, c'est une démonstration par l'absurde. Au contraire, plus le compilateur est de haut niveau, plus il vérifie ce que vous faites dès la compilation, moins vous avez de soucis et plus vous vous concentrez sur le besoin utilisateur, et plus vous écrivez un source de bonne qualité, qui était déjà de bonne qualité à la base. L'assurance qualité, le contrôle qualité, le contrôle du compilateur, la vérification de la dette technique ne permettent pas à des mauvais développeurs de bien programmer, mais à de bons programmeurs d'aller bien et vite sans se soucier des détails, et de rattraper rapidement un petit dérapage très occasionnel.

    J'ai entendu cet argument maintes fois que l'assurance qualité, le contrôle qualité et le contrôle du compilateur étaient inutiles, pour tous ces projets gérés par de magnifiques développeurs C++. Cet argument fait plaisir au management en plus, qui en profite pour rogner sur les budgets. Et pourquoi faire des tests? Après tout, on programme bien. Et hop, les tests sautent aussi, avec leur budget. A la fin, il ne reste rien, que du code mal fait, à jeter quand quelqu'un est devenu suffisamment lucide. (Et que le manager a été promu vers de nouvelles aventures....)

    Cordialement,
    ThierryC

  13. #413
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par thierryc Voir le message
    Ce que vous dites est complétement idiot : un compilateur n'est pas censé accepter n'importe quelle c...ie écrite par le développeur. Cette dépendance devrait être interdite tout le temps et sans exception par le compilateur quelles que soient les pseudo-raisons invoquées par le développeur. C'est au développeur de s'adapter aux contraintes du respect de la non-cyclicité du graphe de dépendances. Il y a de nombreux moyens pour cela, dont, par exemple, l'inversion des dépendances...
    Mais bien sûr. Et dans ce cas il faut aussi interdire la récursivité et toutes les structures de données récursives.

  14. #414
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 469
    Points : 6 102
    Points
    6 102
    Par défaut
    À propos des contrôles du compilateur, il faut distinguer ceux qui repèrent les erreurs d'étourderies de ceux qui essaient d'empêcher de mal concevoir. Les premiers servent pour tout le monde. Les autres servent surtout à empêcher ceux qui codent à court terme de trop casser le projet.

    Par exemple, le typage fort permet, entre autres, de repérer des erreurs d'étourderies directement à la compilation. De mon point de vue, ne pas supporter le typage fort est un gros défaut.

    Par contre, restreindre l'héritage multiple et empêcher les dépendances circulaires entre modules, ça sert surtout à empêcher ceux qui codent à court terme de trop casser le projet. Quand un langage est trop permissif à ces niveaux, je considère cela aussi comme des défauts du langage, mais dont l'impact sur la productivité n'est significatif que s'il y a déjà un problème de gestion derrière.

  15. #415
    Invité
    Invité(e)
    Par défaut
    Il me semble que la "philosophie" de C++ est de ne pas prendre le développeur pour un imbécile. Le typage fort détecte des erreurs certaines donc oui c'est à utiliser. Par contre que le compilateur n'autorise pas les dépendances circulaires par défaut mais les permettent si le dev les demandent explicitement, je ne vois pas le problème. Tous les projets n'ont pas 20 millions de loc à maintenir pour 30 ans, donc je trouve pratique d'avoir cette fonctionnalité pour certaines situations même si elle est déconseillée pour d'autres. Idem pour l'héritage multiple de classes voire le diamant.

  16. #416
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 123
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par SimonDecoline Voir le message
    Mais bien sûr. Et dans ce cas il faut aussi interdire la récursivité et toutes les structures de données récursives.
    Vous changez de sujet. La récursivité n'est pas interdite en général. Uniquement sur les projet où la sécurité est critique. Je vois que vous ne connaissez pas les règles de bonne programmation, comme par exemple SQALE, ou A2DAM de l'Agile Alliance. Cela vous ferait le plus grand bien.

    Pour en revenir au graphe de dépendances, il doit être acyclique. C'est une règle de bonne programmation qui ne souffre pas d'exception. Quand vous la violez, non seulement vous vous mettez mal auprès de tous les auditeurs, mais vous ne devez pas en rencontrer beaucoup, mais en plus, cela augmente vos difficultés de maintenance...

  17. #417
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par thierryc Voir le message
    Ce que vous dites est complétement idiot : un compilateur n'est pas censé accepter n'importe quelle c...ie écrite par le développeur. Cette dépendance devrait être interdite tout le temps et sans exception par le compilateur quelles que soient les pseudo-raisons invoquées par le développeur. C'est au développeur de s'adapter aux contraintes du respect de la non-cyclicité du graphe de dépendances. Il y a de nombreux moyens pour cela, dont, par exemple, l'inversion des dépendances...
    c'est n'importe quoi, on peut bien faire la meme chose en ADA et en pascal non? Il y a des cas où on veut une double dependance, ca ne me choque pas du tout. Vous ne demontrez rien dans ce cas, à part peut etre une certaine rigidité d'esprit.

  18. #418
    Membre régulier
    Inscrit en
    Décembre 2004
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 123
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par SimonDecoline Voir le message
    Il me semble que la "philosophie" de C++ est de ne pas prendre le développeur pour un imbécile. Le typage fort détecte des erreurs certaines donc oui c'est à utiliser. Par contre que le compilateur n'autorise pas les dépendances circulaires par défaut mais les permettent si le dev les demandent explicitement, je ne vois pas le problème. Tous les projets n'ont pas 20 millions de loc à maintenir pour 30 ans, donc je trouve pratique d'avoir cette fonctionnalité pour certaines situations même si elle est déconseillée pour d'autres. Idem pour l'héritage multiple de classes voire le diamant.
    J'ai déjà entendu ça : "it's not a bug, it's a feature".

    Non, ces caractéristiques du langage C++ sont des défauts, et ils ne permettent pas à des développeurs moustachus, comme vous, peut-être, d'utiliser une astuce pour allez plus vite, mais, en revanche, ils permettent à la majorité des développeurs C++ de se planter... en beauté. Par ailleurs, pour avoir fait de gros projets, sans graphe de dépendances cycliques, on peut faire tous les trigrammes que vous voulez, y compris le MVC.

    Sinon, voilà un autre point d'acquis, d'après vous : C++ est pour les petits projets... pour les gros, s'abstenir. On avance. C'est bien.

  19. #419
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 469
    Points : 6 102
    Points
    6 102
    Par défaut
    Citation Envoyé par epsilon68 Voir le message
    Il y a des cas où on veut une double dependance, ca ne me choque pas du tout.
    Je pense qu'il y a un malentendu.
    On peut vouloir une double dépendance entre deux classes : une classe A connaît une classe B qui connaît aussi la classe A.
    Dans un langage qui interdit les dépendances circulaires entre modules, on mettra les deux classes A et B dans le même module.
    Ainsi, on peut à la fois avoir de petits cycles de dépendances entre classes et ne pas avoir de dépendances circulaires entre modules.
    Par contre, si on a un très gros cycle de dépendances entre classes, alors il y a un problème d'architecture.

  20. #420
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 354
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 354
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par thierryc Voir le message
    .voilà un autre point d'acquis, d'après vous : C++ est pour les petits projets... pour les gros, s'abstenir. On avance. C'est bien.
    linux 19 millions de lignes de C
    LLVM 4 millions de lignes de C++
    en 2014 GCC 14.5 millions de lignes de C, ils ont annoncé qu'ils passaient au c++.
    Webkit 12.5 millions de lignes la plupat en C++
    Chromium 8.5 millions de lignes de C++, 1.6 millions de ligne de C

    franchement vous vous rendez compte de ce que vous dites?

Discussions similaires

  1. Pourquoi les langages interprétés sont-ils préférés pour l'analyse de données ?
    Par User23 dans le forum Statistiques, Data Mining et Data Science
    Réponses: 1
    Dernier message: 12/05/2016, 21h18
  2. Les langages statiques sont-ils trop sophistiqués et complexes ?
    Par Katleen Erna dans le forum Actualités
    Réponses: 53
    Dernier message: 20/01/2013, 10h06
  3. Réponses: 2
    Dernier message: 11/05/2010, 19h36
  4. Réponses: 2
    Dernier message: 06/05/2007, 22h37
  5. Pourquoi les mails ne sont ils pas envoyés?
    Par Sunsawe dans le forum Développement
    Réponses: 3
    Dernier message: 12/04/2007, 23h49

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