CODING ★ BASIC - ESSAI LES COMPILATEUR BASIC ★

Basic - Essai Compilateur Basic

Le Basic dont vous héritez en achetant un ordinateur AMSTRAD est, ainsi que ceux de l'ensemble des micro-ordinateurs personnels, un langage interprété. En résumant quelque peu, cela signifie que les instructions constituant un programme sont traduites en langage machine à chaque fois qu'elles sont exécutées. Cette procédure a comme inconvénient majeur un ralentissement de la vitesse d'exécution des programmes écrits en Basic, la traduction se faisant à chaque exécution d'une instruction.

Bien que l'interpréteur Basic des AMSTRAD CPC soit particulièrement rapide, il souffre, bien qu'à un degré moindre, des mêmes inconvénients que les autres interpréteurs dans la mesure où le fait d'effectuer à chaque fois la traduction des instructions se traduit par une perte de temps d'exécution.

Ainsi que leur nom l'indique, les compilateurs Basic sont chargés de « compiler » un programme écrit en Basic, c'est-à-dire de produire un « programme objet » qui est la traduction en langage machine du programme Basic que  vous avez fourni au  compilateur. L'exécution du programme se fera à chaque fois avec le seul « programme objet », c'est-à-dire avec le programme Basic déjà traduit. Le fati de  n'avoir à traduire qu'une seule fois chaque instruction, et même, en général, le programme dans son entier puis de réaliser chaque traitement à partir de la traduction permet d'espérer un gain de temps important lors du refoulement des programmes.

Principe et résultats des essais effectués

Trois compilateurs Basic fonctionnant sur les AMSTRAD CPC, ont été soumis à des tests de rapidité consistant à leur faire exécuter des séquences d'opérations identiques, puis à comparer les temps d'exécution obtenus entre eux et avec ceux obtenus avec l'interpréteur des CPC. Ces essais ont été complétés par des considérations, plus générales et personnelles sur les fonctionnalités des différents compilateurs.

Les tests ont été effectués sur un CPC 464 équipé d'un lecteur AMSTRAD DDI-1, et les différents compilateurs essayés sont les suivants :

CBasic de Digital Research, Laser compiler de Oasis Software, Speedy Wonder de Minipuce. Pour que les résultats des tests soient significatifs, les différents compilateurs ont été mis dans des conditions identiques en tenant compte des précisions fournies dans les documentations utilisateurs. C'est ainsi que Laser Compiler n'acceptant que les nombres entiers ET Basic effectuant les calculs avec quatorze chiffres significatifs, les essais ont été faits en utilisant exclusivement des nombres entiers. De même, CBasic ne peut exécuter des ordres graphiques qu'avec un CPC 6128 (ou un PCW 8256). Cet essai ne concernera donc que la comparaison des vitesses de calcul sur des entiers et d'impression de texte. Il sera complété dans un prochain numéro par une comparaison des compilateurs dans le domaine des ordres graphiques.

Les programmes utilisés pour comparer les vitesses sont les suivants :

Test 1

10 PRINT "DEBUT"
20 FOR i% = 1 TO 10000
30 NEXT i%
40 PRINT "FIN"
Test 2
10 PRINT "DEBUT"
20 i%= 0
30 i% = i% + 1
40  IF    i%< 10000  THEN GOTO 30
50 PRINT "FIN"
Test 3
10 PRINT "DEBUT"
20 i%=0
30 i% = i% + 1
40 j% = i%/i% * i% + i% -i%
50 IF    i%< 10000    THEN GOTO 30
60 PRINT "FIN"
Test 4
10  PRINT "DEBUT"
20  DIM j%(20)
30 i%=0
40 i% = i% + 1
50 IF    i%< 10000   THEN GOSUB   80:GOTO 40
60 PRINT "FIN"
70 END
80 FOR k'% = 1 to 20
90 j%(k%) = i%
100 NEXT k%
110 RETURN
Test 5
10 PRINT "DEBUT"
20 FOR i% = 1 to 10000
30 PRINT i%
40 NEXT i%
50 PRINT "FIN"
Les temps d'exécution de ces différents essais sont inscrits dans le tableau ci-contre.

Temps d'exécution

----------------------------------------------------------------------
             ; INTERPRETE       SPEEDY         ;LASER        CBASIC
                              ; WONDER         ;BASIC
