+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Nouveau Membre du Club
    Profil pro
    Inscrit en
    janvier 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : janvier 2004
    Messages : 72
    Points : 27
    Points
    27

    Par défaut Compatibilité langages C(++) / D

    Bonjour,

    Je développe un jeu 3D OpenGL depuis quelques années déjà. La complexité du C++ est souvent un obstable à franchir mais je ne peux pas envisager de migrer l'ensemble du code dans un autre langage (trop de lignes).

    J'aimerais savoir s'il est possible de mélanger du langage C++ et du langage D. Si oui quelles sont les limitations : est-ce qu'on peut écrire une classe en D l'autre en C++ (fichiers objets compatibles) ou s'agirait-il plutôt d'intégrer des librairies dont j'écrirais certaines en C++ ? Voire même, le langage D inclue-t-il le formalisme du C++ comme le fait le C++ pour le C ?

  2. #2
    Membre chevronné

    Inscrit en
    mai 2005
    Messages
    263
    Détails du profil
    Informations forums :
    Inscription : mai 2005
    Messages : 263
    Points : 664
    Points
    664

    Par défaut

    Bonjour à toi,

    Je ne peux m'empêcher de remarquer que le ++ de titre est entre parenthèses, ça va me simplifier la tâche.

    Compatibilité avec le C :

    Depuis toujours, le D peut s'interfacer très facilement avec le C. Tu peux voir les détails sur cette page : http://www.digitalmars.com/d/2.0/interfaceToC.html
    Concrètement, il suffit de déclarer une fonction avec et de se lier avec les fichiers compilés par ton compilateur C pour que ça marche. Le tableau en bas de page te donnera une équivalence entre les types C et D pour les arguments et si jamais tu dois redéclarer une struct dans ton code D.

    Compatibilité avec le C++ :

    Avec la version 2.0 du langage, dont les features ont été gelées, mais qui est toujours en beta (sortie prévu dans l'été, avec le livre de Alexandrescu), tu as une compatibilité limitée avec C++. Les détails sont donnés ici : http://www.digitalmars.com/d/2.0/cpp_interface.html
    En gros, c'est surtout utile si tu veux t'interface à COM. Le support est limité, car les mécanismes similaires des deux langages (exceptions, templates, ...) sont en fait très différents dans leurs implémentations. D'après le concepteur de D, supporter toutes les features de C++ reviendrait à implémenter un compilateur C++ dans le compilateur D, ce qu'il veut éviter.

    Il s'agit dans les deux cas d'interface binaire entre les langages, le D étant incompatible au niveau source avec le C et le C++.

    Puisque tu semble faire du jeu vidéo, je me permets de te signaler que les interfaces vers la plupart des bibliothèques que tu es susceptible de manipuler sont disponibles dans un pack : http://www.dsource.org/projects/derelict

  3. #3
    Membre éclairé Avatar de ponce
    Inscrit en
    juillet 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 27

    Informations forums :
    Inscription : juillet 2008
    Messages : 343
    Points : 394
    Points
    394

    Par défaut

    Je ne conseille pas de vouloir mixer les deux langages, à moins d'en faire des libraries dynamiques avec binding C...

    Et si les interfaces D sont apparemment compatibles avec les classes C++ sans héritage multiple, c'est pas top car il faudra tout compiler avec DMC++ pour avoir une chance de linker (à moins que GDC puisse le faire).
    De plus j'imagine que tu utilise des templates donc ca va être ultra-galère.

    Bref, épargne toi de la douleur car une migration t'apporterait peu, mais penses-y pour tes prochains projets. D'ailleurs je fais des jeux 3D OpenGL en D1 donc n'hésite pas à demander du code que tu n'aurais pas envie d'écrire.

    Pour la petite histoire, OpenMW utilise Ogre et a été codé en D
    http://www.ogre3d.org/forums/viewtopic.php?f=11&t=41897

    Ils ont choisis d'aller vers du full C++ pour avoir plus de contributeurs.

    gfm

  4. #4
    Nouveau Membre du Club
    Profil pro
    Inscrit en
    janvier 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : janvier 2004
    Messages : 72
    Points : 27
    Points
    27

    Par défaut

    Donc si je résume :
    - compatibilité avec le C pas de problème
    - compatibilité avec le C++ partiellement possible mais à éviter
    - réalisation d'une librairie dynamique intégrée dans mon projet en C/C++ pas de problème

    Et sur le lien donné je vois qu'il y a compatibilité avec mes principales librairies (SDL et dérivées et OpenGL). J'en utilise d'autres mais qui sont en C (Fmod, Agar) donc ça ne devrait pas bloquer.

    Merci beaucoup pour vos réponses, je passe le sujet à résolu.

  5. #5
    Membre éclairé Avatar de ponce
    Inscrit en
    juillet 2008
    Messages
    343
    Détails du profil
    Informations personnelles :
    Âge : 27

    Informations forums :
    Inscription : juillet 2008
    Messages : 343
    Points : 394
    Points
    394

    Par défaut

    FMODEX est dans Derelict depuis peu (la branche Derelict2 qui compile sous D1 et D2).

    A mon avis Agar ca va être pénible de faire un binding, ca à l'air assez gros (1.13 mo de headers !). Mais ca à l'air intéressant la possibilité de marcher avec SDL ou tout seul.

    gfm

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •