Die fundamentale Paradoxie um Ada

20.11.1981

Executive Vice President der Informatics Inc., Woodland Hills, Kalifornien

Interessierte Leser werden ich erinnern, daß wir in der COMPUTERWOCHE Nr. 43 vom 23. Oktober auf die zahlreichen Kontroversen um die neue Programmiersprache Ada hingewiesen hatten. Zu den Kritikern dieser Sprache gesellte sich schon vor geraumer Zeit auch Capt. Grace Hopper, die in der Frühjahrsausgabe 1980 der "ICP Administration and Accounting" auf eine Frage über die Zukunftsaussichten von Ada wie folgt geantwortet hat: "Sie hat einen zu universellen Charakter. Ada ist eine Programmiersprache für die Entwickler von Programmiersprachen. Man hat die Menschen vergessen, die mit ihr arbeiten müssen... Wie bei Pascal wird auch bei Ada eine Zeitlang Begeisterung herrschen, und dann wird es mit der Sprache bergab gehen; die Anwender werden reumütig zu Cobol und Fortran zurückkehren."

"Um was geht es denn eigentlich bei Ada?" fragte ein Beobachter. Ada ist ein Drei-Manegen-Zirkus. Dieser Vergleich läßt uns eine Ahnung davon bekommen, wie geschäftig es bei diesem Projekt zugeht und wie umfassend es wirklich ist, denn es besteht aus einem Compiler, dem allgemeinen Programmierumfeld und dem Validierungsprinzip. Die Ada-Sprache stellt eine Verschmelzung aller guten Eigenschaften von Pascal, Algol und PL/ 1 dar, einschließlich neuester Verbesserungen sowie der Lösung früherer Schwächen. Von diesem Standpunkt ist Ada vielleicht die beste Kombination neuester wissenschaftlicher Ergebnisse, des sich abzeichnenden europäischen Gesichtspunkts und des avantgardistischen amerikanischen Einflusses. Die Sprache betont Modularität und Multitasking und unterstützt die Systemprogrammierung stark.

Da Ada sich vor allem an die anspruchsvollsten der großen Softwareprojekte richtet, muß der Struktur dieser Software besondere Beachtung geschenkt werden. Zur Unterstützung der Zusammenarbeit unter den Anwendungsentwicklern und zur Erleichterung der Wartung kommt es daher ganz entscheidend auf Modularität an.

Die Modularität von Ada hängt eng mit dem Begriff des "Package" zusammen, einerseits ein Allerweltsbegriff, andererseits kennzeichnend für die wichtigste Eigenart der Sprache. Das Package umfaßt zwei Teile, die voneinander unabhängig sind. Der erste Teil ist der Spezifikations- oder Erklärungsteil, der zweite ist der Ausführungsteil oder Operational Code. Da jeder Teil für sich übersetzbar ist, folgt daraus eine Trennung von Daten, Parametern und Prozedurerklärungen auf hoher Ebene sowie eine sehr späte Bindung.

Zur besseren Steuerung des Aufbau- und Ausführungsprozesses umfaßt der Spezifikationsteil einen sichtbaren und einen versteckten Teil. Der versteckte Teil hat einen mehr privaten Charakter und erleichtert eine weitere Fähigkeit von Ada, das "Hiding".

Hiding ist an sich nicht aus Schutzgründen vorgesehen oder um eine Sicherheitsfunktion zu erfüllen. Es hat vielmehr die Aufgabe, den Unterschied zwischen logischen und physischen Schnittstellen zu erzwingen und die Programmentkopplung zu erleichtern. Hiding ist daher ein Schlüsselbegriff für die Fähigkeit, Codeelemente getrennt zu übersetzen. Ein weiteres wichtiges Feature von Ada im Zusammenhang mit der Modularität ist die Compiler-Datenbank oder Ada-Programmbibliothek. Der Ada-Compiler führt nämlich eine Datenbank, die alle relevanten Informationen über die bereits durchgeführten Übersetzungen enthält. Die Abhängigkeiten zwischen den übersetzten Einheiten werden demzufolge vom Compiler selbst verwaltet. Außerdem lassen sich aus dieser Datenbank Management-Reports auflisten, falls Namen, Verfahren, Parameter und wechselseitige Abhängigkeiten der Nachprüfung bedürfen.

