Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
PL/I
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==Goals and principles== The goals for PL/I evolved during the early development of the language. Competitiveness with COBOL's record handling and report writing was required. The language's scope of usefulness grew to include [[system programming]] and [[event-driven programming]].<ref>{{cite report |title=NPL Technical Report |date=December 1964 |section=Chapter 1: Introduction |section-url=http://bitsavers.org/pdf/ibm/npl/320-0908_NPL_Technical_Report_Dec64.pdf#page12 |page=[http://bitsavers.org/pdf/ibm/npl/320-0908_NPL_Technical_Report_Dec64.pdf#page12 11] |quote=NPL is designed to serve the needs of an unusually large group of programmers, including scientific, business, real time, and systems programmers. |url=http://bitsavers.org/pdf/ibm/npl/320-0908_NPL_Technical_Report_Dec64.pdf |publisher=[[IBM]] |access-date=January 1, 2024 }} </ref> Additional goals for PL/I were:<ref name="AndEarly" /> * Performance of compiled code competitive with that of Fortran (but this was not achieved){{Citation needed|date=June 2019}} * [[Extensibility]] for new hardware and new application areas * Improved productivity of the programming process, transferring effort from the programmer to the compiler * [[Cross-platform software|Machine independence]] to operate effectively on the main computer hardware and operating systems To achieve these goals, PL/I borrowed ideas from contemporary languages while adding substantial new capabilities and casting it with a distinctive concise and readable syntax. Many principles and capabilities combined to give the language its character and were important in meeting the language's goals: * [[Block (programming)|Block structure]], with underlying semantics (including [[recursion]]), similar to [[Algol 60]]. Arguments are passed using [[call by reference]], using dummy variables for values where needed ([[call by value]]). * A wide range of computational data types, program control data types, and forms of data structure ([[strong typing]]). * Dynamic extents for arrays and strings with inheritance of extents by procedure parameters. * Concise syntax for expressions, declarations, and statements with permitted abbreviations. Suitable for a character set of 60 [[glyphs]] and sub-settable to 48. * An extensive structure of defaults in statements, options, and declarations to hide some complexities and facilitate extending the language while minimizing keystrokes. * Powerful iterative processing with good support for [[structured programming]]. * There were to be no [[reserved words]] (although the function names <code>DATE</code> and <code>TIME</code> initially proved to be impossible{{citation needed|date=August 2021}} to meet this goal). New attributes, statements and statement options could be added to PL/I without invalidating existing programs. Not even <code>IF, THEN, ELSE</code>, and <code>DO</code> were reserved.<ref>Some compilers chose to reserve these identifiers, or issue warnings if they found them used as identifiers. But the subsequent introduction of a [[case statement]] shows the value of the principle.</ref> * [[Orthogonality (programming)|Orthogonality]]: each capability to be independent of other capabilities and freely combined with other capabilities wherever meaningful. Each capability to be available in all contexts where meaningful, to exploit it as widely as possible and to avoid "arbitrary restrictions". Orthogonality helps make the language "large".{{Clarify|date=April 2014}} * [[Exception handling]] capabilities for controlling and intercepting exceptional conditions at run time. * Programs divided into separately compilable sections, with extensive compile-time facilities (a.k.a. [[macro (computer science)|macro]]s), not part of the standard, for tailoring and combining sections of source code into complete programs. External names to bind separately compiled procedures into a single program. * Debugging facilities integrated into the language.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)