Obligement - L'Amiga au maximum

Samedi 22 juillet 2017 - 12:43  

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

 


Programmation : ARexx - rappels et programmation d'un pense-bête
(Article écrit par Cédric Beust et extrait d'Amiga News - décembre 1991)


Je trouve qu'ARexx est très absent de toutes les publications sur l'Amiga. C'est bien dommage car il est désormais livré en standard avec AmigaOS 2.0 et est donc appelé à sortir de son ghetto relatif pour devenir accessible au grand public. Histoire de rafraîchir la mémoire des lecteurs d'ANGV (Amiga News Grande Vitesse, © Xavier Leclercq), je me suis donc mis à mon clavier pour vous montrer qu'il est possible de développer des programmes utiles en très peu de temps avec ce langage qui a pour lui beaucoup d'aspects que l'on ne retrouve dans aucun autre...

Le programme que je vous propose n'est pas un exemple académique. Je l'ai écrit parce que j'en avais besoin et je ne trouvais pas dans le domaine public un équivalent qui réponde à mes besoins. Si vous n'avez jamais pensé que votre Amiga pouvait vous éviter d'oublier des anniversaires ou de rater des rendez-vous importants, je pense que Events (c'est le nom du programme) vous intéressera. Mais avant de le décrire, je vais faire quelques rappels sur le langage.

Petit rappel

ARexx a été écrit par William Hawes, également auteur de WShell, un Shell qui est à mon avis un des meilleurs parmi ceux qui nous sont proposés (bien entendu, les deux produits marchent main dans la main). Le langage existait déjà sous le nom de Rexx mais était très marginal. Les deux spécificités d'ARexx sont les suivantes :
  • Il permet de piloter des applications.
  • Il est interprété.
Je ne vais pas développer l'aspect "pilote" du langage. J'ai déjà écrit un article sur le sujet et de toute façon, chaque application à vocation de pilote est intimement liée au programme qu'elle dirige.

Je vais essayer de vous montrer qu'il est possible d'utiliser ARexx comme n'importe quel autre langage tant que certains facteurs comme la rapidité ne sont pas primordiaux. C'est typiquement le cas d'Events.

Pourquoi écrire en ARexx ?

Bien entendu, la première idée de langage qui m'est venue quand j'ai ressenti le besoin d'écrire l'application a été de programmer en C. J'irai même jusqu'à dire que c'est un réflexe conditionné ! Et pourtant, ce n'est pas toujours le bon choix. Je pense qu'ARexx était particulièrement indiqué dans ce cas parce qu'il simplifie énormément le travail sur les chaînes et sur les fichiers, et c'est à ça qu'Events passe le plus clair de son temps... Sans mentionner les calculs sur les dates qui deviennent très vite lourds en C. Je n'ai donc pas hésité longtemps...

