PL/I

PL/I는 과학·공학 계산, 상업 데이터 처리와 시스템 프로그래밍을 하나의 언어에서 지원하기 위해 IBM이 개발한 범용 프로그래밍 언어이다. 정식 명칭은 Programming Language One이며, PL/1으로 표기되기도 하지만 공식 표기는 PL/I이다.

정식 명칭Programming Language One
다른 표기PL/1
분류범용 프로그래밍 언어, 절차적 프로그래밍 언어
개발IBM, SHARE Advanced Language Development Committee
최초 공개1964년
주요 설계 목적과학 계산, 상업 데이터 처리, 시스템 프로그래밍의 통합
영향을 받은 언어FORTRAN, COBOL, ALGOL 60
패러다임명령형 프로그래밍, 절차적 프로그래밍, 구조적 프로그래밍
타입 체계정적 타입
주요 표준ANSI X3.53-1976, ANSI X3.74-1987, ISO/IEC 6160
주요 구현체IBM Enterprise PL/I, IBM PL/I for AIX, Multics PL/I, Open PL/I
주요 플랫폼IBM 메인프레임, AIX, Multics
현재 상태기존 기업 시스템의 개발과 유지보수에 사용

PL/I는 과학·공학 계산, 상업 데이터 처리와 시스템 프로그래밍을 하나의 언어에서 지원하기 위해 IBM이 개발한 범용 프로그래밍 언어이다. 정식 명칭은 Programming Language One이며, PL/1으로 표기되기도 하지만 공식 표기는 PL/I이다.

PL/I는 FORTRAN이 담당하던 수치 계산, COBOL이 담당하던 기업 데이터 처리와 ALGOL 60 계열 언어의 블록 구조를 결합하려 했다. 정수와 고정소수점·부동소수점·복소수 연산, 문자와 비트 문자열, 배열과 구조체, 포인터, 동적 기억 공간, 재귀, 예외 조건 처리, 파일 입출력과 동시 실행 기능을 하나의 언어 체계에 포함하였다. 이러한 범위 때문에 PL/I는 초기의 대표적인 대규모 범용 언어 가운데 하나로 평가된다.[1]

PL/I의 개발은 IBM이 과학 계산용 컴퓨터와 상업 데이터 처리용 컴퓨터를 통합한 System/360 계열을 준비하던 시기와 연결된다. IBM은 서로 다른 작업 분야마다 별도의 언어를 사용하는 대신, 새로운 컴퓨터 계열의 여러 용도를 함께 담당할 수 있는 공통 언어를 만들고자 했다. 초기에는 NPL 또는 New Programming Language라는 이름으로 불렸고, 이후 MPPL을 거쳐 PL/I라는 명칭이 사용되었다.

언어는 1964년에 공개되었으며 초기 IBM 문서에서는 과학 계산, 기업 업무, 실시간 처리와 시스템 프로그램 작성까지 포괄하는 언어로 제시되었다. 그러나 매우 넓은 기능 범위와 복잡한 언어 규칙은 완전한 컴파일러를 구현하고 프로그램의 동작을 예측하기 어렵게 만드는 원인이 되기도 했다. 이후 구현체와 표준은 사용 목적에 따라 기능을 선택하거나 일부 동작을 더 명확하게 규정하는 방향으로 발전하였다.

PL/I는 Multics의 주요 구현 언어로 사용되면서 시스템 프로그래밍 분야에서도 중요한 역할을 맡았다. Multics 개발진은 초기 PL/I의 부분집합인 EPL을 먼저 구현한 뒤, 1969년부터 시스템 프로그램을 Multics PL/I로 전환하였다. 운영체제의 대부분을 고급 프로그래밍 언어로 작성한 Multics의 개발 방식은 당시 어셈블리어 중심이던 운영체제 구현 관행과 뚜렷한 차이를 보였다.[2][3]