----------------------------------------------------------------------
Test 1       6 sec.          4 sec.          1 sec.        < 1 sec.
Test 2       26 sec.         ;21 sec.         ;2 sec.        1 sec.
Test 3       1 mn 36 sec.    1 mn 29 sec.    13 sec.       8 sec.
Test 4       8 mn 26 sec.    7 mn 19 sec.    29 sec.       13 sec.
Test 5       3 mn 43 sec.    3 mn 24 sec.    3 mn 23 sec.  6 mn 22 sec.
----------------------------------------------------------------------

Les temps de 1 et 2 secondes mis par les résultats de CBasic et Laser Compiler dans les tests 1 et 2 sont très proches. Il est toutefois manifeste, lors du déroulement de ces essais, que le programme objet résultant de CBasic affiche le mot FIN nettement plus rapidement que celui provenant du Laser Compiler.

Le tableau montre assez clairement que les différents compilateurs ont des performances différentes selon les actions effectuées. Ainsi CBasic, qui est de loin le plus rapide lors des tests de calcul, est deux fois plus lent que ses concurrents lors du test 5 dont le but essentiel était d'avoir une idée de la vitesse d'affichage des produits testés. Au point de vues performances, un classement pourrait être le suivant :

CBasic pour la rapidité des calculs (mais encore faudrait-il pouvoir effectuer aussi des comparaisons sur des calculs effectués avec des nombres réels de 14 chiffres).
Pour l'affichage, le Laser Basic et Speedy Wonder ont des performances équivalentes. Ce dernier est toutefois particulièrement décevant en ce qui concerne la rapidité des calculs. Ses résultats sont certes meilleurs que ceux du Basic interprété de l'Amstrad, mais nettement inférieurs à ceux de ses concurrents.

Qualités et défauts Speedy Wonder

Avant de lire cette conclusion, il est nécessaire que vous sachiez que le Speedy Wonder dont je disposais était en version de test et que celle du commerce sera sûrement sensiblement différente et débarrassée des rares anomalies constatées et signalées dans ce paragraphe.

C'est, à mon avis, le moins intéressant des trois produits. Peut-être a-t-il été défavorisé par le fait que le test n'a eu trait qu'à la vitesse de calcul et d'affichage de caractères et n'a pas pris en compte les capacités graphiques, mais il n'est que d'environ 20 % plus rapide que le Basic interprété, et en plus il ne donne pas de programme objet directement exécutable. Vous devez recompiler votre programme à chaque fois que vous voulez l'utiliser. Tout se passé comme si Speedy Wonder se contentait dé traduire directement les- instructions Basic par des appels au « jump-block » standard de l'AMSTRAD et aux routines de la ROM correspondant aux instructions à exécuter. Ceci expliquerait (les appels directs aux routines ROM en particulier) que la version 464 ne fonctionne pas sur 664 et 6128, et aussi les faibles différences de temps d'exécution des calculs entre Speedy Wonder et le Basic interprété (le jumpblock standard de l'AMSTRAD permet d'accélérer notablement la vitesse de ce qui a trait au graphisme et a peu, voire même pas, d'effet sur ce qui a trait aux calculs à l'exception de la possibilité d'appeler directement une routine en ROM). De toutes façons dans la mesure où le produit ne génère pas de code objet directement exécutable, il ne s'agit plus d'un compilateur mais d'un interpréteur évolué.

Speedy Wonder vous laisse environ 25 Ko de libre pour vos programmes. C'est relativement peu, mais suffisant pour la plupart des programmes que vous aurez à écrire. Toutefois, certains "bugs" traînaient dans la version dont je disposais. Une tentative de compilation d'un programme un peu gros (28 Ko en Basic), n'a pas provoqué de message du genre "MEMORY FULL" comme indiqué dans la notice, mais la détection d'erreurs "LINE DOES NOT EXISTS IN XXXX" totalement imaginaires.

De plus, il est dommage que le produit ne laisse pas la possibilité d'utiliser l'instruction "LOAD" dans un programme Basic. Adieu le chargement d'images d'écran à partir de fichiers binaires stockés sur disquette ou cassette. Dans le même ordre d'idées, la documentation précise que les "POKE" doivent être faits à une adresse inférieure à &8E20. Cela se comprend surtout si Speedy Wonder utilise les adresses de saut de la RAM du CPC, mais vous empêche de jouer sur la valeur contenue à certains endroits de la RAM du CPC (essayez de patcher un bloc de paramètres disquette redéfinissant la formatage d'une disquette non standard que vous voudriez utiliser). Un bon point tout de même, la documentation. Bien que suc-cinte, elle donne suffisamment d'indications pour l'utilisation

