C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

template et dll 2
Goto page 1, 2, 3, 4, 5, 6  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Boris Sargos
Guest





PostPosted: Mon Nov 22, 2004 12:18 pm    Post subject: template et dll 2 Reply with quote



Salut à tous,

n'ayant pas eu de réponse à mon post précédent, je suppose qu'il n'était pas
très clair. Je m'en excuse, et je reformule autrement ma question. Donc, à
quoi cela sert-il d'écrire des classes templates dans une DLL si elles ne
peuvent être exportées ?
Pour aller plus loin, comme de nombreuses applications sont décomposées en
DLLs, le template est-il utilisé ?

Dans mon cas, j'ai écrit une DLL de fonctions mathématiques à base de
templates, mais je me retrouve coincé, car je ne peux l'utiliser dans mes
applications. Faut donc t-il tout écrire sans dll, dans un seul bloc de
programme ?

J'aimerais avoir votre point de vue sur ce point.
Merci à tous.


Back to top
Fabien LE LEZ
Guest





PostPosted: Mon Nov 22, 2004 1:03 pm    Post subject: Re: template et dll 2 Reply with quote



On Mon, 22 Nov 2004 13:18:35 +0100, "Boris Sargos"
<bsargos (AT) wanadoo (DOT) fr>:

Quote:
Donc, à
quoi cela sert-il d'écrire des classes templates dans une DLL si elles ne
peuvent être exportées ?

Héhé... tu touches du doigt un problème qui a fait couler beaucoup
d'encre ici (et ailleurs).
En gros, la norme C++ parle d'un mot-clé "export", qui permet
d'exporter des templates, i.e. d'éviter d'avoir à inclure
l'intégralité de la définition de chaque template dans chaque module.
Bien que ce soit dans la norme depuis un paquet d'années, un seul
compilateur (ou est-ce deux ?) l'implémente, et encore, depuis peu de
temps.

Donc, en gros, t'es coincé.

http://www.google.com/groups?as_q=export&as_ugroup=fr.comp.lang.c%2b%2b

--
;-)

Back to top
Boris Sargos
Guest





PostPosted: Mon Nov 22, 2004 1:57 pm    Post subject: Re: template et dll 2 Reply with quote



Merci pour ta réponse Fabien.
Après avoir lu une bonne dizaine des posts sur le lien que tu m'as envoyé,
j'ai bien compris qu'il est impossible d'exporter une classe template hors
d'une DLL.
Mais tu n'as pas entièrement répondu à ma question. Quelle stratégie adopter
: dans un programme complexe, doit-on :
- abandonner les templates et utiliser des DLLs spécialisées et pas trop
volumineuses,
- ou au contraire, utiliser massivement les templates (car c'est
vraiment puissant) et ne pas utiliser de DLL. Du coup, on aura un énorme
programme, et aucune librairie réutilisable.


Back to top
Matthieu Moy
Guest





PostPosted: Mon Nov 22, 2004 2:03 pm    Post subject: Re: template et dll 2 Reply with quote

"Boris Sargos" <bsargos (AT) wanadoo (DOT) fr> writes:

Quote:
- abandonner les templates et utiliser des DLLs spécialisées et pas trop
volumineuses,

Tu peux aussi utiliser les templates en interne, et n'exporter que les
classes spécialisées. Tu peux très bien faire une classe matrix_int
qui utilise std::vector<int>, et la mettre dans une bibliothèque.

Quote:
- ou au contraire, utiliser massivement les templates (car c'est
vraiment puissant) et ne pas utiliser de DLL. Du coup, on aura un énorme
programme, et aucune librairie réutilisable.

Elle sera réutilisable (exemple typique : la STL), mais pas
distribuable sous forme binaire.

--
Matthieu

Back to top
Boris Sargos
Guest





PostPosted: Mon Nov 22, 2004 2:31 pm    Post subject: Re: template et dll 2 Reply with quote

Merci Matthieu pour ta réponse.:

