|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : janvier 2004 Messages : 69 ![]() |
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 ? |
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Inscription : mai 2005 Messages : 223 ![]() |
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 |
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
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. |
|
00
|
|
|
#4 |
|
Membre à l'essai
![]() Inscription : janvier 2004 Messages : 69 ![]() |
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. |
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() Inscription : juillet 2008 Messages : 339 ![]() |
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. |
|
00
|
Copyright © 2000-2013 - www.developpez.com