OVH Cloud OVH Cloud

Editer du C++ template avec un editeur de texte

138 réponses
Avatar
Marc Boyer
Bonjour,

une petite question sur vos pratiques d'édition.

Pour écrire la définition de code de classe template, j'aimerais
bien séparer l'interface de l'implémentation.

Mais ça devient très lourd, du genre

template <class T>
typename X<T>::iterator X<T>::first_with(typename X<T>::cond& c){
....
}

alors que si je laisse dans la déclaration de la classe, ça donne
iterator first_with(cond& c);

Je m'en sort à grands coups de
#define X_TEMPLATE template<class T>
#define X X<T>
#define iterator typename X<T>::iterator
#define cond typename X<T>::cond

mais c'est lourd.

Vous faites comment vous ? Un super éditeur/IDE qui cache tout le sucre ?


Et sinon, pourquoi les classes (enfin, mon compilo) ne permettent elle pas
de faire

class X {
void foo(); // Déclaration
...
void foo(){...}; // Implementation
}

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.

10 réponses

Avatar
K. Ahausse
"Jean-Marc Bourguet" a écrit dans le message de
news:

La rigueur est souvent un gain de temps.


Parfaitement d'accord, le prix à payer en vaut largement la peine.


Je ne m'interdis pas le debuggeur, il est simplement tres souvent
inutile.


A contrario, j'ai un recours quasi systématique au débuggeur.
Pouvoir dérouler le programme dans ses recoins, évite, parfois, d'attendre
qu'un bug ait à se manifester. Entendons-nous, je ne dis pas que tous les
bugs seront mis à jour par cette unique opération.

Avatar
Marc Boyer
In article , drkm wrote:
Marc Boyer writes:

In article , drkm wrote:

Si je me souviens bien du contexte, il est question de modèles, et
tu inclus de toute façon l'implémentation dans l'en-tête. Même dans
ce cas, je te conseille de séparer (cmme tu sembles d'ailleurs le
faire) l'en-tête de l'implémentation, et d'inclure celle-ci dans
celui-là.


Oui, j'essaye de tout mettre dans un .cpp que le .hpp inclut.
C'est plus lisible, je retrouve plus vite mes petits, tout ça.


Je suppose que tu parles d'un en-tête .hh, une implémentation des
éléments non-template .cc, et une implémentation des templates .tcc.


Non, actuellement, ce sont des .hpp et des .cpp, mais bon, un
petit find des familles pourra bouger tout ça...

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.



Avatar
Jean-Marc Bourguet
Marc Boyer writes:

Je réalise en lisant tes interventions (pas forcément ce message
à d'ailleurs) que depuis que j'ai systématisé les tests unitaires,
les pre/pros conditions et les invariants, mon usage du debogueur se
limite souvent à faire un "backtrace" sur le core.


J'ai pas besoin d'avoir un debuggeur pour avoir un backtrace. Nous
avons du code qui fait ca tres bien (sauf cas de corruption de la
pile, mais le debuggeur ne s'en sort guere mieux dans ces cas la) sur
toutes nos cibles, ca permet d'ailleur de savoir facilement qui doit
commencer a regarder quand il y a un probleme.

Le debuggeur est utile pour comprendre le comportement dynamique du
programme. Chose pour moi utile dans trois cas:
- forte dependance du comportement aux donnees,
- code qu'on ne connait pas bien,
- presence de callbacks places par d'autres equipes.

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
Arnaud Meurgues
K. Ahausse wrote:

A ma décharge : à l'époque utiliser, un traitement de texte, en tant
qu'éditeur de sources n'avait rien de choquant.


À quelle époque ? Aucun des traitements de texte que j'ai connus ne m'a
jamais paru adéquat pour écrire du code.

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

Avatar
Marc Boyer
wrote:
Marc Boyer wrote in message
news:<cnf31i$7lg$...
In article , drkm wrote:
Marc Boyer writes:
K. Ahausse wrote:
"Marc Boyer" a écrit dans
le message de news:cncj0u$l3m$


Ce que j'avais beaucoup apprécié sur VB, c'était la complétion
automatique en fonction du type.
Ca, seul un IDE peut le faire car cela demande une partie
de compilation en ligne.


Je ne sais pas ce que tu appelles IDE, mais la clef est d'analyser
le code. Emacs fait ça plutôt pas mal, cfr <URL:http://cedet.sf.net>.


IDE Integrated Dev. Env. non ?


Oui. Et qu'est-ce que veut dire « integrated development environment » ?
À part ce que le marketing veut que ça signifie ?

D'après les mots anglais, je m'attendrais à ce que ce soit un
environment d'où tu peux faire toutes les tâches nécessaires au
développement, sans avoir besoin d'aller dans un autre environment pour
les faire. Le shell Unix, par exemple:-).


Oui, ou du moins un grand sous-ensemble.

Mais en général, on démande qu'il soit graphique aussi. Peut-être un
environement graphique d'où je peux faire tout ce que je fais sous un
shell Unix:-).