Quote:
Tu peux aussi utiliser les templates en interne, et n'exporter que les
classes spécialisées. Tu peux très bien faire une classe matrix_int
qui utilise std::vector<int>, et la mettre dans une bibliothèque.

Oui, c'est vrai. A condition que tes spécialisations portent sur sur des
types connus de ta DLL exportatrice (comme int).


Quote:
- ou au contraire, utiliser massivement les templates (car c'est
vraiment puissant) et ne pas utiliser de DLL. Du coup, on aura un énorme
programme, et aucune librairie réutilisable.

Elle sera réutilisable (exemple typique : la STL), mais pas
distribuable sous forme binaire.

Là, je n'ai pas tout compris ?!?



Back to top
Arnaud Meurgues
Guest





PostPosted: Mon Nov 22, 2004 2:52 pm    Post subject: Re: template et dll 2 Reply with quote

Fabien LE LEZ wrote:

Quote:
Donc, à
quoi cela sert-il d'écrire des classes templates dans une DLL si elles ne
peuvent être exportées ?
En gros, la norme C++ parle d'un mot-clé "export", qui permet
d'exporter des templates, i.e. d'éviter d'avoir à inclure
l'intégralité de la définition de chaque template dans chaque module.
Bien que ce soit dans la norme depuis un paquet d'années, un seul
compilateur (ou est-ce deux ?) l'implémente, et encore, depuis peu de
temps.

Export fonctionne aussi avec des librairies partagées ?

--
Arnaud
(Supprimez les geneurs pour me répondre)

Back to top
Fabien LE LEZ
Guest





PostPosted: Mon Nov 22, 2004 3:34 pm    Post subject: Re: template et dll 2 Reply with quote

On Mon, 22 Nov 2004 14:57:59 +0100, "Boris Sargos"
<bsargos (AT) wanadoo (DOT) fr>:

Quote:
ou au contraire, utiliser massivement les templates (car c'est
vraiment puissant) et ne pas utiliser de DLL.

Utiliser les templates. C'est réutilisable de toutes façons (il suffit
de les inclure dans un autre projet).
Quant aux DLL, il ne faut les utiliser qu'en dernier recours. Du code
indispensable au bon fonctionnement de ton programme doit se trouver
dans le .exe.


--
;-)

Back to top
Fabien LE LEZ
Guest





PostPosted: Mon Nov 22, 2004 3:35 pm    Post subject: Re: template et dll 2 Reply with quote

On Mon, 22 Nov 2004 15:52:54 +0100, Arnaud Meurgues
<arnaud (AT) meurgues (DOT) non.fr.invalid>:

Quote:
Export fonctionne aussi avec des librairies partagées ?

A priori, s'il fonctionne avec des bibliothèques statiques, le faire
fonctionner avec des bibliothèques dynamiques ne devrait pas poser de
gros problèmes.


--
;-)

Back to top
Matthieu Moy
Guest





PostPosted: Mon Nov 22, 2004 3:44 pm    Post subject: Re: template et dll 2 Reply with quote

"Boris Sargos" <bsargos (AT) wanadoo (DOT) fr> writes:

Quote:
- ou au contraire, utiliser massivement les templates (car c'est
vraiment puissant) et ne pas utiliser de DLL. Du coup, on aura un énorme
programme, et aucune librairie réutilisable.

Elle sera réutilisable (exemple typique : la STL), mais pas
distribuable sous forme binaire.

Là, je n'ai pas tout compris ?!?

Si tu développe une "bibliotheque" qui utilise massivement les
templates, tu ne pourras pas distribuer ta "bibliotheque" sous forme
de dll (ou .so sous unix). Par contre, les .h sont parfaitement
réutilisables. Après, selon la définition que tu donnes de
"bibliothèque", tu peux considérer ça comme une bibliothèque ou pas
(les gens qui ont donné son nom à la STL pensent qu'un ensemble de
fichiers d'en-tête mérite de s'appeler "library"), mais ça reste du
code réutilisable en dehors de ton projet.

