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

Langages de programmation Discussion :

Les meilleurs programmeurs sont-ils ceux qui disent connaître C ++ ? Pas si sûr !


Sujet :

Langages de programmation

  1. #21
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    D'ailleurs, si tu as un système à GC ou demi-GC sur de l'embarqué (comme une calculatrice TI-89, dont la mémoire utilise un demi-GC), je pense que C++ y est plus approprié que le C: Tu peux te faire un type spécifique pour les handles, qui interdirait les opérations arithmétiques dessus; et utiliser l'idiome RAII/RRIF pour le verrouillage d'un objet en mémoire.

    Là où les ennuis commencent, c'est quand on passe en multi-thread; la synchronisation lors du verrouillage d'un objet peut alors s'avérer extrêmement coûteuse, et augmenter le coût, par exemple, des appels virtuels.

    Je me demande comment fait .Net pour n'autoriser les appels au GC qu'entre deux instructions...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  2. #22
    Invité
    Invité(e)
    Par défaut
    au tant pour moi aussi , tu es quelqu'un de compétent et je serais honoré de collaborer avec toi ..


    Marshall vs GC
    Le dotnet framework utilise marshall pour sa gc, les problèmes susceptibles d'impacter le gc reviennent sous forme de warning marshall. D'où l'amalgame que je fais. La sérialisation m'a permis de convertir 1 Go de data hierarchique en XML avec 5 lignes de code ! C'est donc un outil précieux. De l'autre coté memcpy permet d'utiliser toute la largeur du bus à sa vitesse maximum théorique , on gagne d'un facteur 1000 en performance.
    Ce n'est pas une question de codage mais d'agencement du segment données.
    memcpy() n'est pas le seul intéret des pointeurs mais c'est le seul qu'on ne peut absolument pas reproduire avec des handles ou des reférences. J'ai donc cité celui là.

    En règle générale , les types C++ ou managés sont plus complexes et plus pratiques que le C. C'est un peu le business qui décide du reste. Si on a un µcontrolleur, la question se pose rarement. Sur une archi intel, c'est différent et la question de consommation/chauffe des composants se pose de plus en plus souvent. Il n'y a pas si longtemps , on laissait tout tourner sur des boucles infinies , les temps changent. Je crois que les data-centers sont sous pression aussi sur ces questions d'après ce que je lis dans la presse

  3. #23
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Si tu parles de la classe System.Runtime.InteropServices.Marshal, elle ne sert que peu pour le GC; elle sert surtout à l'interaction avec le code non-managé (d'ailleurs, la plupart de ses fonctions nécessitent le droit "UnmanagedCode", un assembly "partially trusted" sur le web n'aura pas le droit de les appeler).

    Pour les "warning marshall", je n'arrive pas à voir de quoi tu parles.

    Quant à la sérialisation XML, c'est un outil à utiliser avec parcimonie. La sérialisation binaire par contre tend à être plus utile quand on veut vraiment de la performance, au détriment parfois de la flexibilité.

    Un intéret de C++ (et même de C++/CLI si a le droit UnmanagedCode), c'est qu'on peut y faire tout ce qu'on peut faire en C, et pour le même coût: Types non-managés, appels de fonction non-virtuels, RAII/RRIF sans impact sur la performance, contrôle de la mémoire comme en C, et même structures à longueur variable (bien que ces dernières augmentent les risques de mauvaise utilisation avec delete).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #24
    ILP
    ILP est déconnecté
    Membre confirmé
    Avatar de ILP
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2002
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 258
    Points : 609
    Points
    609
    Par défaut
    Je sais que ça n'a pas de rapport avec la conversation intiale, mais j'avais posté il y a quelques temps un message concernant l'interopérabilité avec du code non-managé :
    [Débutant C#] Passage d'un pointeur de méthode en paramètre vers une DLL.
    Mais, c'est du C# .

  5. #25
    Invité
    Invité(e)
    Par défaut
    ok : marshal (avec un seul "l" donc) est utilisé tant pour la sérialisation que pour naviguer dans le segment de données. Le rôle du GC étant de réorganiser les données pour faire face à un besoin de mémoire, il est normal qu'il utilise marshal et que ce même marshal se plaigne de ne rien pouvoir retrouver si - par exemple - on se risque à passer un pointeur sur une donnée marshalée dans une propriété de dll ou dieu sait quoi d'autre qui ne se trouve pas dans la liste de sérialisation. Quand la GC risque de ne pas pouvoir travailler , c'est donc marshal qui se plaint. Je n'ai jamais vu passer de message d'erreur qui fasse référence au GC. Je ne ferai pas de recherche sur ce point car il fonctionne très bien et je n'ai pas d'autre intention que d'évaluer ses limites.

    D'autre part, la sérialisation et l'utilisation de la classe marshal fonctionne très bien avec l'unmanaged code désactivé, c'est le cas de mon dernier projet ou un collaborateur a utilisé massivement la classe marshal sur des structures binaires.

    Enfin pour une raison que j'ignore, l'appel de dll "classiques" ne requiert pas l'utilisation du code non managé alors qu'elle est écrite en C et que le tout fonctionne très bien avec d'anciennes versions de c ou même de purebasic sur lequel j'ai fait plusieurs tests.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <DllImport("Kernel32", ExactSpelling:=True, SetLastError:=True)>
    Comme je l'ai dit , je n'utilise pas le code non managé auquel je préfère le C classique, beaucoup plus rapide sur certaines opérations et qui ne me force pas à galérer avec des classes aussi opaques que marshal justement.

    En C un champ de bits se déclare comme une structure, la pile est bcp plus petite, le heap beaucoup plus grand et on peut y faire des opérations sur toutes les données à la vitesse du processeur sans framework interposé, exactement comme en assembleur qui n'est pas plus rapide pour ce genre de tache.

    Mais si ton job relève de la gestion ou orienté académique, je n'argumenterai pas plus avec toi car je teste tout là ou toi tu lis la doc !
    Dernière modification par Invité ; 02/04/2010 à 17h42.

  6. #26
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ne confonds pas "pas de code managé dans l'assembly" (/clr:pure) et "accès au code non-managé interdit".

    P/Invoke est parfaitement accessible dans le premier cas, puisque c'est le seul moyen d'appeler du code non-managé depuis une assembly C# ou VB.Net. Mais si tu n'as pas le droit SecurityPermissionFlag.UnmanagedCode, la plupart des fonctions de Marshal (comme AllocHGlobal() par exemple) lanceront une SecurityException et il en sera de même pour P/Invoke.

    PS: Ce n'est pas la sérialisation qui utilise le marshalling, c'est l'inverse: Tous les objets marshallés par valeur sont sérialisés (mais pas ceux marshallés par référence).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #27
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Ne confonds pas "pas de code managé dans l'assembly" (/clr:pure) et "accès au code non-managé interdit".

    PS: Ce n'est pas la sérialisation qui utilise le marshalling, c'est l'inverse: Tous les objets marshallés par valeur sont sérialisés (mais pas ceux marshallés par référence).
    je ne comprends pas le but de cette phrase

    y a t il un autre moyen que marshal de naviguer dans les variables managées ?

    well , c'est sympa d'avoir eu cette discussion - vos argument sont très bons. J'espere qu'on trouvera d'autres threads pour discuter.

    Par chance, j'ai trouvé un petit job musical qui va m'occuper ce week end donc je ne vais pas fouiller dans mes archives de dev aujourd'hui mais plutot dans mes tableaux de midi sysex !!

    Bon week end à vous

  8. #28
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Que veux-tu dire par "naviguer" dans les variables managées?

    Si c'est éplucher leurs variables membres une par une (ce que font par défaut les fonctions de sérialisation, si une classe n'implémente pas ISerializable à sa sauce), on utilise généralement la réflexion. D'ailleurs, pour accéder aux membres privés d'une classe par réflexion, là aussi il faut un droit spécial (ReflectionPermissionFlag.MemberAccess), ce qui fait qu'un assembly auquel tu ne fais pas entièrement confiance ne peut pas truander.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #29
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ILP Voir le message
    Je sais que ça n'a pas de rapport avec la conversation intiale, mais j'avais posté il y a quelques temps un message concernant l'interopérabilité avec du code non-managé :
    [Débutant C#] Passage d'un pointeur de méthode en paramètre vers une DLL.
    Mais, c'est du C# .
    CHAPEAU ! c'est exactement de ça que je parle , je testerai ce code qui pourrait changer ma façon de partager les données. Thanks my friend

  10. #30
    Membre éclairé Avatar de metagoto
    Profil pro
    Hobbyist programmateur
    Inscrit en
    Juin 2009
    Messages
    646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Hobbyist programmateur

    Informations forums :
    Inscription : Juin 2009
    Messages : 646
    Points : 845
    Points
    845
    Par défaut
    Un peu comme en mathématique ou en physique, les personnes qui en savent plus que la moyenne sont humbles car conscientes de l'ampleur du domaine et donc de leur ignorance.

    C'est la même chose avec le C++.

  11. #31
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    Ben pour revenir au graphique de départ, ça correspond à quelqu'un qui a mal appris le C++, comme du C, et évidemment il ne comprend rien au langage.

    On pourrait faire le même type de graphique avec quelqu'un qui a appris le Java et qui se met au C++ et essaye de faire la même chose. "Hop je met des new partout!"

    Quelqu'un qui débute le C++ avec un vrai cours n'aura pas le même cheminement.

    Par contre ce que je vois souvent aussi, c'est des gens qui ont du mal à distinguer le langage C++ et les API système. Par exemple CString n'existe pas en C++, c'est de l'API windows.

  12. #32
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par nikko34 Voir le message
    Par contre ce que je vois souvent aussi, c'est des gens qui ont du mal à distinguer le langage C++ et les API système. Par exemple CString n'existe pas en C++, c'est de l'API windows.
    Plus précisément, du ATL/MFC.
    Mais ta remarque tient. C'est comme ça qu'on se retrouve avec des gens qui disent programmer "en Visual C++"...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #33
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par jaimepaslesmodozélés Voir le message
    Idem, d'où le choc (j'aurai du tourner ma phrase autrement, je ne pense pas que passer du C++ ou C soit une mauvaise chose, bien au contraire, disons juste que c'est tout sauf une promenade de santé, un mauvais moment à passer)
    Sont-ils dingues... je ne sais pas, en tout cas il semblerait que de l'autre côté de l'atlantique les jeunes apprennent directement Java, C/C++ passant littéralement à la trappe. Leurs profs sont peut être moins fous, même si je ne regrette absolument pas d'avoir "mis les mains dans l'cambouis", au même titre que l'Assembleur et ces autres outils de torture. Mais je n'y retoucherai pas hein, pas fou.
    Ici au Canada lors de mon programme informatique nous avons commencé avec du pseudo-code et quelques semaines plus tard en Java. Dans le fond j'ai toujours programmé de façon orienter object. Après avoir vue Swing nous somme maintenant entrain de voir les pointeurs en c++.

  14. #34
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    Citation Envoyé par Yakuzan Voir le message
    Ici au Canada lors de mon programme informatique nous avons commencé avec du pseudo-code et quelques semaines plus tard en Java. Dans le fond j'ai toujours programmé de façon orienter object. Après avoir vue Swing nous somme maintenant entrain de voir les pointeurs en c++.
    Vous faites du C en fait, pas du C++?

    ou alors on vous a montré la programmation objet en C++?

  15. #35
    Futur Membre du Club
    Inscrit en
    Juin 2008
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 5
    Points : 8
    Points
    8
    Par défaut A propos du java comme seul langage appris
    Pour le coup, j'étais totalement d'accord avec le post de Joel sur les javaschool

    (d'autant que cette mode n'a pas contaminé que les uni/poly d'outre atlantique)

  16. #36
    Invité
    Invité(e)
    Par défaut Langage et programmation
    Cela me parait étonnant d'associer langage et programmation.
    A titre de comparaison, pourrait-on poser la question : "Le meilleur orateur est-il celui qui s'exprime en latin ?" (parce que Cicéron était romain)?

    Pour moi, un langage doit avoir 3 caractéristique "portabilité" "facilité" "efficacité". Je pense que si la portabilité et l'efficacité priment, le C sera préférable, par contre si c'est la facilité, il vaut mieux utiliser des bibliothèques C++ complètes.

    Ne vous moquez pas, je n'ai jamais utilisé cin et cout. Naturellement, j'ai essayé, mais dès qu'il s'agissait de format, ça m'a semblé sans intérêt (en ce qui me concerne).
    Autre exemple, j'utilise autant des listes chainées, faites maison, que la classe TList et ses dérivés de mon éditeur favori.

    Par contre, il y a des finesses du C++ comme la classe Template que je n'ai jamais réussi à comprendre. Alors je trouve un exemple, toujours chez mon éditeur favori.

  17. #37
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Points : 1 176
    Points
    1 176
    Par défaut
    Autre exemple, j'utilise autant des listes chainées, faites maison, que la classe TList et ses dérivés de mon éditeur favori.
    TList, ça vient de Borland, c'est du C++ Builder. Ce n'est pas du C++ standard.

    En C++ standard, on utilise une std::list par exemple, qui est un container générique.

    Par contre, il y a des finesses du C++ comme la classe Template que je n'ai jamais réussi à comprendre. Alors je trouve un exemple, toujours chez mon éditeur favori.
    Ne le prend pas mal hein, je dis ça sans méchanceté, mais je pense que tu n'as vraiment aucune idée ni eu l'occasion de savoir ce qu'est exactement le C++.

  18. #38
    Invité
    Invité(e)
    Par défaut
    Aurais-je dit le contraire?
    Je voulais simplement dire que je développe avec le langage que me fournit mon éditeur préféré. Sur la page de garde du bouquin, il est marqué C++, et j'ai consulté d'autres ouvrages.
    J'essayais simplement de dire que pour moi, "qu'importe le langage pourvu qu'on ait le programme".
    Mais par ailleurs, la question d'origine vaut d'être posée, ne serait-ce que pour permettre à des développeurs de s'exprimer.

  19. #39
    Membre éclairé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Juin 2008
    Messages
    522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Chercheur en informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 522
    Points : 725
    Points
    725
    Par défaut
    J'ai appris un language et comme par hasard ce fut le c++. Pourquoi? Je voulais apprendre à faire des jeux vidéo et le livre que j'ai pris abordait l'apprentissage c++ puis de jeu 2D avec une bibliothèque quelconque.
    Aujourd'hui je ne peux pas envisager de créer un programme un peu complexe sans classes. Comment font-ils? Quand je suis parti sur le WinApi je ne me suis même pas rendu que c'était du C à part qu'il fallait écrire TRUE en majuscule...
    Le C serait plus performant? Quelle importance: Les ordinateurs sont si performant et même pour le .NET: Quelle importance? Aujourd'hui quelle blibliothéque est-elle écrite en C? La seule chose que l'on demande c'est que ce soit pratique. Et juste avec des classes le code est plutôt clair.
    Raphchar.

  20. #40
    Membre habitué
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2006
    Messages : 87
    Points : 144
    Points
    144
    Par défaut La vérité est ailleurs ;-)
    Comme d'habitude, on oppose ou on compare C et C++ alors que ce qui devrait être comparé c'est la programmation impérative (ou structurée) et la POO.... Mais ce serait certainement aussi une "flame war" ;-)

Discussions similaires

  1. Pourquoi les programmeurs sont-ils moins payés que les gestionnaires de programmes et les analystes métiers ?
    Par Hinault Romaric dans le forum Débats sur le développement - Le Best Of
    Réponses: 107
    Dernier message: 26/11/2014, 22h40
  2. Réponses: 0
    Dernier message: 01/04/2010, 22h57
  3. Réponses: 3
    Dernier message: 27/04/2007, 09h56
  4. 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
  5. Les drivers ODBC sont-ils nécessairement payants ?
    Par Draekonyss dans le forum 4D
    Réponses: 5
    Dernier message: 20/04/2006, 18h50

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