Page suivante Page pr�c�dente Table des mati�res

1. Introduction

C++ est le langage le plus populaire et il sera utilis� encore longtemps dans le futur malgr� l'apparition de Java. C++ s'ex�cute extr�mement vite et est en fait 10 � 20 fois plus RAPIDE que Java. Java s'ex�cute tr�s lentement car il s'agit d'un langage avec interpr�tation de Byte-code fonctionnant sur une machine virtuelle. Java s'ex�cute plus rapidement avec un compilateur � la vol�e (JIT - Just In Time) mais reste malgr� tout plus lent que le C++. Et les programmes en C++ optimis�s sont environ 3 � 4 fois plus rapides que Java avec un compilateur � la vol�e ! La gestion de la m�moire en Java est automatique, donc les programmeurs n'ont pas � g�rer directement les allocations de m�moire. Ce document tente d'automatiser la gestion de la m�moire en C++ pour la rendre plus facile � utiliser.

Les allocations de m�moire g�r�es automatiquement sont une fonctionnalit� conviviale de Java. Ce document permettra au C++ d'�galer Java pour la facilit� de la gestion de la m�moire.

En raison des allocations de m�moire manuelles, d�boguer des programmes C++ prend une grande partie du temps de d�veloppement. Les informations de ce document vous donneront de bons trucs et astuces pour r�duire le temps de d�bogage.

1.1 Probl�mes avec les compilateurs C++ actuels

Puisque C++ est une surcouche de C, il comporte tous les d�fauts du C.

Par exemple, dans la programmation C, les fuites de m�moire et les d�bordements sont tr�s courants en raison de l'utilisation des fonctionnalit�s telles que

