FOLD


PL / I or PL / 1 ( Programming Language Number 1) is a programming language developed by IBM in the early 1960s .

Its objective was to be universal and to be able to replace languages ​​for scientific purposes, such as FORTRAN and ALGOL , and the COBOL language , more adapted to the problems of accounting and management. It even allowed access to functions formerly reserved for system programming, such as the management of dynamic memory areas allocated to the request (not just the entry in a block), pointers , and program work directly In the input-output buffers . Its capabilities of generic entry points in procedures offered a possibility that will be found with C ++ .

This language is defined by the standards ECMA -50 (1976), ANSI X3.53-1976, AFNOR NF Z 65-500 and ISO 6160: 1979. It was used as a system programming language in the Multics project .

Its syntax added to the ideas of FORTRAN some ideas of COBOL (structures, calculation in decimal mode), and of ALGOL (structure of nested blocks). However, the programmers of these two languages ​​hardly communicated with each other at the time, and everyone felt unnecessary and cumbersome what had been included for the other. Its compiler also required large computers for the time, and initially had neither optimizer nor incremental compiler (the PL / I Optimizing compiler and the PL / I Checkout compiler will only come later).

This language had many features of what will later be the C , and even already some of the C ++ . IBM dropped the names of PL / 1 to PL / 100 to avoid losing control of the language specification. An unintended effect of this decision was to dissuade the competition from naming “PL / I” its own implementations, which took neighboring names: “SL / 1”, “CPL / 1″, ” PL / M “, “PL / C “, etc. Faced with the multitude of these names, the fear of a balkanization of the language (and associated migration costs in the event of a change of manufacturer) dissuaded the IT teams from migrating. The launching of language, despite qualities (simple management of multitasking 1 , recursion , block structures, facilities debugging and profiling , dynamic allocation in pools of memory themselves dynamic (AREA), LOCATE order to work out of the system buffers for avoid unnecessary recopies, similar generic procedures templates for C ++ ) and faults (illusory universality, unpredictable dynamic typing, intrinsic complexity) does not meet the expected success. Its powerful debugging capabilities, in particular (CHECK): and ON CHECK (…) , were nevertheless noted. recursion , block structures, facilities debugging and profiling , dynamic allocation in memory pools themselves dynamic (AREA), LOCATE order to work out of the system buffers to avoid unnecessary recopies, similar generic procedures templates Of C ++ ) and defects (illusory universality, unpredictable dynamic typing, intrinsic complexity) did not meet the expected success. Its powerful debugging capabilities, in particular (CHECK): and ON CHECK (…) , were nevertheless noted. recursion , block structures, facilities debugging and profiling , dynamic allocation in memory pools themselves dynamic (AREA), LOCATE order to work out of the system buffers to avoid unnecessary recopies, similar generic procedures templates Of C ++ ) and defects (illusory universality, unpredictable dynamic typing, intrinsic complexity) did not meet the expected success. Its powerful debugging capabilities, in particular (CHECK): and ON CHECK (…) , were nevertheless noted. facilities for debugging and profiling , dynamic allocation in memory pools themselves dynamic (AREA), LOCATE order to work out of the system buffers to avoid unnecessary recopies, similar generic procedures templates for C ++ ) and defects (Illusory universality, unpredictable dynamic typing, intrinsic complexity) therefore did not meet the expected success. Its powerful debugging capabilities, in particular (CHECK): and ON CHECK (…) , were nevertheless noted. facilities for debugging and profiling , dynamic allocation in memory pools themselves dynamic (AREA), LOCATE order to work out of the system buffers to avoid unnecessary recopies, similar generic procedures templates for C ++ ) and defects (Illusory universality, unpredictable dynamic typing, intrinsic complexity) therefore did not meet the expected success. Its powerful debugging capabilities, in particular (CHECK): and ON CHECK (…) , were nevertheless noted. LOCATE order to work on the same system buffers to avoid unnecessary recopies, similar generic procedures templates for C ++ ) and faults (illusory universality, unpredictable dynamic typing, intrinsic complexity) does not meet the expected success. Its powerful debugging capabilities, in particular (CHECK): and ON CHECK (…) , were nevertheless noted. LOCATE order to work on the same system buffers to avoid unnecessary recopies, similar generic procedures templates for C ++ ) and faults (illusory universality, unpredictable dynamic typing, intrinsic complexity) does not meet the expected success. Its powerful debugging capabilities, in particular (CHECK): and ON CHECK (…) , were nevertheless noted.

Features

General information

  • One objective of language is that everyone can use it without having to know all of it. There are therefore no reserved words in PL / I. (PL / I has many keywords , but they are recognized only in the precise context where they would make sense.) In other words, we can call a variable DO , FORMAT or POINTER if desired, and Language has been designed to allow it without any undesirable side effects [ref. Needed] ). This made it possible to write PL / I programs that were compiled and executed without risk, without having to know all PL / I. An extreme and caricatural example,IF ELSE = THEN THEN ELSE = IF; ELSE THEN = IF;
  • A programmer must be able to use an externally defined name – for example TIME – without having to ask whether it is a variable or a function without an argument.
  • The input / output instructions are part of the language and are not external library functions . An immediate advantage is that the input and output commands have access to the symbol table at compile time, which often simplifies their writing ( GET DATA , PUT DATA ).
  • The compiler is tolerant: If deviation from the syntax, it will try to determine what the developer wants him as the most likely, and will act accordingly by sending a simple warning ( ” warning “).