Die Multitasking-Fähigkeit von Ada wird durch die Features der Sprache erleichtert, die Task-Parallelität und Task-Scheduling aufgrund von Prioritäten und Unterbrechungen gestatten. Die Zuteilung solcher zusammenhängender und in Wechselwirkung stehender Tasks wird durch die "Rendezvous"-Funktion bestimmt. Die Tasks können entweder beim Erwarten von Ergebnissen aus anderen Tasks einen "Entry"-Punkt oder ein "Accept" erklären und zeigen dadurch an, daß sie für einen Entry-Anruf bereit sind. Bei ihrer Zusammenarbeit bewirken die "Accept"- und "Entry"-Features das Rendezvous.

Programmierunterstützung

Die dritte Haupteigenschaft von Ada hängt mit ihrer Fähigkeit zusammen, die Systemprogrammierung zu unterstützen. Hier brauchen wir höchste Effizienz der Leistung, Zuverlässigkeit der Ausführung und die Möglichkeit von Schnittstellen zu externen Sprachen und zur Peripherie. Ada erfüllt alle diese Forderungen.

Wenden wir uns jetzt zum Ada-Programmierumfeld, so ist festzustellen, daß der Lebenszyklus, die Konfigurationssteuerung sowie Portabilität und Projektsteuerung auf der Ebene der Quellsprache unterstützt werden sollten. Eine Reaktion auf diese Forderungen ist das Ada Programming Support Environment (Apse). Zusammen mit dem Kernel "Apse" ("Kapse" genannt) stellt Apse den Grundmechanismus zur Erzielung der Implementierungsstruktur und der Portabilität dar. Kapse umfaßt den niedrigen und minimalen Satz von normalerweise maschinenspezifischen Funktionen.

Diese geschichtete Vorgehensweise ist so konzipiert, daß sie ein "Re-Hosting" der Sprache von einem Entwicklungssystem zu einem anderen und ein "Re-Targeting" umfaßt, das einen Lauf der jeweiligen Anwendung auf einer Vielzahl von Objektmaschinen ermöglicht. Manchen Leser wird in diesem Zusammenhang ein historischer Exkurs interessieren, wonach diese Zielsetzung von Ada schließlich die Portabilitätsträume der späten 50er Jahre erfüllt, als die Benutzerorganisation Share die verunglückte Suche nach der Universal Computer-Oriented Language (Uncol) zuerst gefördert hat, dann aber aufgeben mußte.

Das Validierungsprinzip von Ada umfaßt eine Qualitätskontrollfunktion sowie einen Autorisierungsprozeß. Das Prinzip sichert also die Beachtung und erzwingt die Einhaltung der Ada-Norm. Diese Aktivität wird durch die Ada Computer Validation Capability (ACVC) formalisiert, die für die Bekanntmachung von Methodik und Verfahren über die Ada Compiler Validation Organization zuständig ist.

Der schwache Punkt

Das wäre zwar alles schön und gut, wenn es um Ada nicht diese ungeheure und fundamentale Paradoxie gäbe. Das Ada-System soll bekanntlich die Antwort auf die Entwicklung überaus aufwendiger und anspruchsvoller Realzeitsysteme sein. Somit durfte Ada um so eher in Frage kommen, je komplexer das Projekt ist. Kritiker warnen aber, daß die bloße Größe der Sprache mit ihren Features sie für Systemzusammenbrüche geradezu prädestiniert. Es hat demnach den Anschein, als ob gerade die Komplexität der Sprache zugleich ihr schwacher Punkt ist, da sie die Zuverlässigkeit verringert, um derentwillen System ja in erster Linie geschaffen worden ist. In diesem Zusammenhang wurde in der Information Systems News vom 15. Juni Prof. C. A. R. Hoare von der Universität Oxford zitiert, der folgendes feststellt: "Ada stellt für unsere Umwelt und Sicherheit ein viel größeres Risiko dar als verkehrsuntaugliche Kraftfahrzeuge, giftige Pestizide oder Unfälle in Kernkraftwerken, falls die Sprache zur Programmierung von Kernwaffensystemen verwendet werden sollte."

Damit könnte man die Ada-Story abschließen. Es sei uns aber gestattet, auch unsere eigenen, ernsthaften Zweifel hinsichtlich der Aussichten auf eine umfassende Akzeptanz dieses Sprachensystems zum Ausdruck zu bringen, vor allem, was den kommerziellen Markt betrifft. Bei der überwiegenden Mehrzahl der Datenverarbeitungsexperten besteht eine notorische Abneigung gegen das Umsteigen auf neue Programmiersprachen. Weder die einzelnen Praktiker noch ihr Management haben den Wunsch, hier einen Wechsel vorzunehmen. Cobol, Fortran und RPG sind eben nur schwer zu verdrängen.

Übersetzt aus der COMPUTERWORLD vom 5. Oktober 1981 von Hans J. Hoelzgen, Böblingen.