PL/I

PL/I ("Programming Language One", pronounced "pee el one") is a computer programming language designed for scientific, engineering, and business applications. It is undoubtedly one of the most powerful programming languages that has ever been created. It has been used by various academic, commercial and industrial users since it was introduced in the early 1960s, and in fact is still actively used today. See the newsletter[1] (http://www.users.bigpond.com/robin_v/pli-n8.htm). It is no longer considered a mainstream computer programming language.

PL/I's principal domain is data processing; it supports recursion and structured programming. The language syntax is English-like and suited for describing complex data formats, with a wide set of functions available to verify and manipulate them.

Contents

Details

PL/I has a very large vocabulary of built-in functions. In fact, there is probably no one compiler that has the full standard of keywords available. PL/I compilers are normally subsets of the language that specialize in various fields.

Partial list of features:

  • Preprocessing
  • Free form syntax
  • Full support for pointers
  • Case-insensitive keywords
  • Variable-length arrays
  • Call by reference is the default
  • Supports complex structure declarations with unions
  • Built-in support for a slew of data types, including two types of strings
  • Four classes of storage: Automatic, Static, Controlled (dynamic) and Based (anonymous dynamic)
  • Automatic garbage collection
  • Built-in coprocessing facility

History of PL/I

PL/I was developed by IBM as part of the development of the System 360. Prior to the System 360, IBM made several different incompatible models of mainframes for different purposes: some were designed for business use, others for scientific use. The goal of the System 360 project was to develop one series of compatible models to replace all the previous models, and which could be used equally well for commercial or scientific use.

Not only did business and scientific users use different machines; they also used different languages. Business users mainly used COBOL, while scientific users used Fortran. The goal of PL/I was to develop a single language usable for both business and scientific purposes. Another goal was to add structured programming constructs derived from ALGOL, which neither COBOL nor Fortran supported (at the time). PL/I was designed by a committee drawn from IBM programmers and users drawn from across the United States, working over several months. IBM originally wanted PL/I to be ready for use by the launch of the System 360; but unfortunately this deadline could not be met.

The language was originally to be called NPL, for "New Programming Language"; but that abbreviation could not be used because it was the name of the National Physical Laboratory in the UK. So PL/I was chosen instead.

Compilers were implemented by several groups in the early 1960s; the Multics project at MIT, one of the first to develop an operating system in a high level language, decided to make PL/I their implementation language in 1964.

Although PL/I did not have immense universal popularity on all computing platforms of that era, that is not to say that it did not enjoy success on isolated islands within the 1970s computer industry. It received significant use in business data processing, and also for more general programming use, especially for authoring operating systems on certain processors. PL/M, a subset of PL/I distributed by Intel, was used to write the CP/M operating system proper and much application software running on CP/M and MP/M. PL/M was used to write much other software at Intel for the 8080, 8085, and Z-80 processors during the 1970s. The XPL dialect of PL/I was used to write HAL/S as used on the Space Shuttle. A subset of PL/I, PL/P, was used to write new portions of PRIMOS at all rings of protection in its later revisions. A subset compiler named CORC, developed at Cornell University for teaching a dialect called PL/C, had the unusual capability of never failing to compile any program, through the use of extensive automatic correction of many syntax errors and by converting any remaining syntax errors to output statements.

Another variant of PL/I was PL/S, the IBM systems programming language. IBM used PL/S to write the MVS operating system in the early 1970s. IBM uses an improved and renamed PL/S for internal work on current operating systems, OS/390 and now z/OS.

The pioneering online airline reservation system Sabre, primarily written in 7090 assembler, later used PL/I and a custom compiler for some high-level tasks.

Although mostly used on mainframes, there are also PL/I versions for DOS, Microsoft Windows, AIX, OpenVMS, and Unix.

Certainly for the PL/M and PL/P subsets of PL/I, the "/" was nearly universally understood to be abbreviating the word "for" so that PL/M was Programming Language for Microcomputers and PL/P was Programming Language for Prime in the same way that CP/M was Control Program for Microcomputers. Given this widely-established practice, many people within various IBM programming communities referred to PL/I as Programming Language for IBM and pronounced it as "pee ell eye", calling to mind the "for IBM" concept. This "pee ell eye" perspective was deemed non-eccumenical for the non-IBM implementations of PL/I, especially at the Multics consortium comprised of MIT, GE, Bell Labs, and Honeywell and thus the "pee ell one" pronunciation and the "Programming Language One" antecedent predominated after PL/I was no longer an IBM-only language. Certainly this controversy regarding naming harkens back to pro-IBM and anti-IBM technopolitics during that era, where various camps formed advancing ASCII and ISO646 versus EBCDIC code pages for example. Even within the various pro-IBM communities, strongly-held differences of opinion arose in the pronunciation of IBM acronyms, such as CICS as "see eye see ess" versus "kicks" and SQL as "ess que ell" versus "sequel" (the sequel to the Square query language). Note regarding the "pee ell one" pronunciation and the "Programming Language One" antecedent, neither explains how the / is to be pronounced nor for what the / stands. This lack of pronunciation and meaning reinforces a revisionist explanation that PL/I was rechristened for interdenominational and eccumenical reasons after PL/I spread beyond IBM.

Retrospective

PL/I was not as successful as originally hoped for, due to a number of factors.

Perhaps most important was that the language was very complex, making it difficult to implement, especially in a timely fashion. This complexity was probably because it was designed by a committee, and the desire to supply the needs of very different types of users (business and scientific). Such delays, its complexity, and the low quality of early versions of IBM's PL/I compiler discouraged users from switching from COBOL or Fortran. It contained many rarely used features, such as multithreading support, which added corresponding cost and complexity to the compiler. (Its co-processing facilities requires multi-programming environment with support for non-blocking multiple threads for processes by the operating system.)

Another major problem was that instead of noticing features that would make their job easier, scientific (Fortran) programmers of the time had the opinion that it was a business language, while business (COBOL) programmers looked on it as a scientific language. In addition, COBOL programmers viewed it as a "bigger COBOL" and Fortran programmers viewed it as a "bigger Fortran," both somewhat intimidated by the language and disinclined to adopt it.

Compiler complexity was another issue that was perhaps underestimated during the initial design of the language. Optimization was unusually complex due to the need to handle asynchronous modification of variables (for example in the 'on error' construct) making it difficult to reliably predict how certain variables might be modified at runtime.

With full support for pointers to all data types (including pointers to structures), recursion, co-processing, extensive built-in functions and many other facilities, PL/I was indeed quite a leap forward compared to the programming languages of its time. Even by today's standards, a correct and full PL/I implementation would be a very hard contestant to compete with for other programming languages.

PL/I was probably the first commercial language where the compiler was written in the language to be compiled. (The experimental language NELIAC achieved this at least five years prior, and there may have been others.)

Sample programs

Example_Program:

Test: procedure options(main);

   declare My_String char(20) varying initialize('Hello, world!');
   
   put skip list(My_String);
   
end Test;

Hello World

HELLO:   PROCEDURE OPTIONS (MAIN);
          FLAG = 0;
 
LOOP:    DO WHILE (FLAG = 0);        
            PUT SKIP LIST('HELLO WORLD!');
         END LOOP;
 
END HELLO;

Hello World 2

Hello2: proc options(main);
     put list ('Hello, world!');
end Hello2;


Standards

In 1987 ANSI published ANSI X3.74-1987 (R1998), entitled Information Systems - Programming Language - PL/I General-Purpose Subset.

External links

  • IBM: [2] (http://www-306.ibm.com/software/awdtools/pli/)
  • PL/I Resources: [3] (http://www.users.bigpond.com/robin_v/resource.htm)
  • PL/I home: [4] (http://home.nycap.rr.com/pflass/pli.htm)
  • PL/I newsletter: [5] (http://www.users.bigpond.com/robin_v/pli-n8.htm)
  • The following link makes a side-by-side comparison of PL/I and C: Power vs. Adventure - PL/I and C (http://www.uni-muenster.de/ZIV/Mitarbeiter/EberhardSturm/PL1andC.html/)
  • The pl1gcc project is an attempt to create a native PL/I compiler using the GNU Compiler Collection. The project is looking for more people to join the development and testing: PL/I for GCC (http://pl1gcc.sourceforge.net/)

Template:Major programming languages smallbg:PL/I de:PL/1 es:PL/1 fr:PL/I it:PL/I he:PL/I nl:Programmeertaal PL/1 ja:PL/I pl:PL/I pt:PL/1 ru:ПЛ/1 sv:PL/I zh:PLI

Navigation

  • Art and Cultures
    • Art (https://academickids.com/encyclopedia/index.php/Art)
    • Architecture (https://academickids.com/encyclopedia/index.php/Architecture)
    • Cultures (https://www.academickids.com/encyclopedia/index.php/Cultures)
    • Music (https://www.academickids.com/encyclopedia/index.php/Music)
    • Musical Instruments (http://academickids.com/encyclopedia/index.php/List_of_musical_instruments)
  • Biographies (http://www.academickids.com/encyclopedia/index.php/Biographies)
  • Clipart (http://www.academickids.com/encyclopedia/index.php/Clipart)
  • Geography (http://www.academickids.com/encyclopedia/index.php/Geography)
    • Countries of the World (http://www.academickids.com/encyclopedia/index.php/Countries)
    • Maps (http://www.academickids.com/encyclopedia/index.php/Maps)
    • Flags (http://www.academickids.com/encyclopedia/index.php/Flags)
    • Continents (http://www.academickids.com/encyclopedia/index.php/Continents)
  • History (http://www.academickids.com/encyclopedia/index.php/History)
    • Ancient Civilizations (http://www.academickids.com/encyclopedia/index.php/Ancient_Civilizations)
    • Industrial Revolution (http://www.academickids.com/encyclopedia/index.php/Industrial_Revolution)
    • Middle Ages (http://www.academickids.com/encyclopedia/index.php/Middle_Ages)
    • Prehistory (http://www.academickids.com/encyclopedia/index.php/Prehistory)
    • Renaissance (http://www.academickids.com/encyclopedia/index.php/Renaissance)
    • Timelines (http://www.academickids.com/encyclopedia/index.php/Timelines)
    • United States (http://www.academickids.com/encyclopedia/index.php/United_States)
    • Wars (http://www.academickids.com/encyclopedia/index.php/Wars)
    • World History (http://www.academickids.com/encyclopedia/index.php/History_of_the_world)
  • Human Body (http://www.academickids.com/encyclopedia/index.php/Human_Body)
  • Mathematics (http://www.academickids.com/encyclopedia/index.php/Mathematics)
  • Reference (http://www.academickids.com/encyclopedia/index.php/Reference)
  • Science (http://www.academickids.com/encyclopedia/index.php/Science)
    • Animals (http://www.academickids.com/encyclopedia/index.php/Animals)
    • Aviation (http://www.academickids.com/encyclopedia/index.php/Aviation)
    • Dinosaurs (http://www.academickids.com/encyclopedia/index.php/Dinosaurs)
    • Earth (http://www.academickids.com/encyclopedia/index.php/Earth)
    • Inventions (http://www.academickids.com/encyclopedia/index.php/Inventions)
    • Physical Science (http://www.academickids.com/encyclopedia/index.php/Physical_Science)
    • Plants (http://www.academickids.com/encyclopedia/index.php/Plants)
    • Scientists (http://www.academickids.com/encyclopedia/index.php/Scientists)
  • Social Studies (http://www.academickids.com/encyclopedia/index.php/Social_Studies)
    • Anthropology (http://www.academickids.com/encyclopedia/index.php/Anthropology)
    • Economics (http://www.academickids.com/encyclopedia/index.php/Economics)
    • Government (http://www.academickids.com/encyclopedia/index.php/Government)
    • Religion (http://www.academickids.com/encyclopedia/index.php/Religion)
    • Holidays (http://www.academickids.com/encyclopedia/index.php/Holidays)
  • Space and Astronomy
    • Solar System (http://www.academickids.com/encyclopedia/index.php/Solar_System)
    • Planets (http://www.academickids.com/encyclopedia/index.php/Planets)
  • Sports (http://www.academickids.com/encyclopedia/index.php/Sports)
  • Timelines (http://www.academickids.com/encyclopedia/index.php/Timelines)
  • Weather (http://www.academickids.com/encyclopedia/index.php/Weather)
  • US States (http://www.academickids.com/encyclopedia/index.php/US_States)

Information

  • Home Page (http://academickids.com/encyclopedia/index.php)
  • Contact Us (http://www.academickids.com/encyclopedia/index.php/Contactus)

  • Clip Art (http://classroomclipart.com)
Toolbox
Personal tools