L'utilisation de char * et strcpy cr�e d'affreux probl�mes d�s au d�bordement (overflow), aux acc�s hors limites (fence past errors), aux "je vous �crase les orteils" (alt�ration des emplacements en m�moire d'autres variables) ou aux fuites de m�moire. Les probl�mes de m�moire sont extr�mement difficiles � d�boguer et tr�s longs � corriger et � �liminer. Ils diminuent la productivit� des programmeurs. Ce document aide � augmenter cette productivit� gr�ce � diff�rentes m�thodes destin�es � r�soudre les d�fauts de la gestion de la m�moire en C++. Les bogues li�s � la m�moire sont tr�s durs � �liminer, et m�me les programmeurs exp�riment�s y passent plusieurs jours, semaines ou mois pour les d�boguer. La plupart du temps, les bogues de m�moire restent "tapis" dans le code durant plusieurs mois et peuvent causer des plantages inattendus ! L'utilisation de char * en C++ co�te aux �tats-Unis et au Japon 2 milliards de dollars chaque ann�e en temps perdu en d�bogage et en arr�t des programmes. Si vous utilisez char * en C++, cela est tr�s co�teux, en particulier si vos programmes font plus de 50.000 lignes de code.

Par cons�quent, les techniques suivantes sont propos�es pour pallier les d�fauts du C.

Il est propos� que les compilateurs C++ devraient emp�cher les programmeurs d'utiliser les types "char *" et "char[]" et les fonctions comme strcpy, strcat, strncpy, strncat. Ces types et ces fonctions sont dangereux et doivent �tre compl�tement BANNIS de la programmation en C++ ! "char *" est comme le virus de la variole et doit �tre �limin� de l'univers C++ ! Si vous voulez utiliser "char *", notamment avec certaines fonctions syst�me, vous devriez utiliser le langage C. Vous mettrez alors vos programmes C dans un fichier s�par� et les lierez aux programmes C++ en utilisant la directive de sp�cification de lienextern "C"  :


 extern "C" {
 #include <stdlib.h> }
 extern "C" {
 une_fonction_c();
 une_autre_fonction_c();
 }

La directive extern "C" indique que tout ce qui se trouve dans le bloc d�fini par les accolades (ici tout le fichier ent�te, une_fonction_c() et une_autre_fonction_c() sont compil�s par un compilateur C).

Au lieu d'utiliser char * et char[], tous les programmeurs C++ DOIVENT utiliser la classe String qui est fournie dans ce document et la classe string inclue dans la biblioth�que standard (STDLIB). La classe String utilise un constructeur et un destructeur pour automatiser la gestion de la m�moire et aussi fournir de nombreuses fonctions comme ltrim, substring, etc.

Voir aussi la classe string du compilateur C++. La classe string fait partie de la biblioth�que standard GNU C++ et fournit un grand nombre de fonctions de manipulation. Les classes string et String peuvent supprimer le besoin du type char *. Les programmeurs C++ doivent aussi �tre encourag�s � utiliser les op�rateurs new et delete plut�t que malloc et free.

La classe String fait tout ce que char * et char [] font. Elle peut compl�tement remplacer le type char. Il faut en plus ajouter comme avantage que les programmeurs n'auront pas du tout � s'occuper des probl�mes li�s � la m�moire et � son allocation !

Le compilateur GNU C++ DOIT abandonner le support des types char * et char[] et pour permettre la compilation de vieux programmes utilisant le type char, il devrait fournir une nouvelle option appel�e "-fchar-datatype" pour la commande g++. Dans les deux ann�es qui viennent, tous les programmes C++ utiliseront les classes String et string et il n'y aura plus ni char * ni char[]. Le compilateur devrait emp�cher les mauvaises habitudes de programmation !

1.2 Que choisir entre C, C++ et Java ?

Il vous est recommand� de programmer en C++ orient� objet pour toute votre programmation g�n�raliste ou d'applications. Vous pouvez b�n�ficier de tous les avantages des fonctionnalit�s orient�es-objet du C++. Le compilateur C++ est beaucoup plus complexe que le compilateur C et les programmes en C++ peuvent s'ex�cuter un peu plus lentement que les programmes en C. Mais la diff�rence de vitesse entre le C et le C++ est faible (cela peut �tre quelques millisecondes qui peuvent avoir un faible impact pour la programmation temps-r�el). Depuis que le mat�riel informatique est devenu moins cher et plus rapide et la m�moire plus rapide et moins ch�re, il vaut mieux coder en C++ car le temps gagn� gr�ce � la clart� et la r�utilisabilit� du code C++ compense la lenteur d'ex�cution. Les options d'optimisation comme -O ou -O3 peuvent acc�l�rer le C++/C, ce qui n'est pas possible en Java.

De nos jours, le langage C est principalement utilis� pour la programmation syst�me pour d�velopper les syst�mes d'exploitation, les pilotes de p�riph�riques, etc.

Note : En utilisant les classes String, StringBuffer, StringTokenizer et StringReader donn�es dans ce Howto, vous pouvez coder un C++ qui ressemble "exactement" � Java ! Ce document essaie de combler le foss� entre C++ et Java, en imitant les classes Java en C++

Java est un langage ind�pendant de la plateforme mieux adapt� au d�veloppement d'interfaces graphiques fonctionnant dans des butineurs (Java applets, appliquettes Java) mais qui s'ex�cute tr�s lentement (NdT : Java ne se limite pas aux appliquettes). Pr�f�rez l'utilisation de la programmation "Fast-CGI" en C++ du c�t� serveur et HTML, DHTML, XML pour obtenir de meilleures performances. � partir de l�, la r�gle d'or est "la programmation c�t� serveur en C++ et la programmation c�t� client (butineur) avec des appliquettes Java". La raison est que le syst�me d'exploitation du c�t� serveur (Linux) est sous votre contr�le et ne change jamais, et que vous ne saurez jamais quel est celui du c�t� client/butineur. Cela peut �tre un terminal Internet (Linux embarqu� + Netscape) ou un ordinateur avec Windows 95/98/NT/2000 ou Linux, Mac Os, OS/2, Netware, Solaris, etc.

Le gros avantage de Java est la possibilit� d'ex�cuter des appliquettes graphiques qui fonctionnent sur n'importe quelle plateforme cliente (NdT : des applications graphiques aussi) ! Java a �t� cr�� pour remplacer les interfaces de programmation d'applications (API) de Microsoft Windows 95/NT comme MS Visual Basic ou MS Visual C++. NdT : Java a plut�t �t� cr�� pour servir de "colle universelle capable de connecter les utilisateurs aux informations" (extrait de "Au Coeur de Java" par Cay S. Horstmann et Gary Cornell). En d'autres termes, "Java est le syst�me de fen�trage du prochain si�cle". Beaucoup de butineurs comme Netscape supportent les appliquettes et le butineur HotJava est �crit en Java. Mais le prix que vous payez pour la portabilit� multi-plateformes est la baisse de performance. Les applications �crites en Java sont tr�s lentes.

NdT : l'opposition C++/Java me semble ici r�ductrice. De nombreux langages de script sont utilisables et utilis�s du c�t� serveur (Perl, Python, PHP), ainsi que les servlets et maintenant les JSP.


Page suivante Page pr�c�dente Table des mati�res

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:30