Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Special pages
Niidae Wiki
Search
Search
Appearance
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
PL/I
(section)
Page
Discussion
English
Read
Edit
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
View history
General
What links here
Related changes
Page information
Appearance
move to sidebar
hide
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.
Summary:
Please note that all contributions to Niidae Wiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Encyclopedia:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Search
Search
Editing
PL/I
(section)
Add topic