[SOS] SOS en C++
David Decotigny
david.decotigny at free.fr
Sam 15 Avr 15:26:41 CEST 2006
Bonjour,
On peut en effet faire du C++ sans un runtime compliqué. Par exemple, si
on se limite à l'utilisation de l'héritage, du polymorphisme et des
templates, le run-time se limite à... operator new, delete et leurs
variantes en "[]". C'est deja un (tres) bon debut. On pourra regarder
par exemple comment on avait fait dans Kos :
http://kos.enix.org/cgi/cvsweb/kos/modules/libcxxrt/Attic/gcc-2.95.cc?rev=1.2&content-type=text/x-cvsweb-markup
http://kos.enix.org/cgi/cvsweb/kos/modules/libcxxrt/Attic/gcc-2.96.cc?rev=1.1&content-type=text/x-cvsweb-markup
http://kos.enix.org/cgi/cvsweb/kos/modules/libcxxrt/Attic/gcc-3.cc?rev=1.2&content-type=text/x-cvsweb-markup
Ensuite, je pense que le point assez interessant en termes de confort
concerne les exceptions. La, je ne peux rien conseiller de tres precis,
mais il me semble que ca peut etre assez compliqué. J'ai par exemple
l'impression que gcc permet d'utiliser deux mecanismes pour les
exceptions : un à base de setjmp/longjmp (facile à implémenter dans
sos), et un autre plus efficace quand utilisé en mode user (je pense
qu'en mode noyau c'est pareil que sjlj) qui utilise les infos dwarf2...
a confirmer. Aucune idee sur la façon dimplementer ça dans un runtime
d'OS. Un pointeur :
http://netlab.ru.is/exception/LinuxCXX.shtml
La suite, c'est surtout RTTI (dynamic_cast and co), et là il me semble
que c'est assez automatique une fois que les exceptions sont là.
Bon sinon, on doit pouvoir faire quelque chose d'elegant en se limitant
a la base de la base (pas d'exception). Par exemple, on peut commencer
par se creer une petite "STL" toute minuscule pour gerer des listes, des
hash tables, voire des arbres binaires. Plus fondamental : avoir une
bonne classe generique capable de gerer le comptage de references, c'est
a mon avis un point tres important. Eventuellement avoir ça sous forme
d'un smart pointer façon Boost (shared_ponter, shared_array), ça peut
etre joli mais peut-etre dangereux. Ca repose sur une chose que je
trouve tres pratique en C++ : le lexical scoping pour les objets (un
objet alloué dans un bloc sera detruit en fin de bloc ou en cas
d'exception)... rien que pour ça je trouve que C++ est un candidat
interessant a considerer (les puristes diront que c'est mauvais pour les
perfs... mais est-ce vraiment pertinent comme remarque ?). A noter que
gcc permet ça aussi pour le code C (attribut "cleanup").
Bonne journée,
--
http://david.decotigny.free.fr/
Plus d'informations sur la liste de diffusion Sos