|
||||||||||||||||||||||||||||||||||||||||||||||||
|
SAS a sorti depuis peu une nouvelle version de son célèbre compilateur. La dernière en date était la 6.0. La 6.50 effectue un saut quantique puisqu'il s'agit désormais à la fois d'un compilateur C et C++. Le langage de prédilection sur l'Amiga est indubitablement C, mais cela peut encore changer... Ce banc d'essai se limitera aux points forts du compilateur SAS C 6.50. J'ai testé dans un précédent article SAS 6.0, test au cours duquel j'ai passé en revue les innovations apportées par la version 6, vous pouvez vous y reporter pour plus de détails. Le paquetage Le produit est livré avec trois manuels (à placer dans des classeurs) et six disquettes. En fonction de la période à laquelle vous achèterez le compilateur, vous trouverez probablement une disquette contenant le correctif le plus récent apporté par SAS Institute. En l'occurrence, j'ai eu le correctif 6.51 que j'ai mis en place dès que j'ai eu achevé l'installation du produit. Les trois manuels (en anglais) sont respectivement :
Comme d'habitude, pas de surprise de ce côté : SAS est un long habitué de l'Installer de Commodore et tout ceci se déroule sans aucune difficulté. Le script d'installation s'occupe du cas où vous possédez déjà une version antérieure du compilateur (C bien sûr puisque SAS 6.50 est le tout premier compilateur C++ de SAS), que celle-ci soit une version 6 ou antérieure. Notez que SAS C 6.50 peut fonctionner à partir des disquettes (uniquement le C dans ce cas, pas le C++). Si vous optez pour l'installation sur disque dur (fortement conseillé naturellement), la sixième disquette ne sera pas requise lors du processus d'installation. La documentation D'un point de vue technique, le volume dédié à la référence des bibliothèques système est le plus intéressant. Il contient à lui seul un résumé très clair des diverses ressources mises à disposition des programmeurs Amiga : bibliothèques partagées, périphériques logiques, bibliothèques de lien, etc. Sont aussi décrits l'usage des includes de Commodore et leurs divers emplacements (clib, pragma, exec, etc.). La partie de référence consacrée à C++ inclut la description de new.h, complex.h et la liste de toutes les classes de manipulation d'entrées/sorties (iostream.h et dérivées). Le volume 1 contient une section qui intéressera ceux qui se demandent comment un compilateur fonctionne, et plus particulièrement comment un programme C++ est traduit en C. Nouveautés avec la version 6.50 Voici quelques nouveautés dans cette version 6.50 par rapport à la version 6 du compilateur (pas toutes, seulement les plus importantes. Voir le Volume 1 de la documentation pour plus de détails). SC 6.50, le compilateur, est en fait un traducteur : il traduira votre code C++ en code C. qui sera à son tour compilé. C'est une méthode relativement répandue chez tous les compilateurs C++. Un compilateur C++ s'évalue par rapport au traducteur CFront. développé par les laboratoires AT&T. La plus récente version de CFront est la 3.0. SC 6.50 est compatible avec CFront 2.1, il a donc un peu de retard technologique. Concrètement, ce retard se traduit par l'absence dans SC 6.50 des patrons ("templates") et des exceptions.
Le compilateur C a introduit la notion très intéressante de Global Symbol Tables. Lors d'une compilation, le compilateur stockait dans un format interne stocké en mémoire une représentation des symboles du programme afin de pouvoir la réutiliser lors de prochaines compilations. Les symboles étant déjà chargés, cette astuce permettait de diviser les temps de compilation par deux. De plus, un petit programme d'interface (hypergst) permettait d'obtenir une visualisation hypertexte de cette table de symboles. Malheureusement, cette facilité ne fonctionne plus avec C++ (le manuel précise explicitement que l'option MakeGST est ignorée dans le cas de compilation C++). Je pense que cette lacune doit être mise sur le compte de la rapidité avec laquelle SAS a voulu sortir son compilateur. Le hachage des noms de C++ ("name mangling") complique beaucoup la tâche du gestionnaire des tables de symboles. En conséquence de quoi, il faut réapprendre à être patient pendant les compilations. C'est d'autant plus dommage que les compilations C++ sont intrinsèquement plus longues que celles C... Le débogueur "cpr" a naturellement été étendu pour donner la possibilité aux programmeurs C++ de déboguer leurs programmes aussi facilement que des programmes C. L'extension principale consiste en la reconnaissance de la notation préfixée de classe.
...ou encore examiner une variable d'instance avec :
...ou plus simplement :
...si le compteur de programme se trouve actuellement à l'intérieur d'une fonction membre de la classe Class (cpr utilise alors la variable cachée "this" pour localiser la variable, exactement comme le compilateur). Voilà en ce qui concerne les extensions C++ de cpr. Cela semble relativement peu mais en fait suffit pour la majorité des débogages. Sinon, le manuel explique aussi comment déboguer des bibliothèques partagées (*.library), des programmes qui lancent eux-mêmes des processus, de détecter des impacts Enforcer, ou encore de demander à cpr d'attraper des tâches en cours d'exécution et de les faire passer sous son contrôle chaque procédure est illustrée par un programme disponible dans le répertoire SC:Examples/ afin que vous puissiez exécuter pas à pas les exemples donnés dans le manuel. Utilitaires Voici la liste des principales commandes supplémentaires que vous trouverez dans le répertoire SC:C/ :
À propos de smfind, notez que SAS 6.50 vous donne désormais la possibilité d'utiliser vous aussi le "browser" de messages SCMSG, par le biais de la bibliothèque smcomm. Autrement dit, si vous avez un programme qui doit donner comme sortie une liste de lignes relatives à des fichiers et des emplacements dans ceux-ci, vous simplifierez beaucoup la vie des utilisateurs si ceux-ci ont SCMSG installé chez eux. Divers Je n'ai pas évoqué dans cet essai plusieurs aspects de SAS 6.50, car je les ai jugés secondaires et j'ai surtout voulu insister sur les nouveautés introduites par ce dernier avatar. Il s'agit de l'éditeur, l'assembleur, les commandes ARexx. Comparaison avec la concurrence Malheureusement, cette section sera courte, la seule alternative à SAS 6.50 que j'aie pu tester sur Amiga se limitant à gcc. Cette comparaison n'est d'ailleurs pas très équitable dans la mesure où gcc (version 2.6.0 à heure où j'écris cet article) a plusieurs années d'avance sur SAS C 6.50 qui entame à peine sa première année d'existence. Ainsi, il n'est pas surprenant de voir que gcc affiche plus de diagnostics de compilation (avertissements et erreurs) que SAS 6.50, et qu'il implémente d'autre part les exceptions et les patrons. Reconnaissons à SAS 6.50 l'avantage de la spécificité de la machine. Celui-ci ayant été développé intégralement sur Amiga par des spécialistes, il utilise à fond ses capacités et bénéficie donc d'un temps de compilation plus court, d'un débogueur (gdb n'a toujours pas été porté sur Amiga) et d'une aide hypertexte en ligne au format AmigaGuide. Sinon je vous rappelle l'existence de Comeau C++ qui, contrairement à SAS 6.50, est complètement compatible avec CFront 3 (autrement dit il possède les exceptions et les patrons). Ce compilateur a toujours eu des bancs d'essai élogieux et il serait dommage de vous fixer sur SAS 6.50 sans avoir eu la possibilité de tester ce compilateur. Impression générale Rien à dire, tout le produit est irréprochable. Clairement documenté, pas de bogues notables dans le compilateur ni dans les outils. Cela dit, le tout me laisse une impression d'inachevé. Mon sentiment est que SAS aurait pu sortir un compilateur vraiment excellent avec un peu plus de temps : améliorations visuelles à cpr, gestion des patrons et des exceptions, davantage de classes, etc. Je déplore beaucoup ce peu de classes livrées en standard (seulement deux, voir plus haut). Un des avantages immédiats qu'on gagne en programmant en C++ est de ne plus avoir à se soucier de récrire des classes de base, telles la gestion de liste, d'ensembles, etc. Il semble pourtant que la seule solution avec SAS 6.50 à ce sujet est de devoir écrire ce code soi-même, ou bien récupérer du code C++ existant (ce qui est plutôt problématique dans la mesure où tous les développements actuels utilisent les patrons...). On aurait pu s'attendre également à avoir quelques classes plus intimement liées à l'Amiga et à AmigaOS, de façon à pouvoir par exemple écrire du code comme :
Notez que des classes analogues étaient fournies dès l'ancienne version du compilateur C++ : Lattice C++. Cela dit, ces classes étaient très incomplètes. D'autre part, Lattice C++ n'a absolument aucun rapport avec SAS 6.50. Conclusion Si j'avais à faire un choix de compilateur C++, je crois que j'aurais tendance à m'orienter vers gcc. Le nombre supérieur de fonctionnalités éclipsant largement, à mon avis, les points forts de SAS 6.50 (vitesse de compilation, débogueur). Cela étant dit, les récentes baisses de prix de SAS 6.50 sont assez alléchantes surtout pour une mise à jour.
|