Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > D
D Forum d'entraide sur la programmation en langage D
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 20/05/2010, 09h04   #1
Erwin
Membre à l'essai
 
Inscription : janvier 2004
Messages : 69
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : janvier 2004
Messages : 69
Points : 23
Points : 23
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 ?
Erwin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2010, 12h34   #2
Niark13
Membre éprouvé
 
Inscription : mai 2005
Messages : 223
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 223
Points : 425
Points : 425
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
Niark13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2010, 17h29   #3
ponce
Membre éclairé
 
Avatar de ponce
 
Inscription : juillet 2008
Messages : 339
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : juillet 2008
Messages : 339
Points : 358
Points : 358
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
ponce est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2010, 09h56   #4
Erwin
Membre à l'essai
 
Inscription : janvier 2004
Messages : 69
Détails du profil
Informations personnelles :
Âge : 36
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : janvier 2004
Messages : 69
Points : 23
Points : 23
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.
Erwin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/05/2010, 12h00   #5
ponce
Membre éclairé
 
Avatar de ponce
 
Inscription : juillet 2008
Messages : 339
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : juillet 2008
Messages : 339
Points : 358
Points : 358
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
ponce est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h49.


 
 
 
 
Partenaires

Hébergement Web