PL/I
IBM programming language for business and scientific computing
PL/I is a general-purpose programming language originally developed by IBM to unify business data processing and scientific computation in a single language, combining COBOL-style record handling with FORTRAN-style numerical computing. It…
Definition
PL/I is a general-purpose programming language originally developed by IBM to unify business data processing and scientific computation in a single language, combining COBOL-style record handling with FORTRAN-style numerical computing. It supports fixed and floating-point arithmetic, multitasking, exception handling, and pointer-based data structures, and it runs primarily on IBM mainframe operating systems such as z/OS, where it remains in use for large-scale batch and transaction processing applications built decades ago.
Overview
PL/I emerged from an IBM-led committee effort in the 1960s that set out to replace both FORTRAN and COBOL with one language broad enough to serve scientists, engineers, and business programmers alike. Rather than forcing a choice between numeric precision and record-oriented data processing, PL/I bundled both under one syntax, along with string handling, list processing, and structured control flow that was considered advanced for its era. The result was a large, feature-rich language that could express nearly any computing task available on the mainframes of the time. Mechanically, PL/I compiles to native machine code on IBM mainframe platforms and provides a rich set of built-in data types, including fixed-decimal, floating-point, character, bit, and area types for pointer-based structures. Its exception-handling model, built around the ON statement, lets a program register handlers for conditions such as arithmetic overflow or end-of-file before they occur, an approach that predates the try/catch constructs common in later languages. PL/I also supports multitasking primitives and preprocessor macros, giving programmers fine control over both computation and program structure within a single compilation unit. Among its contemporaries, PL/I sits between FORTRAN's numerical focus and COBOL's business-record orientation, attempting to absorb the strengths of both rather than compete narrowly with either. Compared to Ada or Pascal, which arrived later with stricter type systems and clearer language specifications, PL/I is considered loosely specified and permissive, allowing implicit type conversions that can silently produce unexpected results. This breadth made it powerful in principle but also contributed to a reputation for being harder to learn and to implement fully than more focused languages. In practice, PL/I found its strongest footing inside IBM-centric enterprises and government agencies that adopted mainframe computing early, where a single team could write both numerical simulations and business reporting code without switching languages. Airlines, banks, and insurers built substantial production systems in PL/I during the 1970s and 1980s, and many of those systems remain in service today, having been extended and patched over decades rather than rewritten from scratch. IBM continues to support a PL/I compiler for z/OS, reflecting continued demand from customers maintaining this installed base. The language's limitations center on its scale and looseness: PL/I's enormous feature surface made full, correct compiler implementations rare outside IBM's own offering, and its permissive implicit conversions between data types can produce subtle bugs that stricter languages would catch at compile time. Organizations maintaining PL/I systems today generally do so because rewriting proven, decades-old business logic carries its own risk, not because PL/I is being chosen for new development; new projects almost universally reach for more modern, strictly typed languages instead.
Key Features
- Unifies scientific and business data processing in one language
- Built-in exception handling through the ON statement mechanism
- Supports fixed-decimal, floating-point, character, and bit data types
- Native pointer and area types for building linked data structures
- Structured control flow with blocks, procedures, and labeled exits
- Preprocessor macro facility for conditional compilation
- Multitasking primitives for concurrent subtask execution
- Runs primarily on IBM mainframe operating systems like z/OS