PL/I
Paradigma | Prozedural, Imperativ, strukturiert |
---|---|
Entworfen von | IBM und die TEILEN Sprachentwicklungsausschuss |
Entwickler | IBM |
Erstmals erschienen | 1964 |
Stabile Version | IBM Enterprise PL/I für Z/OS 5.3[1] / September 2019 |
Webseite | www |
Dialekte | |
Sehen Dialekte | |
Beeinflusst von | |
Cobol, Forran, Algol 60 | |
Beeinflusst | |
Kontrollsprache, Pl/m, Pl/s, PL-6, PL/8, Rexx | |
|
Pl/i (Programmiersprache eins, ausgesprochen /pich ɛl wʌn/ und manchmal geschrieben PL/1)[2] ist ein prozedural, Imperativ Computer Programmiersprache entwickelt und veröffentlicht von IBM. Es ist für wissenschaftliche, technische, geschäftliche und Systemprogramme ausgelegt. Es wurde seit seiner Einführung in den 1960er Jahren von akademischen, gewerblichen und industriellen Organisationen verwendet und wird immer noch verwendet.[3]
Die Hauptdomänen von Pl/I sind Datenverarbeitung, Numerische Berechnung, Wissenschaftliches rechnen, und Systemprogrammierung. Es unterstützt Rekursion, Strukturierte Programmierung, verknüpfte Datenstruktur Handhabung, Fixpunkt, Schwimmpunkt, Komplex, Zeichenkette Handling und Bit String Handhabung. Die Sprachsyntax ist englischartig und eignet sich für die Beschreibung komplexer Datenformate mit einer Vielzahl von Funktionen, die zur Überprüfung und Manipulation von Funktionen verfügbar sind.
Frühe Geschichte
In den 1950er und frühen 1960er Jahren programmierten geschäftliche und wissenschaftliche Benutzer mithilfe verschiedener Programmiersprachen für verschiedene Computerhardware. Geschäftsbenutzer wechselten von Autokomer über Comtran zu Cobol, während wissenschaftliche Benutzer in programmierten Forran, Algol, GEORGE, und andere. Das IBM System/360[4] (1964 angekündigt und 1966 geliefert) wurde als gemeinsame Maschinenarchitektur für beide Benutzergruppen konzipiert, was alle vorhandenen IBM -Architekturen ersetzt. In ähnlicher Weise wollte IBM eine einzige Programmiersprache für alle Benutzer. Es hoffte, dass Forran erweitert werden könnte, um die von kommerziellen Programmierern benötigten Funktionen einzuschließen. Im Oktober 1963 wurde ein Komitee gebildet[5] komponiert ursprünglich drei Ibmers aus New York und drei Mitglieder von TEILEN, Die Gruppe IBM Scientific Users Group, um diese Erweiterungen Forran vorzuschlagen. Angesichts der Einschränkungen von Forran konnten sie dies nicht tun und stellten die Gestaltung einer neuen Programmiersprache ein, die locker auf Algol beschriftet Npl. Dieses Akronym in Konflikt mit dem des nationalen physischen Labors Großbritanniens in Konflikt geraten und wurde ersetzt[6] kurz von MPPL (Mehrzweckprogrammiersprache) und 1965 mit mit[7] Pl/i (mit einer römische Ziffer "ICH"). Die erste Definition erschien im April 1964.[8][9]
IBM nahm NPL als Ausgangspunkt und vervollständigte das Design auf ein Niveau, das der erste Compiler geschrieben werden konnte: Die NPL -Definition war im Umfang und im Detail unvollständig.[10] Kontrolle der PL/I -Sprache[11] wurde zunächst im New Yorker Programmierzentrum und später im IBM UK Laboratory bei Hursley. Der Anteil und FÜHREN Benutzergruppen waren an der Erweiterung der Sprache beteiligt und hatten eine Rolle im Prozess von IBM, um die Sprache durch ihre PL/I -Projekte zu kontrollieren. Die Erfahrung mit der Definition einer so großen Sprache zeigte die Notwendigkeit einer formalen Definition von PL/i. 1967 wurde ein Projekt in eingerichtet IBM Laboratory Wien eine eindeutige und vollständige Spezifikation vornehmen.[12] Dies führte wiederum zu einem der ersten großen Maßstäbe Formale Methoden zur Entwicklung, VDM.
Fred Brooks Es wird zugeschrieben, dass PL/ich den Charakterdatentyp hatte.[13]
Die Sprache wurde erstmals ausführlich in dem Handbuch "PL/I Sprachspezifikationen. C28-6571" angegeben, das 1965 in New York geschrieben und durch "PL/I-Sprachspezifikationen. GY33-6003" ersetzt wurde, geschrieben von Hursley 1967. IBM entwickelte sich in den späten sechziger und frühen siebziger Jahren weiterhin PL/I und veröffentlichte es im Handbuch GY33-6003. Diese Handbücher wurden von der verwendet Mehrheit Gruppe und andere frühe Implementierer.
Der erste Compiler wurde 1966 geliefert. Der Standard für PL/I wurde 1976 genehmigt.
Ziele und Prinzipien
Die Ziele für PL/I entwickelten sich während der frühen Entwicklung der Sprache. Die Wettbewerbsfähigkeit mit COBOLs Rekordhandhabung und Berichtensschreibung war erforderlich. Der Nützlichkeitsumfang der Sprache wuchs zu, um zu beinhalten Systemprogrammierung und ereignisgesteuerte Programmierung. Zusätzliche Ziele für PL/I waren:[4]
- Leistung von kompilierten Code wettbewerbsfähig mit dem von Forran (aber dies wurde nicht erreicht)
- Erweiterbarkeit Für neue Hardware und neue Anwendungsbereiche
- Verbesserte Produktivität des Programmierungsprozesses, übertragen Sie den Aufwand vom Programmierer an den Compiler
- Maschinenunabhängigkeit effektiv auf der Hauptcomputerhardware und Betriebssysteme zu arbeiten
Um diese Ziele zu erreichen, haben PL/I Ideen aus zeitgenössischen Sprachen geliehen, während sie wesentliche neue Fähigkeiten hinzufügten und sie mit einer unverwechselbaren, prägnanten und lesbaren Syntax gaben. Viele Prinzipien und Fähigkeiten kombiniert, um der Sprache ihren Charakter zu verleihen, und waren wichtig, um die Ziele der Sprache zu erreichen:
- Blockstruktur, mit zugrunde liegender Semantik (einschließlich Rekursion), ähnlich zu Algol 60. Argumente werden verwendet Rufen Sie durch Referenz anVerwenden Sie Dummy -Variablen für Werte bei Bedarf (Rufen Sie nach Wert an).
- Eine breite Palette von Computerdatentypen, Programmsteuerungsdatentypen und Datenformen (Datenstruktur (Starke Typisierung).
- Dynamische Ausstattungen für Arrays und Zeichenfolgen mit Vererbung von Ausdehnungen durch Verfahrensparameter.
- Präzise Syntax für Ausdrücke, Erklärungen und Aussagen mit zulässigen Abkürzungen. Geeignet für einen Charakter -Satz von 60 Glyphen und nach 48.
- Eine umfangreiche Struktur von Ausfällen in Aussagen, Optionen und Erklärungen, um einige Komplexitäten zu verbergen und die Sprache zu erweitern und gleichzeitig die Tastenanschläge zu minimieren.
- Leistungsstarke iterative Verarbeitung mit guter Unterstützung für Strukturierte Programmierung.
- Es musste nein geben reservierte Wörter (Obwohl die Funktionsnamen
DATUM
undZEIT
Anfangs, um dieses Ziel unmöglich zu erreichen). Neue Attribute, Aussagen und Anweisungsoptionen könnten zu PL/I hinzugefügt werden, ohne vorhandene Programme ungültig zu machen. Nicht malWenn dann sonst
, undTUN
waren reserviert.[14] - Orthogonalität: Jede Fähigkeit, unabhängig von anderen Fähigkeiten zu sein und sich wo immer aussagekräftig mit anderen Fähigkeiten zu kombinieren. Jede Fähigkeit, in allen Kontexten verfügbar zu sein, in denen es aussagekräftig ist, sie so weit wie möglich auszunutzen und "willkürliche Einschränkungen" zu vermeiden. Orthogonalität hilft, die Sprache "groß" zu machen.[Klarstellung erforderlich]
- Ausnahmebehandlung Fähigkeiten zur Kontrolle und Abfangen von außergewöhnlichen Bedingungen zur Laufzeit.
- Programme unterteilt in separat kompilierbare Abschnitte mit umfangreichen Einrichtungen für Kompilierzeit (a.k.a. Makros), nicht Teil des Standards, zum Anpassung und Kombinieren von Abschnitten von Quellcode in vollständige Programme. Externe Namen, um separat kompilierte Verfahren in ein einzelnes Programm zu binden.
- Debugging -Einrichtungen in die Sprache integriert.
Sprachzusammenfassung
Die Sprache ist so konzipiert, dass sie für alle Programmierer alles sein soll.[15] Die Zusammenfassung wird aus dem ANSI PL/I -Standard extrahiert[16] und der ANSI PL/I Allgemeine Subset Standard.[17]
Ein PL/I -Programm besteht aus einer Reihe von Verfahren, von denen jede als Abfolge von Aussagen geschrieben ist. Das %ENTHALTEN
Konstrukt wird verwendet, um Text aus anderen Quellen während der Programmübersetzung aufzunehmen. Alle Aussage -Typen sind hier in Gruppierungen zusammengefasst, die einen Überblick über die Sprache geben (der Standard verwendet diese Organisation).
Kategorie | Aussage |
---|---|
Strukturell | VERFAHREN (oder Proc )EINTRAG START TUN ENDE |
Deklarativ | ERKLÄREN (oder DCL )URSPRÜNGLICH (oder DFT )FORMAT |
Kontrollfluss | ANRUF WENN AUSWÄHLEN GEHE ZU RÜCKKEHR PAUSE NULL -Aussage |
Kategorie | Aussage |
---|---|
Interrupt -Handhabung | AN SIGNAL ZURÜCKKEHREN |
Lagerung | Zuweisen (oder Alloc )FREI Zuweisungsanweisung |
Input-Output | OFFEN NAH DRAN |
Stream -Eingang/Ausgabe | ERHALTEN STELLEN |
Datensatzeingang/Ausgabe | LESEN SCHREIBEN UMSCHREIBEN LOKALISIEREN LÖSCHEN |
(Funktionen wie z. Multitasking und die PL/I -Präprozessor sind nicht im Standard, werden aber im PL/I -F -Compiler unterstützt, und einige andere Implementierungen werden im Abschnitt Sprachentwicklungsabschnitt erörtert.)
Namen können deklariert werden, um Daten der folgenden Typen als einzelne Werte oder als Aggregate in Form von Arrays darzustellen, mit einer unteren und oberen Basis pro Dimension oder Strukturen (bestehend aus der verschachtelten Struktur, Array- und Skalarvariablen) :
|
|
|
Das Arithmetik
Der Typ umfasst diese Attribute:
|
Basis, Skala, Präzision und Skalierungsfaktor des Bild-für-arithmetisch
Typ ist innerhalb der codiert Bildspezifikation
. Der Modus wird separat mit dem angegeben Bildspezifikation
sowohl auf die realen als auch auf die imaginären Teile angewendet.
Die Werte werden durch Ausdrücke berechnet, die unter Verwendung eines bestimmten Satzes von Operationen und integrierten Funktionen geschrieben wurden, von denen die meisten sowohl auf Aggregate als auch auf einzelne Werte angewendet werden können, zusammen mit benutzerdefinierten Verfahren, die ebenfalls aktiviert sind und Aggregat zurückgeben können wie Einzelwerte. Die Zuweisungsanweisung weist einem oder mehreren Variablen Werte zu.
Es gibt keine reservierten Wörter in PL/i. Eine Erklärung wird von einem Semikolon beendet. Die maximale Länge einer Anweisung ist die Implementierung definiert. Ein Kommentar kann überall in einem Programm erscheinen, in dem ein Raum erlaubt ist und der Charaktere vorwärts, Sternchen, Sternchen und von den Charakteren Asterisk, Forward Slash (d. H. /* This is a comment. */
). Aussagen können möglicherweise einen Etikett-Prefix haben, der einen Einstiegsnamen einführt (EINTRAG
und VERFAHREN
Anweisungen) oder Beschriftungsname und ein Bedingungspräfix, das eine Rechenbedingung aktiviert oder deaktiviert - z. (Nosize)
). Eintrags- und Etikettennamen können einzelne Kennungen oder Kennungen sein, gefolgt von einer Index -Liste von Konstanten (wie in L (12,2): a = 0;
).
Eine Abfolge von Aussagen wird a Gruppe Wenn a TUN
Aussage und gefolgt von einem ENDE
Aussage. Gruppen können verschachtelte Gruppen einschließen und Blöcke beginnen. Das WENN
Anweisung gibt eine Gruppe oder eine einzige Aussage als die an DANN
Teil und die ANDERS
Teil (siehe Beispielprogramm). Die Gruppe ist die Einheit der Iteration. Der Anfang Block (START; STMT-LIST-Ende;
) kann Deklarationen für Namen und interne Verfahren enthalten, die lokal zum Block sind. EIN Verfahren beginnt mit a VERFAHREN
Aussage und wird syntaktisch von einem beendet ENDE
Aussage. Der Körper eines Verfahrens ist eine Abfolge von Blöcken, Gruppen und Aussagen und enthält Erklärungen für Namen und Verfahren, die lokal für das Verfahren oder die Prozedur oder vorliegen Extern
zum Verfahren.
Ein Einheit ist eine einzelne Anweisung oder ein einzelner Block von Aussagen, die geschrieben werden sollen, wenn einer oder mehrere davon ausgeführt werden Bedingungen geschehen:
a RechenbedingungAnwesend
|
|
|
oder an Input-Output Bedingung,
|
|
oder eine der Bedingungen:
-
BEREICH
,Bedingung (Kennung)
,ERROR
,FERTIG
Eine Erklärung einer Kennung kann eine oder mehrere der folgenden Attribute enthalten (sie müssen sich jedoch gegenseitig konsistent sein):
Datenattribute | Eingangs-/Ausgabeattribute | Andere Attribute |
---|---|---|
AUSGERICHTET | DIREKTE | Automatisch oder automatisch |
Bereich [(Bereichsgröße)] | Umgebung (Optionen) oder Env ... | Basierend [(Referenz)] |
Binär [(Präzision)] oder Bin ... | EINGANG | Gebaut |
Bit [(maximale Länge)] | Gekeutet | Zustand oder Kond |
Charakter [(maximale Länge)] oder char ... | AUSGANG | KONSTANTE |
Komplex [(Präzision)] oder CPLX ... | DRUCKEN | Kontrolliert oder ctl |
Dezimal [(Präzision)] oder Dez ... | Sequentiell oder seql | Definiert [(Referenz)] oder def ... |
(Dimension-Attribute) | STROM | Extern oder ext |
Eintrag [(Parameterdeskriptorliste] | AKTUALISIEREN | Generische (Kriterienliste) |
DATEI | AUFZEICHNUNG | Initial (Wertliste) oder init ... |
Behoben [(Präzision)] | Intern oder int | |
Float [(Anzahl der Ziffern)] | Wie Unsubscriptted Referenz | |
FORMAT | LOKAL | |
ETIKETT | Optionen (Optionen) | |
MITGLIED | Parameter oder Parm | |
Nicht variierender oder nicht var | Position [(Ausdruck)] oder POS ... | |
Offset [(Referenz)] | STATISCH | |
Bildbilderspezifikation oder Bild ... | VARIABLE | |
Zeiger oder PTR | ||
STRUKTUR | ||
Ungehort oder unal | ||
Variieren oder var |
Aktuelle Compiler von Micro Focusund insbesondere das von IBM implementieren viele Erweiterungen über die standardisierte Version der Sprache. Die IBM-Erweiterungen sind im Umsetzungspflicht für den Compiler später zusammengefasst. Obwohl dieser Compiler einige Erweiterungen vorhanden sind, bedeutet das Fehlen eines aktuellen Standards, dass die Kompatibilität nicht garantiert wird.
Standardisierung
Die Sprachstandardisierung begann im April 1966 in Europa mit ECMA TC10. 1969 Ansi Einen "zusammengesetzten Sprachentwicklungskomitee" mit dem Spitznamen "Kludge", später in X3J1 pl/i umbenannt.[18] Die Standardisierung wurde zu einem gemeinsamen Anstrengung von ECMA TC/10 und ANSI X3J1. Eine Teilmenge des GY33-6003[19] Das Dokument wurde der gemeinsamen Anstrengung von IBM angeboten und wurde zum Basisdokument für die Standardisierung. Die wichtigsten Merkmale, die aus dem Basisdokument weggelassen wurden Multitasking und die Attribute für Programmoptimierung (z.B. NORMAL
und ABNORMAL
).
Vorschläge zur Änderung des Basisdokuments wurden von beiden Ausschüssen gewählt. Für den Fall, dass die Komitees nicht einverstanden waren, waren die Stühle, die anfangs Michael Marcotty von General Motors und WAGEN. Hoare Repräsentation ICL musste die Meinungsverschiedenheit lösen. Zusätzlich zu IBM, Honeywell, CDC, Daten allgemein, Digital Equipment Corporation, Prime Computer, Burroughs, RCA, und Univac serviert auf X3J1 zusammen mit großen Nutzern Eastman Kodak, GEHRUNG, Gewerkschaftskarbide, Glockenlaborsund verschiedene Regierungs- und Universitätsvertreter. Die Weiterentwicklung der Sprache trat in den Standardkörpern auf, wobei die strukturierte Programmierung und die interne Konsistenz anhaltend verbessert wurde und die dunklen oder umstritteneren Merkmale ausgelassen hat.
Als sich die Sprachentwicklung dem Ende näherte, erkannte X3J1/TC10, dass es eine Reihe von Problemen mit einem Dokument in englischer Text gab. Die Diskussion eines einzelnen Elements kann an mehreren Orten auftreten, die möglicherweise zustimmen oder nicht. Es war schwierig festzustellen, ob sowohl Auslassungen als auch Inkonsistenzen vorhanden waren. Folglich David Beech (IBM), Robert Freiburghouse (Honeywell), Milton Barber (CDC), M. Donald MacLaren (Argonne National Laboratory), Craig Franklin (Daten allgemein), Lois Frampton (Digital Equipment Corporation) und Herausgeber, D.J. Andrews von IBM verpflichtete sich, das gesamte Dokument neu zu schreiben und produziert jeweils ein oder mehrere vollständige Kapitel. Der Standard wird als formale Definition aufgebaut[16] Verwenden eines "pl/i machine"[20] Um die Semantik anzugeben. Es war der erste und möglicherweise einzige Programmiersprache, der als semi-formale Definition geschrieben wurde.
A "PL/I Allgemeine Subset" ("Subset-G") wurde 1981 von ANSI ausgestellt[17] und eine 1987 veröffentlichte Revision.[21] Die Generalzweck -Teilmenge wurde als Kernel für PL/I -Implementierungen weit verbreitet.
Implementierungen
IBM PL/I F- und D -Compiler
PL/Ich wurde zum ersten Mal von IBM implementiert, an seinem Hursley Laboratories im Vereinigten Königreich als Teil der Entwicklung von System/360. Die erste Produktion pl/i Compiler war der PL/i F -Compiler für die OS/360 Betriebssystem, erbaut von John Nashs Team in Hursley in Großbritannien: Das Runtime Library -Team wurde von I. M. (Nobby) Clarke verwaltet. Der PL/I F -Compiler wurde vollständig in System-/360 -Montage -Sprache geschrieben.[22] Release 1 wurde 1966 ausgeliefert. OS/360 ist eine reale Umgebung, und der Compiler wurde für Systeme mit nur 64 Kilobyten realer Speicher ausgelegt-F ist 64 kb in S/360-Sprache. Um einen großen Compiler in die 44-Kilobyte-Speicher einzubeziehen, die auf einer 64-Kilobyten-Maschine verfügbar sind, besteht der Compiler aus einer Steuerphase und einer großen Anzahl von Compiler-Phasen (nähert sich 100). Die Phasen werden von der Festplatte nacheinander in das Gedächtnis gebracht, um bestimmte Sprachmerkmale und Aspekte der Zusammenstellung zu bewältigen. Jede Phase macht einen einzelnen Pass über das teilweise kompilierte Programm, das normalerweise im Gedächtnis gehalten wird.[23]
Aspekte der Sprache wurden immer noch als PL/I F entwickelt, sodass einige bis später veröffentlicht wurden. PL/I -Aufzeichnung I/O wurde mit PL/I F Release 2. die verschickt Listenverarbeitung Funktionen[24]- basierende Variablen, Zeiger, Bereiche und Offsets und Suchen Sie den Modus I/O- wurden zuerst in Release 4 versand Programmoptimierung von Do-Schleifen, die durch die Nachbestelloption für Verfahren erleichtert werden.
Eine Version von PL/I F wurde auf der veröffentlicht TSS/360 Timesharing -Betriebssystem für die System/360 Modell 67, adaptiert im IBM Mohansic Lab. Das IBM La Gaude Lab in Frankreich entwickelte "Sprachkonversionsprogramme"[25] Um fortran-, COBOL- und Algol -Programme in die PL/I F -Ebene von PL/i umzuwandeln.
Der PL/I D -Compiler, der 16 Kilobyte Gedächtnis verwendet, wurde von IBM Deutschland für die entwickelt DOS/360 Low -End -Betriebssystem. Es implementiert eine Untergruppe der PL/I-Sprache, die alle Zeichenfolgen und Arrays feste Ausdehnung haben und so die Laufzeitumgebung vereinfacht. In Bezug auf das zugrunde liegende Betriebssystem fehlt es dynamische Speicherallokation und die kontrolliert Speicherklasse.[26] Es wurde innerhalb eines Jahres nach PL/I F. verschifft.
Multics pl/i und Derivate
Compiler wurden in den frühen 1960er Jahren von mehreren Gruppen implementiert. Das Mehrheit Projekt bei MIT, eines der ersten, der ein Betriebssystem in einer hochrangigen Sprache entwickelt, die früher PL/I (EPL) verwendet wurde, ein Untergruppendialekt von PL/i, als ihre Implementierungssprache im Jahr 1964. EPL wurde bei entwickelt bei Bell Labs und Mit Douglas McIlroy, Robert Morris, und andere. Der einflussreiche Multics Pl/i Compiler[27] war die Quelle der Compiler -Technologie, die von einer Reihe von Herstellern und Softwaregruppen verwendet wurde. EPL war eine Systemprogrammiersprache und ein Dialekt von PL/i, der in der ursprünglichen PL/i einige Funktionen hatte.
Der Honeywell PL/I Compiler (für Serie 60) ist eine Implementierung des vollständigen ANSI X3J1 -Standards.[28]
IBM PL/I Optimierungs- und Checkout -Compiler
Die in Hursley erzeugten PL/I -Optimierer- und Checkout -Compiler unterstützen eine gemeinsame Ebene der PL/I -Sprache[29] und zielte darauf ab, den PL/I F -Compiler zu ersetzen. Der Checkout-Compiler ist ein Umschreiben von PL/I F in BSL, IBMs PL/I-ähnlicher proprietärer Implementierungssprache (später Pl/s).[22] Die für die Compiler festgelegten Leistungsziele werden in einer IBM -Präsentation für die BCS angezeigt.[22] Die Compiler mussten identische Ergebnisse erzielen - der Checkout -Compiler wird verwendet, um Programme zu debuggen, die dann dem Optimierer übermittelt werden würden. Angesichts der Tatsache, dass die Compiler völlig unterschiedliche Entwürfe hatten und die volle PL/I -Sprache behandelten, war dieses Ziel eine Herausforderung: Es wurde erreicht.
IBM führte neue Attribute und Syntax ein, einschließlich Gebaut, Fallaussagen (AUSWÄHLEN/WENN/ANDERNFALLS), Schleifensteuerungen (Iterieren und VERLASSEN) und NULL -Argumentationslisten, um z. B. das Datum zu disambiguieren().
Der PL/I -Optimierungs -Compiler übernahm den PL/I F -Compiler und war von den 1970er bis 1990er Jahren der Arbeitspferd -Compiler von IBM. Wie PL/I F ist es ein mehrfacher Pass -Compiler mit einem 44 -Kilobyten -Designpunkt, aber es ist ein völlig neues Design. Im Gegensatz zum F-Compiler muss es die Kompilierungszeitbewertung konstanter Ausdrücke mithilfe der Laufzeitbibliothek durchführen, wodurch der maximale Speicher für eine Compiler-Phase auf 28 Kilobyte reduziert wird. Als zweites Umgangsdesign gelang es, die Belästigungen von PL/I F wie Kaskadierdiagnostik zu beseitigen.[30] Es wurde in S/360 Makro-Assembler von einem Team geschrieben, das von Tony Burbridge geleitet wurde. Modusspeicher, sodass der Compiler einfach auf andere Speichermodelle verschoben werden kann. Die für den zeitgenössischen IBM Forger H Compiler entwickelte Programmoptimierungstechniken wurden eingesetzt: Der Optimierer entsprach der Ausführungsgeschwindigkeit der FORTRAN in den Händen guter Programmierer. Angekündigt mit IBM S/370 im Jahr 1970, es wurde zuerst für die verschickt DOS/360 Betriebssystem im August 1971 und kurz darauf für OS/360,[31] und die ersten virtuellen Speicher -IBM -Betriebssysteme OS/VS1, MVS, und VM/CMS. (Die Entwickler waren sich nicht bewusst, dass IBM Poughkeepsie, während sie den Code in 28 KB -Abschnitte einsetzten, endlich bereit war, virtuelle Speicherunterstützung in OS/360 zu versenden). Es unterstützte die Batch -Programmierumgebungen und könnte unter TSO und CMS interaktiv ausgeführt werden. Dieser Compiler durchlief viele Versionen, die alle Mainframe -Betriebssysteme, einschließlich der Betriebssysteme des Japanisch Plug-kompatible Maschinen (PCMS).
Der Compiler wurde unten von "IBM PL/I für OS/2, AIX, Linux, Z/OS" ersetzt.
Der PL/I -Kasse -Compiler,[32][33] (umgangssprachlich "The Checker") gab bekannt, dass im August 1970 das Debuggen von PL/I -Programmen beschleunigt und verbessert wurde. Das Team wurde von Brian Marks angeführt. Das Drei-Pass-Design verkürzte sich die Zeit, um ein Programm auf 25% der vom F-Compiler aufgenommenen Programme zu erstellen. Es kann von einem interaktiven Terminal aus ausgeführt werden, wodurch PL/I-Programme in ein internes Format "H-Text" umgewandelt werden. Dieses Format wird vom Checkout-Compiler zur Laufzeit interpretiert, wodurch praktisch alle Arten von Fehlern festgestellt werden. Die Zeiger werden in 16 Bytes dargestellt, die die Zieladresse und eine Beschreibung des referenzierten Elements enthalten, wodurch die diagnostizierte "schlechte" Zeiger verwendet werden kann. In einer Konversationsumgebung, in der ein Fehler erkannt wird, wird die Kontrolle an den Benutzer übergeben, der alle Variablen inspizieren, Debugging -Anweisungen einführen und das Quellprogramm bearbeiten kann. Im Laufe der Zeit entwickelte die Debugging -Fähigkeit der Mainframe -Programmierumgebungen die meisten Funktionen, die dieser Compiler angeboten haben, und wurde (in den 1990er Jahren?) Zurückgezogen?)
Dec pl/i
Die vielleicht kommerziell erfolgreichste Implementierung, abgesehen von IBMs, war VAX PL/I der Digital Equipment Corporation, später bekannt als DEC PL/I. Die Implementierung ist "eine strenge Superset der ANSI X3.4-1981 PL/I Allzweck-Untergruppe und bietet die meisten Merkmale des neuen ANSI X3.74-1987 PL/I Allzweck-Untergruppe" und wurde erstmals 1988 veröffentlicht .[34] Es wurde ursprünglich ein Compiler -Backend mit dem Namen Vax Code Generator (VCG) verwendet, das von einem von einem von angeführten Team erstellt wurde Dave Cutler.[35] Das vordere Ende wurde von Robert Freiburghouse entworfen und auf portiert Vax/vms aus Mehrheit.[36] Es läuft auf VMs auf Vax und Alphaund weiter Tru64. In den 1990er Jahren verkaufte Digital den Compiler an an Uniplise -Systeme, der es später an eine Firma namens Kednos verkaufte.[37] Kednos vermarktete den Compiler als Kednos PL/I bis Oktober 2016, als das Unternehmen den Handel einstellte.[38]
Unterbrecher unterrichten
In den späten 1960er und frühen 1970er Jahren errichteten viele US-amerikanische und kanadische Universitäten Zeitaustauschdienste auf dem Campus und benötigten Konversations Compiler/Dolmetscher, um in der Unterrichtswissenschaft, Mathematik, Ingenieurwesen und Informatik zu unterrichten. Dartmouth entwickelte sich BASIC, aber pl/ich war eine beliebte Wahl, da es präzise und leicht zu unterrichten war. Da waren die IBM -Angebote ungeeignet,[39] Eine Reihe von Schulen baute ihre eigenen Untergruppen von PL/I und ihre eigene interaktive Unterstützung. Beispiele sind:
In den 1960er und frühen 1970er Jahren,, Allen-Babcock implementierte die Remote -Benutzer von Shared Hardware (Rush) Time Sharing System für eine IBM System/360 Modell 50 mit Brauch Mikrocode und anschließend implementierte IBMs CPS, ein interaktives Zeit-Sharing-System für OS/360 Das Ziel, Informatik -Grundlagen zu unterrichten, bot zusätzlich zu Basic- und Remote -Arbeitseintrittseinrichtungen eine begrenzte Untergruppe der PL/I -Sprache.
Pl/c, ein Dialekt für den Unterricht, ein Compiler, der entwickelt wurde Cornell Universität, hatte die ungewöhnliche Fähigkeit, ein Programm durch die Verwendung einer umfassenden automatischen Korrektur vieler Syntaxfehler und durch die Konvertierung verbleibender Syntaxfehler in Ausgabeanweisungen nie zu kompilieren. Die Sprache war fast alle von PL/i, wie von IBM implementiert.[40] PL/C war ein sehr schneller Compiler.
Sl/1 (Schülersprache/1, Schülersprache/eine oder Untergruppe Sprache/1)[41][42] war eine PL/I IBM 1130; Der Unterricht war der starke Punkt.
Plago, erstellt am Polytechnic Institute of Brooklynverwendete eine vereinfachte Untergruppe der PL/I -Sprache[43] und konzentrierte sich auf gute diagnostische Fehlermeldungen und schnelle Zusammenstellungszeiten.
Die Computersysteme Forschungsgruppe der Universität von Toronto produzierte die Sp/k Compiler, die eine Abfolge von Untergruppen von PL/I unterstützten, als SP/1, SP/2, SP/3, ..., SP/8 für das Lehrprogrammieren. Programme, die unter den SP/K -Compilern ohne Fehler lief, erzielten die gleichen Ergebnisse unter anderen zeitgenössischen PL/I -Compilern wie dem PL/I -Compiler von IBM, dem PL/C -Compiler der Cornell University von IBM, IBM.[44]
Andere Beispiele sind PL0 von P. Grouse an der Universität von New South Wales, PFLAUME durch Marvin Victor Zelkowitz an der Universität von Maryland.,[45] und PLUTO von der Universität von Toronto.
IBM PL/I für OS/2, AIX, Linux, Z/OS
In einer größeren Überarbeitung von PL/I startete IBM Santa Teresa in Kalifornien 1992 einen völlig neuen Compiler. Die erste Sendung war für OS/2 und enthielt die meisten ANSI-G-Funktionen und viele neue PL/I-Funktionen.[46] Nachfolgende Veröffentlichungen lieferten zusätzliche Plattformen (MVS, VM, OS/390, AIX und Fenster), aber ab 2021 sind die einzigen unterstützten Plattformen Z/OS und Aix.[47] IBM fügte weiterhin Funktionen hinzu, um PL/I vollständig mit anderen Sprachen (insbesondere C und C ++) in Bereichen, in denen es überholt wurde, vollständig wettbewerbsfähig zu machen. Die entsprechende "IBM-Sprachumgebung" unterstützt die Interoperation von PL/I-Programmen mit Datenbank- und Transaktionssystemen sowie mit Programmen, die in C, C ++ und COBOL geschrieben wurden, und der Compiler unterstützt alle für Interkommunikation mit diesen Sprachen benötigten Datentypen.
Die PL/I -Designprinzipien wurden beibehalten und diese große Erweiterung standhalten, die mehrere neue Datentypen, neue Aussagen und Statementoptionen, neue Ausnahmebedingungen und neue Organisationen der Programmquelle umfasst. Die resultierende Sprache ist ein kompatibler Supersatz des PL/I-Standards und der früheren IBM-Compiler. Hauptthemen, die zu PL/I hinzugefügt wurden, waren:
- Neue Attribute für eine bessere Unterstützung benutzerdefinierter Datentypen-die
Alias definieren
,ORDINAL
, undStruktur definieren
Anweisung zur Einführung benutzerdefinierter Typen, dieHANDHABEN
Locator Datentyp, derTYP
Datentyp selbst, dieUNION
Datentyp und integrierte Funktionen zum Manipulieren der neuen Typen. - Zusätzliche Datentypen und Attribute, die gemeinsamen PC -Datentypen entsprechen (z.
OHNE VORZEICHEN
,Variingz
). - Verbesserungen der Lesbarkeit von Programmen - häufig implizite Verwendung implizite Verwendung explizit (z.
Byvalue
Attribut für Parameter) - Zusätzliche strukturierte Programmierkonstrukte.
- Ergänzungen der Handhabung unterbrechen.
- Kompilierungszeitpräprozessor erweitert, um fast alle Funktionen von PL/I -Saiten zu bieten und mit der Anwendungsentwicklungsumgebung eine Schnittstelle zu erhalten
Die neueste Serie von PL/I -Compilern für Z/OS namens Enterprise PL/I für Z/OS, Hebelcodegenerierung für die neuesten Z/Architekturprozessoren (Z14, Z13, ZEC12, ZBC12, Z196, Z114) über die Verwendung von von Die Archlvl -Parmkontrolle wurde während der Zusammenstellung bestanden und war die zweite Sprache auf hoher Ebene, die von Z/OS -Sprache um Umgebung unterstützt wurde (XL C/C ++, die erste und Enterprise Cobol V5 im letzten.)
Datentypen
ORDINAL
ist ein neuer Computerdatentyp. Die ordinalen Einrichtungen sind wie in der in Pascal, z.B. Ordinale Farbe definieren (rot, gelb, grün, blau, violett);
Darüber hinaus sind der Name und die internen Werte über integrierte Funktionen zugänglich. Integrierte Funktionen bieten Zugriff auf den Vorgänger und Nachfolger eines Ordnungswerts.
Das Definieren Sie Statement
(Siehe unten) Ermöglicht zusätzliche TYP
S aus den integrierten Attributen von PL/I erklärt werden.
Das Handle (Datenstruktur)
Der Locator -Datentyp ähnelt dem ZEIGER
Datentyp, aber stark tippt, um nur an eine bestimmte Datenstruktur zu binden. Das =>
Der Bediener wird verwendet, um eine Datenstruktur mit einem Handle auszuwählen.
Das UNION
Attribut (gleichwertig zu ZELLE
In frühen PL/I -Spezifikationen) ermöglicht mehrere Skalarvariablen, Arrays oder Strukturen, um dieselbe Speicherung in einer Einheit zu teilen, die die für die größte Alternative benötigte Speicherung einnimmt.
Wettbewerbsfähigkeit auf dem PC und mit C.
Diese Attribute wurden hinzugefügt:
- Die String -Attribute
Variingz
(für keine terminierten Charakterzeichenfolgen),Hexadec
,Widechar
, undGRAFIK
. - Die optionalen arithmetischen Attribute
OHNE VORZEICHEN
undUNTERZEICHNET
,Bigendian
undLittleendian
.OHNE VORZEICHEN
notwendig dieUPTRU
undDownhru
Option in iterativen Gruppen, die es ermöglichen, eine kontrollierte Schleife auszuführen, ohne den Grenzwert zu überschreiten (auch für wichtig fürORDINAL
s und gut zum Dokumentieren von Schleifen). - Das
Datum (Muster)
Attribut für die Steuerung von Datumsangaben und Ergänzungen, um Zeit und Datum in die beste aktuelle Praxis zu bringen. Neue Funktionen zum Manipulieren von Daten umfassen -TAGE
undTagesstörungen
zur Konvertierung zwischen Daten und Anzahl der Tage und ein GeneralTERMINZEIT
Funktion zum Ändern von Datumsformaten.
Neue Funktionen zur Behandlung von String-Handhabungen wurden hinzugefügt-zum zentrierten Text, zum Bearbeiten eines Bildformats und zum Schneiden von Rohlingen oder ausgewählten Zeichen vom Kopf oder Schwanz des Textes. Verifizieren
zu VERIFIZIEREN
Von rechts. und SUCHE
und ÜBEREINSTIMMEN
Funktionen.
Verbindungszuweisungsoperatoren a la c z. +=
, & =
, -=
, || =
wurden hinzugefügt. A+= 1
ist äquivalent zu A = a+1
.
Zusätzlicher Parameter Deskriptoren und Attribute wurden für weggelassene Argumente und Argumentlisten der variablen Länge hinzugefügt.
Programmlesbarkeit - Absichten explizit machen
Das WERT
Das Attribut deklariert eine Kennung als Konstante (abgeleitet von einem bestimmten wörtlichen Wert oder einem eingeschränkten Ausdruck).
Parameter können die haben Byaddr
(an der Adresse übergeben) oder Byvalue
(nach Wert bestehen) Attribute.
Das Zuweisbar
und Nicht zugewiesen
Attribute verhindern unbeabsichtigte Zuordnungen.
Für immer tun;
vermeidet die Notwendigkeit des erfundenen Konstrukts Tu während ('1'b);
.
Das Definieren Sie Statement
Führen Sie benutzerdefinierte Namen ein (z. GANZE ZAHL
) für Kombinationen von integrierten Attributen (z. Binär fest (31,0)
). Daher Definieren Sie Alias Integer Fixed Binary (31.0)
erstellt die TYP
Name GANZE ZAHL
als Alias für die Menge der integrierten Attribute fester binär (31.0). Struktur definieren
gilt für Strukturen und ihre Mitglieder; es liefert a TYP
Name für eine Reihe von Strukturattributen und entsprechenden Unterstrukturelementendeklarationen für die Verwendung in einer Strukturerklärung (eine Verallgemeinerung des WIE
Attribut).
Strukturierte Programmierzügnisse
A VERLASSEN
Aussage, um eine Schleife zu verlassen und eine Iterieren
mit der nächsten Iteration einer Schleife fortzusetzen.
UPTRU
und Downhru
Optionen für iterative Gruppen.
Das Paketkonstrukt besteht aus einer Reihe von Verfahren und Erklärungen zur Verwendung als Einheit. Außerhalb der Verfahren deklarierte Variablen sind lokal zum Paket und können verwenden STATISCH
, BASIEREND
oder Kontrolliert
Lagerung. Die im Paket verwendeten Verfahrensnamen sind ebenfalls lokal, können aber mit dem externen gemacht werden Exporte
Option der Paketdatement
.
Interrupt -Handhabung
Das Resignal-Statement
In einer On-Unit-Ausführung des On-Units wird ausgeführt und erhöht den Zustand erneut in dem Verfahren, das den aktuellen Auftritt bezeichnet hat (somit die Kontrolle an die entsprechende On-Einheit für dieses Verfahren übergeben).
Das InvalidOP
Die Bedingung behandelt ungültige Betriebscodes, die vom PC -Prozessor erkannt wurden, sowie illegale arithmetische Operationen wie die Subtraktion von zwei unendlichen Werten.
Das Anycondition
Die Bedingung wird für die Abfangbedingungen bereitgestellt, für die im aktuellen Verfahren keine spezifische Einheit vorgelegt wurde.
Das LAGERUNG
Bedingung wird angesprochen, wenn eine Zuweisen
Die Anweisung kann nicht ausreichend Speicherplatz erhalten.
Andere Mainframe- und Minicomputer -Compiler
Eine Reihe von Anbietern produzierte Compiler, um in den 1970er Jahren mit IBM PL/I F zu konkurrieren oder Compiler auf Mainframes und Minicomputern zu optimieren. In den 1980er Jahren war das Ziel normalerweise die aufstrebende ANSI-G-Untergruppe.
- 1974 Burroughs Corporation Ankündigte PL/I für den B6700 und B7700.[48]
- Univac veröffentlichte ein Univac pl/i,[49] Und in den 1970er Jahren verwendete auch eine Variante von PL/I, PL/I Plus für die Systemprogrammierung.
- Ab 1978 Daten allgemein vorausgesetzt pl/i auf seinem Finsternis und Eclipse MV Plattformen, die das ausführen Aos, AoS/vs & AOS/VS II Betriebssysteme.[50] In der Sprache wurde eine Reihe von Betriebsversorgerprogrammen für Betriebssysteme geschrieben.
- Paul Abrahams vom Courant Institute of Mathematical Sciences von NYU von NYU 1972 in PL/i, Bootstrapping über PL/I F. Es unterstützte "ungefähr 70%" von PL/I, die an die CDC 6600 zusammengestellt wurde[51]
- CDC lieferte einen optimierenden Subset PL/I -Compiler für Cyber 70, 170 und 6000 Serien.[52]
- Fujitsu lieferte einen PL/I -Compiler, der dem PL/I -Optimierer entspricht.
- Stratus Technologies PL/I ist eine Ansi G -Implementierung für die Vos Betriebssystem.[53]
- IBM -Serie/1 Pl/i[54][55] ist eine erweiterte Teilmenge der ANSI-Programmiersprache PL/I (ANSI X3.53-1976) für das IBM-Serie/1 Echtzeit-Programmiersystem.
PL/I Compiler für Microsoft .net
- Im Jahr 2011 entwarf Raincode einen vollständigen Legacy -Compiler für die Microsoft .net und .NET CORE Plattformen mit dem Namen Raincode PL/I Compiler.
PL/I Compiler für Personalcomputer und Unix
- In den 1970er und 1980er Jahren Digitale Forschung verkaufte einen PL/i Compiler für CP/m (Pl/i-80), CP/M-86 (PL/I-86) und PCs mit DOS.[56] Es basierte auf Untergruppe G von PL/i[56] und wurde geschrieben in Pl/m.
- Micro Focus implementiert offen pl/i für Windows[57] und Unix/Linux -Systeme,[58] was sie von Liant erworben haben.
- IBM geliefert pl/i für OS/2[46] 1994 und PL/I für AIX im Jahr 1995.[59]
- Eisenfeder pl/i für OS/2 und später Linux wurde 2007 eingeführt.[60]
Pl/i Dialekte
- Pl/sEin Dialekt von PL/I, der zunächst BSL genannt wurde, wurde Ende der 1960er Jahre entwickelt und wurde der Systemprogrammierung Sprache für IBM Mainframes. Fast alle IBM Mainframe -Systemsoftware in den 1970er und 1980er Jahren wurden in PL/s geschrieben. Es unterschied sich von PL/I, als es keine Datentypkonvertierungen gab, keine Laufzeitumgebung, Strukturen unterschiedlich zugeordnet wurden und die Zuordnung ein Byte-Byte-Kopie war. Alle Saiten und Arrays hatten feste Ausdehnung oder verwendeten die
VERWEISEN
Möglichkeit. PL/S wurde von PL/AS und dann von PL/X abgelöst, was die Sprache ist, die derzeit für interne Arbeiten an aktuellen Betriebssystemen verwendet wird. OS/390 und nun Z/OS. Es wird auch für einige verwendet Z/VSE und Z/VM Komponenten. IBM DB2 Für Z/OS ist auch in PL/x geschrieben. - Pl/c, ist ein Unterrichtsdialekt der PL/I -Computerprogrammiersprache, die in den 1970er Jahren an der Cornell University entwickelt wurde.
- Zwei Dialekte von PL/I namens PL/MP (Maschinenprodukt) und PL/MI (Maschinenschnittstelle) wurden von IBM in der Systemsoftware der System verwendet System/38 und AS/400 Plattformen.[61][62] PL/MP wurde verwendet, um die sogenannte Implementierung zu implementieren Vertikaler Mikrocode dieser Plattformen und zielte auf den Impi -Befehlssatz ab. PL/mi zielt auf die Maschinenschnittstelle dieser Plattformen und wird in der verwendet Steuerungsprogrammeinrichtung und die Xpf Schicht von OS/400.[63] Der PL/MP -Code wurde hauptsächlich durch C ++ ersetzt, wenn OS/400 auf die portiert wurde IBM RS64 Prozessorfamilie, obwohl einige für die zurückgehalten und zurückgezogen wurden Powerpc/Macht ISA die Architektur.[64] Der PL/MI -Code wurde nicht ersetzt und bleibt in IBM i verwendet.[65][66]
- PL/8 (oder PL.8), sogenannte, weil es ungefähr 80% von PL/i waren,[67] wurde ursprünglich von IBM Research in den 1970er Jahren für die entwickelt IBM 801 die Architektur.[68] Es wurde später Unterstützung für die Motorola 68000 und System/370 Architekturen.[69] Es wird weiterhin für mehrere IBM -Aufgaben zur Entwicklung von IBM -Systemen verwendet (z. Millicode und Firmware zum Z/Architektur Systeme) und wurde überarbeitet, um a zu verwenden 64-Bit GCC-Basis Backend.[68][70]
- Honeywell, Inc. aufgetreten PL-6 zum Erstellen der Erstellung des CP-6 Betriebssystem.
- Prime Computer verwendete zwei verschiedene PL/i -Dialekte als die Systemprogrammiersprache des Primos Betriebssystem: Pl/pab Version 18 und dann SPL, ab Version 19.
- Xpl ist ein Dialekt von PL/I, mit dem andere Compiler mit den XPL -Compiler -Techniken geschrieben wurden. XPL hat seiner kleinen Teilmenge von PL/i einen Heap -String -Datentyp hinzugefügt.
- Hal/s ist eine Echtzeit-Programmiersprache in Echtzeit, die am besten für ihre Verwendung im Space Shuttle-Programm bekannt ist. Es wurde von Intermetrics in den 1970er Jahren für die NASA entworfen. Hal/s wurde in XPL implementiert.
- IBM und verschiedene Subunternehmer entwickelten in den frühen 1970er Jahren auch eine weitere PL/I -Variante, um die Signalverarbeitung für die Marine namens SPL/I zu unterstützen.
- Sabretalk, ein Echtzeit-Dialekt von PL/Ich programmierte das Säbel Airline Reservierungssystem.
Verwendungszweck
PL/I -Implementierungen wurden für Mainframes aus den späten 1960er Jahren, Mini -Computern in den 1970er Jahren und PC -Computern entwickelt[56] In den 1980er und 1990er Jahren. Obwohl seine Hauptverwendung eingeschaltet war MainframesEs gibt Pl/i -Versionen für DOS, Microsoft Windows, OS/2, AIX, OpenVMS, und Unix.
Es wurde in der Geschäftsdatenverarbeitung häufig verwendet[71] und für die System Verwendung für das Schreiben von Betriebssystemen auf bestimmten Plattformen. Sehr komplexe und leistungsstarke Systeme wurden mit PL/I gebaut:
- Das SAS -System wurde anfangs in pl/i geschrieben; Der SAS -Datenschritt ist weiterhin auf PL/I -Syntax modelliert.
- Das Pioniersystem für Online -Airline -Reservierungssysteme Säbel wurde ursprünglich für den IBM 7090 in Assembler geschrieben. Die S/360 -Version wurde größtenteils mit Verwendung geschrieben Sabretalk, ein Zweck, das Subset PL/I Compiler für ein dediziertes Steuerungsprogramm erstellt hat.
- Das Mehrheit Das Betriebssystem wurde größtenteils in PL/i geschrieben.
- PL/Ich wurde verwendet, um eine ausführbare formale Definition zu schreiben[72] IBMs zu interpretieren Systemnetzwerkarchitektur.
PL/Ich habe die Hoffnungen seiner Anhänger nicht erfüllt, dass es Forran und Cobol verdrängen und der Hauptakteur auf Mainframes werden würde. Es blieb eine Minderheit, aber ein bedeutender Spieler. Dafür kann es keine endgültige Erklärung geben, aber einige Trends in den 1970er und 1980er Jahren militierten gegen seinen Erfolg, indem sie das Territorium, auf dem PL/ich einen Wettbewerbsvorteil genoss, schrittweise verringert.
Erstens hat sich die Art der Mainframe -Softwareumgebung geändert. Anwendungssubsysteme für Datenbank und Transaktionsverarbeitung (CICs und IMS und Orakel Auf System 370) und Anwendungsgeneratoren wurden zum Schwerpunkt der Anwendungsentwicklung von Mainframe -Benutzern. Signifikante Teile der Sprache wurden irrelevant, da die entsprechenden nativen Merkmale der Subsysteme (z. B. Aufnahme und viel Eingang/Ausgang) verwendet werden müssen. Forran wurde in diesen Anwendungsgebieten nicht verwendet, was PL/I auf Cobols Territorium beschränkte. Die meisten Benutzer blieben bei COBOL. Aber als der PC die dominierende Umgebung für die Programmentwicklung wurde, wurden Forran, Cobol und PL/I alle von Minderheitensprachen überholt von überholt C ++, Java und dergleichen.
Zweitens wurde pl/ich im Systemprogrammierfeld überholt. Die IBM System -Programmiergemeinschaft war nicht bereit, PL/I zu verwenden; Stattdessen entwickelte und nahm IBM einen proprietären Dialekt von PL/I für die Systemprogrammierung. - - Pl/s.[73] Mit dem Erfolg von PL/s innerhalb von IBM und von C außerhalb von IBM wurden die einzigartigen PL/I -Stärken für die Systemprogrammierung weniger wertvoll.
Drittens haben die Entwicklungsumgebungen die Funktionen für die interaktive Softwareentwicklung ausgebaut, die wiederum die einzigartigen PL/I -Interaktiven und Debugging -Stärken weniger wertvoll machten.
Viertens wurden Merkmale wie strukturierte Programmierungen, Zeichenfolge -Operationen und Objektorientierung zu COBOL und FORTRAN hinzugefügt, was die relativen Vorteile von PL/I weiter verringerte.
Bei Mainframes wurden auch erhebliche Geschäftsprobleme auf dem Spiel stehen. Die Hardware -Konkurrenten von IBM hatten wenig zu gewinnen und viel zu verlieren durch den Erfolg von PL/i. Die Compiler-Entwicklung war teuer und die IBM-Compiler-Gruppen hatten einen eingebauten Wettbewerbsvorteil. Viele IBM -Benutzer wollten vermeiden, in proprietäre Lösungen eingeschlossen zu werden. Ohne frühe Unterstützung für PL/I durch andere Anbieter war es am besten, PL/i zu vermeiden.
Entwicklung der PL/I -Sprache
Dieser Artikel verwendet den PL/I -Standard als Referenzpunkt für Sprachmerkmale. Eine Reihe von Merkmalen, die in den frühen Implementierungen von Bedeutung sind, standen jedoch nicht im Standard; und einige wurden von Nicht-IBM-Compilern angeboten. Und die De -facto -Sprache wuchs nach dem Standard weiter, letztendlich von Entwicklungen auf dem PC.
Bedeutende Funktionen im Standard weggelassen
Multithreading
Multithreading, unter dem Namen "Multitasking", wurde von PL/I F implementiert,[74] Die PL/I Checkout und Optimierung von Compilern,[75] und die neueren AIX- und Z/OS -Compiler. Es umfasste die Datentypen VERANSTALTUNG
und AUFGABE
, das Aufgabenoption
auf der Calldatement
(Gabel), das Wartezeit
(Verbinden), das Verzögerung (Verzögerungszeit)
, Ereignisoption
s auf den Datensatz -E/A -Anweisungen und die FREISCHALTEN
Erklärung zum Entsperren gesperrte Aufzeichnungen auf EXKLUSIV
Dateien. Ereignisdaten identifizieren ein bestimmtes Ereignis und geben an, ob es vollständig ('1'b) oder unvollständig (' 0'b) ist: Aufgabendaten identifizieren eine bestimmte Aufgabe (oder Prozess) und geben seine Priorität im Vergleich zu anderen Aufgaben an.
Präprozessor
Das erste IBM Zeit kompilieren Präprozessor wurde vom IBM Boston Advanced Programing Center in Cambridge, Masse, gebaut und mit dem PL/I -F -Compiler versandt. Das %ENTHALTEN
Die Aussage war im Standard, aber der Rest der Merkmale nicht. DER DEC und KEDNOS[38] PL/I Compiler haben die gleichen Funktionen wie IBM mit einigen eigenen Ergänzungen implementiert. IBM hat seinen Compilern weiterhin Präprozessorfunktionen hinzugefügt. Der Präprozessor behandelt das schriftliche Quellprogramm als eine Abfolge von Token, kopiert sie in eine Ausgabequelldatei oder wirkt auf sie. Wenn ein% Token auftritt ERKLÄREN
d, AKTIVIEREN SIE
D und ein Kompilierungszeitwert zugewiesen, wird der Kennung durch diesen Wert ersetzt. Token werden dem Ausgangsstrom hinzugefügt, wenn sie keine Aktion benötigen (z. +
), ebenso wie die Werte aktivierter Kompilierungszeitausdrücke. Somit eine Kompilierungszeitvariable PI
könnte deklariert, aktiviert und zugewiesen werden %Pi = '3.14159265'
. Anschließende Ereignisse von PI
würde durch ersetzt durch 3.14159265
.
Der unterstützte Datentyp ist Dezimal behoben
Ganzzahlen und CHARAKTER
Saiten unterschiedlicher Länge ohne maximale Länge. Die Strukturaussagen sind:
%[Labelliste:] Iteration: Aussagen; %[Labelliste:] Ende;
%prozedur name: procedure (Parameterliste) zurückgegeben (Typ); Aussagen ...;
%[Labelliste:] Ende;
%[Labelliste:] Wenn ...%dann ...%sonst ..
und die einfachen Aussagen, die auch eine [Labelliste:] haben können:]
%Aktivieren (Identifierliste) und %deaktivieren
-
Abtretung
Aussage %Identifizierende Attributliste deklarieren
%Gehen Sie zum Etikett
%ENTHALTEN
-
Null
Aussage
Die Funktionen ermöglichten es den Programmierern, Kennungen für Konstanten zu verwenden - z. Produktteilzahlen oder mathematische Konstanten - und wurden im Standard von benannten Konstanten für Rechendaten abgelöst. Die bedingte Kompilierung und iterative Erzeugung von Quellcode, möglich mit Kompilierungszeiteinrichtungen, wurde vom Standard nicht unterstützt. Mehrere Hersteller haben diese Einrichtungen implementiert.
Strukturierte Programmierzügnisse
Während der Standardisierung wurden strukturierte Programmierzüge zu PL/I vorgenommen, aber nicht in den Standard aufgenommen. Diese Merkmale waren die Urlaubsbeamte
aus einem iterativen Ausgang verlassen TUN
, das Bis zur Option
und Wiederholungsoption
hinzugefügt zu TUN
, und ein Fallerklärung der allgemeinen Form:Wählen Sie (Ausdruck) {wenn (Ausdruck) Gruppe} ... ansonsten Gruppen
Diese Funktionen waren alle in IBMs PL/I Checkout und Optimizing Compilern enthalten[29] und in dec pl/i.[76]
Debug -Einrichtungen
PL/I F hatte einige Debug-Einrichtungen angeboten, die nicht für den Standard vorgelegt wurden, sondern von anderen implementiert wurden-insbesondere das Vorfix für Check-Bedingung (Variable-List). ÜBERPRÜFEN
On-Condition und die Schnappnahme
Möglichkeit. Die IBM -Optimierungs- und Checkout -Compiler haben zusätzliche Funktionen hinzugefügt, die der Konversations -Mainframe -Programmierumgebung angemessen sind (z. AUFMERKSAMKEIT
Bedingung).
Seit dem Standard entwickelte bedeutende Merkmale
Es waren mehrere Versuche unternommen worden, einen Struktur -Mitgliedstyp zu entwerfen, der einen von mehreren Datenatypen haben könnte (ZELLE
im frühen IBM). Mit dem Wachstum von Klassen In der Programmierungstheorie wurden Ansätze dazu auf einer PL/I -Basis möglich - UNION
, TYP
usw. wurden von mehreren Compilern hinzugefügt.
PL/Ich war in einer einzelbyte-Charakter-Welt gezeugt worden. Mit der Unterstützung der japanischen und chinesischen Sprache und der Entwicklungen auf internationalen Code-Seiten wurde das Charakter-String-Konzept erweitert, um breite Nicht-ASCII/EBCDIC-Saiten aufzunehmen.
Zeit- und Date -Handhabung wurden überarbeitet, um mit dem umzugehen Millennium -Problemmit der Einführung der DateTime -Funktion, die Datum und Uhrzeit in einem von etwa 35 verschiedenen Formaten zurückgegeben hat. Mehrere andere Datumsfunktionen befassen sich mit Conversions zu und aus Tagen und Sekunden.
Kritik
Umsetzungsfragen
Obwohl die Sprache leicht zu lernen und zu verwenden ist, ist es schwierig und zeitaufwändig, einen PL/I-Compiler zu implementieren. Eine Sprache, die so groß ist, wie PL/ich Teilmengen, die die meisten Anbieter produzieren konnten, und die meisten Benutzer beherrschen. Dies wurde erst dann gelöst, bis "Ansi G" veröffentlicht wurde. Die für PL/I einzigartigen Kompilierungszeiteinrichtungen haben zusätzliche Implementierungsaufwand und zusätzliche Compiler -Pässe durchgeführt. Ein PL/I -Compiler war zwei- bis viermal so groß wie vergleichbare FORTRAN- oder COBOL -Compiler und auch so viel langsamer - versetzt durch Gewinne in der Programmiererproduktivität versetzt. Dies wurde in IBM erwartet, bevor die ersten Compiler geschrieben wurden.[10]
Einige argumentieren, dass pl/ich ungewöhnlich schwer zu analysieren ist.[77] Das pl/i Schlüsselwörter sind nicht reserviert, sodass Programmierer sie als variable oder Prozedurnamen in Programmen verwenden können. Weil der ursprüngliche PL/i (f) Compiler versucht Autokorrektur Wenn es auf ein Schlüsselwort in einem falschen Kontext stößt, wird häufig davon ausgegangen, dass es sich um einen variablen Namen handelt. Dies führt zu "Cascading Diagnostics".[30] ein Problem, das von späteren Compilern gelöst wurde.
Die Anstrengungen zur Erzeugung eines guten Objektcodes wurden möglicherweise während des ersten Designs der Sprache unterschätzt. Programmoptimierung (Für den Wettbewerb mit der hervorragenden Programmoptimierung, die von verfügbaren FORTRAN -Compilern durchgeführt wird) ist ungewöhnlich komplex Nebenwirkungen und allgegenwärtige Probleme mit Aliasing von Variablen. Eine unvorhersehbare Modifikation kann asynchron auftreten Ausnahmebehandler, die durch "über Aussagen" in (unsichtbaren) Anrufern bereitgestellt werden können. Zusammen erschweren diese zuverlässig vorherzusagen, wann die Variablen eines Programms zur Laufzeit geändert werden könnten. In der typischen Verwendung jedoch von benutzerbezogene Fehlerhandler (die von Benutzer geschriebenen Fehler (die Einheit
) Nehmen Sie häufig keine Zuordnungen zu Variablen an. Trotz der oben genannten Schwierigkeiten produzierte IBM 1971 den PL/I -Optimierungs Compiler.[31]
PL/I enthält viele selten verwendete Funktionen, wie z. Multitasking Support (eine IBM-Erweiterung der Sprache), die dem Compiler Kosten und Komplexität erhöht, und seine Co-Verarbeitungsanlagen erfordern eine Mehrprogrammierungsumgebung mit Unterstützung für nicht blockierende mehrere Threads für Prozesse durch die Betriebssystem. Compiler -Autoren waren frei, auszuwählen, ob diese Funktionen implementiert werden sollen.
Eine nicht deklarierte Variable wird standardmäßig durch das erste Ereignis deklariert - dies kann zu unvorhersehbaren Ergebnissen führen. Diese "implizite Deklaration" unterscheidet sich nicht von den FORTRAN -Programmen. Für PL/I (F) ermöglicht eine Attributliste jedoch dem Programmierer, alle falsch geschriebenen oder nicht deklarierten Variablen zu erkennen.
Programmierer Probleme
Viele Programmierer bewegten sich nur langsam aus Cobol oder Forran Aufgrund einer wahrgenommenen Komplexität der Sprache und Unreife des PL/i F -Compilers. Die Programmierer waren scharf in wissenschaftliche Programmierer (die Forran) und Business -Programmierer (die COBOL verwendeten) mit erheblicher Spannung und sogar Abneigung zwischen den Gruppen unterteilt wurden. PL/I -Syntax entlehnt sowohl von COBOL als auch von FORTRAN -Syntax. Anstatt Merkmale zu bemerken, die ihre Arbeit erleichtern würden, bemerkten Forran -Programmierer der Zeit die COBOL -Syntax und hatten die Meinung, dass es sich um eine Geschäftssprache handelte, während COBOL -Programmierer die FORTRAN -Syntax bemerkten und sie als wissenschaftliche Sprache betrachteten.
Sowohl COBOL- als auch Forran -Programmierer betrachteten es als "größere" Version ihrer eigenen Sprache, und beide wurden von der Sprache etwas eingeschüchtert und nicht geneigt, sie zu übernehmen. Ein weiterer Faktor war Pseudo--Symarilien zu Cobol, Forran und Algol. Dies waren PL/I -Elemente, die ähnlich wie eine dieser Sprachen aussahen, aber in PL/i anders funktionierten. Solche Frustrationen hinterließen viele erfahrene Programmierer mit einer gezwungenen Sicht auf PL/I und oft eine aktive Abneigung gegen die Sprache. Eine frühe Unix-Fortune-Datei enthielt die folgende Beschreibung der Sprache:
Als jemand, der sich mit den Feinheiten von PL/I befasst hat, bin ich sicher, dass nur echte Männer ein solches maschinelles, radkörniges, allumfassendes Monster hätten geschrieben haben können. Ein Array zuweisen und das mittlere Drittel befreien? Sicher! Warum nicht? Multiplizieren Sie eine Zeichenzeichenfolge eine Bit -Zeichenfolge und weisen Sie das Ergebnis einem Float Decimal zu? Fortfahren! Freien Parameter für kontrollierte Variable Prozedur und stellt ihn neu zu, bevor Sie ihn zurückgeben? Überlagerung Drei verschiedene Arten von Variablen am selben Speicherort? Alles was du sagst! Ein rekursives Makro schreiben? Nun, nein, aber echte Männer verwenden Rescan. Wie konnte eine Sprache, die von echten Männern so offensichtlich entworfen und geschrieben wurde, nicht für den echten Menschen verwendet werden?
Positiv, vollständige Unterstützung für Zeiger an alle Datentypen (einschließlich Zeiger auf Strukturen), Rekursion, Multitasking, Stringhandhabung und umfangreiche Einbauten Funktionen bedeutete pl/ich war in der Tat ein ziemlicher Sprung nach vorne im Vergleich zu den Programmiersprachen seiner Zeit. Diese reichten jedoch nicht aus, um die Mehrheit der Programmierer oder Geschäfte zu überzeugen, auf PL/i zu wechseln.
Die Kompilierungszeit des PL/I F Compilers Präprozessor war ungewöhnlich (außerhalb der Lispeln Welt[78]) bei der Verwendung der Syntax und Semantik seiner Zielsprache (Semantik (z.B. im Vergleich zu den C Präprozessor's "#" Richtlinien).
Besondere Themen in PL/i
Speicherklassen
PL/I stellt mehrere "Speicherklassen" zur Verfügung, um anzuzeigen, wie die Lebensdauer der Variablenspeicher verwaltet werden soll - Statisch, automatisch, kontrolliert
und BASIEREND
. Das einfachste implementieren ist STATISCH
, was angibt, dass der Speicher wie in der Ladezeit zugewiesen und initialisiert wird Cobol "Arbeitsspeicher" und früh Forran. Dies ist die Standardeinstellung für Extern
Variablen. Die Standardspeicherklasse von PL/I für Intern
Variablen ist Automatisch
, ähnlich wie bei anderen blockstrukturierten Sprachen, die von beeinflusst wurden, Algol, wie die "automatische" Speicherklasse in der C Sprache und Standardspeicherallokation in Pascal und "Lokal-Storage" in IBM Cobol. Speicherung für Automatisch
Variablen werden beim Eintritt in die zugewiesen Block
, Verfahren oder Einheit, in dem sie deklariert werden. Der Compiler- und Laufzeitsystem vergeben Speicher für a Stapelrahmen sie und andere Haushaltsinformationen einzudämmen. Wenn eine Variable mit einem deklariert wird Initial-Attribute
Der Code, der es auf einen Anfangswert einstellen wird, wird zu diesem Zeitpunkt ausgeführt. Für die ordnungsgemäße Verwaltung der Initialisierung ist Vorsorge erforderlich. Es können große Codemengen ausgeführt werden, um Variablen bei jedem Eingeben eines Umfangs zu initialisieren, insbesondere wenn die Variable ein Array oder eine Struktur ist. Speicherung für Automatisch
Variablen werden am Blockausgang befreit: Statisch, kontrolliert
oder BASIEREND
Variablen werden verwendet, um den Inhalt der Variablen zwischen Aufrufe eines Prozedur oder Blocks aufzubewahren. Kontrolliert
Der Speicher wird auch mit einem Stapel verwaltet, aber das Drücken und Knallen von Zuweisungen auf dem Stapel wird vom Programmierer verwaltet, indem er verwendet wird Zuweisen
und FREI
Aussagen. Speicherung für BASIEREND
Variablen werden mit Verwendung verwaltet Zuordnen/frei
, aber anstelle eines Stacks haben diese Zuordnungen unabhängige Lebensdauer und werden durch behoben Offset
oder ZEIGER
Variablen.
Das BEREICH
Das Attribut wird verwendet, um Programmierer definiert zu deklarieren Haufen. Daten können in einem bestimmten Bereich zugewiesen und befreit werden, und der Bereich kann als Einheit gelöscht, gelesen und geschrieben werden.[79]: S. 235–274
Speichertypfreigabe
Es gibt verschiedene Möglichkeiten, über verschiedene Datenerklärungen zugewiesenen Speicher zuzugreifen. Einige davon sind gut definiert und sicher, andere können sicher mit sorgfältiger Programmierung verwendet werden, und einige sind von Natur aus unsicher und/oder maschinenabhängig.[79]: S. 262–267, 178–180
Durch das Übergeben einer Variablen als Argument an einen Parameter durch Referenz kann der zugewiesene Speicher des Arguments mit dem Parameter referenziert werden. Das Definiert
Attribut (z. DCL A (10,10), B (2: 9,2: 9) definiert a
) Ermöglicht es, dass Teil oder alle Speicher einer Variablen mit einer anderen, aber konsistenten Deklaration verwendet werden. Die Sprachdefinition enthält a ZELLE
Attribut (später umbenannt UNION
), um unterschiedliche Definitionen von Daten zu ermöglichen, denselben Speicher zu teilen. Dies wurde von vielen frühen IBM -Compilern nicht unterstützt. Diese Verwendung sind sicher und maschinenunabhängig.
Aufnehmen Sie die E/A- und Listenverarbeitungssituationen, in denen der Programmierer eine Erklärung für die Speicherung des nächsten Datensatzes oder Elements entsprechen muss, bevor Sie wissen, welche Art von Datenstruktur er hat. Basierte Variablen und Zeiger sind der Schlüssel zu solchen Programmen. Die Datenstrukturen müssen angemessen entwickelt werden, wobei typischerweise Felder in einer Datenstruktur verwendet werden, um Informationen über ihren Typ und ihre Größe zu codieren. Die Felder können in der vorhergehenden Struktur oder mit einigen Einschränkungen in der aktuellen. Wenn sich die Codierung in der vorhergehenden Struktur befindet, muss das Programm eine basierte Variable mit einer Deklaration zuweisen, die dem aktuellen Element entspricht (unter Verwendung von Ausdrucksformen für Ausdehnung, sofern erforderlich). Wo die Art und die Größeninformationen in der aktuellen Struktur gehalten werden sollen ("selbst definierende Strukturen"), müssen die typdefinierenden Felder den typabhängigen Elementen und an derselben Stelle in jeder Version der Datenstruktur voraus sein. Das VERWEISEN
-Option wird zur selbstdefinierenden Ausdehnung verwendet (z. B. Stringlängen wie in Dcl 1 a basiert, 2 n binär, 2 b char (Länge verweisen A.N.) usw.
- wo LÄNGE
wird verwendet, um Instanzen der Datenstruktur zuzuweisen. Für selbstdefinierende Strukturen, jede Typisierung und Genannt
Felder sind vor den "realen" Daten platziert. Wenn die Datensätze in einem Datensatz oder die Elemente in einer Liste von Datenstrukturen auf diese Weise organisiert werden, können sie sicher auf maschinell unabhängige Weise gehandhabt werden.
PL/I -Implementierungen nicht (mit Ausnahme des PL/I Checkout Compiler) verfolgen die Datenstruktur, die beim ersten Speicher zugewiesen wird. Irgendein BASIEREND
Die Deklaration kann mit einem Zeiger in den Speicher verwendet werden, um auf den Speicher zuzugreifen - von Natur aus unsicher und maschinenabhängig. Diese Verwendung ist jedoch für "Zeigerarithmetik" wichtig geworden (typischerweise einer bekannten Adresse ein bestimmtes Betrag). Dies war ein umstrittenes Thema in der Informatik. Zusätzlich zu dem Problem von wilden Referenzen und Pufferüberschreitungen treten Probleme aufgrund der Ausrichtung und Länge für Datentypen auf, die mit bestimmten Maschinen und Compilern verwendet werden. In vielen Fällen, in denen Zeigerarithmetik erforderlich sein könnte, beinhalten die Suche nach einem Zeiger auf ein Element in einer größeren Datenstruktur. Das ADDR
Funktion berechnet solche Zeiger sicher und maschinell unabhängig.
Die Zeigerarithmetik kann erreicht werden, indem eine binäre Variable mit einem Zeiger wie in Alia angeht
DCL P -Zeiger, n fester binär (31) basiert (ADDR (p)); N = n+255;
Es stützt sich darauf, dass Zeiger die gleiche Länge sind wie Binär fest (31)
Ganzzahlen und an den gleichen Grenzen ausgerichtet.
Mit der Prävalenz von C und seiner freien und einfachen Einstellung zum Zeiger -Arithmetik können die jüngsten IBM PL/I -Compiler Zeiger mit den Additions- und Subtraktionsbetreibern verwenden, um die einfachste Syntax anzugeben (aber Compiler -Optionen können diese Praktiken, bei denen die Sicherheit und die Unabhängigkeit von Maschinen und Maschinenunabhängigkeit entspricht sind von größter Bedeutung).
On-Einheiten und Ausnahmebehandlung
Als PL/ich entworfen wurde, wurden Programme nur im Stapelmodus ausgeführt, ohne dass der Programmierer an einem Terminal eine mögliche Intervention betrifft. Eine außergewöhnliche Bedingung wie Division von Null würde das Programm abbrechen, das nur einen hexadezimalen Kern -Dump erbringt. Durch PL/I-Ausnahmehandhabung über On-Einheiten konnte das Programm angesichts der Ausnahmen von Hardware oder Betriebssystemen die Kontrolle behalten und Informationen wiederherstellen, bevor sie anmutiger schließen. Als ein Programm ordnungsgemäß debuggen wurde, konnte der größte Teil der Ausnahmebehandlung entfernt oder deaktiviert werden: Diese Kontrolle wurde weniger wichtig, als die Konversationsausführung alltäglich wurde.
Die Berechnungsausnahmebehandlung ist aktiviert und durch Bedingungspräfixe für Aussagen, Blöcke (einschließlich On-Einheiten) und Verfahren deaktiviert. - z.B. (Größe, NoSubScriptrange): a (i) = b (i)*c;
. Betriebssystemausnahmen für Eingabe/Ausgabe und Speicherverwaltung sind immer aktiviert.
Die On-Unit ist eine einzige Aussage oder START
-Block eingeführt von einem On-Statement
. Durch die Ausführung der Anweisung ermöglicht die angegebene Bedingung, z. B.,, Auf Zerodippenfahrt On-Unit
. Wenn die Ausnahme für diesen Zustand auftritt und die Bedingung aktiviert ist, wird die On-Einheit für die Bedingung ausgeführt. On-Einheiten werden in der Anrufkette geerbt. Wenn ein Block, ein Verfahren oder eine On-Einheit aktiviert ist, werden die durch die aufgerufenen Aktivierung festgelegten On-Einheiten durch die neue Aktivierung vererbt. Sie können von einem anderen übertragen werden On-Statement
und kann durch die wiederhergestellt werden Rückzugsdatement
. Die Ausnahme kann mit dem simuliert werden Signalanpassung
- z.B. Um die Ausnahmebehandler zu debuggen. Das dynamische Vererbungsprinzip für On-Einheiten ermöglicht es einer Routine, die Ausnahmen zu verarbeiten, die in den von ihr verwendeten Unterroutinen auftreten.
Wenn keine Einheit in Kraft ist, wenn eine Bedingung erhöht wird, wird eine Standard-Systemaktion ergriffen (oft soll dies die erhöhen ERROR
Bedingung). Die Systemaktion kann mit dem wiederhergestellt werden SYSTEM
Option der On-Statement
. Bei einigen Bedingungen ist es möglich, eine On-Unit-Ausführung zu vervollständigen und zum Interrupt-Punkt zurückzukehren (z. B. die, die StringRange, Unterströmung, Konvertierung, Überlauf, Bereich und Datei
Bedingungen) und Normalausführung wieder aufnehmen. Mit anderen Bedingungen wie z. (Subscriptrange)
, das ERROR
Der Zustand wird angesprochen, wenn dies versucht wird. Ein On-Unit kann mit a beendet werden GEHE ZU
Verhinderung einer Rückkehr zum Interrupt -Punkt, es ermöglicht das Programm, die Ausführung an anderer Stelle fortzusetzen, wie vom Programmierer festgelegt.
Ein On-Unit muss so gestaltet sein, dass sie mit Ausnahmen umgehen, die im On-Unit selbst auftreten. Das Auf Fehlersystem;
Die Anweisung ermöglicht eine verschachtelte Fehlerfalle; Wenn ein Fehler innerhalb eines Einheit auftritt, kann die Steuerung an das Betriebssystem übergeben, in dem möglicherweise ein System-Dump erzeugt wird, oder für einige Rechenbedingungen die Ausführung fortsetzen (wie oben erwähnt).
Das pl/i AUFZEICHNUNG
E/A-Anweisungen haben eine relativ einfache Syntax, da sie keine Optionen für die vielen Situationen von End-of-File bis hin zu Übertragungsfehlern bieten, die auftreten können, wenn ein Datensatz gelesen oder geschrieben wird. Stattdessen werden diese Komplexitäten in den On-Units für die verschiedenen Dateibedingungen behandelt. Der gleiche Ansatz wurde für angewendet BEREICH
Sub-Adlocation und die BEREICH
Bedingung.
Das Vorhandensein von Ausnahmehandhabung On-Einheiten kann sich auf die Optimierung auswirken, da Variablen in On-Units inspiziert oder verändert werden können. Werte von Variablen, die ansonsten zwischen den Aussagen in Registern gehalten werden könnten, müssen möglicherweise zwischen Aussagen zur Speicherung zurückgegeben werden. Dies wird im Abschnitt zu den oben genannten Implementierungsproblemen erörtert.[79]: S. 249–376
Gehen Sie mit einem nicht fixierten Ziel
PL/I hat Gegenstücke für COBOL und Forrans Specialized gehen zu Aussagen.
Syntax für COBOL und FORTRAN existieren für die Codierung von zwei speziellen zwei Arten von GO, von denen jedes ein Ziel hat, das nicht immer gleich ist.
- Alter (COBOL), Zuordnung (FORTRAN):
- Ändern Sie Absatz Absatz, um mit para_name_zzz fortzufahren.[80]
- Es gibt andere/hilfreiche Einschränkungen, insbesondere "in Programmen ... rekursives Attribut, in Methoden oder .. Thread -Option".[80]
- Zuweisen 1860 Igottago[81]
Geh nach Igottago- Eine Verbesserung, die integrierte Dokumentation hinzufügt, ist
Gehen Sie nach Igottago (1860, 1914, 1939)- (Dies beschränkt den Wert der Variablen auf "eines der Beschriftungen in der Liste".[81]
- Eine Verbesserung, die integrierte Dokumentation hinzufügt, ist
- Ändern Sie Absatz Absatz, um mit para_name_zzz fortzufahren.[80]
- Gehen Sie zu ... basierend auf dem einweisungsähnlichen Wert einer Variablen.
PL/I hat Anweisungsbezeichnungsvariablen (mit dem Label -Attribut), das den Wert einer Anweisungsbezeichnung speichern und später in einer GOTO -Anweisung verwendet werden kann.[84][29]: 54[29]: 23
LABL1: ..... . LABL2: .... . . My_dest = labl1; . Geh zu my_dest; Gehen Sie hier (Lucky_Number); / * minus 1, null oder ... */ hier (-1): put list ("i o u"); Gehen Sie zur Lotterie; Hier (0): put list ("no bar"); Gehen Sie zur Lotterie; Hier (1): put list ("Dollar bill"); Gehen Sie zur Lotterie; Hier (2): put list ("zwei Dollar"); Gehen Sie zur Lotterie;
Anweisungsbezeichnungsvariablen können an genannte Prozeduren übergeben und verwendet werden, um zu einer anderen Anweisung in der Anrufroutine zurückzukehren.
Beispielprogramme
Hallo Weltprogramm
Hallo2: Proc Optionen(hauptsächlich); stellen aufführen ('Hallo Welt!'); Ende Hallo2;
Suche nach einer Zeichenfolge
/* In einer Zeile lesen, die eine Zeichenfolge enthält. /* und drucken Sie dann jede nachfolgende Zeile, die diese Zeichenfolge enthält. */ find_strings: Verfahren Optionen (hauptsächlich); erklären Muster Charakter (100) variieren; erklären Linie Charakter (100) variieren; erklären Linie Nr Fest binär; an Endfile (SYSIN) Pause; erhalten bearbeiten (Muster) (L); Linie Nr = 1; tun bis in alle Ewigkeit; erhalten bearbeiten (Linie) (L); wenn Index(Linie, Muster) > 0 dann stellen überspringen aufführen (Linie Nr, Linie); Linie Nr = Linie Nr + 1; Ende; Ende find_strings;
Siehe auch
Anmerkungen
- ^ "IBM Enterprise PL/I für Z/OS, v5.3 liefert zusätzliche Funktions- und Modernisierungsfunktionen für PL/I". Ankündigungsbriefe. IBM. 3. September 2019. LP19-0482. Abgerufen 1. Oktober, 2019.
- ^ "Änderungen bei I.B.M." Die New York Times. 20. Juni 1984.
- ^ Sturm, Eberhard (2009). Das neue pl/i. ViewEG+Teubner. ISBN 978-3-8348-0726-7.
- ^ a b Pugh, Emerson W.; Johnson, Lyle R.; Palmer, John H. (1991). IBMs 360 und frühe 370 Systeme. Cambridge, Mass .: MIT Press. ISBN 9780262161237.
- ^ Das Komitee hatte zum Zeitpunkt der Veröffentlichung des Berichts tatsächlich 8 Mitglieder. Sie sind:
- Hans Berg, Lockheed Burbank
- George Radin, IBM
- James Cox, Gewerkschaftskarbide
- Bruce Rosenblatt, Standardöl von Kalifornien, Stuhl.
- Douglas McIlroy, Bell Laboratories
- Robert Sheppard, Procter & Gamble. Aus der Leitfadenorganisation
- C. W. Medlock, IBM
- Bernice Weitzenhooffer, IBM.
- ^ "DataMation in Business & Science MPPL für NPL" (PDF). DataMation. Vol. 11, nein. 4. Frank D. Thompson. April 1965. p. 17.
- ^ "DataMation in Business & Science Ein weiterer neuer Name, mehr Compiler für NPL" (PDF). DataMation. Vol. 11, nein. 6. Frank D. Thompson. Juni 1965. p. 17.
- ^ Bericht II des Anteilsabgeschwächtes Sprachentwicklungskomitee, 25. Juni 1964
- ^ Radin, G.; H. Paul Rogoway (Januar 1965). "Highlights einer neuen Programmiersprache". Kommunikation der ACM. 8 (1): 9–17. doi:10.1145/363707.363708. S2CID 17133703.
- ^ a b Radin, G. (August 1978). "Die frühe Geschichte und Eigenschaften von PL/I". ACM Sigplan nennt. 13 (8): 227–241. doi:10.1145/960118.808389. S2CID 13925251.
- ^ Die Kontrolle über die Sprache wurde in einer speziellen Sprachkontrollgruppe und einem Sprachkontrollverband übertragen, das Vertreter der Compiler -Gruppen (6 bis 1973) in drei Ländern umfasste. Die tägliche Kommunikation war von Telex. Änderungen und Erweiterungen wurden durch ein Sprachprotokoll vorgenommen, das mehrere tausend detaillierte Punkte erreichte. Ein Sprachüberprüfungsgremium der Verwaltungsebene löste die vom Kontrollausschuss zu er und eskalierten Probleme.
- ^ Das universelle Sprachdokument (ULD). Technische Berichte TR25.081, TR25.082, TR25.083, TR25.0S4, TR25.085, TR25.086 und TR25.087, IBM Corp Vienna Österreich Juni 1968
- ^ "Frederick P. Brooks Jr. - IEEE Computer Society". IEEE Computer Society. 1989.
- ^ Einige Compiler entschieden sich, diese Kennungen zu reservieren oder Warnungen auszugeben, wenn sie als Kennungen verwendet wurden. Aber die anschließende Einführung von a Fallerklärung Zeigt den Wert des Prinzips an.
- ^ Vokale, Robin (2001). Einführung in PL/i. S. x. ISBN 978-0-9596384-9-3.
"PL/I ist die erste Sprache, die angemessene Einrichtungen für wissenschaftliche Berechnungen, Geschäftsdatenverarbeitung und Systemprogrammierung in einer einzigen Sprache bereitstellt" - - - Jean Sammet, Einige Ansätze und Illustrationen der Programmiersprache der Programmiersprache
- ^ a b Ans Programmiersprache pl/i. X3.53-1976
- ^ a b ANSI X3.74-1981 (R1998) Informationssysteme - Programmiersprache - PL/I Allzweck -Untergruppe
- ^ Als Reaktion auf die Beteiligung von IBM war eine Reihe von Herstellern nicht bereit, einen Standard zu unterstützen. Der anfängliche Auftrag von CLDG/X3J1 bestand darin, zu untersuchen, ob PL/I ein geeigneter Kandidat für die Standardisierung war. Die gemeinsamen Anstrengungen über 3500 Vorschläge für Sprach- oder Textänderungen.
- ^ "PL/I Sprachspezifikationen. GY33-6003"
- ^ Die im Standard definierte PL/I -Maschine ist in bedeckt Der Definitionsmechanismus für Standard PL/i. Michael Marcotty, Frederick G Sayward.
- ^ 1987 PL/I Allgemeine Untergruppe (ANSI X3.74-1987)
- ^ a b c Krasun, Andy. "Die ersten mehr als 35 Jahre der Hursley Software 1958-1993 mit einigen Hardware-Asses, einem persönlichen Konto" (PDF). Abgerufen 5. Mai, 2020.
- ^ IBM System/360 Betriebssystem PL/I (F) Compiler -Programmlogikhandbuch (PDF). IBM. Dezember 1966. Abschnitt 2: Compiler -Phasen. Y28-6800-1.
- ^ Diese wurden 1966 für einen frühen optimierenden Compiler entworfen, der in PL/I geschrieben wurde und beginnt mit dem PL/I -F -Compiler
- ^ Es gab viele Verzögerungen beim Versand dieser Gen de Gaulle verboten La Gaude vom Versand bis zur Concorde hatte seinen ersten Flug
- ^ IBM System/360 PL/I Subset Reference Manual (PDF). IBM. 1967. C28-8202-0.
- ^ R. A. Frieburghouse. "Der Multics PL/1 Compiler". Multiders.org.
- ^ Serie 60 (Stufe 66)/6000 Pl/I Referenzhandbuch. Honeywell. 1976. Order Nr. DE05.
- ^ a b c d OSPL/I Checkout und Optimierung Compiler: Sprachreferenzhandbuch (PDF). IBM. Oktober 1976. GC33-0009-04.
- ^ a b "Microsoft.Codeanalysis.csharp a Binder konvertiert Namen".[Permanent Dead Link]
- ^ a b A. Endres (2013). "Frühe Sprache und Compiler -Entwicklungen bei IBM Europe".
- ^ R. N. Cuff (Mai 1972). "Ein Konversations Compiler für volles PL/I". Das Computerjournal. 15 (2): 99–104. doi:10.1093/comjnl/15.2.99.
- ^ B. L. Marks (1973). "Das Design eines Checkout -Compilers". IBM Systems Journal. 12 (3): 315–327. doi:10.1147/sj.123.0315.
- ^ UniPrise pl/i für Unix Referenzhandbuch, Uniprise Systems, Inc., Irvine, Kalifornien, 1995, p. xxi.
- ^ Tom Linden (2004-05-21). "Re: Dave Cutler und VMs #2". Newsgroup:comp.os.vms. Archiviert von das Original am 14. Juni 2021. Abgerufen 2021-02-26.
- ^ Cutler, Dave (2016-02-25). "Dave Cutler Oral History". youtube.com (Interview). Befragt von Grant Saviers. Computergeschichte Museum. Archiviert vom Original am 2021-12-11. Abgerufen 2021-02-26.
- ^ Robin Vokale (2010-04-01). "PL/Ich stellte häufig Fragen (FAQ)". Newsgroup:Comp.Answers.
- ^ a b "Kednos pl/i für OpenVMS und Tru64". kednos.com. 2016-11-02. Archiviert von das Original am 2021-03-14. Abgerufen 2021-03-30.
- ^ Richard C. Holt (5. November 1972). "Unterrichten der tödlichen Krankheit (OR) einführende Computerprogrammierung mit PL/I". Archiviert von das Original am 15. April 2011. Abgerufen 30. Mai, 2010.
- ^ Abteilung für Computerwissenschaften, Benutzerhandbuch zu PL/C - Der Cornell -Compiler für PL/I, Cornell University, Ithaca, 1977.
- ^ "SL/1 (Schülersprache/eins)".
- ^ "Der IBM 1130". Bobspixels.com.
- ^ PLAGO/360 -Benutzerhandbuch, Polytechnic Institute of Brooklyn.
- ^ J. N. P. Hume und R. C. Holt, Strukturierte Programmierung unter Verwendung von PL/I und SP/K, Reston, Reston, 1975.
- ^ Marvin Victor Zelkowitz, PL/I programmieren mit Pflaume, 2. Aufl., Paladin House, Genf (Ill.), 1978.
- ^ a b Robin A. Vokale (März 1996). "Pl/i für OS/2". ACM Sigplan nennt. Verband für Rechenmaschinen. 31 (3): 22–27. doi:10.1145/227717.227724. S2CID 24441291.
- ^ "IBM PL/I Compiler -Familie". IBM. Abgerufen 5. Juli 2021.
- ^ Burroughs Corporation, B 6700/B 7700: PL/I Sprachreferenzhandbuch, Referenz 5001530, Detroit, 1977.
- ^ Sperry-Univac-Computersysteme, Sperry Univac 1100 Serie PL/I Programmiererreferenz, Referenz UP-8277, 1976.
- ^ Daten General Corporation, AOS PL/I Referenzhandbuch, Bestellung Nr. 093-000204, c. 1978.
- ^ Paul W. Abrahams. Der CIMS PL/I Compiler. 1979 Sigplan Symposium über Compiler Construction. S. 107–116. doi:10.1145/800229.806960. ISBN 0-89791-002-8.
- ^ Steuerungsdatengesellschaft, PL/I Referenzhandbuch, 1978, Veröffentlichung Nr. 60388100a.
- ^ OpenVOS PL/I Sprachhandbuch (R009). Marlboro, Massachusetts: Stratus Computer, Inc. 1995. OpenVOS PL/i.
- ^ IBM-Serie/1 PL/I Einführung Programmnummern 5719-PL1 5719-PL3 (PDF) (First Ed.). IBM. Februar 1977. GC34-0084-0.
- ^ IBM -Serie/1 PL/I: Sprachreferenzhandbuch. IBM. GC34-0085-0.
- ^ a b c Peter Norton (15. Mai 1984). "Die Norton Chronicles". PC Magazine. Archiviert von das Original am 6. Juli 2011. Abgerufen 25. Januar, 2010.
- ^ "Was ist neu in Studio und Server Enterprise Edition 6.0 Service Pack 2 - Wrap Pack 1" (PDF). Micro Focus. p. 1.
- ^ "Enterprise> Micro Focus Studio Enterprise Edition für UNIX> Willkommen> Produktinformationen> Installieren von Studio Enterprise Edition für UNIX> Systemanforderungen". Micro Focus. Archiviert von das Original Am 2017-11-07. Abgerufen 2017-11-05.
- ^ "IBM PL/I SET für AIX Version 1". 19. September 1995. Abgerufen 13. Mai 2019.
- ^ "Eisenfeder PL/I Compiler - Programmierhandbuch". Ironspring.com. 2020-09-15. Abgerufen 2021-02-26.
- ^ Frank G. Soltis (1997). In der AS/400, zweite Ausgabe. Duke Press. ISBN 978-1882419661.
- ^ Pigott, Diarmuid. "PL/MP". Online Historische Enzyklopädie von Programmiersprachen. Archiviert von das Original am 2. August 2020. Abgerufen 24. Februar, 2021.
- ^ Leif Svalgaard (2003-10-08). "Re: Re: Mi Emulator". MI400 (Mailingliste). Abgerufen 2021-02-26.
- ^ Dave McKenzie (2004-09-01). "Re: Dave McKenzies undelete Dienstprogramm - ein Lebensretter!". Midrange -Archiv MI400. Abgerufen 2021-05-24.
- ^ John Vriezen (2018-07-30). "In welcher Sprache ist das IBM I -Betriebssystem geschrieben?". quora.com. Abgerufen 2021-02-26.
- ^ Dan Hicks (1998-08-21). "Unix vs als/400?". Newsgroup:comp.sys.ibm.as400.misc.
- ^ Cocke, John; Markstein, Victoria (Januar 1990). "Die Entwicklung der RISC -Technologie bei IBM" (PDF). IBM Journal of Research and Development. 34 (1): 4–11. doi:10.1147/rd.341.0004. Archiviert von das Original (PDF) Am 2017-08-27. Abgerufen 2021-03-11.
Das Ergebnis war die PL.8 -Sprache, die ".8", was bedeutet, dass es etwa 80 Prozent des Reichtums von PL/i hatte.
- ^ a b W. Gellerich; T. Hendel; R. Land; H. Lehmann; M. Müller; P. H. Oden; H. Penner (Mai 2004). "Der GNU 64-Bit PL8 Compiler: Auf dem Weg zu einer offenen Standardumgebung für die Firmware-Entwicklung" (PDF). IBM Journal of Research and Development. IBM. 48 (3.4): 543–556. doi:10.1147/rd.483.0543. S2CID 19020943. Archiviert von das Original (PDF) am 2021-01-24. Abgerufen 2021-02-26.
- ^ Marc Auslander; Martin Hopkins (Juni 1982). Ein Überblick über den Pl.8 -Compiler (PDF). Sigplan '82 Verfahren des Sigplan -Symposiums von 1982 über Compiler Construction. ACM. S. 22–31. doi:10.1145/872726.806977. Abgerufen 2021-02-26.
- ^ J. von Buttlar; H. Bohm; R. Ernst; A. Horsch; A. Kohler; H. Schein; M. Stetter; K. Theurich (Juli 2002). "Z/CECSIM: Ein effizienter und umfassender Mikrocode -Simulator für den IBM ESERVER Z900" (PDF). IBM Journal of Research and Development. IBM. 46 (4.5): 607–615. doi:10.1147/rd.464.0607. S2CID 12745372. Archiviert von das Original (PDF) am 2020-02-11. Abgerufen 2021-02-26.
- ^ Pearkins, Jon E. (1. Dezember 1995). "Öffnen Sie PL/I: Liantadressen PL/I -Legacy -Anwendungen". Enterprise Systems Journal. Archiviert von das Original Am 3. November 2012.
Open PL/I schätzungsweise, dass 1995 20% der Mainframe -Legacy -Anwendungen in PL/I waren, mit 60% in COBOL: Es gab weltweit 300.000 PL/I -Programmierer
- ^ Schultz, G.; D. Rose; C.West; J.Gray (April 1980). "Ausführbare Beschreibung und Validierung von SNA". IEEE -Transaktionen zur Kommunikation. 28 (4): 661–677. doi:10.1109/tcom.1980.1094695.
- ^ In seinen Folien weiter IBM -Betriebssystem/360 Fred Brooks Sagt OS/360 hätte in PL/I nicht PL/S und Assembler geschrieben werden sollen. Der Artikel ist eine großartige Zusammenfassung des OS/360 -Programms. "Die /360 -Architektur und ihr Betriebssystem" Archiviert 2020-07-28 im Wayback -Maschine, 2001.
- ^ IBM System/360 Betriebssystem PL/I (F) Sprachreferenzhandbuch (PDF) (Fünfter Aufl.). Dezember 1972. Kapitel 15: Multitasking. GC28-8201-4.
- ^ OSPL/I Checkout und Optimierung Compiler: Sprachreferenzhandbuch (PDF) (Fünfter Aufl.). Oktober 1976. Kapitel 17: Multitasking. GC33-0009-4.
- ^ "Kapitel 8: Programmkontrolle". Kednos PL/I für OpenVMS Systems Referenzhandbuch. Januar 2007. archiviert von das Original Am 2016-08-18. Abgerufen 2017-11-05.
- ^ Der Compiler kann nicht sagen, ob eine Erklärung eine Erklärung oder eine Mehrfachzuweisungsanweisung ist, bis es auf das "=" der Zuordnung oder "" begegnet wird. des Deklars - was mehrere Linien später sein können. Die Tatsache, dass Declare/DCL nicht reserviert war
Deklarieren (i, j, k), l =
vsDeklarieren (i, j, k), l;
. - ^ Hart, Timothy P. (Oktober 1963). "Makrodefinitionen für LISP". HDL:1721.1/6111.
{{}}
: Journal zitieren erfordert|journal=
(Hilfe) - ^ a b c IBM Corporation (September 2012). Enterprise PL/I für Z/OS PL/I für AIX Rational Developer für System Z PL/I für Windows: Sprachreferenz (PDF). Abgerufen 2. Juni, 2019.
- ^ a b "ALTER ERSICHTUNG". IBM.
- ^ a b "Gehen Sie zu (zugewiesen)".
- ^ "Geh zu (berechnet)" ".
- ^ "Gehen Sie zur Erklärung in Cobol".
- ^ Digitale Forschung PL/I Language Programmer's Guide}. p. 103.
Verweise
Lehrbücher
- Neuhold, E.J. & Lawson, H.W. (1971). Die PL/I -Maschine: Eine Einführung in das Programmieren. Addison-Wesley. ISBN 978-0-2010-5275-6.
- Barnes, R.A. (1979). Pl/i für Programmierer. Nordholland.
- Hughes, Joan K. (1973). PL/I -Programmierung (1. Aufl.). Wiley. ISBN 0-471-42032-8.
- Hughes, Joan K. (1986). PL/I strukturierte Programmierung (3. Aufl.). Wiley. ISBN 0-471-83746-6.
- Groner, G.F. (1971). PL/I -Programmierung in technologischen Anwendungen. Bücher on Demand, Ann Arbor, MI.
- Anderson, M. E. (1973). Pl/i für Programmierer. Prentice-Hall.
- Stoutemyer, D.R. (1971). PL/I -Programmierung für Ingenieurwesen & Wissenschaft. Prentice-Hall.
- Ziegler, R. R. & C. (1986). PL/I: Strukturierte Programmierung und Problemlösung (1. Aufl.). Westen. ISBN 978-0-314-93915-9.
- Sturm, E. (2009). Das neue PL/i ... für PC, Workstation und Mainframe. Vieweg-Teubner, Wiesbaden, Deutschland. ISBN 978-3-8348-0726-7.
- Vokale, R.A. (1997). Einführung in PL/I, Algorithmen und strukturierte Programmierung (3. Aufl.). ISBN 978-0-9596384-9-3.
- Abrahams, Paul (1979). Die PL/I -Programmiersprache (PDF). Courant Mathematics and Computing Laboratory, New York University.
Standards
- Ansi ANSI X3.53-1976 (R1998) Informationssysteme - Programmiersprache - pl/i
- ANSI ANSI X3.74-1981 (R1998) Informationssysteme - Programmiersprache - PL/I Allzweck -Untergruppe
- ANSI ANSI X3.74-1987 (R1998) Informationssysteme - Programmiersprache - PL/I Allzweck -Untergruppe
- ECMA 50 Programmiersprache pl/i, 1. Ausgabe, Dezember 1976
- ISO 6160: 1979 Programmiersprachen - pl/i
- ISO/IEC 6522: 1992 Informationstechnologie - Programmiersprachen - Pl/I Allzweck -Teilmenge
Referenzhandbücher
- Burroughs Corporation, "B 6700 / B 7700 PL / I Language Reference", 5001530. Detroit, 1977.
- CDC. R. A. Vokale, "Pl/I für CDC Cyber". Optimierung des Compilers für die CDC Cyber 70 -Serie.
- Digital Equipment Corporation, "Decsystem10 Conversational Programmiersprache Benutzerhandbuch", Dec-10-lcpua-a-d. Maynard, 1975.
- Fujitsu Ltd, "FACOM OS IV PL/I Referenzhandbuch", 70SP5402E-1,1974. 579 Seiten. PL/I F -Untergruppe.
- Honeywell, Inc., "Multics pl/i Sprachspezifikation", AG94-02. 1981.
- IBM, IBM -Betriebssystem/360 PL/I: Sprachspezifikationen, C28-6571. 1965.
- IBM, OSPL/I Checkout und Optimierung Compiler: Sprachreferenzhandbuch, GC33-0009. 1976.
- IBM, IBM, "NPL Technical Report", Dezember 1964.
- IBM, Enterprise PL/I für Z/OS Version 4 Version 4 Release 1 Sprachreferenzhandbuch, SC14-7285-00. 2010.
- IBM, OS/2 PL/I Version 2: Programmierung: Sprachreferenz, 3. Aufl., Form SC26-4308, San Jose. 1994.
- Kednos PL/I für OpenVMS -Systeme. Referenzhandbuch, Aa-h952e-tm. November 2003.
- Liant Software Corporation (1994), Open PL/I Language Reference Manual, Rev. Ed., Framingham (Mass.).
- NIXDORF-Computer, "Terminalsystem 8820 Systemtechnischer teil pl/i-subset", 05001.17.8.93-01, 1976.
- Ing. C. Olivetti, "Mini Pl/I Referenzhandbuch", 1975, Nr. 3970530 V.
- Q1 Corporation, "The Q1/LMC Systems Software Manual", Farmingdale, 1978.
Externe Links
- IBM PL/I Compiler zum Z/OS, AIX, MVS, VM und VSE
- Eisenfeder -Software, Pl/i für Linux und OS/2
- Micro Focus 'Mainframe PL/I -Migrationslösung
- OS Pl/I V2R3 Grammatik Version 0.1
- Pliedit, Pl/i Editor für Eclipse
- Power vs. Abenteuer - pl/i und c, ein Seite an Seite Vergleich von PL/I und C.
- Softpanorama pl/1 Seite
- Die PL/I -Sprache
- PL1GCC -Projekt in SourceForge
- PL/1 -Programm zum Drucken von Schildern
- Ein Open Source PL/I Compiler für Windows NT