OVH Cloud OVH Cloud

Export

14 réponses
Avatar
Tux
Bonjour à tous,

Voila j'aimerais savoir comment ils comptent implémenter (si
ils l'implémententun jour :) ) export parce que si je ne me trompe le
code du template pourra être à ce moment compilé(un fichier obj ou
dans une lib,...) et ne sera plus mis dans les header comme on peut le
faire maintenant ...

Et sinon est-ce qu'ils n'ont pas envie de trouver une autre solution...

Merci

10 réponses

1 2
Avatar
Gabriel Dos Reis
Tux writes:

| Bonjour à tous,
|
| Voila j'aimerais savoir comment ils comptent implémenter (si
| ils l'implémententun jour :) )

"ils" (i.e. EDG) l'ont implémenté un jour :-)

| export parce que si je ne me trompe le
| code du template pourra être à ce moment compilé(un fichier obj ou
| dans une lib,...) et ne sera plus mis dans les header comme on peut le
| faire maintenant ...
|
| Et sinon est-ce qu'ils n'ont pas envie de trouver une autre solution...

Comme ?

-- Gaby
Avatar
Jean-Marc Bourguet
Tux writes:

Bonjour à tous,

Voila j'aimerais savoir comment ils comptent implémenter (si
ils l'implémententun jour :) )


Pour info, ca fait plus d'un an qu'un compilateur implementant export
est disponible (et pour pas tres cher, 50$).

export parce que si je ne me trompe le code du template pourra être
à ce moment compilé(un fichier obj ou dans une lib,...) et ne sera
plus mis dans les header comme on peut le faire maintenant ...


Fait une recherche sur export dans ce groupe. Il me semble avoir
explique comment export fonctionnait dans l'implementation de
Comeau/EDG.

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

Avatar
Tux
Le Thu, 23 Oct 2003 08:16:08 +0200, Jean-Marc Bourguet a Thu, 23 Oct 2003
08:16:08 +0200

Tux writes:

Bonjour à tous,

Voila j'aimerais savoir comment ils comptent implémenter (si
ils l'implémententun jour :) )


Pour info, ca fait plus d'un an qu'un compilateur implementant export
est disponible (et pour pas tres cher, 50$).

export parce que si je ne me trompe le code du template pourra être
à ce moment compilé(un fichier obj ou dans une lib,...) et ne sera
plus mis dans les header comme on peut le faire maintenant ...


Fait une recherche sur export dans ce groupe. Il me semble avoir
explique comment export fonctionnait dans l'implementation de
Comeau/EDG.

A+
Merci pour les réponces (même si mes questions étaient un peu stupides:) )

J'ai regardé un peu à travers le web et les newsgroup.
Et bien j'ai toujours l'impression d'être dans le flou à propos
d'export ... Qu'est-ce que la norme impose ?
1) A-t-on une technique permettant d'optimiser le linkage ?
2) Est-ce que la "classe template" est compilée une fois et le code
choisirait "dynamiquement" le code adapté, je m'exprime mal, mais je
voudrais dire que si j'ai T = int et
T a, b;
a + b

ou bien
T = UneClasseQuiSurchargelOpe+;
a + b;
Il choisirait dynamiquement le cas adapté
Techniquement si on veut pouvoir charger dynamiquement des libraires il
faudrait cela...

J'espère ne pas trop vous ennuyer merci bcp


Avatar
Gabriel Dos Reis
Tux writes:

| Et bien j'ai toujours l'impression d'être dans le flou à propos
| d'export ... Qu'est-ce que la norme impose ?

En général, la norme se garde d'imposer des détails
d'implémentations. Tout ce qui est certain, c'est que l'instantiation
des templates (que ce soit compilé séparément ou non) est
*conceptuellement* « copie + substitution » et non « interprétation du
même (byte)code » (comme c'est habituellement le cas des langages
comme Standard ML ou OCaml qui ont eux aussi la généricité paramétrique).
La différence entre les deux modèles se voient au niveau des adresses
des entités.

| 1) A-t-on une technique permettant d'optimiser le linkage ?

peux-tu être plus précis ?

| 2) Est-ce que la "classe template" est compilée une fois et le code
| choisirait "dynamiquement" le code adapté, je m'exprime mal, mais je
| voudrais dire que si j'ai T = int et
| T a, b;
| a + b
|
| ou bien
| T = UneClasseQuiSurchargelOpe+;
| a + b;
| Il choisirait dynamiquement le cas adapté

La résolution des noms est une notion statique et non dynamique.
Cependant, la norme n'interdit pas les interprètes...

| Techniquement si on veut pouvoir charger dynamiquement des libraires il
| faudrait cela...

Je ne voi pas comment...

