Pourquoi écrire en Assembleur?
Utiliser l'assembleur comme langage de programmation n'est pas si
populaire de nos jours. Comme si c'était une règle les gens
préfèrent utiliser des langages de troisième (3GL) ou
quatrième génération (4GL).
D'habitude - pour des applications simples - ceci est absolument vrai. Il
y a cependant des situations où il est prudent de peser tous les
arguments pour et contre l'utilisation de l'assembleur.
D'un côté il y a les arguments contre l'utilisation de
l'assembleur en large partie basés sur des préjugés, et de l'autre
côté il y a les arguments pour l'utilisation de l'assembleur
comme langage relativement inconnu. Quand vous vous basez sur les
préjugés
de l'assembleur sans connaître les
avantages,
il devient très difficile de prendre des décisions objectives
concernant le choix de ce langage de programmation.
Une règle reste importante comme c'est le cas pour tout les langages
de programmation: sans personnel bien entraîné vous ne pourrez
jamais aboutir, sans bonne documentation vous finirez par faire n'importe
quoi.
Ci-dessous vous trouverez une vue d'ensemble des plus importants
avantages de l'assembleur. Ensuite nous essayerons
de réévaluer les
préjugés. Nous terminerons par un
petit résumé.
Travailler avec l'assembleur vous offre une palette de possibilités,
qui ne sont pas (toutes) disponibles avec les langages 3GL et 4GL.
- Les erreurs corrigeables.
Combien de fois arrive-t-il à votre application de tomber en panne si
facilement? Un abend S0C7 parce qu'il y a des blancs, où on attendait
des zéros? Un fichier intermédiaire qui était
alloué juste un peu trop court?
Avec l'aide d'une routine assembleur relativement assez simple ces problèmes peuvent être
évités et résolus. Votre application ne tombera plus en panne, elle continuera
juste à tourner. Tous les problèmes rencontrés
sont reportés soit dans le joblog ou dans un log séparé, laissant la
possibilité au contrôleur des commandes de faire les actions
nécessaires.
- Utilisation de la mémoire au-dessus des 16MB.
Il y a encore des entreprises qui sont obligées de compiler avec Amode=24. En
ajoutant de simples modules en assembleur vous pouvez avoir votre application
qui tourne au-dessus des 16MB, réduisant les besoins de mémoire en dessous des
16MB où il en manque le plus facilement.
- Gestion dynamique de la mémoire.
Les programmes qui maintiennent des données en tables ou listes, ne savent
souvent pas à l'avance de quelle quantité de mémoire ces objets vont avoir
besoin. En assembleur l'espace mémoire peut être alloué et désalloué
dynamiquement, vous laissant agrandir ou diminuer votre espace mémoire.
- Optimisation..
Les derniers compilateurs génèrent un code très efficient. Mais ils ne peuvent
cependant pas décider quels critères d'optimisation sont d'importance
primordiale dans vos programmes spécifiques. Parce que le programmeur a la
connaissance de la structure de votre application, il peut prendre cette
décision. Il peut par exemple choisir de réduire le risque de page volée,
rendant le programme plus rapide et réduisant la pagination du système.
- Utilisation des facilités du système d'exploitation.
De tels services ne sont pas disponibles dans les langages de haut niveau
ou, s'ils sont disponibles, la consommation supplémentaire induite
par l'appel des langages de haut niveau à ces services dépasse
largement les bénéfices de performance que l'on peut
attendre.
Parmi d'autres:
- Data spaces.
Les programmes qui ont besoin d'un espace de travail important pourraient bien
utiliser les data spaces. Ceci réduit le besoin d'allouer des fichiers de
travail (qui à son tour réduit les I/Os) et dans le même temps diminue les
besoins dans votre espace mémoire, réduisant le risque de débordement.
- Virtual look-aside facility.
VLF vous donne la possibilité de garder vos données dans un espace mémoire
virtuel, en dehors de votre espace mémoire, dans le cas d'utilisation
importante les données qui peuvent être reconnues (par exemple: des membres de
PDS de certaines librairies) ceci peut substantiellement réduire les temps
d'I/O de votre application.
- Accès concurrents sur plusieurs fichiers.
Quand une application a besoin d'accéder à des enregistrements de deux fichiers
ou plus, ces enregistrements peuvent être lus et/ou écrits en même temps. Il
est même possible d'accéder à plusieurs enregistrements dans un même fichier en
même temps. Cette concurrence peut faire gagner considérablement de temps
d'attente sur les I/Os, spécialement quand les fichiers sont sur des volumes différents.
- Sous-tâches.
En découpant une tâche en sous-tâches, cette tâche peut tourner
considérablement plus vite. Par exemple: en éliminant le besoin d'écrire des
données sur un fichier de travail. Ou en laissant à une sous-tâche le soin de
créer les enregistrements nécessaires à un journal financier, rendant la
transaction des ventes plus rapide.
- Réentrance.
En rendant réentrant les segments de programmes très utilisés, ils peuvent être
placés dans une mémoire commune (de préférence au dessus des 16MB bien sûr).
Ceci veut dire que les programmes qui utilisent ce code peuvent être exécutés
plus efficacement, parce que les chances d'une faute de page dans ce genre de
code sont minimes.
Il y a plusieurs préjugés contre la programmation
en assembleur. Les plus importants sont:
- En assembleur la programmation structurée est impossible.
Ceci est faux. Sur ce point l'assembleur offre actuellement plus de
facilités que la plupart des 3GLs.
- Maintenir les programmes en assembleur coûte beaucoup plus cher que les 3GLs.
Quand les programmes de 3GLs ont été créés ceci était vrai! Depuis cette
vérité est hautement discutable.
- L'Assembleur est un langage où tout est permis, et difficile à apprendre.
L'Assembleur est certainement un peu moins lisible au profane qu'un
programme Cobol. D'autres langages comme C et C++ sont plus difficile à
maîtriser.
- Ad 1.
- En assembleur la programmation structurée est impossible.
En amenant une structure dans les programmes c'est d'abord et surtout une question
de style et de qualité. Si le langage de programmation utilisé offre de bonnes
facilités, ce peut être une aide, mais pas plus que cela.
- Dans le monde des programmes la
segmentation de l'assembleur offre plus de possibilités que les 3GLs: proche des
sous-routines ou des fonctions il est aussi possible en assembleur de diviser
les programmes en CSECTs, qui à leur tour peuvent être subdiviser en
sous-routines et/ou fonctions.
En plus de cela, on peut choisir diverses façons d'appeler ces routines. Parmi
elles il y a l'appel standard MVS avec le registre 14, la pile de linkage ou
les autres mécanismes d'appel, avec ou sans utilisation d'une table de
branchement.
Enfin, pour passer des paramètres, on peut choisir entre passer par valeur,
passer par référence ou un mélange des deux.
- Quand on est concerné par des
contrôles de boucles, l'assembleur offre des facilités comparables aux 3GLs: ce
sont les branchements sur index et les branchements sur compteurs. Avec l'aide
des macros ces facilités peuvent être étendues avec des instructions plus
puissantes.
- Comme la plupart des 3GLs,
l'assembleur permet de copier du code standard de librairies dans vos
programmes.
- Pour finir l'utilisation des macros
offre de larges possibilités pour structurer les programmes et pour standardiser les
routines pendant l'écriture des programmes. En paramètrant l'assemblage il est
possible en plus d'optimiser le code qui sera généré. La plupart des 3GLs
n'offrent pas de fonctionnalités comparables.
- Ad 2.
- Maintenir les programmes en assembleur coûte beaucoup plus cher que les 3GLs.
Quand les 3GLs ont été lancés il y avait un grand nombre de programmes en
assembleur. Parce que la programmation structurée était une nouvelle méthode,
ces programmes ont perdu beaucoup d'intérêt. En assembleur - comme dans les
autres langages - vous pouvez mettre une structure ou ne pas le faire. Avec
toutes les conséquences habituelles pour leur maintenance.
En assembleur vous avez plus d'opportunités que dans les 3GLs pour faire
n'importe quoi. Mais grâce aux macros, vous avez un nombre considérable
d'options pour mettre une structure dans vos programmes, bien plus que dans
d'en d'autres langages.
L'habileté à manier un langage est d'une importance primordiale. Un programmeur
3GL qui utilise aussi lassembleur ne peut jamais se mesurer à
un professionnel de l'assembleur. Les effets sont mesurables non seulement en
terme de temps nécessaire pour que le travail soit fait, mais aussi en terme de
qualité du code produit. Le problème majeur, ensuite, est d'avoir des
programmeurs expérimentés dans votre équipe. Un problème que vous
rencontrerez quel que soit votre choix de langage de programmation,
spécialement dans ces conditions.
Donc, si nous voulons faire une comparaison valable du personnel entre assembleur
et 3GLs, nous devons comparer des hommes de métier avec des hommes de métier,
et nous devons aussi prendre en compte la vieillesse des programmes (en terme
de mesure de structure), ainsi que la qualité de la documentation disponible.
Notre expérience, pour les nouveaux programmes, montre que vous avez besoin de
10 à 20 pour cent de main d'œuvre en plus pour programmer en assembleur. Quand
la maintenance est concernée, les différences sont trop dépendantes de la
disponibilité de la documentation et de l'importance de la structure dans les
programmes pour donner une estimation valable.
Un exemple: un de nos clients a un module assembleur, écrit par nous, et un
module Cobol, les deux faisant exactement la même chose. Pour les dernières
modifications le programmeur assembleur était prêt en un jour, alors que le
programmeur Cobol avait besoin de trois jours. Bien que ceci semble
exceptionnel, cela prouve que la maintenance de programmes assembleur n'est,
par définition, pas plus coûteux que la maintenance des programmes 3GL.
- Ad 3.
- L'Assembleur est un langage difficile à apprendre.
Si vous dépendez de "profanes" vous ne choisirez certainement pas
l'assembleur. Comme pour les autres langages vous ne ferez que créer vos
propres difficultés!
Bien sûr, il y a de vrais professionnels. Ils ne maîtrisent pas seulement
l'habilité de la programmation en assembleur mais ils ont aussi une
connaissance approfondie des macros que l'assembleur offre. Ceci nous permet de
coder rapidement, efficacement et avec soin.
Les arguments pour et contre l'assembleur sont
résumés ici:
- Ecrire en assembleur prend plus de temps,
mais moins que ce que les gens en pensent.
- L'assembleur offre plus de facilités pour
structurer un programme, même si le manque de professionnels apporte plus
facilement des problèmes de maintenance.
- En assembleur on a plus de possibilités
pour résoudre ou prévenir des problèmes de performance.
- Cela prend plus d'effort pour trouver ou
former des professionnels.
En prenant tout cela en compte, notre devise
est: ne pas écrire en assembleur quand ce n'est pas utile. De l'autre côté, si
vous avez de bonnes raisons de le faire, ne vous en privez pas; l'assembleur
n'est pas un monstre. Et si vous
choisissez l'assembleur, utilisez le seulement pour les modules qui en
tireront profit. La plus grande partie de vos applications est probablement
mieux maîtrisée dans des langages 3GLs ou 4GLs.
Pour terminer, pour certaines applications il
n'est tout simplement pas possible d'utiliser un autre langage que l'assembleur.
Ceci est particulièrement vrai pour la plupart des exits.
Non seulement le système d'exploitation, mais aussi un bon nombre de produits
standards est programmé avec des exits, pour permettre une installation du
logiciel adapté à vos besoins. Pour la majorité des exits l'assembleur est
simplement inévitable. Avec tous ces arguments il ne devrait plus y avoir de
problèmes insurmontables.
Ce site est un membre de WebRing.
Vous êtes invités à parcourir la
liste des sites des amoureux des mainframes.
|
|
Les dinosaures ne sont pas morts. Ils vivent et ils résident dans
les centres de données tout autour de nous. Ils parlent plusieurs
langues et travaillent magiquement avec les ordinateurs. Attention aux
dinosaures! Et au cas où vous attendiez la fin des dinosaures:
rappelez-vous que les dinosaures ont régit le monde pendant 155
millions d'années!
|
Dinosaures et autres anachronismes
[ Joindre maintenant
| Sites Ring
| Au hasard
|
<< Précédent
|
Suivant >>
]
|
Pour les avantages de l'assembleur.
Pour les préjugés contre l'assembleur.
Pour le résumé.
Pour la page d'accueil française.
Pour la page d'accueil générale.
Ci-dessous vous trouverez le logo de notre
sponsor
et les logos des sites web auxquels nous adhèrons.