Obligement - L'Amiga au maximum

Mercredi 24 avril 2024 - 18:22  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

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

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des 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,
ALL


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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Test de F-Basic
(Article écrit par Charles Vassallo et extrait d'Amiga News - janvier 1993)


La chose est entendue : cela ne peut intéresser que les débutants ("beginner" en anglais, pour le "b" dans BASIC). Les gens sérieux, ceux qui veulent des programmes rapides avec des codes efficaces, utiliseront autre chose, du C de préférence. Vieille querelle, que certains excès de plume contribuent à alimenter, du genre "GFA plus rapide que le C", sans plus de nuances. En anglais, cela donne "faster-than-C" et c'est de la science-fiction.

Dans l'ensemble...

Je rappellerai simplement le minimum que j'attends d'un BASIC :
  • Un accès simplifié aux ressources du système (évidemment le plus large possible, mais sans demander la lune pour autant).
  • Un codage agréable qui produise un fichier source court et facile à relire.
  • Une compilation rapide (il n'y a plus guère de BASIC interprété).
  • Des exécutables les plus rapides possible.
  • Un environnement de programmation commode (sinon on n'utilisera pas le produit très longtemps).
La qualité du code compilé n'intéresse pas beaucoup le débutant. Du moment que cela marche... Il repensera probablement son attitude quand il en sera à des fichiers objets de plus de 100 ko, encore que, si cela marche toujours...

F-Basic n'est pas connu en France. Je n'ai vu sa publicité que dans le magazine Amazing Computing, à mon avis l'une des meilleures revues pour l'Amiga, mais que très peu de gens ont l'air de connaître de ce côté-ci de l'océan. C'est un produit qui n'est distribué que par ses concepteurs (Delphi Noetics Systems, PO Box 7722, Rapid City. SD 57709). Vous leur écrivez, en donnant les coordonnées de votre carte bleue et en demandant soit F-Basic seul pour 99,95 $, soit F-Basic et SLDB ("Source Level DeBugger") pour 159,95 $.

Huit à quinze jours après, vous recevez un manuel de 300 pages et deux disquettes ; la première disquette contient le programme et ses fichiers satellites, l'autre est remplie à ras-bord d'exemples d'application. J'avais commandé parce que je me souvenais d'une de leurs premières pubs, vantant F-Basic comme (lui aussi) "faster-than-C" du moins pour les calculs en flottant - et que j'avais en tête une application où il fallait beaucoup de ces calculs.

Je me souvenais aussi des articles qui en avaient été faits ici ou là, témoin celui d'Amiga World en juillet 1991 :

"F-Basic tient du pur-sang... mais aussi de la pire des haridelles. A témoin :
  • Il ne tourne qu'à partir du CLI.
  • Son éditeur de texte est affreux.
  • Il bafoue toutes les conventions du BASIC.
  • Sa courbe d'apprentissage est (trop) raide.
  • Les tests et débogages prennent une éternité.
  • Son manuel est quasi hermétique..."
Oups ! J'avais tout de même commandé. Je suis maintenant arrivé au bout de deux programmes assez conséquents ("StarSailing" et "Markus-Lyapounov") qui m'ont beaucoup promené dans le programme. Je n'ai néanmoins pas tout vu, mais je me crois maintenant autorisé à tempérer l'opinion du confrère. En deux mots, ce n'est pas un produit que je conseillerais à un débutant, mais on peut tout de même l'apprivoiser. Il ne laisse pas indifférent : il a certes des défauts, mais aussi des points forts qui le rendent passionnant et du coup, ses défauts n'en paraissent que plus insupportables. Comme vous ne pouvez pas l'acheter au coin de la rue, je n'en ferai pas une description détaillée. Je me contenterai d'en citer les points saillants.

Le langage

D'emblée, un coup dur pour les basicards insouciants : il faut commencer par déclarer toutes les variables. Les types de base sont INTEGER (32 bits), WORD, BYTE, REAL, DOUBLE et TEXT. Pas d'entier non signé. Le compilateur s'arrêtera à la première variable non déclarée. Bien entendu. la corvée a des avantages, puisqu'elle supprime tout risque de faute de frappe et toute erreur dans les arguments des sous-programmes.

Deuxième coup dur : les variables TEXT sont de longueur prédéfinie. Cela va fortement vous compliquer la vie, mais après tout, les pros du C ou autre Modula-2 vivent avec. En échange, on vous promet des routines ultra-rapides pour manipuler ces variables.

Un point très intéressant

On peut définir des types RECORD, c'est-à-dire des structures arbitraires, qui peuvent eux-mêmes contenir des RECORDS préalablement définis. En corollaire, on a évidemment droit aux types PTR_TO (pointeurs) pointant vers n'importe lequel des types déjà introduits - et à tous les cauchemars nés des confusions entre pointeurs et objets pointés... Rien que cela me ferait recommander ce BASIC à tous ceux qui veulent goûter à autre chose sans pour autant se lancer de front dans le C. Je pense qu'on peut faire tout ce qu'on attend de ces structures, en termes de manipulation globale ou champ par champ, incrémentation automatique des pointeurs par la taille de la structure, allocation dynamique de mémoire...

Le travail avec les fichiers à accès direct, si peu naturel avec les BASIC traditionnels, coule ici de source. On peut même faire des choses très élégantes, comme définir des types de variable complexe (ou de matrice) puis redéfinir les opérateurs arithmétiques pour que l'addition de deux variables complexes (voire de deux matrices) s'écrive tout bonnement z=x+y.

Structures de contrôle classiques

IF THEN...ELSE..., FOR...NEXT, WHILE, SELECT CASE, à ceci près qu'elles ne s'appellent pas toujours comme cela. Les sous-programmes peuvent être du type FUNCTION ou SUBROUTINE avec variables locales (par défaut) ou globales ; ils sont parfaitement récursifs. On a aussi les sous-programmes locaux GOSUB et bien entendu le célèbre GOTO, à utiliser avec parcimonie.

La gestion des écrans et des fenêtres est classique, à une maladresse près, de taille : on ne peut pas choisir la largeur de l'écran. Cela partait d'une bonne intention : aux débuts de l'Amiga, les écrans étaient soit en 320 soit en 640 pixels de large. Il n'était donc pas sorcier de demander à la machine de fixer elle-même cette largeur, selon la hauteur demandée, et cela faisait un argument de moins dont les débutants devaient se soucier. Hélas, cela interdit maintenant les écrans en suraffichage...

Côté graphique, animation et son

On retrouve à peu près tout ce qu'il y a dans AmigaBasic, HiSoft Basic ou GFA. Bien sûr, ce n'est pas AMOS ! On peut toutefois programmer des gadgets avec des instructions de haut niveau. Enfin, on dispose de routines IFF pour sauver ou charger des images.

Gestion assez complète des événements

On peut intercepter les sélections de menu, des MOUSE-DOWN ou UP, des simples et doubles-clics, des GADGETS-DOWN ou UP, les touches du clavier, les fermetures de fenêtre. On ne couvre pas tout comme le fait GFA, mais on le fait de manière plus naturelle, sans nombres cabalistiques à manipuler.

Enfin, autre originalité pour un BASIC, on peut également intercepter des événements ARexx. Une limite cependant : l'interception de ces événements ne fonctionne qu'au niveau du programme principal et de ses sous-programmes locaux (GOSUB).

Une autre originalité

De puissantes fonctions d'analyse de variables texte. D'après la doc, il s'agit des fonctions du SNOBOL4 - les initiés et les amateurs d'intelligence artificielle apprécieront. Enfin, on a évidemment droit à toutes les fonctions système, si on dispose de l'information nécessaire pour les mettre en oeuvre. On peut ouvrir n'importe quelle bibliothèque et accéder à ses fonctions. On pouvait déjà le faire depuis n'importe quel BASIC, mais le jeu devient ici beaucoup plus naturel parce que les structures font partie du langage. La disquette programme contient même des fichiers "Include" simplifiés pour les plus importantes d'entre elles.

L'environnement

F-Basic vient avec un éditeur intégré, FED. On ne peut le lancer que depuis le CLI, mais il n'y a rien là qui devrait effaroucher l'apprenti programmeur, quoi qu'en pense le confrère d'Amiga World. Un écran s'ouvre, sur lequel on peut mettre son programme au point. On dispose de menus pour compiler et exécuter, ou pour lancer le débogueur. Les fichiers compilés ne se lancent que sous CLI (en exigeant la présence d'une bibliothèque "runtime"), mais on peut aisément les transformer en fichiers autonomes qui opèreront indifféremment depuis le CLI ou le Workbench, via un autre menu de l'éditeur.

Le problème est que les choix ergonomiques qui ont été faits dans "FED", l'effet des simples et doubles-clics, le choix des raccourcis au clavier... sont des plus discutables. Quand on a manipulé l'éditeur de HiSoft, le passage à FED est assez pénible. En plus, il y a incompatibilité avec les 68030 (ce sera corrigé dans la prochaine version). Je vous conseille donc de vous procurer un véritable éditeur, genre CygnusEd, et de le transformer en éditeur intégré au moyen de quelques routines ARexx. On peut aboutir au même fonctionnement.

Le débogueur SLDB est assez impressionnant. On peut placer des points d'arrêt, exécuter jusqu'au prochain point d'arrêt ou pas par pas, aussi bien au niveau des instructions BASIC qu'au niveau assembleur. On peut suivre des variables, des registres, des blocs mémoire (il y a une fenêtre de désassemblage), et intervenir là-dedans à ses risques et périls. Le maniement du programme demande un certain apprentissage, mais il m'a rendu d'ores et déjà de bons services.

Le manuel contient 300 pages au format A4. Ce n'est assurément pas un livre d'initiation ; il contient par ailleurs de nombreuses références au ROM Kernel Manual. A mon avis, il est remarquablement écrit, mais il est très dense et demande une lecture très attentive (même plusieurs). Enfin, on peut signaler l'assistance clients. De ce côté-ci de l'Atlantique, on peut écrire. La réponse vient en général dans le mois. Les mises à jour sont proposées chaque année, avec un tarif avantageux. Quelqu'un a-t-il fait un rapprochement avec un produit d'origine allemande ?

La rapidité

Au début, la publicité de F-Basic était essentiellement axée sur la rapidité de ses calculs. Depuis, ses auteurs insistent plutôt sur l'étendue de ses possibilités, mais cette rapidité est toujours là. La spécialité de F-Basic est le calcul en flottant simple précision. Sur un A3000, le test classique, compilé en code 68000 (on peut aussi compiler en code 68020)...

F-Basic

...s'exécute en 3,8 secondes, contre 6 secondes pour HiSoft Basic ou 7,2 secondes pour le Modula-2 M25 ; en code 68020, on passe à 1,7 seconde. Le test suivant sur les fonctions transcendantes :

F-Basic

...s'exécute en 2,4 secondes (4 secondes pour HiSoft Basic ou 5,9 secondes pour M2S). Je n'ai malheureusement pas de chiffre à mettre en regard dans la colonne "C", faute de pratiquer le C moi-même.

Par contre, j'ai repris l'exercice proposé dans Commodore Revue n°10 pour comparer différents langages : sur un A1000, ce qui s'exécutait en 810 secondes en HiSoft Basic ou en 500 secondes dans le C du moment (Lattice 5.0) demande maintenant 400 secondes en F-Basic... Faster-than-C ? Cette rapidité est essentiellement due au codage des flottants qui sacrifie l'encombrement en mémoire à la vitesse. Traditionnellement, les variables, simple précision, sont codées sur un entier long (32 bits) avec un bit de signe, 7 ou 8 bits d'exposant et le reste pour la mantisse. Les calculs exigent qu'on isole mantisse, signe et exposant et éventuellement qu'on rétablisse le bit de mantisse sous-entendu, avant tout calcul.

Dans F-Basic, les variables simple précision sont stockées sur deux entiers longs : le premier est tout entier consacré à la mantisse et le 2e, au signe (bit 31) et à l'exposant (bits 0 à 15). Il n'y a donc ni masquage, ni décalage à faire pour séparer mantisse et exposant. De surcroît, les 32 bits de mantisse permettent des calculs plus précis que les 23 ou 24 bits traditionnels ; de même, les 16 bits d'exposants donnent plus de marge avant l'apparition des dépassements ("overflows" ou "underflows").

Une autre explication de cette rapidité est que F-Basic affecte directement quelques-uns des registres du 68000 à certaines variables. Il ne faut pas y chercher quelque trace d'intelligence que ce soit, au sens où l'entend l'ami Gilles Soulet (articles choix du compilateur C et rapidité du GFA Basic). Le compilateur de F-Basic ne fait qu'un seul passage et n'a pas l'occasion de réfléchir à quoi que ce soit en dehors de la traduction directe du code source. Simplement, par défaut, les premières variables du programme ou du sous-programme sont systématiquement reliées aux registres - à moins qu'on ne donne l'ordre de n'en rien faire, par exemple, parce qu'on aura besoin plus loin de l'adresse de ces variables.

Cette astuce compte pour beaucoup dans le premier test ci-dessus ; si on l'inhibe, le temps d'exécution passe de 3,8 à 4,7 secondes. Par contre, l'effet dans le 2e test est complètement négligeable : le plus gros du temps de calcul se passe dans la bibliothèque de fonctions transcendantes, qui est manifestement très bien écrite.

Les calculs en nombres entiers ne sont pas aussi spectaculaires, mais, aussi affreux que soit le code produit, F-Basic reste extrêmement rapide. Le calcul direct de Fib(27) proposé par Gilles Soulet (dans cet article), à partir de la récurrence Fib(0)=Fib(1)=1 ; Fib(n)=Fib(n-1)+Fib(n-2) s'obtient en 19,5 secondes sur un 68000 standard, à comparer aux 14 secondes du SAS C 5.10 et aux 22 secondes du HighSpeed Pascal.

Le source s'écrit comme suit :

F-Basic

Ces grandes vertus de célérité de F-Basic ne s'étendent malheureusement pas aux autres domaines, graphisme, impressions à l'écran, opérations sur les fichiers. Le langage redevient simplement honnête comparé à HiSoft Basic ou GFA.

Conclusion

Je trouve F-Basic passionnant. Bien sûr, il a des défauts (que j'ai passés sous silence, le but de l'article étant de mettre en valeur les points originaux). Je les regrette - que dis-je, j'enrage - à cause même de ses qualités et de ses originalités.

Ce n'est pas sûrement pas un langage à conseiller à un débutant et il ne trouvera guère de secours dans le manuel. On peut d'ailleurs reposer une question qui est déjà venue dans ces colonnes : comment s'initier à un langage évolué, même aussi simplifié qu'un BASIC, et néanmoins apprendre à programmer honnêtement ?

Je recommanderais volontiers F-Basic pour toutes les applications gourmandes en calculs sur des réels. Quoi qu'on ait pu écrire à son sujet, on peut le maîtriser. Peut-être la véritable question est-elle que si vous avez fait cet effort, vous auriez pu tout aussi bien vous mettre à des langages "sérieux", C ou Modula-2 ? Peut-être. Mais ces langages disposent-ils de calculs en flottant aussi rapides ? Leur mise en oeuvre est-elle aussi simple ? Et peut-être trouvez-vous les listings C trop abscons, et ceux de Modula-2 trop verbeux par rapport à ceux d'un BASIC...

Nom : F-Basic.
Éditeur : Delphi Noetic Systems, Inc.
Genre : langage de programmation.
Date : 1992.
Configuration minimale : Amiga OCS, 68000, 512 ko de mémoire.
Licence : commercial.
Prix : 99,95 $ (ou 159,95 $ avec SLDB).


[Retour en haut] / [Retour aux articles]