| J'espère ne pas trop vous ennuyer merci bcp

non, on est là pour ça :-)

-- Gaby
Avatar
Christophe Lephay
Tux wrote:
Merci pour les réponces (même si mes questions étaient un peu
stupides:) ) J'ai regardé un peu à travers le web et les newsgroup.
Et bien j'ai toujours l'impression d'être dans le flou à propos
d'export ... Qu'est-ce que la norme impose ?


Je ne pense pas que la norme impose une implémentation quelconque...

1) A-t-on une technique permettant d'optimiser le linkage ?


Que veux-tu dire par "optimiser" ?

2) Est-ce que la "classe template" est compilée une fois et le code
choisirait "dynamiquement" le code adapté, je m'exprime mal, mais je
voudrais dire que si j'ai T = int et
T a, b;
a + b

ou bien
T = UneClasseQuiSurchargelOpe+;
a + b;
Il choisirait dynamiquement le cas adapté


Hum, dans l'exemple que tu donnes, il n'y a pas de linkage dynamique : la
fonction template appelle une autre fonction, c'est l'éditeur de lien, en
dernier recours, qui va résoudre l'appel...

Techniquement si on veut pouvoir charger dynamiquement des libraires
il faudrait cela...


Attention à ne pas confondre linkage dynamique et librairie dynamique (qui
n'est pas couvert par la norme)...

J'espère ne pas trop vous ennuyer merci bcp


ça ira pour cette fois ;)

Sérieusement, si tes questions ennuient quelqu'un, il n'est pas obligé de
les lire jusqu'au bout. De plus, il y a à parier que les réponses (je ne
parle pas des miennes, connaissant assez peu la faon dont import est
implémentée) en intéresseront plus d'un...

Chris

Avatar
Christophe Lephay
Gabriel Dos Reis wrote:
l'instantiation
des templates (que ce soit compilé séparément ou non) est
*conceptuellement* « copie + substitution » et non « interprétation du
même (byte)code »


Intéressant...

Une question au passage : de même qu'Omo lave plus blanc que blanc, quelle
forme prennent les messages d'erreur concernant les templates, qui étaient
déjà pour le moins absconds ?

Chris

Avatar
Gabriel Dos Reis
"Christophe Lephay" writes:

| Gabriel Dos Reis wrote:
| >l'instantiation
| > des templates (que ce soit compilé séparément ou non) est
| > *conceptuellement* « copie + substitution » et non « interprétation du
| > même (byte)code »
|
| Intéressant...
|
| Une question au passage : de même qu'Omo lave plus blanc que blanc, quelle
| forme prennent les messages d'erreur concernant les templates, qui étaient
| déjà pour le moins absconds ?

ausi abscons que abscons :-)

Plus sérieusement, d'après mes expériences avec la version de EDG que
j'ai, je n'ai pas noté une dégradation de la qualité des messages
d'erreur...

-- Gaby
Avatar
Tux
Le Thu, 23 Oct 2003 23:17:15 +0200, Christophe Lephay a Thu, 23 Oct 2003
23:17:15 +0200

Tux wrote:
Merci pour les réponces (même si mes questions étaient un peu
stupides:) ) J'ai regardé un peu à travers le web et les newsgroup.
Et bien j'ai toujours l'impression d'être dans le flou à propos
d'export ... Qu'est-ce que la norme impose ?


Je ne pense pas que la norme impose une implémentation quelconque...

1) A-t-on une technique permettant d'optimiser le linkage ?


Que veux-tu dire par "optimiser" ?

J'avais ceci dans un thread sur export :

"En passant, je travaillais sur un cas aujourd'hui où j'aurais bien été
content d'avoir export. J'ajoutais de la fonctionnalité à un template,
Plus précisement, j'ajoutais une fonction à une template de classe,
dont une instance était contenue dans une classe non templatée qui
servait à peu près partout. Évidemment, il n'y avait qu'une seule
source qui utilisait la nouvelle fonction. Mais du fait que ma classe
non-templatée incluait l'en-tête avec la définition du template
(obligatioire, puisqu'elle en avait un membre qui en était une
instance), et que l'entête de cette classe était inclue dans un
trentaine de fichiers, chaque fois que je modifiais l'implémentation
de cette nouvelle fonction, make récompilait une trentaine de
fichiers, tandis qu'un seul aurait suffit. D'après ce que j'ai compris
de ce que m'a dit David Vandervoorde, et selon les expériences de
Jean-Marc, je crois qu'avec Comeau (à la place de g++ 3.2.2), il n'en
aurait récompilé qu'un."

je me suis mal exprimé...