Écrire le corps du programme m'a pris à peine une heure. Et pourtant, tout comme vous, cela faisait pas mal de temps que je n'avais plus programmé en ARexx ! Ce temps inclut donc les allers et retours dans le manuel. Tout le reste du temps a constitué en finition pour afficher un menu convivial avec des couleurs, etc. Mais ne négligez jamais cet aspect du travail ! Il n'est pas déraisonnable de passer 50% du temps de programmation à prendre soin de l'aspect extérieur (c'est largement plus dans le programme que je vous présente...).

Inutile de dire que le fait qu'ARexx soit interprété a énormément allégé le temps de mise au point : une modification sous un éditeur de texte et hop, je peux tester immédiatement la nouvelle version. De plus, il est beaucoup plus facile de faire évoluer le programme et le mettre à votre goût que s'il était écrit en C (il y a une chance sur trois que vous n'utilisiez pas le même compilateur C que moi et il vous faudrait dans ce cas écrire les adaptations nécessaires...).

ARexx et langage machine

Une commande ARexx n'est pas compréhensible directement par votre microprocesseur 68xxx. Cette commande doit d'abord être traduite en langage machine. Donc une instruction ARexx est une instruction de haut niveau qui est en fait constituée d'une séquence d'instructions en langage machine de bas niveau. Le microprocesseur est, à son tour, une "machine à interpréter" les instructions en langage machine et traduit chaque instruction (en fait des macro-instructions) en séquences constituées de signaux de commandes pour circuits logiques.

Si l'on devait donner une définition approximative d'un ordinateur on pourrait traduire par "interpréteur automatique de commandes". Le microprocesseur ne parle qu'une seule langue qui est le langage machine, et plus on a besoin d'un moyen de communication proche de l'utilisateur, plus la langue qui permet de dialoguer avec votre ordinateur augmente en complexité. L'idéal est de trouver en haut de l'échelle, la langue française. Pour l'instant, on arrêtera nos efforts d'escalade au niveau d'ARexx... L'ARexx a fait l'école d'interprétariat et parle parfaitement la langue "ARexx". Son boulot est de traduire vos commandes en un langage machine plus primitif.

Interpréteur et compilateur

La différence entre interpréteur et compilateur est énorme pour comparer les performances. Si un compilateur ARexx existait, il ne traduirait qu'une seule fois le source puis rangerait le résultat de sa compilation dans un fichier exécutable. Le micoprocesseur comprendrait directement le contenu du fichier. Le compilateur se contente d'une traduction unique, contrairement à l'interpréteur qui est donc lent, car il ne "se souvient pas" de précédentes traductions et donc recommence le travail à chaque demande d'exécution. Le premier handicap (énorme) d'ARexx est donc sa lenteur. Il est très lent.

Les handicaps

Évidemment, je ne peux pas m'empêcher de rapprocher ces premières constatations du comportement d'un autre langage populaire : le BASIC. En effet, le BASIC non compilé est assez lent parce qu'il s'agit lui aussi d'un interpréteur.

Le deuxième handicap est (comme BASIC) la trop grande liberté qui est laissée à l'utilisateur... Tout programmeur doit tendre vers la rigueur. Le fait de ne pas déclarer les variables par exemple est une très mauvaise habitude. Ceci est accentué par le manque de documentation tout public...

Les avantages
  • ARexx est avant tout un interpréteur de commandes ultra puissant (le CLI à la puissance 10).
  • ARexx est un langage de développement pour des programmes qui ne réclament pas de longs traitements de données et dont la mise au point aura l'avantage d'être très courte !
  • ARexx est un moyen de communication entre le CLI et un programme en cours d'exécution.
Quelques aspects importants sur le langage

Je vais insister sur une différence fondamentale entre ARexx et les langages impératifs que vous avez l'habitude d'utiliser : ARexx est un langage symboligue. Plutôt que d'essayer de vous expliquer en mots savants ce qu'est un langage symbolique, je vais faire appel à la meilleure des explications, un exemple concret. Cette spécificité se traduit par l'étrangeté suivante : ARexx ne possède ni structures ("Record" en Pascal ou "Struct" en C) ni tableaux. Mais il a en guise de remplacement des entités très puissantes nommées "compound symbols" (que l'on peut traduire par symboles composés).

Si vous vous demandez à quoi ressemble un SC, regardez dans le listing les références à la variable "months.xxx". Vous voyez donc des initialisations du genre :

months.jan=1
months.2='feb'

Remarquez au passage comme l'absence de typage allège le code. Nul besoin de déclarer au préalable la variable "months", ni sa structure. Celle-ci peut évoluer à votre guise au cours du programme. Là où le symbolisme d'ARexx prend toute sa dimension, c'est la possibilité de lire les contenus des SC à l'aide des instructions suivantes :

mois='nov'
say "Contenu de la variable:" months.mois

Vous aurez probablement deviné que dans ce cas, ARexx affichera sur la sortie standard le contenu de la variable "months.nov", du moins, si vous l'avez au préalable initialisée. Dans la négative, la valeur rendue sera celle par défaut. Vous pouvez imposer celle-ci en initialisant la variable de la façon suivante :

months.='???'

Voici un exemple de fichier de configuration pour Events.rexx. Seules les lignes commençant par un numérique sont prises en compte. Dans l'ordre : la date de l'événement, le nombre de jours à prévenir auparavant et enfin un commentaire à afficher.

/* Divers */

20 nov 91,10, Dossier à rendre

/* Anniversaires */

02 jan 92,10, Mon anniversaire !

/*Évènements ponctuels */

19 oct 91,4, Concert

ARexx

Le programme

Celui-ci est très simple à utiliser et les quelques points qui pourraient ne pas être clairs à première lecture ont été commentés. Contrairement à ce que certaines personnes pensent, je recommande fortement de commenter vos programmes en anglais. Si vous avez déjà essayé d'éplucher un programme avec des noms de variables et des commentaires en allemand, vous comprendrez aisément pourquoi ! Mieux vaut faire des commentaires en anglais même si celui-ci est hésitant plutôt qu'en français. Cela dit, notre Amiga News étant une revue résolument francophone, je me suis livré à la périlleuse tâche de traduire tous mes commentaires afin de vous en faire bénéficier...

Le mode d'emploi du programme est expliqué en commentaires au début de celui-ci. Il décrit rapidement le fichier de configuration (voir plus haut) ainsi que la seule option disponible, qui vous permet de déterminer quel sera le prochain événement dans votre agenda, au cas où vous décideriez de vous y prendre en avance...

Pour le faire fonctionner, il faut naturellement que le serveur ARexx tourne (commande rexxmast). Recopiez le programme dans le répertoire rexx: et créez un fichier de configuration que vous placerez dans s:. Le lancement proprement dit se fait par la commande "rx Events", que vous pouvez placer telle quelle dans votre startup-sequence. Si vous utilisez WShell, c'est encore plus simple : il vous suffit d'appeler "Events".

Lorsqu'un événement survient, le menu qui apparaît est très simple : vous pouvez effacer définitivement cet événement ou demander à ce qu'on vous le rappelle dans un an, un mois, la prochaine fois ou encore dans un nombre de jours que vous pouvez préciser. Si ce menu vous semble insuffisant, libre à vous de modifier le programme ! Notez qu'au cas où un incident malheureux détruise votre fichier de configuration, il vous est possible de le récupérer sous le nom "s:.eventsconfig.old". En effet, Events prend la précaution de faire une copie de sauvegarde avant de commencer à le modifier.

Le listing

ARexx
ARexx
ARexx
ARexx


[Retour en haut] / [Retour aux articles]