[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[linux-team] C vs. C++ (was Gnome 0.99.8)



> > Bruno Mairlot wrote:
> >
> > Je n'aime pas l'orienté objet. Je trouve que c'est plus efficace en C
> > pure. Dans le cas de Gtk+, Gtk-- est intéressant uniquement si tu veux
> > concevoir des widgets au-dessus de ceux existant déjà.
> 
> Voici un extrait de la FAQ de bjarne Stroustrup (le createur du C++).
>[...] 
> 
> Je crois qu'il est assez bien placer pour savoir ce qu'il dit.
> 

Bon, il est évident que Stroustrup ne va pas dire le contraire :-)

Pour commencer, il faut éviter de confondre OO vs. procédural avec C 
vs. C++.  Le C++ est considéré comme bien faible par les gens qui se 
disent des gurus de l'OO.

Le truc le plus drôle, c'est de voir que Stroustrup cite Meyer dans sa 
biblio, et inversément, et qu'ils se démolissent plus ou moins 
mutuellement.  Meyer, avec la hargne qui le caractérise, dit que le C++ 
est un langage de nains (bon, je paraphrase :-), et Stroustrup prétend 
que Meyer confond les principes généraux avec Eiffel.  Fin de la 
parenthèse.

Mais je dois bien dire que depuis que j'ai goûté au C++, il m'est dur 
de revenir au C.  Le problème des gens qui goûtent au C++ après avoir 
fait du C, c'est qu'ils croient généralement que c'est du C avec des 
choses en plus (plus).  Erreur !  Les deux approches sont 
fondamentalement différentes, en dépit de la syntaxe proche, et de tout 
ce que ce bon vieux Bjarne veut bien nous dire (2e extrait du FAQ ci-
dessus)...

Mon premier programme en C++ a été une conversion d'un programme C, où 
je devais supporter plusieurs hardware différents, et je maintenais 
autant de version de programmes qu'il y avait de hardware (des cartes 
vidéos) avec des #ifdef.  Puis, on m'a demandé de piloter des caméras 
en plus.  Ca multipliait les combinaisons (4 cartes vidéos, fois 3 
caméras :-( yeeek!).  Ca n'était plus tenable, il fallait changer ça.
Je me suis donc retroussé les manches, et j'ai réécrit mon programme 
(en C++) pour passer au travers d'interfaces génériques (une pour la 
caméra, une pour la carte).  Mon programme est donc le même quel que 
soit le hardware que je rencontre, il y a juste au démarrage, quand je 
lis ma config, que j'initialise mes pointeurs génériques avec un new de 
la bonne classe dérivée de l'interface correspondante.  Abstraction.
Pour faire la même chose en C, il faut passer par des pointeurs de 
fonctions et des tas de trucs horribles.

C'était il y a longtemps...  Depuis, je me suis tapé de la littérature, 
et notamment les "design patterns" du gang of four.  C'est un must. 
Pour ceux qui veulent des infos plus spécifiques au C++, la 3e édition 
du Stroustrup est indispensable, ça fait fonctionner les neurones, tout 
en étant bien plus abordables que les éditions précédentes.  Autres 
lectures à ne pas négliger, les recettes de cuisine du père Scott 
Meyers.

Dans ma boîte, même pour les systèmes embarqués, on a laissé tomber le 
C.  Après une étude sérieuse des problèmes que ça pouvait poser.  

Résultats : les tableaux utilisés pour les fonctions virtuelles ne sont 
pas pénalisants par rapport aux avantages que ça apporte (c'est peut-
être la légende la plus répandue sur le sujet).   Même le boss du 
firmware, qui disait que "ça faisait juste des indirections en plus" a 
dû se rendre à l'évidence devant le code généré (on crosse-compile avec 
le gnu).
Le truc vraiment pénalisant, ce sont les exceptions.  Elles sont 
disablées pour le firmware, mais on les utilise pour les softs win32 et 
unix.

Il est difficile d'expliquer ça par mail.  J'ai constaté que quand on 
explique l'OO aux gens qui viennent du procédural, il faut le temps 
pour que les principes fassent leur chemin.  On comprend par palier 
quels sont les avantages que ça peut apporter.  Je n'ai encore 
rencontré personne qui perçoive directement "comment ça marche".  Ca ne 
vient qu'avec la pratique, et toute la théorie du monde n'y change rien.
J'ai d'ailleurs suivi le même parcours...

Ajoutons à ça que les profs de C++ dans les écoles donnent leurs cours 
en expliquant que le C++ est un superset du C (mais bon, quels sont les 
profs qui écrivent de vrais programmes tels qu'on en écrit dans 
l'industrie ?).

Le C++ montre toute sa force dans le polymorphisme, et l'abstraction 
dans l'approche des problèmes, ce qui fait que le soft qu'on écrit est, 
non pas réutilisable comme le disent beaucoup, mais réutilisé.

Bon, sur ces paroles mémorables, je redémarre mon compilo, il y a un 
observer pattern qui m'attend ;-)

My two cents,

Michel
---
C-3PO: We seem to be made to suffer.  It's our lot in life.

    - Star Wars -

---------
This message was send by Majordomo 1.94.3. Please repport problems to
manu@rtfm.be. If you want to be deleted from the list, send a mail to
majordomo@rtfm.be with "unsubscribe linux-team" in the body.