L'aspect graphique est négligeable pour moi (à moins de développer
une IHM graphique bien sur).

En fait, je crois qu'il y a réelemnt un peu de ça. On démande un
environement graphique d'où je peux faire toutes les tâches nécessaires
au développement des logiciels. Et voilà le hic, parce que les tâches
nécessaires au développement des logiciels dépendent de qui développe et
comment.


Oui, ou ils forcent à utiliser *une* solution.

Donc, les premiers IDE se vautaient beaucoup de la
simplification dans la cycle edit-compile-debug -- du coup, ça ne
m'intéresse pas, parce que ce n'est pas comme ça que je
développe. (C'est où, la documentation, dans ce cycle ? Et comment
prend-il en compte la gestion des versions, ou les révues de code ?)


Des choses comme VC++ ne font pas la gestion de version ?
Le minimal pour moi à ce jour serait l'intégration
- édition + recherche des symboles
- compilation
- debug
- auto-documentation (Doxygen-like)
- gestion de version (CVS-like)

Sinon, autant garder emacs.

En fait, je crois que les IDE moderne permettent bien l'intégration de
pas mal d'outils supplémentaires -- je sais qu'on peut intégrer
Clearcase dans Visual Studios, par exemple, et je ne serais pas étonné
d'apprendre que la même chose vaut pour Doxygen et un éditeur de
HTML. Et Rose. Le résultat pourrait être réelement utilisable, et
nettement plus facile à apprendre qu'un shell de Unix.


Si l'effort pour l'intégration est supérieur à ce qu'on
doit faire avec [X]emacs, pas la peine...

En fait, ça demande à l'éditeur de faire un brin de compilation,
et c'est quand même plus facile à faire quand editeur+compilo sont
fait par la même équipe.


C'est un autre aspect.


C'est surtout là que le côté "intégration" est bienvenue.
Si les équipes qui développe éditeur et compilateur travaillent
main dans la main, on peut avoir quelque chose de très bien
(genre, pour une classe template, sa def, son implémentation
de base, ses spécialisations, et savoir pour une instanciation
donnée quelle est *la* spécialisation utilisée).

Et vim et emacs font un brin de compilation, et
connaît un peu de syntaxe C++. Mais ce n'est pas ce que j'entends sous
IDE en soi, c'est plutôt le concepte de browser.


Tout à fait.

Si c'est vrai que la
quasi-totalité des IDE integre un browser, il est aussi possible
d'utiliser des browser non integré, comme Sniff+. Et les solutions
vim/emacs proposées sont des browser integrés à l'éditeur (or que Sniff
prend l'approche opposé, et essaie d'ingegrer l'éditeur dans un browser
externe).

Beaucoup dépend de ce que tu dois faire. J'ai trouvé Sniff extrèmement
intéressant pour comprendre du code existant mal documenté.


Je vais regarder ça alors.

Mais j'ai parcouru ton lien: ça a l'air fouilli mais intéressant.
J'avais testé la speedbar, mais celle qui est installée par défaut
chez moi se vautre lamentablement (reconnaît pas les méthodes des
classes, confond class et fonction...).