Dans bien des cas, une bibliotheque C++ est un petit binaire qui
contient tout ce qui n'est pas template en version compilée, et
beaucoup de fichiers d'en tête qui contiennent le code des templates.

--
Matthieu

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Mon Nov 22, 2004 8:29 pm    Post subject: Re: template et dll 2 Reply with quote

Arnaud Meurgues <arnaud (AT) meurgues (DOT) non.fr.invalid> writes:

Quote:
Export fonctionne aussi avec des librairies partagées ?

Qu'entends-tu par "fonctionne"?

Les implémentations disponibles actuellement ont besoin de
la définition des templates même avec export.

Même une implémentation qui mettrait cette définition sous
une forme précompilée dans un .o (ce qui avec un format
ayant la souplesse d'elf me semble possible) ne pourrait
vraissemblablement pas mettre cette version précompilée dans
un .so. Certainement pas un .so qui serait chargé
dynamiquement.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Tue Nov 23, 2004 8:47 am    Post subject: Re: template et dll 2 Reply with quote

"Boris Sargos" <bsargos (AT) wanadoo (DOT) fr> wrote


Quote:
Après avoir lu une bonne dizaine des posts sur le lien que tu m'as
envoyé, j'ai bien compris qu'il est impossible d'exporter une classe
template hors d'une DLL.
Mais tu n'as pas entièrement répondu à ma question. Quelle stratégie
adopter : dans un programme complexe, doit-on :
- abandonner les templates et utiliser des DLLs spécialisées et pas trop
volumineuses,
- ou au contraire, utiliser massivement les templates (car c'est
vraiment puissant) et ne pas utiliser de DLL. Du coup, on aura un énorme
programme, et aucune librairie réutilisable.

Tout dépend du programme. En général, on évite d'utiliser trop les
templates autre que pour des trucs de très bas niveau, à cause des
problèmes de portabilités et des dépendences que ça crée. De l'autre, on
évite aussi au maximum des DLL's, à cause des problèmes de distribution
et de fiabilité qui s'en suivent.

Mais ce sont des règles très générales, et selon l'application, il peut
y avoir des exceptions. Je verais donc bien certains types de
bibliothèque numérique avec beaucoup de templates. Et dans certains cas,
où on veut offrir une interface stable mais une implémentation qui
évolue, les DLL peuvent être utile.

En fait, et les templates et les DLL ont un prix -- c'est plus simple et
moins cher de s'en passer. Alors, il faut au cas par cas évaluer si ce
qu'ils apportent vaut le prix.

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

Back to top
Arnaud Meurgues
Guest





PostPosted: Tue Nov 23, 2004 9:13 am    Post subject: Re: template et dll 2 Reply with quote

Jean-Marc Bourguet wrote:

Quote:
Export fonctionne aussi avec des librairies partagées ?
Qu'entends-tu par "fonctionne"?

J'entends : Est-ce que les compilateurs qui implémentent export et qui
permettent de mettre des template dans des bibliothèque (.a) savent les
mettre dans des bibliothèques partagées (.so) ?

Quote:
Les implémentations disponibles actuellement ont besoin de
la définition des templates même avec export.

Oui. C'est pourquoi j'étais un peu surpris de lire que "export" serait
la solution pour autoriser des templates dans des dll.

Quote:
Même une implémentation qui mettrait cette définition sous
une forme précompilée dans un .o (ce qui avec un format
ayant la souplesse d'elf me semble possible) ne pourrait
vraissemblablement pas mettre cette version précompilée dans
un .so. Certainement pas un .so qui serait chargé
dynamiquement.

Voui. C'était bien le sens de ma question.
Encore que pour les dll, le problème puisse être un peu différent
puisqu'il semble qu'il y ait un .lib associer qui pourrait peut-être, du
coup, comporter les infos nécessaire pour le template sans être obligé
de faire de la liaison dynamique.

--
Arnaud
(Supprimez les geneurs pour me répondre)

Back to top
Jean-Marc Bourguet
Guest





PostPosted: Tue Nov 23, 2004 9:41 am    Post subject: Re: template et dll 2 Reply with quote

Arnaud Meurgues <arnaud (AT) meurgues (DOT) non.fr.invalid> writes:

Quote:
Jean-Marc Bourguet wrote:

Export fonctionne aussi avec des librairies partagées ?
Qu'entends-tu par "fonctionne"?

J'entends : Est-ce que les compilateurs qui implémentent export et qui
permettent de mettre des template dans des bibliothèque (.a)

Il n'y en a pas a ma connaissance.

Quote:
savent les mettre dans des bibliothèques partagées (.so) ?

Les implémentations disponibles actuellement ont besoin de la
définition des templates même avec export.

Oui. C'est pourquoi j'étais un peu surpris de lire que "export"
serait la solution pour autoriser des templates dans des dll.

Je crois qu'il faut se mefier de tout ce qui est dit sur export par
ceux qui ne l'utilisent pas.

Quote:
Même une implémentation qui mettrait cette définition sous une
forme précompilée dans un .o (ce qui avec un format ayant la
souplesse d'elf me semble possible) ne pourrait vraissemblablement
pas mettre cette version précompilée dans un .so. Certainement
pas un .so qui serait chargé dynamiquement.

Voui. C'était bien le sens de ma question.
Encore que pour les dll, le problème puisse être un peu différent puisqu'il
semble qu'il y ait un .lib associer qui pourrait peut-être, du coup,
comporter les infos nécessaire pour le template sans être obligé de faire
de la liaison dynamique.

J'avais cru comprendre qu'il etait possible de recreer ce .lib a
partir de la dll. Mais je ne connais pas grand chose a Windows, de
meme que je ne sais pas si le format .lib est capable d'embarquer des
choses plus ou moins arbitraire.

En fait tout est possible si on embarque tout le compilateur C++ dans
le run-time (ce qui s'est fait pour des systemes lisp).

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Back to top
Boris Sargos
Guest





PostPosted: Tue Nov 23, 2004 9:42 am    Post subject: Re: template et dll 2 Reply with quote

Merci, ça semble assez clair.
Je te demanderais juste une petite précision. Dans le cas d'une librairie
mathématique d'assez bas niveau tu sembles préconiser les templates.
D'accord avec ça. Mais cette librairie sera utilisable dans plein d'autres
parties du programme, si ce n'est même plusieurs programmes. Or les
templates non spécialisés (et c'est ce qui m'intéresse) n'étant pas
exportables, il serait stupide d'écrire cette librairie sous forme de dll.
Je ne sais pas comment fonctionne la stl, mais la solution pour ma librairie
mathématique ne serait-elle pas de l'écrire sous forme de librairie statique
?

Encore merci.


Back to top
Arnaud Meurgues
Guest





PostPosted: Tue Nov 23, 2004 10:04 am    Post subject: Re: template et dll 2 Reply with quote

Boris Sargos wrote:

Quote:
Je te demanderais juste une petite précision. Dans le cas d'une librairie
mathématique d'assez bas niveau tu sembles préconiser les templates.
D'accord avec ça. Mais cette librairie sera utilisable dans plein d'autres
parties du programme, si ce n'est même plusieurs programmes. Or les
templates non spécialisés (et c'est ce qui m'intéresse) n'étant pas
exportables, il serait stupide d'écrire cette librairie sous forme de dll.
Je ne sais pas comment fonctionne la stl, mais la solution pour ma librairie
mathématique ne serait-elle pas de l'écrire sous forme de librairie statique
?

La solution, actuellement, c'est que la "librairie" n'est finalement
qu'un ensemble de .h contenant le code des templates, à part pour les
quelques compilateurs implémentant export.

--
Arnaud
(Supprimez les geneurs pour me répondre)

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2, 3, 4, 5, 6  Next
Page 1 of 6

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.