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 :

C++ ou C# ou C ?


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Par défaut C++ ou C# ou C ?
    Salut,

    Comme beaucoup ici je pense, je suis autodidacte et je ne suis pas un DEV a la base. Mais un admin réseau/système qui a commencé comme technicien and co et maintenant je suis spécialiste MS/Exchange pour de grosses entreprises...

    en tant "qu'administrateur système" je commence a me faire chier j'ai fait le tour.. le seul truc qui m'amuse pour le moment c'est scripter tout mon boulot..

    depuis +10 ans je suis passionné de sécurité informatique et j'ai vraiment envie de bosser dans ce milieu ! même si je sais que c'est un cercle plutôt fermé..

    mais pour cela j'ai besoin de devenir bon en programmation pour pouvoir enfin me faire mes outils etc..

    j'ai un bon niveau en powershell..
    j'ai fait un peu de C et VB un peu plus jeune mais surtout les bases, avec les FILE PILE ..bref surtout de l'algo de bases..
    j'ai essayé récemment le C# pour compléter le powershell et pour pouvoir développer mes outils.. mais je sais pas j'ai du mal avec le C#..

    d'après ce que j'ai pu comprendre le C# pour dev rapidement c'est top !
    mais quand on veut faire du bas level ou de la prog système c'est très limité j'ai l'impression ? il faut faire du mass P/invoke ?

    je veux dev des outils Forensics, antimalware and co & pouvoir faire pas mal de programmation système sous Windows ..voir trouver un job dans la sécu dans quelques années..

    quel serait le langage le plus adapté pour moi ?

    je ne voulais pas partir sur le C++ mais de plus en plus je sens que ca serait la meilleur des solutions..
    en C# on ne gère pas la mémoire, du moins on n'est pas obligé...? du coup je me dit que je risque d'avoir un manque de compétences a ce niveau

    je trouve que le C++ est plus documenté sur le net

    et il parait que quand on sait bien prog en C++ on peu facilement faire du C & C# et pas inversement

    bref j'attends vos avis !

    et avez vous des pistes pour bien débuter la programmation système ?

    merci beaucoup

  2. #2
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Bonjour.

    C et C++ (les deux doivent aller de pair*) sont évidemment la valeur sûre et que je te recommande, au moins parce qu'ils sont prédominants et que tu les retrouveras partout, de Windows à Linux. Mais disons-le clairement : ces langages ont mal vieilli, souffrent d'erreurs de jeunesse, etc. Travailler avec eux n'est pas une partie de plaisir et on trouve bien mieux sur le marché, à commencer par D ou Go puisque ces derniers se placent en compétition directe. Malheureusement ils sont encore trop peu répandus. Mentionnons au passage Objective-C, indispensable dans le monde Apple, inutile partout ailleurs.

    Quant au C# il est en effet plutôt inadapté à la programmation système: comme tu l'as deviné on doit faire du p/invoke en masse et la manipulation des pointeurs n'y est pas naturelle. Toutefois, pour beaucoup d'outils c'est finalement peu gênant puisque les traitements et l'UI pèsent beaucoup plus lourds en lignes de code que les quelques appels natifs, et que sur ce terrain C# tire aisément son épingle du jeu. Et on pourrait ajouter qu'à l'avenir Microsoft mise clairement sur des technos dérivées de C# pour les futures versions de Windows (voir le boulot de Joe Duffy, l'architecture Midori, le projet N, etc).

    En effet tu parles de programmation système mais il faut bien voir qu'il y a une grosse évolution en cours du fait des préoccupations de sécurité(**) et que le C/C++ est purement et simplement inadapté pour écrire un code sûr et fiable. L'arithmétique de pointeurs sera dans pas si longtemps que ça du passé (sauf exceptionnellement via des API dédiées aux pilotes pour communiquer avec le matériel), et avec elle les algorithmes génétiques et autres choses difficilement vérifiables.

    Enfin, dernière remarque : les langages de haut-niveau c'est très bien pour la productivité. Mais ça masque beaucoup de mécanismes de bas-niveau qu'il te faudra apprendre et comprendre. On peut les apprendre avec un langage de haut-niveau mais c'est sans doute plus rapide avec un langage de bas-niveau qui te met le nez dedans.

    * C++ est plus productif mais certaines de ses fonctionnalités sont problématiques en mode noyau. De toute façon C et C++ tendent à cohabiter donc tu dois savoir lire et écrire dans les deux.
    ** On est aussi en recherche d'un modèle de concurrence simple, scalable et vérifiable.


    PS : Modern operating systems, de Tanenbaum, est la référence incontournable sur le sujet. Quant au C ça doit toujours être le Kernighan et Ritchie mais je n'ai jamais lu ce dernier.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Par défaut
    merci pour avoir pris le temps de me repondre

    du C# avec du p/invoke en mass ne pourri pas les perfs and co ?

    que penses tu du c++11 ?

    a ma place tu partirais sur le c++ ?

    merci !

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par puke502 Voir le message
    mais quand on veut faire du bas level ou de la prog système c'est très limité j'ai l'impression ? il faut faire du mass P/invoke ?

    je veux dev des outils Forensics, antimalware and co & pouvoir faire pas mal de programmation système sous Windows ..voir trouver un job dans la sécu dans quelques années..

    l:
    .NET sera totalement inadapté.
    En désassemblant on tombe sur l'Intermediate Language qui est une surcouche au-dessus du code natif.
    Oui il faut approfondir le langage C voire carrèment l'assembleur x86,les Device Drivers..si tu veux bosser dans la sécurité.
    C++ je ne serais pas fana parce qu'il y a toute la couche RTTI, gestion des exception,...

    Citation Envoyé par puke502 Voir le message
    et il parait que quand on sait bien prog en C++ on peu facilement faire du C & C# et pas inversement
    oui lorsqu'on sait bien programmer en C++ on peut facilement faire du C mais en C il faut tout recréer comme la classe std::string.
    Et puis pas de Programmation Orientée Objet en C évidemment

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Par défaut
    C++ je ne serais pas fana parce qu'il y a toute la couche RTTI, gestion des exception,...
    c'est a dire ?

    l'ASM je suis ok qui va falloir que je le connaisse aussi mais bon dev genre un antivirus en asm avec une belle interface ca risque d'etre ultra chaud non ?


    on vient de me conseiller un map road

    du C a mort puis ASM puis par exemple du C# ?
    reste a savoir si le P/invoke de mass garde de bonne performance?

  6. #6
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par puke502 Voir le message
    c'est a dire ?

    l'ASM je suis ok qui va falloir que je le connaisse aussi mais bon dev genre un antivirus en asm avec une belle interface ca risque d'etre ultra chaud non ?
    en win32 / C c'est suffisant pour faire une simple interface avec une fenêtre de dialogue avec une fenêtre en ressources,un WinMain et un CreateDialog...
    Pas besoin de C++
    Citation Envoyé par puke502 Voir le message
    du C a mort puis ASM puis par exemple du C# ?
    reste a savoir si le P/invoke de mass garde de bonne performance?
    mais pourquoi utiliser du C# ? Tu vas devoir passer par des surcouches diverses et variées, en langage C tu as des pointeurs directement sur la mémoire
    Ensuite en C/C++ on peut mixer du code source assembleur soit avec la directive asm{} soit en incorporant un fichier source .asm au projet.
    Ce qui n'est pas possible avec .NET

  7. #7
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    mais pourquoi utiliser du C# ?
    Parce que la productivité et la sécurité comptent, et que 80% des effets de développement de MS sont concentrés sur ces nouvelles technos.

    Citation Envoyé par Mat.M Voir le message
    le C# et tout ce qui est dot NET ça rame comme c'est pas possible...
    Ca fait dix à quinze ans que je suis passé du C/C++ au C# et j'ai codé à peu près n'importe quoi dans ce langage, de problèmes temps-réel à du calcul lourd et de la 3D en passant par des interfaces sexy et des outils de développement.

    Le point commun de toutes ces réalisations ? Elles sont toutes fluides. Le dernier programme que j'ai créé démarre en moins d'une seconde et affiche une UI dynamique, riche, vivante, qui réagit au quart de tour, pour une empreinte mémoire de 40Mo. Précisons aussi qu'en général nous n’avons fait aucun effort d'optimisation et que j'ai même eu la main lourde en privilégiant la simplicité du code et une solution de programmation réactive.

    Le secret ? Éviter de coder avec ses pieds ou d'utiliser des machins hyper-architecturés avec réflexion à tous les étages. Ton projet actuel qui rame comme une bouse en C# aurait planté comme une bouse en C++. C'est la différence.

  8. #8
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    .NET sera totalement inadapté.
    En désassemblant on tombe sur l'Intermediate Language qui est une surcouche au-dessus du code natif.
    Il serait inadapté pour écrire un code en kernel-mode, pas pour écrire un antivirus. Or c'est plutôt ce dernier type de programmes qui l'attire. Pour ce genre de tâches le C# conviendrait. Même si ce n'est pas le choix que je lui recommande.

    Citation Envoyé par puke502 Voir le message
    du C# avec du p/invoke en mass ne pourri pas les perfs and co ?

    que penses tu du c++11 ?

    a ma place tu partirais sur le c++ ?
    a) On s'en fiche puisque les appels natif ne pèsent généralement pas lourd. Comme je te l'ai dit le C# serait un bon choix pour les développements où l'UI et les traitements de données pèsent lourd. En termes de perfs le C# a généralement tout ce qu'il faut sous le capot.
    b) Le C++ est irrécupérable mais le C++ 11 est une bonne évolution qui va lui offrir quelques décennies de répit en plus.
    c) Comme je te l'ai dit je te recommande du C et du C++. Les deux ensemble. Mais si tu ne devais en choisir qu'un, prends le C. Ton projet de faire asm -> C -> C++ -> C# paraît excellent (il y a un paquet de boulot par contre mais de toute façon ton projet de devenir un dév "système" se compte en années)

    Citation Envoyé par puke502 Voir le message
    c'est a dire ?
    Le mode kernel est un autre monde : pile d'appels limitée à quelques ko, ancrage des pages mémoire, pas d'opérations en virgule flottante, etc. On y code généralement en C, pas en C++. Ce dernier peut cependant être utilisé à condition de faire l'impasse sur des fonctionnalités pourtant centrales. Disons que c'est du demi-C++.

    l'ASM je suis ok qui va falloir que je le connaisse aussi mais bon dev genre un antivirus en asm avec une belle interface ca risque d'etre ultra chaud non ?
    On n'utilise pas l'asm pour écrire des programmes. A la rigueur pour écrire de petites parties d'un programme pour des raisons de performances (et encore : c'est de plus en plus inutile). Tu auras besoin de l'asm pour comprendre des binaires, notamment si tu veux détecter des malwares et autres, puisque tous les déassembleurs te montreront un code asm.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Par défaut
    merci Donquiche pour cette réponse complète
    oui l'asm je compte juste l'apprendre pour pouvoir faire reverse engineering de malwares voir des crack me pour le fun ..

    mais comme tu dis ca fait beaucoup de boulot en plus du miens lol

    et que penses tu du Delphi ? cela pourrait être une bonne alternative ?

    ps : trendmicro est écrit en c# il me semble

  10. #10
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 527
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 527
    Par défaut
    Citation Envoyé par DonQuiche Voir le message
    En termes de perfs le C# a généralement tout ce qu'il faut sous le capot.
    .
    le C# et tout ce qui est dot NET ça rame comme c'est pas possible...c'est normal il y a toujours les Mo octets (inutiles) du Framework.

    Je viens de finir un projet migré de VB6 à VB.NET l'interface est incroyablement lente il faut attendre des plombes pour charger un écran.
    Remarque je suis peut-être de mauvaise foi car l'architecture du projet est totalement défaillante quand c'est pas catastrophique
    Le Framework .NET c'est ni plus ni moins que des API Windows emberlificotées par Microsoft pour que ça soit plus lourd encore; l'avantage c'est que ça limite les plantages et les fuites mémoires
    Ensuite avec .NET on ne gère pas la mémoire comme on veut, et rien qu'à considérer une boucle le framework doit constament faire des vérifications pour voir s'il n'y a pas d'exceptions levées.

    C'est parfait pour de la compta mais pour des performances en temps réel j'en doute
    Bon je sais que je vais me faire des ennemis ici

  11. #11
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Citation Envoyé par Mat.M Voir le message
    Le Framework .NET c'est ni plus ni moins que des API Windows emberlificotées par Microsoft pour que ça soit plus lourd encore
    Je reviens sur cette partie : il y a dix ans ça aurait pu avoir un sens même si déjà les 90% du framework étaient entièrement codés en dotnet (manipulation des chaînes, etc). Mais de nos jours, entre les nombreuses API purement dotnet, de WCF à WPF, et la systématisation des API COM pour Windows 8 (dont l'usage est davantage "emberlificoté" en C++ qu'en C#), ça n'est plus du tout pertinent.

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 88
    Par défaut
    lol plus ca va donquiche plus tu me donnes envie de faire du C# directement surtout si tu me dis que les P/invoke n'auront pas d'impact sur les performances

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