du produit et contient deux rages de conseils de programmation qui sont à la fois parfaitement justifiés et valables autant avec le produit que sans. Enfin, tout n'est pas négatif dans ce produit qui est le seul des trois compilateurs testés à permettre l'utilisation de la quasi-totalité des instructions du Basic Locomotive de l'Amstrad et à autoriser ainsi la compilation, avec peu ou pas de modifications, de programmes déjà écrits et utilisés en interprète. Pour terminer, je signalerais qu'une ver-son avec sauvegarde du code objet est en cours de réalisation.

Le Laser Compiler

Nettement plus rapide que le Basic interprété en ce qui concerne la vitesse de calcul, il présente comme défaut essentiel de n'autoriser les calculs qu'avec les nombres entiers, c'est-à-dire limités aux valeurs entre - 32768 et +32767. Ceci interdit de l'utiliser pour des applications de gestion ou faisant appel à des calculs mettant en œuvre des nombres réels ou des fonctions du genre COS ou LOG. Ces dernières sont d'ailleurs simplement considérées comme des variables dimensionnées.

Le Laser Compiler présente toutefois l'avantage de générer un programme objet que vous pouvez sauvegarder pour des exécutions ultérieures. La traduction du programme Basic en langage machine ne s'effectue donc qu'une seule fois, et il vous suffit, pour les exécutions, d'appeler le programme résultat de la compilation que vous avez sauvegardée.

La documentation, quoique complète, est un peu trop « touffue » et manque de clarté. Elle contient toutefois lout ce qui vous est nécessaire pour utiliser votre compilateur.

Le CBasic

De loin le plus rapide en ce qui concerne la vitesse de calcul, il est d'une lenteur remarquable pour l'affichage.

A la différence des deux autres produits qui compilent des programmes répondant à la syntaxe du Basic Locomotive (avec quelques restrictions toutefois), il s'agit d'un Basic complètement différent qui a ses règles propres et se compile sous CP/M. Les « programmes source » sont d'ailleurs transportables et compilables sur tous les ordinateurs utilisant le CBasic. Le programme à compiler doit être saisi avec un éditeur ou un traitement de textes sous CP/M (j'ai utilisé Wordstar pour les programmes de lest), et le résultat de la compilation et du link est un programme de type. COM directement exécutable sous CP/M.

C'est de loin, dans les conditions de l'essai, le plus complet de tous les compilateurs testés ici. Il permet : des calculs avec quatorze chiffres significatifs, la gestion des fichiers à accès direct et l'utilisation de noms de paragraphes pour les branchements et appels de sous-programmes. En conséquence, la numérotation des lignes n'est pas obligatoire.

Quand à la documentation, son seul défaut est d'être entièrement en anglais. Elle se compose de trois ouvrages, dont un totalement consacré au graphisme. Les deux autres vous détaillent les règles syntaxiques de CBasic, et les procédures de mise en œuvre. Il s'agit d'un produit réellement professionnel et de qualité.

Conclusions

Des trois produits testés ici un ne mérite pas, à mon avis, le nom de compilateur. Il s'agit de Speedy Wonder dont, du moins dans les conditions du test, l'intérêt est loin d'être évident. Il s'est révélé à peine plus rapide que le CBasic interprété et oblige à effectuer une traduction à chaque chargement du programme (c'est à tout le moins gênant, même si la vitesse de traduction est assez rapide). De plus, un essai de compilation effectué sur un programme important a entraîné l'apparition de messages d'erreur injustifiés et en tout cas non conformes à ce qu'indique la notice. Speedy Wonder pourra toutefois intéresser ceux qui ont déjà une importante bibliothèque de programmes en Basic Locomotive ou désirent n'utiliser que ce langage pour écrire leurs applications.

Pour les deux autres compilateurs, le choix dépendra essentiellement de l'utilisation que vous voulez en faire.

Le Laser Compiler, dans la mesure où il n'autorise que les nombres entiers, sera plus indiqué pour la réalisation de jeux dans lesquels le calcul de coordonnées d'affichage et de résultats d'opérations mettant en œuvre des nombres de faible grandeur et de tests de conditions sont primordiaux.

Le CBasic sera, lui tout indiqué pour qui désire se lancer dans la réalisation d'application d'envergure, à caractère franchement professionnel, susceptible d'être mise en œuvre sur plusieurs marques de matériel, et pour lesquelles les capacités de calcul et de gestion de fichiers de CBASIC sont plus importantes que la rapidité d'affichage.

AMSTRAD MAGAZINE n°12 (Juillet 86 ) , https://cpcrulez.fr

★ ANNÉES: 1986
★ AUTEUR: R.P. Spiegel

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 161 millisecondes et consultée 2598 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.