Obligement - L'Amiga au maximum

Dimanche 22 octobre 2017 - 21:13  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Test de SAS C 6.50
(Article écrit par Cédric Beust et extrait d'Amiga News - septembre 1994)


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 :
  • Volume 1 : Introduction, Compilateur, Éditeur.
  • Volume 2 : Débogueur, Utilitaires, Assembleur.
  • Référence de la bibliothèque système.
Installation

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, devices, 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.
  • SAS C 6.50 est livré avec deux classes : complex.h (gestion de nombres complexes avec tous leurs opérateurs) et iostream.h (entrées/sorties).

  • Un nouvel utilitaire est désormais présent dans SC:C/ : demangle. Cette fonction vous permet de traduire un nom interne C++ en symbole plus lisible pour le programmeur (voir plus bas).

  • Des optimisations ont été apportées dans la génération de code pour 68040 avec 68882, ainsi que dans l'optimiseur local ("peephole optimizer").

  • Le débogueur est maintenant capable de déboguer du C++ ainsi que des "devices". De plus, il inclut désormais une gestion de SegTracker et offre un débogage de programmes multitâches plus aisé.

  • smfind est une nouvelle commande vous permettant de localiser et modifier des chaînes dans vos sources.

  • Gestion pour transférer vos programmes si vous utilisez le compilateur Aztec.
Le compilateur

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.

SAS C 6.50

Ainsi, vous pouvez déposer un point d'arrêt dans une classe avec la syntaxe :

b Class::fonction

...ou encore examiner une variable d'instance avec :

dis Class::count

...ou plus simplement :

dis count

...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/ :
  • cover : utiliser pour déterminer les portions critiques de votre programme afin de l'optimiser.

  • demangle (C++) : convertit un symbole interne C++ en symbole lisible. Le traducteur C++ est obligé de convertir les symboles lus dans le source (par exemple : Class::fonction(int i)) en représentation interne. Cet utilitaire vous permet de faire la conversion inverse, et trouve son utilité lorsque que le relieur (slink) vous signale des symboles inconnus lors de la phase finale de compilation.

  • gst : manipule des Tables de Symboles Globales (permet de les charger en mémoire, de voir la liste des tables actives, d'extraire de l'information, etc.).

  • hypergst : permet de visualiser une Table de Symboles Globaux sous forme hypertexte (AmigaGuide).

  • mkmk : générateur de makefiles. Il prend tous les sources et fichiers d'en-tête du répertoire courant et génère un SMakefile. Un simple "smake" suffit alors pour construire tout votre projet.

  • smfind : recherche une chaîne dans des fichiers. Le principal avantage de cet utilitaire par rapport à Search ou encore Grep est qu'il utilise scmsg pour afficher ses résultats.
SAS C 6.50

Autrement dit, il vous suffit de faire défiler à travers les diverses occurrences et de cliquer sur celle qui vous intéresse pour que le fichier soit automatiquement chargé dans l'éditeur de votre choix et il la ligne qui convient. Je ne mentionne pas toutes les commandes, et principalement celles que j'avais évoquées lors de mon test de SAS 6 (scmsg, scopts, scsetup, etc.).

A 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 :

Window *win = new Window(10,10,100,100); rp -> Draw(...) etc.

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.

Nom : SAS C 6.50.
Éditeur : SAS Institute.
Genre : programmation C.
Date : 1994.
Configuration minimale : Amiga OCS, 68000, 1 Mo de mémoire.
Licence : commercial.
Prix : 2100 FF (nouveau prix aux États-Unis : 199 $).


[Retour en haut] / [Retour aux articles]