Warum Assembler benutzen?
Assembler als Programmiersprache ist nicht mehr sehr populär
heutzutage. Normalerweise wird eine dritte oder vierte
Generationssprache benutzt.
Normalerweise - für "08/15" Anwendungen - ist dies genau
richtig. Es gibt aber Situtationen in denen es nötig ist die
Argumente für und gegen Assembler genau zu betrachten.
Auf der einen Seite sind die Argumente gegen die Benutzung von
Assembler zum grossen Teil Vorurteile, auf der anderen Seite sind die
Argumente für die Benutzung relativ unbekannt. Wenn man die
Vorurteile gegen Assembler kennt und die
Vorteile nicht kennt, wird es sehr schwer eine
objektive Entscheidung bei der Wahl der Programmiersprache zu treffen.
Eine Regel bleibt wichtig - wie für
jede
Programmiersprache: ohne gut ausgebildete Leute kommt man nirgendwo
hin, ohne gute Dokumentation enden Sie gar an einer unbekannten
Position.
Unten finden Sie eine Übersicht über die wichtigsten
Vorteile
von assembler. Dannach werden wir versuchen die
Vorurteile zu beseitigen.
Wir beenden mit einer kurzen
Zusammenfassung.
Das Arbeiten mit Assembler bietet eine Reihe von Möglichkeiten,
welche nicht (in dieser Gesamtheit) verfügbar sind für 3GL-
oder 4GL-Programmierer.
- Abwehrfehler.
Wie oft passiert es das Ihre Anwendungen über etwas so simples
wie einen S0C7 stolpern, oder über eine zu kleine Zwischendatei.
Mit der Hilfe einer relativ einfachen Assemblerroutine können
diese Probleme gehandhabt und gelöst werden. Ihre Anwendungen
stürzen nicht einfach ab, sondern laufen weiter. Alle
aufgetretenen Probleme werden protokolliert, und erlauben es dem
Kontroller die nötigen Aktionen durchzuführen.
- Benutzung von Speicher über der 16MB-Linie.
Es gibt immer noch viele Unternehmen die (gezwungenermassen) mit
AMODE=24 umwandeln. Durch Ergänzung um kleine Assemblermodule
können Ihre Anwendungsprogramme über der 16MB-Linie laufen
und so den Druck unter der 16MB-Linie reduzieren.
- Dynamische Speicherverwaltung.
Programme die Daten in Tabellen, Listen oder Bäumen pflegen,
wissen oft nicht im Voraus wie groß der Speicherbedarf sein
wird. In Assembler kann Speicher dynamisch zugeordnet und freigegeben
werden. Dies erlaubt es nur den wirklich benötigten Speicher
anzufordern und zu nutzen.
- Optimierung.
State-of-the-art Compiler generieren sicher effizienten Kode. Sie
können aber nicht entscheiden, welches Ihre speziellen
Optimierungsziele sind. Da ein Programmierer die Struktur Ihrer
Anwendung kennt, kann er diese Entscheidung treffen. Er kann zum
Beispiel das Risiko einer page-steal Operation verringern, um so das
Programm schneller zu machen und die Last auf dem paging Subsystem zu
reduzieren.
- Benutzung von Betriebssystemmöglichkeiten.
Viele dieser Möglichkeiten sind nicht nutzbar von höheren
Programmiersprachen. Wenn sie nutzbar sind, ist z.T. der
zusätzliche Aufwand erheblich, sodaß ein möglicher
Performancegewinn von diesem Aufwand überlagert wird.
Unter anderem sind zu nennen:
- Data spaces.
Programme die große Mengen Speicher benötigen,
können Data Spaces benutzen. Dies veringert den Zwang
Arbeitsdateien anzulegen (welches wiederum I/Os spart) und zur
selben Zeit wird der Bedarf an Speicher reduziert (welches
out-of-storage abends vermeidet).
- Virtual look-aside facility.
VLF ermöglicht es benannte Daten in Speicher ausserhalb des
eigenen Addreßraumes zu halten. Für intensiv benutzte
Daten (z.B. Member in bestimmten PDS-Dateien) kann dies die Zeit
für I/Os für Ihre Anwendungen erheblich verkürzen.
- Gleichzeitiger Zugriff auf verschiedene Dateien.
Wenn eine Anwendung Sätze aus zwei oder mehr Dateien lesen
und/oder schreiben will, kann dies zur selben Zeit passieren. Dies
ist sogar für Sätze der gleichen Datei möglich.
Diese Überlappung kann erhebliche I/O-Wait Zeiten einsparen,
besonders wenn die Sätze auf unterschiedlichen Volumes liegen.
- Subtasks.
Durch Aufteilung auf mehrere Subtasks kann eine Task erheblich
beschleunigt werden. Z.B. durch Verlagerung der nötigen
Anlegung von Journalsätzen in eine zweite Task kann die
Verkaufstransaktion beschleunigt werden.
- Reenterability.
Indem häufig benutzte Programme reentrant gemacht werden,
können diese in gemeinsam genutzten Speicher (bevorzugt
über der 16MB Linie) gelegt werden. Dies bedeutet, das alle
Programme, die diesen Kode benutzen, beschleunigt werden, weil die
Wahrscheinlichkeit für einen Page Fault minimal wird.
Es gibt verschiedene Vorurteile gegen das Arbeiten mit Assembler.
Die Wichtigsten sind:
- In Assembler ist strukturierte Programmierung unmöglich.
Dies ist nicht wahr. In diesem Bereich bietet Assembler
tatsächlich mehr Möglichkeiten als viele 3GLs.
- Pflege von Assemblerprogrammen ist viel teurer als die Pflege von
3GLs.
Als 3GLs eingeführt wurden mag dies gestimmt haben. Aber heute
ist diese Aussage durchaus debatierbar.
- Assembler ist eine umständliche Sprache, und schwer zu
lernen.
Assembler ist in der Tat ein bischen weniger lesbar für den
Laien als z.B. COBOL. Sprachen wie C und C++ auf der anderen Seite
sind viel schwerer zu beherschen.
- Zu 1.
- In Assembler ist strukturierte Programmierung unmöglich.
Struktur in Programme zu bringen ist zu Allererst eine Frage des
Stils und der Arbeitsmethode. Wenn die benutzte Programmiersprache
gute Möglichkeiten in diesem Bereich bietet, kann das eine Hilfe
sein, aber nicht mehr.
- Im Bereich Segmentierung bietet Assembler mehr
Möglichkeiten als 3GLs: Neben dem üblichen
Unterprogrammen und Funktionen, kann man Programme in CSECTs
unterteilen, welche wiederum in Unterprogramme und Funktionen
aufgeteilt sein können.
Als Zusatz kann man zwischen verschiedenen Arten des Aufrufs
wählen. Unter anderem: Standard 360-Linkage Konventionen, dem
Linkage-Stack oder andere Aufrufmethoden, mit oder ohne
Verzweigetabelle.
Für die Weitergabe von Parametern schließlich besteht
die Wahl zwischen Weitergabe des Wertes, der Referenz oder eine
Mischung hiervon.
- Bei der Schleifenkontrolle gibt es in Assembler mit 3GLs
vergleichbaren Möglichkeiten. Dies sind die so genannten
"branch on index" und "branch on count"
Instruktionen mit ihren relativen Brüdern. Mit Hilfe von
Macros kann man diese Intruktionen um weitere mächtige
Möglichkeiten erweitern.
- Genau wie viele 3GLs hat Assembler ein Copyfeature um
Standardkode von einem Bibliotheksmember in das Programm zu
kopieren.
- Die Macro-Möglichkeit schließlich bietet ein breites
Spektrum um Struktur in Programme zu bringen und wiederkehrende
Programmkonstrukte zu standardisieren. Bei Benutzung von
conditional assembly ist es immer möglich den generierten Kode
zu optimieren. Die meisten 3GLs bieten keine vergleichbare
Funktion.
- Zu 2.
- Die Pflege von Assembler Programmen ist weit teurer als die Pflege
von 3GLs.
Als 3GLs zuerst eingeführt wurden, gab es eine breite Basis
existierender Assembler Programme. Weil strukturierte Programmierung
relativ neu in jenen Tagen war, liesen diese Programme vieles zu
wünschen übrig, wenn es um Struktur ging. In Assembler -
wie in jeder anderen Sprache auch - kann man beliebig viel oder wenig
Struktur erzeugen. Mit allen Konsequenzen für die spätere
Pflegbarkeit.
In Assembler gibt es mehr Möglichkeiten, als in vielen 3GLs ein
Chaos anzurichten. Dank der Macro-Möglichkeit gibt es aber
mehrere wichtige Optionen mehr Struktur zu erzeugen als in anderen
Sprachen.
Eine sehr wichtige Frage ist die Frage des Stils. Ein
3GL-Programmierer der nebenher "ein bischen Assembler"
macht, kann sich niemals mit einem professionellem
Assembler-Programmierer messen. Die Resultate sind meßbar und
zwar nicht nur in der Zeit in der eine gegebene Arbeit erledigt wird,
sondern auch in der Qualität des produzierten Kodes. Das
Hauptproblem ist demnach: wie finde ich den erfahrenen Profi. Ein
Problem das Sie aber immer haben, egal welche Sprache Sie
wählen.
Um also einen fairen Vergleich für benötigte Mannpower
zwischen Assembler und 3GLs durzuführen, muß man
Handwerker mit Handwerker vergleichen und man muß das Alter der
Programme (lies: Grad der Strukturierung) berücksichtigen und
die Qualität der vorhandenen Dokumentation.
Unsere Erfahrung mit neuen Programmen ist ein ca. 10 bis
20-prozentiger Mehrbedarf für Entwicklung in Assembler. Wenn es
um Pflege geht, ist der Unterschied zu abhängig von der
Verfügbarkeit von Dokumentation und der Struktur der Programme
um sinnvolle Zahlen zu liefern.
Ein Beispiel: Einer unserer Kunden besitzt ein Assembler Modul (von
uns) und ein COBOL-Modul. Beide tun exakt dasselbe. Die letzten paar
Änderungen wurden von einem Assembler-Programmierer an einem Tag
durchgeführt, wohingegen der Cobol-Programmierer 3 Tage
brauchte. Obwohl dies außergewöhnlich klingt, zeigt es
doch das Pflege eines Assembler Programmes nicht automatisch
aufwendiger ist als Pflege eines 3GL Programmes.
- Zu 3.
- Assembler ist eine umständliche Sprache, und schwer zu
lernen.
Wenn Sie von "Laien" abhängig sind, sollten Sie
sicher nicht Assembler wählen. Wie mit jeder anderen Sprache
werden Sie nur Ihre eigenen Probleme erzeugen.
Natürlich gibt es auch Profies. Diese können nicht nur
Assembler programmieren, sondern beherrschen auch die verschiedenen
Optionen, die Assembler bietet. Dies ermöglicht eine
zügige, effiziente und saubere Arbeit.
Die Argumente für und gegen den Gebrauch von Assembler
können wie folgt zusammen gefaßt werden:
- Arbeiten mit Assembler braucht ein kleines bischen mehr Zeit. Aber
bei Weitem nicht soviel, wie man gemeinhin denkt.
- Assembler bietet mehr Möglichkeiten zur Strukturierung,
obwohl fehlender Professionalismus produziert leichter
Pflegeprobleme.
- In Assembler gibt es mehr Möglichkeiten Durchsatzprobleme zu
lösen oder zu verhindern.
- Man benötigt mehr Zeit einen Profi zu finden.
Zusammenfassend unser Tipp: Kein Assembler wenn es nicht sein
muß. Auf der anderen Seite, wenn es Gründe gibt, nur nicht
genieren; Assembler ist nicht furchteinflössend. Und wenn Sie
Assembler einsetzen, bitte nur für die Module die davon
profitieren. Der größere Teil Ihrer Anwendung wird
wahrscheinlich am besten in Ihrer Lieblings-3GL oder 4GL geschrieben.
Schließlich, für manche Anwendungen gibt es keine
Alternative zu Assembler. Dies gilt insbesondere für viele Exits.
Nicht nur das Betriebssystem, sondern auch viele Standard Produkte
sind mit Exitpunkten ausgestattet, damit Installationen diese Software
an ihre Bedürfnisse anpassen können. Für viele Exits
ist Assembler die einzige Sprache. Mit obigen Argumenten sollte dies
(ab jetzt hoffentlich) kein unüberwindbares Problem sein.
Diese Seite ist Mitglied im einem Web-Ring.
Sie sind eingeladen die
Liste der Mainframe-Liebhaber-Internetseiten
zu durchstöbern.
|
|
Dinos sind nicht tod. Sie sind am Leben und fühlen sich wohl
in einem Rechenzentrum in Ihrer Nähe. Sie sprechen seltsame
Sprachen und betreiben Zauberei mit dem Computer. Und falls Sie auf
ihr endgültiges Aussterben warten: Dinosaurier waren die Herren
der Welt für 155 Millionen Jahren!
|
Dinos und andere Anachronismen.
[
Join Now
|
Ring Hub
|
Random
|
<< Prev
|
Next >>
]
|
Nach die Vorteile von Assembler.
Nach die Vorurteile gegen Assembler.
Nach die Zusammenfassung.
Nach die deutsche Homepage.
Nach die allgemeine Homepage.
Hier finden Sie die Logos unserer
Sponsoren
und die Logos der Web-Standarts an die sich diese Seite hält.