Die erste vereinheitlichte Programmiersprache 60 Jahre PL/I – (K)ein Nachruf

Von Prof. Dr. Christian Siemers 5 min Lesedauer

Anbieter zum Thema

Die ersten Programmiersprachen waren an spezielle Einsatzzwecke gerichtet: Es gab Sprachen für den wissenschaftlichen (z.B. FORTRAN, ALGOL) oder den kommerziellen Sektor (z.B. COBOL). PL/I sollte 1964 erstmals eine universelle Programmiersprache für alle Bereiche darstellen. Die Begeisterung hielt sich in Grenzen – und doch sind die Auswirkungen auch 60 Jahre später noch zu spüren.

Ein IBM System/360 Model 91 System im Dienste der NASA (Foto aus den späten 1960ern). Im Verlauf der 1960er hielten Mainframe-Rechner nicht nur an Universitäten und Forschungseinrichtungen, sondern zunehmend auch im Bankwesen und Unternehmen Einzug. Das IBM System/360 sollte sich an den wissenschaftlichen als auch den kommerziellen Einsatz richten. Das weckte den Bedarf an einer vereinheitlichten Programmiersprache, die sich an beide Felder richtete. PL/I - kurz für „Programming Language 1“ - sollte diese Lücke füllen.(Bild:   / CC0)
Ein IBM System/360 Model 91 System im Dienste der NASA (Foto aus den späten 1960ern). Im Verlauf der 1960er hielten Mainframe-Rechner nicht nur an Universitäten und Forschungseinrichtungen, sondern zunehmend auch im Bankwesen und Unternehmen Einzug. Das IBM System/360 sollte sich an den wissenschaftlichen als auch den kommerziellen Einsatz richten. Das weckte den Bedarf an einer vereinheitlichten Programmiersprache, die sich an beide Felder richtete. PL/I - kurz für „Programming Language 1“ - sollte diese Lücke füllen.
(Bild: / CC0)

Mitte der 1950er Jahre entstand die Idee, zur Programmerstellung eine an die natürliche Sprache angelehnte Formulierung zu nutzen. Bis dahin war eine Programmierung in Assemblersprache angesagt, etwas, für das „keine Vergnügungssteuer“ fällig war. Aus diesen allerersten Anfängen entstand dann die dritte Generation der Programmiersprachen (nach Maschinen- und Assemblersprache).

Domänen-spezifische Entwicklungen der Programmiersprachen waren in der Folgezeit offenbar weder zufällig noch gewollt, sondern unvermeidbar, und so entwickelten sich z.B. Sprachen im wissenschaftlich-technischen Bereich (Fortran, Algol) und im kommerziellen Bereich (Cobol). Die wohl bekannteste Bestrebung zur Vereinheitlichung der Sprachen stammt dann von IBM – PL/I.

PL/I – Programming Language One – wurde 1964 zunächst als NPL (New Programming Language) eingeführt. Da allerdings das Kürzel mit dem des (britischen) National Physical Laboratory kollidierte, erfolgte 1965 kurzerhand die Umbenennung in PL/I. 2024 feiern wir also den 60. Geburtstag dieser Sprache.

Der Bedarf an einer vereinheitlichten Programmiersprache

Wesentliche Unterstützung einer einheitlichen Sprache kam auch durch die Entwicklung der Hardware. Zwar unterlagen alle in der 1960er Jahren entwickelten Mainframe-Prozessoren dem Von-Neumann-Prinzip, wie es auch heute noch gilt. Aber diese General-Purpose-Prozessoren besaßen doch Domänen-spezifische Eigenschaften – auch heute sind Digitale Signalprozessoren für digitale Signalverarbeitung angepasst.

Die IBM System/360-Mainframe-Familie, ebenfalls 1964 angekündigt und ab 1966 lieferbar, war für eine der ersten, die sich direkt an die beiden großen Welten richtete: wissenschaftlich/technisch und kaufmännisch, gleichermaßen konzipiert. Das weckte auch den Bedarf nach einer vereinheitlichten Sprache, die die Bedürfnisse dieser beiden Felder gleichermaßen bedienen konnte. PL/I sollte eben diese vereinheitlichte Sprache sein.

Der weitere Weg von PL/I war dann

  • 1964 Geburtsstunde
  • 1965 Erstes vollständiges Manual
  • 1966 Erster Compiler
  • 1973 Definition von PL/M, Programming Language for Microprocessors
  • 1976 Standardisierung PL/I
  • 2024 Der Support für PL/I Compiler wird fortgesetzt

Im Übrigen war PL/I in den ersten Fassungen die Programmiersprache für die Entwicklung des Mainframe-Betriebssystems Multics, dass als einer der Väter von Unix (oder auch „Unics“) gilt.

