Perché usare l'Assembler?
L'utilizzo dell'Assembler come linguaggio di programmazione non è più
così diffuso. Di norma i programmatori preferiscono usare linguaggi di terza
o di quarta generazione (di seguito: 3GLs o 4GLs).
Normalmente - per applicazioni ordinarie - questo è assolutamente vero.
Tuttavia ci sono casi in cui sarebbe consigliabile valutare bene sia gli argomenti
a favore sia gli argomenti contro l'utilizzo di questo linguaggio.
Se da un lato gli argomenti contro l'uso dell'Assembler sono in larga parte
frutto di pregiudizi, dall'altro i motivi a favore di questo linguaggio sono
relativamente poco conosciuti. Quando si conoscono i pregiudizi
contro l'Assembler senza conoscerne i vantaggi, diventa difficile
scegliere obiettivamente il linguaggio di programmazione adatto.
Una regola importante - così come per qualsiasi linguaggio di
programmazione - è la seguente:
senza personale qualificato non si raggiungerà alcun obiettivo, senza un'adeguata
documentazione si rischierà di non sapere più a che punto si è
arrivati.
Di seguito troverai una panoramica dei più importanti
vantaggi
dell'Assembler. Proseguendo, proveremo a smontarne i
pregiudizi.
Alla fine cercheremo di trarre le
conclusioni.
Lavorare con l'Assembler offre una gamma di possibilità, non (tutte)
disponibili nei 3GLs o 4GLs.
- Errori evitabili.
Quante volte capita che l'applicazione si "inceppi" su una cosa così
banale? Un Abend-0C7 a causa di una serie di spazi (blank), anzichè di zero?
Oppure un dataset temporaneo allocato un po' troppo piccolo? Con l'aiuto di una
semplice routine Assembler questo tipo di problemi possono essere risolti.
La tua applicazione non si interrompe più, continuando a funzionare.
Tutti i problemi riscontrati verranno documentati nel joblog o in un error log
separato, consentendo al controllore dei comandi a prendere le dovute contromisure.
- Utilizzo della memoria sopra la linea dei 16 MB.
Ancora oggi ci sono aziende che compilano i loro applicativi in Amode=24.
Con l'aggiunta di piccoli moduli in Assembler si potranno far girare programmi
applicativi sopra la linea dei 16 MB, liberando così spazio per quei
programmi che girano sotto la 16MB-line.
- Gestione dinamica della memoria.
I programmi che mantengono dati in tabelle, liste o strutture ad albero non conoscono
in anticipo di quanto cresceranno le dimensioni di questi oggetti. In Assembler la
memoria può essere allocata o deallocata dinamicamente, consentendo di
allargare o diminuire la grandezza di tali oggetti nella dimensione richiesta.
- Ottimizzazione.
I compilatori di ultima generazione creano certamente dei programmi efficienti.
Tuttavia, essi non sono in grado di decidere quale criterio di ottimizzazione
si adatta meglio ad un programma specifico. Dal momento che il programmatore
conosce la struttura della sua applicazione, solo lui è in grado di
prendere una tale decisione. Per esempio potrebbe decidere di ridurre il rischio
di page-steal, facendo in modo che il suo programma giri più velocemente
e diminuendo quindi il carico del sottosistema di paginazione.
- Uso dei servizi del sistema operativo. Molti di questi servizi non sono disponibili
per i linguaggi ad alto livello, e quando lo sono le linee di codice in più richieste
da questo linguaggio per servirsi di questa o quella facility mette molto spesso in
secondo piano i vantaggi che ne sarebbero derivati in termini di prestazione.
Tra i diversi servizi, ricordiamo:
- Data space.
Quei programmi che utilizzano grandi quantità di memoria potrebbero giovarsi
dell'uso dei data space. Questo riduce il bisogno di allocare dei work dataset
(che a sua volta riduce l'I/O) e al tempo stesso riduce l'uso di memoria virtuale
all'interno del tuo address space, diminuendo il rischio di abend per out-of-storage.
- Virtual look-aside facility.
Il VLF permette di mantenere dati in memoria virtuale, fuori dal proprio
address space. Per quei dati usati frequentemente (ad esempio membri di alcuni
dataset partitioned) questa servizio può ridurre i tempi di I/O della
tua applicazione.
- Accesso contemporaneo a più dataset.
Quando un'applicazione necessita di accedere ai record di due o più dataset,
questi record possono essere scritti e/o letti contemporaneamente. È
perfino possibile accedere a diversi record di un singolo dataset nello stesso
momento. Questa contemporaneità può diminuire considerevolmente il
tempo di attesa dell'I/O, specialmente quando i dataset interessati risiedono
su volumi diversi.
- Subtasks.
Separando uno o più subtask da un task principale, quest'ultimo può
aumentare considerevolemente la sua velocità d'esecuzione. Per esempio
eliminando il bisogno di scrivere dati su un work-dataset. Oppure lasciando il
compito di scrivere i necessari record cronologici ad un subtask, facendo così
in modo che la transazione vendite possa essere gestita più velocemente.
- Reenterability.
Rendendo rientrabili quei segmenti di programmi molto spesso utilizzati, questi
stessi possono essere piazzati in common storage (preferibilmente sopra la linea
dei 16MB). Questo significa che tutti quei programmi che usano quel codice possono
essere eseguiti più efficientemente, perché l'eventualità di
una condizione di page fault in questo tipo di codice è minima.
Esistono diversi pregiudizi contro l'utilizzo dell'Assembler. Tra questi
ricordiamo i più ricorrenti:
- In Assembler la programmazione strutturata è impossibile.
Questo non è vero. Al contrario, l'Assembler offre in proposito molte più
possibilità rispetto alla maggior parte dei 3GLs.
- La manutenzione dei programmi in Assembler è di gran lunga più
costosa rispetto a quella dei 3GLs.
Al tempo in cui i 3GLs furono introdotti, quest'affermazione poteva essere vera.
Al presente questa posizione è certamente opinabile.
- L'Assembler è un linguaggio scomodo e difficile da imparare.
L'Assembler è, certamente agli occhi di un profano, meno leggibile rispetto
al Cobol. D'altra parte è molto più difficile avere la completa
padronanza di linguaggi come il C e il C++.
- Punto 1.
- In Assembler la programmazione strutturata è impossibile.
Scrivere programmi in modo strutturato è essenzialmente una questione
di stile e di abilità. Se il linguaggio di programmazione offre diverse
possibilità in questo senso, questo rappresenta certamente un aiuto, ma
niente di più.
- Quando parliamo di segmentazione dei programmi teniamo presente che l'Assembler
offre più possibilità rispetto ai 3GLs: oltre al normale uso di
subroutine o funzioni, in Assembler è anche possibile dividere i programmi
in Control Section (CSECTs), che a loro volta potranno essere sottodivisi
ulteriormente in subroutines e/o funzioni.
Inoltre è possibile scegliere diversi meccanismi di chiamata. Tra gli altri
ricordiamo lo standard MVS-linkage tramite il registro 14, il linkage stack, od
altri meccanismi di chiamata con o senza l'uso della jump-table.
Il passaggio dei parametri può alla fine essere scelto in base al valore, al
riferimento, o a un insieme di questi due.
- Per ciò che riguarda il controllo dei loop, l'Assembler offre possibilità
comparabili con i 3GLs: sono le cosiddette istruzioni branch on index e branch on
instructions. Con l'ausilio di macro queste facility possono essere estese con
istruzioni più complesse.
- Così come la maggior parte dei 3GLs, l'Assembler è in grado di
copiare codice standard da un membro di una libreria direttamente nel tuo programma.
- Le macro consentono quindi un'ampia scelta per strutturare i propri programmi,
e per standardizzare la creazione di programmi ricorrenti. Mediante l'uso di
conditional assembly è sempre possibile ottimizzare il codice da generare.
La maggior parte dei 3GLs non offre funzionalità comparabili.
- Punto 2.
- La manutenzione dei programmi Assembler è più costosa rispetto ai 3GLs.
Quando i 3GLs furono introdotti, esisteva già una vasta base di programmi
Assembler. Siccome la programmazione strutturata era un principio relativamente nuovo
per quei tempi, questi programmi lasciavano sotto questo aspetto molto a desiderare.
In Assembler - così come per altri linguaggi - si può strutturare i propri
programmi tanto quanto se ne desideri. Con conseguenze per la loro successiva
manutenzione.
In Assembler, più che con i 3GLs, si hanno più possibilità di
fare molta confusione. Tuttavia, grazie alle macro, si ha un considerevole
numero di opzioni supplementari per strutturare i propri programmi rispetto agli
altri linguaggi.
La questione dell'abilità è di primaria importanza. Un programmatore
Cobol che "se la cava un po' con l'Assembler" non può certamente
misurarsi con un programmatore Assembler senior. Gli effetti sono verificabili non solo
per ciò che rigurda il tempo necessario per finire un determinato lavoro, ma
anche per quello che riguarda la qualità del codice prodotto. Il principale
problema quindi è come riuscire a trovare personale qualificato per il proprio
team. Un problema che si pone comunque, a prescindere dal linguaggio scelto.
Così, se vogliamo fare un giusto paragone per il personale richiesto tra
Assembler e 3GLs, dovremo paragonare professionisti con professionisti, prendendo
anche in considerazione l'età dei programmi (leggi: grado di strutturazione),
così come la documentazione disponibile.
La nostra esperienza ci dice che quando si lavora con l'Assembler per sviluppare
nuovi programmi, si necessita un 10, 20 percento in più di personale. Per
la manutenzione di programmi già esistenti la documentazione disponibile o
il grado di strutturazione dei programmi stessi possono differire di molto da caso
a caso, per cui diventa difficile fornire stime attendibili.
Un esempio: uno dei nostri clienti possiede un modulo in Assembler, creato da noi,
e uno in Cobol. Entrambi i moduli fanno esattamente la stessa cosa. Per implementare
alcune modifiche il programmatore Assembler ha avuto bisogno di una giornata, mentre
il programmatore Cobol ha lavorato tre giorni. Anche se questo può sembrare
un'eccezione, l'esempio ci mostra come l'aggiornamento di programmi Assembler non è
necessariamente più oneroso rispetto ai 3GLs.
- Punto 3.
- L'Assembler è un linguaggio scomodo e difficile da imparare.
Se siete in mano a dei dilettanti sarebbe meglio evitare di scegliere
l'Assembler. Così come per altri linguaggi, riuscireste solo a mettervi
in difficoltà da soli.
Certamente esistono anche professionisti qualificati in giro. Non solo hanno la
padronanza del linguaggio, ma posseggono una vasta conoscenza delle macro che
questo linguaggio è in grado di offrire. Questo ci permette di scrivere
programmi più rapidamente, efficienti e chiari.
Gli argomenti a favore e contro l'uso dell'Assembler possono essere
riassunti come segue:
- Lavorare con l'Assembler necessita di più tempo, anche se non
così tanto quanto si possa pensare.
- L'Assembler offre più possibilità per strutturare i
programmi, anche se la mancanza di abilità potrebbe far emergere
problemi in fase di aggiornamento.
- Con l'Assembler si hanno più possibilità di risolvere o
prevenire problemi di prestazione.
- Ci vogliono più tempo e risorse per trovare o formare dei
professionisti.
Concludendo, il nostro consiglio è il seguente: non usate l'Assembler
quando non è necessario. D'altra parte, in presenza di buone ragioni,
non scartatelo a priori; l'Assembler non deve spaventare. E in caso si è
scelto di farne uso, utilizzatelo per quei moduli che ne trarranno vantaggio.
La fetta più grande del vostro applicativo sarà probabilmente
scritta in un 3GLs o 4GLs.
Un ultima considerazione: per alcuni applicativi è semplicente
impossibile non usare l'Assembler. Questo vale soprattutto per la maggior
parte delle exit. Non solo il sistema operativo, ma anche molti prodotti
se ne servono per adattarne le funzionalità alle proprie esigenze.
Per molte di queste exit la codifica in Assembler è inevitabile.
E con gli argomenti discussi fin qui, quest'ultima non dovrebbe (più)
rappresentare un problema insormontabile.
Questo sito è membro del WebRing.
Clicca qui per una lista
dei siti sui mainframe.
|
|
I dinosauri non sono morti. Sono vivi e vegeti e vivono nei centri
elaborazione dati intorno a te. Parlano una loro lingua e fanno strane
magie con i computer. Stai in guardia! E in caso tu stia aspettando la loro
prossima estinzione, ricorda che i dinosauri hanno dominato il mondo per
155 milioni di anni!
|
Dinosauri ed altri anacronismi
[ Iscriviti
| Ring Hub
| Casuale
|
<< Prec
|
Succ >>
]
|
Vai a I vantaggi dell'Assembler.
Vai a I pregiudizi contro l'Assembler.
Vai alle Conclusioni.
Alla Home Page italiana.
Alla Home Page generale.
Di seguito troverai il logo del nostro
sponsor
e altri logo standard ai quali le nostre pagine web aderiscono.