Waarom assembler?
Het gebruik van assembler als programmeertaal is niet populair meer. Over het
algemeen geeft men de voorkeur aan derde of vierde generatie talen.
Meestal - voor "gewone" applicaties - is dit volkomen terecht. Er zijn echter
wel degelijk situaties, waarin het wijs is om de argumenten voor en tegen eens
goed op een rij te zetten.
Niet alleen berusten de argumenten tegen het gebruik van assembler grotendeels
op vooroordelen, ook zijn de argumenten voor het gebruik van assembler relatief
onbekend. Wie de vooroordelen tegen assembler wel kent, maar
de voordelen ervan niet, kan moeilijk een objectieve
beslissing nemen ten aanzien van de taalkeuze.
Wel blijft natuurlijk altijd gelden wat voor elke programmeertaal
geldt: zonder goed opgeleide mensen kom je nergens. Zonder documentatie blijf
je nergens.
Hieronder volgt eerst een overzicht van de belangrijkste
voordelen
van assembler. Vervolgens een poging om de
vooroordelen
te nuanceren. We eindigen met een korte
samenvatting.
Het werken met assembler biedt u een aantal mogelijkheden, die 3GL- en
4GL-programmeurs niet (altijd) tot hun beschikking hebben.
- Fouten ondervangen.
Hoe vaak gebeurt het dat een applicatie struikelt over een onnozel
probleempje? Een S0C7-abend doordat er spaties stonden waar nullen verwacht
werden? Een hulpdataset die net iets te klein gealloceerd is? Met behulp van
een relatief eenvoudige assembler-routine zijn dit soort problemen af te
vangen en op te lossen. Uw applicatie struikelt niet, maar loopt gewoon door.
Het geconstateerde probleem wordt gemeld in de joblog of in een aparte error
log, zodat de verantwoordelijke beheerder de benodigde acties kan
ondernemen.
- Gebruik van geheugen boven de 16MB-lijn.
Er zijn nog steeds bedrijven die hun compiler (moeten) instellen op Amode=24.
Door het toevoegen van kleine assembler-modules kunt u uw programma's wel
boven de 16MB-lijn laten draaien, waardoor op cruciale punten de druk op het
geheugen onder de 16MB-lijn wordt verlicht.
- Dynamisch geheugenbeheer.
Programma's die gegevens bijhouden in tabellen, lijsten, of bomen weten vaak
van te voren niet hoe groot die tabellen etc. zullen moeten worden. In
assembler kan geheugen dynamisch worden aangevraagd en weer vrijgegeven,
waardoor tabellen etc. gemakkelijk zijn uit te breiden en/of in te krimpen tot
het benodigde formaat.
- Optimalisatie.
De moderne compilers maken zeker efficiënte code aan. Zij kunnen echter
niet bepalen welk optimalisatie-criterium voor u in een bepaald programma van
cruciaal belang is. Door de kennis die de programmeur heeft van de structuur
van de applicatie kan hij dit wel. Hierdoor kan bijvoorbeeld geanticipeerd
worden op page-steal, waardoor het aantal page faults gereduceerd kan worden.
Resultaat: uw programma loopt sneller, en het systeem krijgt meer lucht.
- Het gebruik van faciliteiten die het operating system biedt. Veel van dit
soort services zijn niet beschikbaar in
'hogere' programmeertalen, en wanneer ze dat wel zijn, dan is vaak de overhead
van het aanroepen vauit die taal zo groot, dat het het performance voordeel
al gauw te niet doet.
U kunt hierbij onder meer denken aan:
- Data spaces.
Programma's die behoefte hebben aan grote hoeveelheden werk-geheugen kunnen
hiervan gebruik maken. U hoeft hierdoor minder gauw hulpdatasets te alloceren
(scheelt I/O), en u bespaart virtual storage in uw eigen address space,
waardoor u minder gauw een out-of-storage-abend zult krijgen.
- Virtual lookaside facility.
VLF biedt u de gelegenheid om benoemde gegevens in virtual storage te bewaren,
buiten uw eigen address space. Voor benoembare gegevens die veelvuldig worden
geraadpleegd (bv PDS-members uit bepaalde datasets) kan dit behoorlijk wat
I/O-vertraging besparen.
- Gelijktijdig benaderen van meerdere datasets.
Wanneer een applicatie records uit twee of meer datasets nodig heeft, kunnen
deze gelijktijdig worden gelezen en/of geschreven. Het is zelfs mogelijk
meerdere records uit een enkele dataset gelijktijdig te benaderen. Deze
gelijktijdigheid kan heel wat I/O-wachttijd schelen, vooral als de betreffende
datasets niet op hetzelfde volume staan.
- Subtaken.
Door van een taak een of meer subtaken af te splitsen kan de verwerkingstijd
enorm bekort worden. B.v. door het schrijven en lezen van tussenbestanden
overbodig te maken. Of door het aanmaken van de journaalpost aan een subtaak
over te laten, waardoor de verkoop-transactie zelf sneller afgehandeld kan
worden.
- Reenterability.
Door veel-gebruikte programma-segmenten reenterable te maken kunnen ze in
common storage geplaatst worden (liefst boven de 16MB-lijn natuurlijk).
Hierdoor kan het betreffende programma efficiënter worden uitgevoerd: de
kans op een page-fault in zo'n code-segment is relatief klein.
Over het werken met assembler bestaan een aantal vooroordelen.
De belangrijkste daarvan zijn wel:
- Gestructureerd programmeren kan niet in assembler.
Onjuist, in feite biedt assembler op dit terrein zelfs meer faciliteiten dan
de meeste 3GLs.
- Onderhoud aan assembler-programmatuur kost veel meer tijd dan bij een
3GL.
In de tijd dat 3GLs werden geïntroduceerd, was dit wellicht waar. Nu nog
maar zeer ten dele.
- Assembler is een omslachtige taal en moeilijk te leren.
Assembler is inderdaad iets minder doorzichtig voor de leek dan een taal als
Cobol. Een taal als C of C++ daarentegen is weer veel moeilijker te
leren.
- Ad 1.
- Gestructureerd programmeren kan niet in assembler.
Het aanbrengen van structuur in programma's is in de eerste plaats een kwestie
van stijl en vakmanschap. Als de gebruikte taal goede faciliteiten biedt is dat
mooi meegenomen.
- Op het gebied van segmentatie biedt assembler meer mogelijkheden dan 3GLs:
niet alleen kun je in assembler subroutines en functies maken, ook is het
mogelijk om programma's op te delen in CSECTS, die natuurlijk weer in
subroutines en/of functies kunnen worden opgedeeld.
Bovendien kan voor het calling mechanisme gekozen worden tussen een aantal
alternatieven, waaronder standaard MVS-linkage via register 14, de linkage
stack, of een ander calling mechanisme, al dan niet via een jump-table.
Voor het doorgeven van argumenten ten slotte kan gekozen worden tussen
pass-by-value en pass-by-reference, of een mengsel van die twee.
- Op het gebied van loop-control biedt assembler met 3GLs vergelijkbare
mogelijkheden: naast de branch-on-count zij er de branch-on-index instructies.
Met behulp van macro's kunnen deze mogelijkheden nog worden uitgebreid met
krachtiger instructies.
- Net als in de meeste 3GLs biedt assembler de mogelijkheid om
standaard-code vanuit een copy-member in uw programma's op te nemen.
- De macro-faciliteit ten slotte biedt diverse mogelijkheden voor het
aanbrengen van structuur en het standaardiseren van regelmatig weerkerende
programma-structuren. Door het gebruik van conditional assembly kan altijd
optimale code worden aangemaakt. De meeste 3GLs beschikken niet over
vergelijkbare functionaliteit.
- Ad 2.
- Onderhoud aan assembler-programmatuur kost veel meer tijd dan bij een 3GL.
Toen 3GLs geïntroduceerd werden, was er een grote basis van
assembler-programma's. Doordat gestructureerd programmeren toen nog een nieuwe
ontwikkeling was lieten deze programma's vaak te wensen over aan structuur. In
assembler kunt u - net als in andere talen - zo veel of zo weinig structuur
aanbrengen als u zelf wilt. Met alle consequenties voor de onderhoudbaarheid.
In assembler heeft u wel meer mogelijkheden dan in de meeste 3GLs om er een
rommeltje van te maken. Maar dank zij de macro-taal heeft u in assembler ook
weer aanzienlijk meer mogelijkheden voor het aanbrengen van structuur dan in
enige andere taal.
Verder geldt natuurlijk de kwestie van vakmanschap. De 3GL-programmeur die
assembler "er bij doet" kan zich niet meten met de vakman. Dat vertaalt zich
niet alleen in de benodigde tijd, maar ook in de kwaliteit van de geproduceerde
code. Probleem is dan natuurlijk wel, hoe u aan ervaren vakmensen komt. Maar
dat geldt - zeker op dit moment - voor elke taal.
Als we voor de benodigde mankracht een eerlijke vergelijking willen maken
tussen assembler en 3GLs dan moeten we dus niet alleen vakman naast vakman
zetten, maar ook de ouderdom van de programmatuur (lees: mate van structuur)
in ogenschouw nemen, alsmede de kwaliteit van de beschikbare documentatie.
Onze ervaring is dat u in de nieuwbouw dan zo'n 10 tot 20 procent extra
mankracht moet rekenen voor assembler. Bij onderhoud is het verschil te zeer
afhankelijk van de mate waarin de programmatuur gedocumenteerd en
gestructureerd is om enig cijfer te kunnen geven.
Een voorbeeld: een van onze klanten draait naast een door ons ontwikkeld
assembler-module een Cobol-variant met dezelfde functionaliteit. Bij de laatste
paar modificaties was de assembler-programmeur in één dag klaar;
de Cobol-programmeur had er drie dagen voor nodig. Hoewel dit een bijzonder
voorval zou kunnen zijn, toont het wel aan dat onderhoud aan assembler
programmatuur niet per definitie meer tijd vergt dan onderhoud aan
3GL-programmatuur.
- Ad 3.
- Assembler is een omslachtige taal en moeilijk te leren.
Als u van "leken" afhankelijk bent, dan moet u zeker niet voor
assembler kiezen. Zoals met elke andere taal creëert u dan uw eigen
moeilijkheden.
Maar er zijn natuurlijk ook vakmensen beschikbaar. Die beheersen niet alleen
de kunst van het assembleren, die hebben ook grondige kennis van de
macro-faciliteiten van de assembler, waarmee snel, efficiënt en netjes
coderen binnen handbereik komt.
De argumenten voor en tegen kunnen als volgt worden samengevat:
- Werken met assembler kost iets meer tijd, maar niet zo veel als men pleegt
te denken.
- Assembler biedt meer mogelijkheden tot structureren, maar bij gebrek aan
vakmanschap zullen er ook sneller onderhoudsproblemen kunnen ontstaan.
- In assembler heeft u meer mogelijkheden voor het oplossen of voorkomen van
performance-problemen.
- Het kost iets meer moeite om aan vakmensen te komen of ze op te
leiden.
Alles bij elkaar luidt ons standaard-advies: gebruik geen assembler als het
niet nodig is. Maar als er wel aanleiding toe is, loop er dan niet voor weg;
assembler is niet eng. En als u dan voor assembler kiest, bouw dan alleen die
modules in assembler, die daar baat bij hebben. Het grootste deel van uw
project kunt u prima in uw vertrouwde 3GL of 4GL bouwen.
Ten slotte is het voor sommige zaken domweg niet mogelijk een andere taal te
gebruiken dan assembler. Dit geldt met name voor veel exits.
Niet alleen het operating system, maar ook een groot aantal standaard produkten
zijn voorzien van de mogelijkheid om exits te installeren, teneinde e.e.a. op
uw eigen behoeften/specificaties af te stemmen. Voor de meeste exits geldt, dat
coderen in assembler domweg onvermijdelijk is. Met de hierboven gegeven
argumenten hoeft dat dus geen onoverkomelijk probleem (meer) te zijn.
Deze site is aangesloten bij WebRing.
Bekijkt u gerust de
lijst van mainframe-gerelateerde sites.
|
|
Dino's zijn niet dood. Ze zijn gezond en wel en leven in computer-centra overal
om ons heen. Zij spreken in tongen en doen wonderbare magie met computers.
Pas op voor de dino! En voor het geval u zit te wachten op het definitieve
einde van deze dino's: onthoud dat dino's de wereld 155 miljoen jaren hebben
geregeerd!
|
Dino's en andere anachronismen
[ Aanmelden
| Ring Overzicht
| Willekeurig
|
<< Vorige
|
Volgende >>
]
|
Naar de voordelen van assembler.
Naar de vooroordelen tegen assembler.
Naar de samenvatting.
Naar de nederlandse homepage.
Naar de algemene homepage.
Hieronder vindt u het logo van onze
sponsor
en logos van web-standaarden waaraan deze web-pagina voldoet.