2) Est-ce que la "classe template" est compilée une fois et le code
choisirait "dynamiquement" le code adapté, je m'exprime mal, mais je
voudrais dire que si j'ai T = int et
T a, b;
a + b

ou bien
T = UneClasseQuiSurchargelOpe+;
a + b;
Il choisirait dynamiquement le cas adapté


Hum, dans l'exemple que tu donnes, il n'y a pas de linkage dynamique : la
fonction template appelle une autre fonction, c'est l'éditeur de lien, en
dernier recours, qui va résoudre l'appel...

Techniquement si on veut pouvoir charger dynamiquement des libraires
il faudrait cela...


Attention à ne pas confondre linkage dynamique et librairie dynamique (qui
n'est pas couvert par la norme)...

Oui je comprends, je pensais que cela pouvait fonctionner avec les

librairies chargées dynamiquement (C'est pour cela que je m'étais dit
qu'on aurait du avoir du code dynamique suivant le type des templates
enfin je charge dynamiquement la lib j'importe la classe templ avec un
template de type int , la même classe avec un type XY,... )...

Mais ce qui est sure c'est que cela est quand même complexe a
implémenter dans un compilateur mais je trouve que c'est un sujet très
passionnent.

Est-ce que export est prévu dans g++ dans un futur proche ?

Et oui, autre question qu'est-ce qu'il manque à g++ pour être je dirais
complet ?

J'espère ne pas trop vous ennuyer merci bcp


ça ira pour cette fois ;)

Sérieusement, si tes questions ennuient quelqu'un, il n'est pas obligé de
les lire jusqu'au bout. De plus, il y a à parier que les réponses (je ne
parle pas des miennes, connaissant assez peu la faon dont import est
implémentée) en intéresseront plus d'un...

Chris



Avatar
Christophe Lephay
Gabriel Dos Reis wrote:
"Christophe Lephay" writes:
Une question au passage : de même qu'Omo lave plus blanc que blanc,
quelle forme prennent les messages d'erreur concernant les
templates, qui étaient déjà pour le moins absconds ?


ausi abscons que abscons :-)

Plus sérieusement, d'après mes expériences avec la version de EDG que
j'ai, je n'ai pas noté une dégradation de la qualité des messages
d'erreur...


Ok, thx...

Chris


Avatar
Christophe Lephay
Tux wrote:
1) A-t-on une technique permettant d'optimiser le linkage ?


Que veux-tu dire par "optimiser" ?

J'avais ceci dans un thread sur export :

"En passant, je travaillais sur un cas aujourd'hui où j'aurais bien
été content d'avoir export. J'ajoutais de la fonctionnalité à un
template, Plus précisement, j'ajoutais une fonction à une template de
classe, dont une instance était contenue dans une classe non
templatée qui servait à peu près partout. Évidemment, il n'y avait
qu'une seule source qui utilisait la nouvelle fonction. Mais du fait
que ma classe non-templatée incluait l'en-tête avec la définition du
template (obligatioire, puisqu'elle en avait un membre qui en était
une instance), et que l'entête de cette classe était inclue dans un
trentaine de fichiers, chaque fois que je modifiais l'implémentation
de cette nouvelle fonction, make récompilait une trentaine de
fichiers, tandis qu'un seul aurait suffit."


Justement, c'est à ne pas tout recompiler que sert export...
Attention à ne pas confondre linkage dynamique et librairie
dynamique (qui n'est pas couvert par la norme)...

Oui je comprends, je pensais que cela pouvait fonctionner avec les

librairies chargées dynamiquement (C'est pour cela que je m'étais dit
qu'on aurait du avoir du code dynamique suivant le type des templates
enfin je charge dynamiquement la lib j'importe la classe templ avec un
template de type int , la même classe avec un type XY,... )...


Le fait que le code template puisse être compilé indépendemment de ses
instanciations en fait un candidat potentiel, au même titre que du code
classique, pour une librairie dynamique. Ceci dit, vu le travail effectué
post-compilation (la substitution dont parle Gaby dans un autre post) et la
très forte dépendance de la plateforme pour ce qui touche aux librairies
dynamiques, je doute que ce soit fait demain...

Mais ce qui est sure c'est que cela est quand même complexe a
implémenter dans un compilateur mais je trouve que c'est un sujet très
passionnent.


Vi :)

Est-ce que export est prévu dans g++ dans un futur proche ?


En général, dès qu'une implémentation a vu le jour, ce n'est qu'une question
de temps avant qu'elle gagne les autres complateurs. Là encore, Gaby serait
mieux placé pour répondre, mais je mettrais ma main (gauche, on sait jamais)
à couper que oui...

Et oui, autre question qu'est-ce qu'il manque à g++ pour être je
dirais complet ?


Un logo Microsoft ? ;)

Chris



1 2