Eine eigene Anekdote zu meiner Berührung mit PL/I fand im Jahr 1987 statt. Ich hatte auf diversen Fahrten mit der Münchner U- und S-Bahn ein kleines Buch zu PL/I gelesen und fand die Sprache recht ansprechend. Auf die kurze Zeit danach von meinem Chef bei Siemens Datentechnik angeschnittene Frage, wer denn PL/I kenne, und meine Antwort „Grundkenntnisse“ hatte ich dann zusammen mit Kollegen aus anderen Bereichen eine mehrtägige Dienstreise zu AT&T in Arlington gewonnen, um dort in PL/I geschriebenen Code im Bereich ISDN-Services auf Übernahme zu prüfen. Hierbei merkte man sehr deutlich die Eignung von PL/I im technischen Bereich, insbesondere das „ON“-Konzept.

Besonderes an PL/I

Zunächst einmal sei festgestellt, dass eine Vereinheitlichung als Übermenge, als Kompromiss oder auch in verschiedenen Mischformen denkbar ist. In jedem Fall wird es immer irgendeine Form von Kritik geben, so auch bei PL/I. Den Kritikern aus der Technikecke war die Sprache zu kaufmännisch, denjenigen aus dem kaufmännischen Bereich aber selbstverständlich zu technisch.

Von den Befürwortern wurden andererseits Eigenschaften hervorgehoben, die wegweisend für moderne Programmiersprachen waren. Hierzu zählen die gute Unterstützung von strukturierter und rekursiver Programmierung sowie die Ereignisbehandlung. Ja, die Förderung strukturierten Programmierens war eine wichtige Aufgabe, wie man unschwer auch daran erkennt, dass in jenen Jahren ein Paper des Autors Edsger W. Dijkstra mit der Begründung, dass strukturiertes Programmierung doch gar keinen Vorteil bringe und dass erfahrene Programmierer halt wüssten, dass man nur „in wilder Weise“ programmieren könnte, abgelehnt wurde.

Worin liegen denn die Besonderheiten von PL/I? Das berühmte Programm „Hello World“ hat zunächst diese Gestalt:

Hallo: proc options(main);    put list ('Hello World!');end;

und zeigt damit relativ wenig Überraschendes. Natürlich gibt es Schleifen (DO .. END), Verzweigungen (IF, SELECT), auch ein GO TO fehlt nicht. Die Speicherverwaltung lässt sich über eigene Sprachkonstrukte (ALLOCATE, FREE) integrieren, auch eigene Blöcke mit lokal definierten Variablen und Prozeduren können definiert werden (BEGIN, END).

Besonders revolutionär war auch, dass die Namen case-insentive waren: zwischen Groß- und Kleinschreibung wurde nicht unterschieden. Wer sich noch an die alten Rechenkisten mit Lochkartenprogrammierung erinnert, weiß, dass der Programmcode sehr formatiert erstellt werden musste. Allein diese Maßnahme war bereits ein wichtiger Schritt zur Flexibilisierung.

Jetzt Newsletter abonnieren

Verpassen Sie nicht unsere besten Inhalte

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung

Datentypen können in PL/I für Integer wie Floating Point definiert werden, und – eine weitere Besonderheit – für reelle und komplexe Zahlen. Natürlich gibt es auch Datenstrukturen, allerdings werden abstrakte Strukturen erst in neueren Versionen unterstützt.

Ein besonderes Augenmerk fand aber die Signalverarbeitung, ein durchaus modernes Feature. Das ON-Statement bildet die Brücke zu dem jeweiligen Ereignis, hierzu zählen z.B. schwere Fehler im Ablauf (FIXEDOVERFLOW, OVERFLOW, STRINGSIZE, ZERODIVIDE), weiterhin einfache Ereignisse (ENDFILE(file), ENDPAGE(file)) oder andere Bedingungen (ERROR, FINISH). Mithilfe dieser Konstrukte konnte und kann die Behandlung solcher Ereignisse bestmöglich in das Programm integriert werden.

Resüme: „Like a Rolling Stone“

PL/I war für Mainframes konzipiert, und die Softwareprojekte, die damit durchgeführt wurden, waren typischerweise in großen Firmen wie Bell Laboratories – siehe auch Anekdote oben – angesiedelt. Und selbst heute wird der Compiler von IBM weiter gepflegt. In diesem Bereich stellte sich PL/I duarchaus als ein großer Wurf heraus.

Auf dem PC- und Mikrocontroller-Sektor konnte sich PL/I (bzw. PL/M) dagegen nie richtig durchsetzen, obwohl Implementierungen für MS-DOS und CP/M vorlagen. Dies mag unter anderem daran liegen, dass für Unix und in der Folge auch die anderen Betriebssysteme die Sprache C den Standard darstellte, so dass auf diesem Gebiet der Siegeszug der C-Familie unaufhaltsam war. So groß war der Wurf der Programming Language One dann doch nicht.

PL/I steht nicht im Rampenlicht, aber von der Bildfläche verschwunden ist sie auch nicht: Im April 2022 kündigte IBM die Verfügbarkeit von Enterprise-PL/I revease 6.1 für sein 64bit-Mainframe-Betriebssystem z/OS an, das zugehörige Referenzhandbuch wurde noch im Juli diesen Jahres noch einmal aktualisiert. Auch mit 60 Jahren ist die Programmiersprache sinnbildlich „like a rolling stone“: Immer in Bewegung und kein Moos ansetzend.(sg)

(ID:50243156)