Mon expérience avec les speedbar pour le C++ est plutôt négative. Le
problème, c'est que pour un symbole donné, il y a typiquement plusieurs
endroits intéressants dans les sources. (Il y avait aussi le problème
que les speedbars que j'ai essayé, sous emacs, ne se mettait pas à jour
automatiquement. Mais c'était typiquement un problème mineur.) Ça pose
moins un problème avec Java (je me suis servi de JDEE), mais dans tous
les cas, ça impose qu'on enlève les mains de la position de base du
clavier -- pas un problème quand on browse, mais genant et une perte de
temps quand on développe réelement (c-à-d lors qu'on écrit du code).


On doit bien pouvoir naviguer dans le speedbar au clavier, non ?

Marc Boyer
--
Je ne respecte plus le code de la route à vélo depuis une double fracture
due au fait que j'étais le seul à le respecter.





Avatar
kanze
"K. Ahausse" wrote in message
news:<419b3017$0$23391$...
a écrit dans le message de
news:

En ce qui concerne les autres fonctionalités, ça ne m'interesse en
rien de pouvoir lancer le déboggueur directement depuis
l'éditeur. En


Ha! je suis surpris, edition+compilation+debug s'enchainant sur
simplement par l'action de touche de fonctions, me semblait le paradis
du développeur.


Pourquoi ? D'abord, évidemment, il faut une édition de liens là-dedans
quelque part. Or, des deux choses une :

- L'édition de liens et le code que tu déboggues, c'est le test
unitaire. Mais dans ce cas-là, tu as mis assez de sorties d'état
pour que l'erreur soit évidente, sans le déboggueur.

- Tu parles de l'application. Mais dans ce cas-là, typiquement, tu ne
peux pas faire l'édition de liens, parce qu'il en dépend d'autres
modules auquels tu n'as pas réelement accès. (C'est pour ça qu'il y
a une équipe d'integration.)

Dans la pratique, je me sers du déboggueur prèsqu'uniquement pour
l'analyse des core dumps : surtout pour le stack walkback après l'échec
d'une assertion. Sinon, assez rarement, pour l'analyse du dynamique d'un
code que je n'ai pas écrit.

[...]
Ce que je peux dire, c'est qu'évaluer tout ce qui existe coûte cher
en temps.


Oui, 'essuyer les platres', lorsque tant de choses restent à faire,
coûte du temps, sans parler du coup au moral quand on arrive à un
constat d'echec...


Dans le professionnel, je réfuse d'essuyer les plâtres ; je ne considère
que des produits « établis » avec assez d'utilisateurs pour qu'on puisse
être sûr que les grosses erreurs ont été déjà éradiquées. Mais même sans
essuyer les plâtres, il y a un coût énorme pour simplement évaluer.
Alors, à moins que la nouvelle technologie m'apporte quelque chose, ce
n'est pas la peine. Et quand on m'annonce que l'amélioration apportée
par un IDE, c'est une amélioration de l'ergonomie du cycle
edition+compilation+debug, ça ne m'intéresse pas, parce que c'est un
cycle qui n'existe pas dans mon développement. C'est un peu comme si on
offrait une technologie pour rendre l'utilisation d'une voiture à cheval
deux fois plus facile.

Et que donc, du coup, du moment qu'on a quelque chose qui marche,
même si ce n'est pas optimal, on se contente.


Malheureusement, le risque est de rester coincer, ( comme je peux,
quotidiennement, le constater autour de moi ) avec des outils
complétements dépassés.


Il faut effectivement rester à l'écoute, pour le cas où une nouvelle
technologie apporte quelque chose. Et il y a bien une risque qu'on râte
une nouvelle technologie utile, parce que les avocats de la technologie
n'ont pas présenté ses avantages correctement. C'est fort possible qu'un
bon IDE pourrait apporter quelque chose. Mais jusqu'ici, les avocats en
parle de comment il améliore les processus de développement que j'ai
abandonné il y a une dizaine d'années. Alors, je n'ai pas pris le temps
de les étudier plus en détail.

--
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


Avatar
kanze
Matthieu Moy wrote in message
news:...
writes:

En ce qui concerne les autres fonctionalités, ça ne m'interesse en
rien de pouvoir lancer le déboggueur directement depuis l'éditeur.


C'est pourtant bien pratique : En général, quand tu lances un
déboggueur,


En général, QUAND je lance un déboggueur, c'est que j'ai eu un core dans
la production. C-à-d une fois tous les six mois, environ.

--
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


Avatar
Jean-Marc Bourguet
writes:

- Tu parles de l'application. Mais dans ce cas-là, typiquement, tu ne
peux pas faire l'édition de liens, parce qu'il en dépend d'autres
modules auquels tu n'as pas réelement accès. (C'est pour ça qu'il y
a une équipe d'integration.)


Meme nos tests unitaires sont fait dans le cadre de l'application (du
moins au niveau ou je travaille, dans les infrastructures ce n'est pas
toujours le cas) parce que justement on depend de tellement d'autres
choses -- infrastructure, passes precedantes,... -- que d'ecrire des
tests bench sans tout ca serait difficile. On ajoute parfois de
l'instrumentation a l'application pour augmenter l'observabilite de
l'etat interne et detecter des problemes plus pres de la source.

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
Jean-Marc Bourguet
writes:

Matthieu Moy wrote in message
news:...
writes:

En ce qui concerne les autres fonctionalités, ça ne m'interesse en
rien de pouvoir lancer le déboggueur directement depuis l'éditeur.


C'est pourtant bien pratique : En général, quand tu lances un
déboggueur,


En général, QUAND je lance un déboggueur, c'est que j'ai eu un core dans
la production. C-à-d une fois tous les six mois, environ.


C'est plus rare que moi, ca. Mais je crois que je touche plus a du
code que je n'ai pas ecrit que toi.

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
Jean-Marc Bourguet
"K. Ahausse" writes:

Pouvoir dérouler le programme dans ses recoins, évite, parfois,
d'attendre qu'un bug ait à se manifester.


Et comment tu mesures ta couverture de code si ces tests que tu fais
sont uniquement manuels et au debuggeur?

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