Language reference

PL/I

IBM's systems-and-business hybrid language, still quietly load-bearing today.

History & foundation

Origin

PL/I began in 1963 as a joint effort between three IBM staff and three members of SHARE, the IBM scientific-computing user group, with a brief to extend Fortran. By April 1964, the scope had grown into something bigger: IBM was about to announce the System/360, a single hardware line meant to serve both business and scientific customers who had previously used entirely different machines and languages, and it wanted one language that could serve both audiences on it. The initial design was called NPL, briefly MPPL, before settling on PL/I. The first production compiler, PL/I F, was delivered by an IBM Hursley Labs team led by John Nash in 1966, the same year System/360 itself shipped.

Design goals

PL/I's stated goal was blunt: replace the split between scientific programming (Fortran, ALGOL) and business programming (COBOL) with one language that could do both, on one machine architecture. It borrowed block structure and recursion from ALGOL 60, wide numeric and string data types for scientific work, and record-oriented I/O for business data processing, all under a design principle IBM called orthogonality, meaning each language feature was meant to work independently of every other one rather than only in specific combinations.

Standards timeline

  1. 1963 · Design begins

    IBM and SHARE form a joint committee to extend Fortran for System/360.

  2. 1964 · NPL becomes PL/I

    Initial design completed in April; renamed PL/I ahead of the System/360 announcement.

  3. 1966 · PL/I F ships

    First production compiler, delivered by IBM Hursley Labs, alongside the System/360 itself.

  4. 1970 · PL/I Optimizing Compiler

    Announced for System/370, shipping for DOS/360 the following year.

  5. 1976 · ANSI X3.53-1976

    First American National Standard for PL/I.

  6. 1981 · Subset-G

    ANSI PL/I General-Purpose Subset standard issued, revised in 1987.

  7. 1992 · New OS/2 compiler

    IBM Santa Teresa lab ships an entirely new PL/I compiler.

  8. 1995 · PL/I for AIX

    IBM extends PL/I off the mainframe onto AIX.

Multics

The influential Multics operating system, a direct ancestor of Unix in its design philosophy, was largely written in PL/I.

Wikipedia: PL/I

Sabre

The System/360 version of the Sabre airline reservation system was largely written in SabreTalk, a purpose-built subset PL/I compiler.

Wikipedia: PL/I

SAS

The SAS System was initially written in PL/I, and the SAS data step language is still modeled on PL/I syntax today.

Wikipedia: PL/I

Named banking adopters

KBC (Belgium), Allied Irish Banks, several Austrian banks including Raiffeisen, and Credit Suisse (now UBS) have all run core banking systems on PL/I, per practitioners in IBM's own Z and LinuxONE community forum.

IBM Z and LinuxONE Languages community, December 2023

PL/I history and figures compiled from public sources, cited above. Corrections welcome.

ON-condition & compile-time codes

View all 70
ONCODE 9: ERRORIBM Enterprise PL/I for z/OS · PL/I for AIX

Condition

A SIGNAL ERROR statement was executed, or an unhandled condition of any kind was raised and fell through to the default ERROR handling because no more specific ON-unit was established for it.

Fix

Check ONCODE first to see what condition actually triggered this. ONCODE 9 by itself is a catch-all, not a diagnosis; the real cause is almost always a more specific condition that had no ON-unit to catch it.

Pending source verification. Not yet checked against official documentation.
ONCODE 70: ENDFILEIBM Enterprise PL/I for z/OS · PL/I for AIX

Condition

A sequential READ reached the end of a file, or a SIGNAL ENDFILE statement was executed directly.

Fix

This is the normal way a program detects end of file. If the program is stopping earlier than expected, check for an extra READ, or a file genuinely shorter than the program assumes.

Pending source verification. Not yet checked against official documentation.
ONCODE 150: STRINGSIZEIBM Enterprise PL/I for z/OS · PL/I for AIX

Condition

An assignment truncated a character or bit string because the source was longer than the target's declared maximum length.

Fix

Check the declared length of the target variable against the actual data being assigned. This condition is often left unhandled during development and only surfaces once production data is wider than test data.

Pending source verification. Not yet checked against official documentation.
ONCODE 310: FIXEDOVERFLOWIBM Enterprise PL/I for z/OS · PL/I for AIX

Condition

The result of an arithmetic operation on a fixed-point decimal or binary value exceeded the precision defined for the receiving field.

Fix

Check the PICTURE or fixed-point precision of the field receiving the result, and increase it if the calculation legitimately needs more digits. Also check for a runaway loop that is accumulating a total far past what the field was sized for.

