|
|||||||||||||||||||||||||||||||||||||||||||||
|
Lattice avait fait sensation, il y a quelques mois, en sortant le premier compilateur pour C++ sur Amiga. Le progrès ne se limite pas à l'arrivée d'un nouveau langage sur notre ordinateur bien-aimé : le concept introduit par C++ est à lui seul une petite révolution. C++ n'est, en effet, pas un langage ordinaire, pas plus qu'il n'est du C amélioré, comme je l'ai maintes fois entendu. C'est un "Langage Orienté par les Objets" (LOO). Derrière cette appellation quelque peu inquiétante se cachent beaucoup de notions qui feront bientôt partie de la vie de tous les jours des programmeurs de demain. Description succincte (sic) La boîte contient deux disquettes et trois livres. La disquette 1 est dédiée au compilateur lui-même (cfront, cc et blink) et la disquette 2 contient tous les includes du C++ (ils sont bien entendu différents des includes du C). Deux des trois livres sont consacrés au compilateur Amiga (Reference Manual et guide du langage) et le troisième est une introduction générale aux LOO avec pour support le C++. Notons que c'est une très bonne idée d'avoir inclus ce dernier car il présente le C++ d'une manière objective et portable, et ce pour n'importe quel ordinateur. C'est en fait le premier à lire par le néophyte n'ayant aucune expérience du C++ : les exemples y sont clairs et commentés. ![]() Qu'est-ce qu'un Langage Orienté par les Objets ? La création des LOO a été motivée par la constatation que les "gros" (notion à relativiser) programmes étaient difficiles à entretenir et à mettre à jour par des personnes qui n'ont pas participé à leur élaboration. C'est là que l'idée d'objet a fait son apparition. Qu'est-ce qu'un objet ? Il s'agit d'un ensemble de champs (appelé aussi classe) qui contient tout ce qui est nécessaire à la manipulation de cet objet : des simples valeurs (entiers, chaînes ou structures plus complexes) aux routines pour les traiter (les méthodes). Ainsi, l'utilisateur n'a pas besoin de savoir quelle est la représentation interne de telle ou telle structure : il n'a qu'à utiliser ce qui lui est fourni et ne peut donc pas faire de bêtises en modifiant des portions de code interdites. L'avantage d'une telle méthode de procéder est immédiat : que ce soit du point de vue de l'utilisation ou de la maintenance. Prenons par exemple l'objet RastPort. Les routines offertes à l'utilisateur sont : circle(rayon) ellipse(r1 ,r2) line(x1,y1) delta(x2,y2) text(chaîne) L'utilisation d'un rastport se fait tout simplement de la manière suivante :
La lisibilité de programmes rédigés de cette façon se trouve indiscutablement accrue. Voici en vrac les traits marquants de C++ : 1. La présence du mot-clé "new" autorise la création d'objets très complexes en une seule instruction. Il est également possible de préciser explicitement comment se fait la désallocation de l'objet en fin de programme. 2. Un aspect qui ajoute à la programmation par objets une puissance énorme est la notion d'héritage. Rien ne vous empêche de prendre une classe déjà existante et d'y ajouter vos propres champs. Vous pourriez par exemple enrichir l'objet RastPort d'une routine traçant un rectangle, ou de n'importe quelle autre routine plus complexe. Vous pouvez également déclarer certaines parties de l'objet que vous créez private afin que personne sauf vous puisse y référer, et l'autre partie public, annonçant explicitement les méthodes que vous fournissez à l'utilisateur. 3. Une autre notion quelque peu déroutante est celle de polymorphisme, et elle est liée directement à l'héritage : si une classe A est parente de la classe B (par exemple : B hérite de A), n'importe quel objet b de B peut être utilisé à la place d'un objet de A. Autrement dit, il est possible qu'une fonction accepte des objets de types différents comme paramètre, et ce de façon tout à fait légale (attention : cela n'a rien à voir avec le laxisme de contrôle des types de C. C++ possède au contraire un contrôle des types plus poussé). 4. Une autre notion tout aussi importante (et je vais arrêter là pour cette description car je vois avec inquiétude la page s'agrandir) est l'existence de fonctions virtuelles (virtual functions). Il s'agit de fonctions qui peuvent être récrites par la classe fille, afin de l'enrichir, ou bien de l'adapter à l'objet qu'elle décrit. Les fonctions virtuelles vont de pair avec le polymorphisme. Il y aurait encore beaucoup de choses à dire pour compléter ce rapide survol des caractéristiques de C++. Implémentation sur l'Amiga Le compilateur C++ n'est pas un vrai compilateur, dans la mesure où il ne produit pas directement du langage-machine mais du C. Le cheminement utilisé est le suivant : ![]() Il est précisé dans l'introduction qu'un minimum de 1,5 Mo de mémoire et 10 Mo de disque dur sont requis pour travailler confortablement. L'évaluation de la place sur disque dur est largement surestimée (3 Mo suffisent, sauf si vous avez l'intention d'écrire de longs programmes, bien sûr) et il est certain que 1 Mo suffit tout juste pour compiler ne serait-ce que des petits programmes (à titre d'exemple, pour compiler un programme de taille finale 16 ko avec 800 ko de mémoire disponibles, j'ai dû fermer QEd afin de libérer 200 ko). Il n'est pas trop surprenant de constater que les codes produits sont relativement plus gros que les programmes C équivalents mais cette différence s'atténue sûrement lors de la compilation de gros programmes. La compilation est également plus lente, surtout lors de l'exécution de cfront. Il est important de garder à l'esprit que le C++ n'est pas destiné aux petits bidouilleurs qui s'amusent à économiser 3 ko en supprimant le startup c.o (mmmh, je me demande de qui il peut bien s'agir...). Seuls les développeurs intéressés pas la création de gros logiciels appelés à être mis à jour régulièrement verront dans l'achat de ce compilateur un investissement sûr garantissant un suivi correct du logiciel. Ces personnes-là ont sûrement à leur disposition suffisamment de fonds pour posséder la configuration minimale, et probablement beaucoup plus en fait. La programmation sur Amiga Avec un peu de recul, on constate que la façon dont l'Amiga est structuré se prête très bien à l'établissement d'objets héritant les uns des autres. Cela conduit à des listings parfois surprenants de simplicité, comparés aux équivalents en C ou en assembleur qui sont la plupart du temps précédés par une longue liste d'initialisations et de vérifications. Allez donc jeter un coup d'oeil au listing "console.cp". La disquette 2 contient d'ailleurs une dizaine de programmes d'exemple explorant à peu près tous les sujets possibles sur Amiga. Ils sont suffisamment commentés pour fournir une base valable à des applications plus vastes. J'aurais cependant apprécié trouver dans la boîte un quatrième livre expliquant plus en détails l'interfaçage entre C++ et Amiga (le Reference Manual se contente d'énumérer les classes et leurs fonctions). Conclusion Il est véritablement impossible de donner une impression globale de C++ en quelques pages et j'ai donc volontairement laissé dans l'ombre beaucoup d'aspects tout aussi dignes d'intérêt. Disons pour conclure que l'existence d'un compilateur C++ sur un ordinateur est un fait rare et que cela va incontestablement contribuer à donner à l'Amiga ses lettres de noblesse en tant qu'ordinateur de développement de gros logiciels. On peut compter sur Lattice pour une mise à jour régulière du compilateur ce qui lui assure sans conteste un avenir brillant.
|