The complete objectives of PL / I are detailed in the preface to the language reference booklet prepared by IBM 2 .

Debugging Aids

They were all the more necessary because the tolerances of the compiler masked various errors:

  • Optional declarations, rules for setting default attributes based on declared attributes. An undeclared I, .., N variable immediately received 5 or 6 attributes; Hence a certain insensitivity to typing errors leading to duplication of variables and the need for the programmer to check in the symbol table to verify that the compiler understood it;
  • Cascade conversion rules that allow almost any value to be assigned to any variable;
  • Resulting in successful compilations followed by problematic executions.

Exception Management

The ON statement already represented an exception handling system .

  • ON CHECK ( variable ): block ; Executed the block instructions whenever the specified variable changed value, anywhere in the program except where it was inhibited by (NOCHECK) .
  • CHECK ( variable ) printed the name of the variable and its new value by default.
  • ON RANGE ( table ) executing the code when the array index out of its authorized terminals, etc.

Dump “evolved”

The PUT DATA statement ( list of variables ); Printed these variables in the format appropriate to their declaration. PUT DATA; Without list printed all variables of the program; ON ERROR PUT DATA; Guaranteed a very legible post-mortem dump in case of error detected at runtime .

Precursor aspects

PL / I, inspired in part by JOVIAL  (en), for which he takes for example the notation of the comments, included from his first version of 1970:

  • the generic calls , which appear with C ++ than in 1998 ;
  • The multitasking built into the language (not subroutines) that will generalize with Go in 2003 : to call the program X in asynchronous task, it was enough to write CALL X TASK; . To synchronize a WAIT ( X ); Was sufficient; This possibility was however only implemented in OS / 360 and its derivatives . She was not available under VM / CMS or the DOS for mainframes ;
  • The binary literal constants such as ‘ 01’B 3 which will only be integrated with C ++ 14 in 2014

Defects

The search for universality of language, without the underlying theory, has given it a complex appearance that has played against it, notably preventing its normalization. Fortran programmers had little use of the “structures” or decimal format inspired by COBOL, and those of Cobol did not see the value of computing in complex numbers.

The FORMAT instructions and the computed Fortran GOTO combined with the curiosities of Cobol with its PICTURE and its integrated file sorting have made PL / I a language complete but more complex to learn 4 .

Richard Holt of the University of Toronto, erected in 1972 an inventory of defects PL / I, Teaching the Fatal Disease (gold) Introductory Computer Programming Using PL / I 5 which circulated far and he reissued in 1999. It is Is still available today (2015).

Some features of PL / I déroutèrent and led the review of the AFCET to publish an article: I’m not curious, but I want to know . IBM France’s Director of Scientific Development, Jean-Jacques Duby, replied in person in the following issue with an article, Response to questions from a curious explaining the reason for these strangeness. However, some of the PL / I characteristics were eliminated in 1970, as the CONTROLLED (POINTER) variable class was deemed undesirable because of its possible confusion with the BASED (POINTER) class .

Heirs

  • The programming languages ​​XPL, PL-16 (for the Telemecanique T1600 and the Solar-16 ) and PL / M are derived from PL / I.
  • The CUPL and PL / C teaching languages ​​developed at Cornell are based on PL / I.
  • The procedural language REXX .

Today

By 2015, PL / I is no longer among the top 30 development languages, according to IEEE Spectrum 6 .

The PL / I project for gcc ceased further development in 2007 7 .

On the other hand, Iron Spring Software proposes in 2015 a compiler available under different systems including Linux ( distribution-agnostic ) 8 .

In addition, the Blu Age Software publisher offers a tool and a method for automating the transformation of PL / 1 to JavaEE and / or .Net patrimonies .

Conclusion

PL / I allowed to confine the manipulation of pointers and addresses to predefined zones and allocated to the request ( AREA ), thus benefiting the programmer from the hardware memory protection of the system. He had powerful integrated possibilities of debugging . These native possibilities of language are provided in other libraries today ( Electric Fence , etc. ), aid in debugging as Valgrind or frameworks . His other innovations are found today, sometimes in the body of languages ​​and compilers (generic procedural calls, automatic conversions of type, profiling,

Lightweight and symbolic posthumous consolation: multitasking which was one of the strengths of PL / I is also a language strongly promoted both internally and externally by Google : the Go language .

References

  • Sammet, Jean E. , Programming Languages: History and Fundamentals , Prentice-Hall, 1969
  • Richard L. Wexelblat (ed.): History of Programming Languages , Academic Press 1981.
  • Thomas J. Bergin and Richard G. Gibson (eds.): History of Programming Languages , Addison Wesley, 1996.
  • PL / I  [ archive ]
  • XPL  [ archive ] a language derived from PL / I