Pending source verification. Not yet checked against official documentation.

Frequently asked

Is PL/I still used?+

Yes, primarily in European banking and airline systems. Named users include KBC (Belgium), Allied Irish Banks, several Austrian banks, and Credit Suisse (now UBS), per practitioners in IBM's own community forum.

What does PL/I stand for?+

PL/I stands for Programming Language One. IBM designed it starting in 1963 to combine Fortran's numeric strength, ALGOL's structure, and COBOL's business data handling into a single language for the System/360.

Is PL/I similar to COBOL?+

They share a buyer (mainframe banking and insurance) but not a syntax. PL/I's block structure and condition-handling model are closer to ALGOL-family languages than to COBOL's record-oriented style.

Is PL/I's compiler still being actively developed?+

Yes. IBM shipped Enterprise PL/I for z/OS 6.2 in 2025 with support for the new z17 hardware, including an ARCH(15) option that unlocks z17-specific optimizations without any source code changes, and reports CPU usage reductions of up to 12% versus the prior compiler/hardware pairing and up to 35% versus two generations back.

Can PL/I applications run outside the mainframe without a rewrite?+

Yes, through third-party compilers rather than IBM's own tooling. Raincode's PL/I compiler is listed alongside its COBOL and ASM370 compilers in Microsoft's Azure Architecture Center reference architecture for rehosting mainframe applications, generating fully managed, thread-safe .NET code that runs on Azure without changing the underlying business logic.

How does PL/I rank against other programming languages today?+

As of the TIOBE index for August 2026, PL/I ranks #27 with a rating of 0.67%. TIOBE measures search and discussion volume, so this reflects how much new interest and content exists around the language, not how much production code still depends on it.

Why didn't PL/I replace COBOL and FORTRAN like IBM originally intended?+

Both target languages kept evolving while PL/I was being built to replace them: FORTRAN 66 became the first ANSI-standardized FORTRAN release the same year PL/I's first compiler shipped, and COBOL advanced through revisions from COBOL-60 through COBOL-74. By 1970, per software architect Doug Meil's account in Communications of the ACM, COBOL had already become the world's most widely used programming language, making the case for switching a hard sell to customers running working systems.

What languages was PL/I originally designed to combine?+

PL/I combined FORTRAN's numeric and scientific-computing strengths with COBOL's record-oriented business data handling, with block structure and recursion drawn from ALGOL's design, into a single language intended for use across both business and scientific workloads on IBM's System/360.

What's actually new in the Enterprise PL/I 6.2 compiler release?+

Beyond z17 hardware support, Enterprise PL/I 6.2 added vector instructions for inline hex and base64 encoding and decoding, 16-byte integer support for larger and more complex calculations, and enhanced compiler warnings for potential storage issues, according to IBM's own release documentation.

From the community

Real questions from public forum threads, with credit to who asked and who answered. Our answer restates the fix and links to the matching reference page where one exists.

Which banks actually still run their core applications on PL/I? COBOL's prevalence is well documented, but PL/I's isn't.

Asked by Raul Alonso Sanchez on IBM Z and LinuxONE Languages community, December 2023

Named KBC in Belgium, Allied Irish Banks in Ireland, KLM Royal Dutch Airlines, and the Socialist Mutual Health Insurance in Belgium as PL/I users.

Robert Prins

Named several Austrian banks, including Raiffeisen and 3BEG, as still running core banking applications on PL/I.

Johann Wöckinger

Noted that Credit Suisse, now part of UBS, has a core banking implementation based on PL/I.

Volker Birk

Our answer

The pattern in these answers is consistent with what shows up in PL/I's own history: it was strongest in European banking and airline systems rather than the US commercial mainframe base COBOL dominates, which is exactly why it is less visible in English-language usage statistics even where it is still running production core systems.

My ON SUBSCRIPTRANGE unit stopped catching the condition after we recompiled under Enterprise PL/I. Did something change?

Asked by reported across multiple Enterprise PL/I migration cases on IBM Support, APAR PI56511

Confirmed as a defect: a SUBSCRIPTRANGE condition raised by code that originated under PL/I for MVS & VM was not always caught by an ON SUBSCRIPTRANGE unit after recompilation under Enterprise PL/I.

IBM Support (APAR PI56511)

Our answer

This is not a mistake in your ON-unit. It is a documented gap specific to code carried forward from PL/I for MVS & VM into Enterprise PL/I. If a SUBSCRIPTRANGE check that worked before a compiler migration stops firing afterward, check your Enterprise PL/I service level against this APAR before you spend time rewriting the ON-unit itself.

Full reference page →

More on PL/I