PL/I는 전성기 이후 새로운 범용 응용 프로그램의 개발 언어로 선택되는 경우가 감소했지만, IBM 메인프레임을 중심으로 구축된 금융·보험·정부·제조 분야의 대규모 시스템에는 상당한 PL/I 코드가 남아 있다. IBM은 현재도 z/OSAIX용 PL/I 컴파일러를 제공하며, 기존 PL/I 응용 프로그램이 XML, JSON, 웹 서비스와 다른 현대적 시스템을 이용할 수 있도록 기능을 확장하고 있다.[4][5]

역사

System/360과 통합 언어 구상

NPL과 초기 언어 설계

PL/I의 공개와 초기 컴파일러

IBM 메인프레임에서의 확산

Multics PL/I

표준화와 언어 개정

현대의 유지보수와 시스템 현대화

언어 설계

범용 언어의 목표

블록 구조와 이름 유효 범위

선언과 기본 문장 구조

키워드와 문맥 의존적 구문

기본값과 암시적 변환

내장 함수

타입 체계와 데이터 표현

산술 데이터

고정소수점 수

부동소수점 수

복소수

십진 연산과 이진 연산

문자와 비트 문자열

배열

구조체

공용체와 정의 데이터

포인터와 오프셋

파일과 입출력 데이터

타입 변환

제어 구조

조건문

반복문

프로시저

재귀

매개변수 전달

함수와 서브루틴

비지역 제어 이전

기억 공간 관리

자동 기억 영역

정적 기억 영역

제어 기억 영역

기반 기억 영역

동적 할당

포인터 기반 자료구조

조건 처리

ON 조건

오류와 예외 처리

입출력 조건

계산 조건

사용자 정의 조건

조건 처리의 실행 흐름

입출력

스트림 입출력

레코드 입출력

형식 지정 입출력

목록 지향 입출력

파일 조직

메인프레임 데이터 세트

동시성과 비동기 처리

태스크

이벤트

비동기 입출력

동기화

구현체별 지원 차이

전처리기와 매크로 기능

컴파일 시간 처리

매크로 프로시저

조건부 생성

소스 코드 생성

유지보수와 변환의 복잡성

컴파일과 실행 환경

컴파일 단위

외부 프로시저와 모듈

런타임 라이브러리

다른 언어와의 호출 규약

디버깅과 진단

최적화

표준화와 방언

ANSI X3.53-1976

PL/I General-Purpose Subset

ANSI X3.74-1987

ISO/IEC 6160

IBM PL/I

Multics PL/I

DEC PL/I

Open PL/I

구현체 간 호환성

주요 구현체

IBM PL/I F

IBM Optimizing Compiler

IBM Enterprise PL/I

PL/I for AIX

Multics PL/I Compiler

DEC PL/I와 Kednos PL/I

Open PL/I

Iron Spring PL/I

Multics와 시스템 프로그래밍

EPL

Multics PL/I의 개발

운영체제 구성 요소의 구현

언어 확장

포인터와 기억 영역

컴파일러 기술에 미친 영향

메인프레임과 기업 시스템

상업 데이터 처리

금융과 보험

정부와 공공 시스템

제조와 산업 시스템

트랜잭션 처리

기존 응용 프로그램의 유지보수

현대 시스템과의 통합

다른 프로그래밍 언어와의 관계

FORTRAN

COBOL

ALGOL

C

Ada

PL/S와 IBM 시스템 언어

PL/M과 마이크로프로세서 언어

Rexx

영향

범용 언어 설계에 미친 영향

예외 처리와 조건 처리

문자열과 구조적 데이터 처리

시스템 프로그래밍

언어 기능 통합의 경험

기업용 소프트웨어의 유산

장점과 한계

장점

한계

현대적 관점에서의 평가

관련 문서

  1. IBM, PL/I on z/OS
  2. Multicians, Multics History: High-level language implementation
  3. Multicians, PL/I
  4. IBM, PL/I Compiler Family
  5. IBM, Enterprise PL/I for z/OS documentation library