PL/I — 과학·비즈니스·시스템 통합을 시도한 IBM의 거대 언어 (1964)
PL/I — 과학·비즈니스·시스템 통합을 시도한 IBM의 거대 언어
1. 요약
PL/I(Programming Language One)는 1964년 IBM과 SHARE Language Development Committee가 발표한 통합 프로그래밍 언어이다. FORTRAN(과학 계산)·COBOL(비즈니스)·ALGOL(학술) 세 갈래로 분리되어 있던 1960년대 초의 프로그래밍 생태계를, 하나의 언어로 모두 처리하려는 야심찬 시도였다. IBM System/360 메인프레임과 짝을 이루어 1960~80년대 대형 메인프레임 환경의 표준 언어로 사용되었고, Multics 운영체제의 구현 언어이기도 했다. 1976년 ANSI 표준화(X3.53-1976).
2. 등장 배경
1960년대 초 프로그래밍 환경은 분리된 섬이었다.
- FORTRAN (1957) — 과학·공학 계산. 비즈니스 자료 처리에 부적합.
- COBOL (1959) — 비즈니스 자료 처리. 수치 계산에 약함.
- ALGOL 60 — 학술 영역. 산업적 보급 약함.
기업이 과학과 비즈니스 작업을 같은 컴퓨터에서 수행하려면 두 개 이상의 언어를 운영해야 했다. IBM이 System/360(1964년 발표, 1966년 출시) — 과학·비즈니스 통합 메인프레임 — 을 발표하면서, 짝이 될 통합 언어가 필요했다.
1963년 10월 IBM 위원회는 처음에는 FORTRAN을 확장해 보려 했지만 실패했다. "given the constraints of Fortran, they were unable to do this and embarked on the design of a new programming language based loosely on ALGOL". 결과가 PL/I이다.
3. 핵심 특징
- 블록 구조와 재귀(Block Structure & Recursion) — ALGOL 60의 영향. 중첩 블록·재귀 호출 지원.
- 예외 처리(Exception Handling) —
ON-units를 통한 런타임 조건 처리. 후일 Javatry/catch의 사상적 조상. - 멀티태스킹(Multitasking) —
EVENT,TASK데이터 타입을 언어 차원에서 지원. 운영체제와의 통합. - 포인터 기반 동적 저장(Pointer + BASED Variables) —
ALLOCATE/FREE를 통한 동적 메모리 관리. C의malloc/free보다 8년 앞섬. - 구조적 프로그래밍 구문 —
DO/END,IF/THEN/ELSE,SELECT/WHEN. 이 시기 구조적 프로그래밍을 언어 표준으로 받아들인 첫 IBM 언어.
4. 주 용도
- IBM System/360 메인프레임: 과학 계산 + 비즈니스 자료 처리 통합.
- Multics 운영체제: MIT·Bell Labs·GE의 야심찬 운영체제 프로젝트가 PL/I로 작성됨. UNIX·C가 여기서 반동으로 태어남.
- 금융·은행·정부 메인프레임: 1990년대까지 IBM 메인프레임 환경에서 광범위하게 사용.
5. 그 시대 설계 도구 매핑
| 도구 | 역할 | PL/I와의 관계 |
|---|---|---|
| HIPO 차트 (Hierarchy + Input-Process-Output) (IBM, 1970년대) | 계층적 함수 분해 + I/O 명세. IBM 자체 표준. | PL/I 프로시저 분해의 기본 도식 |
| Flowchart (ANSI 표준 흐름도) | 알고리즘 시각화 | PL/I 코드 작성 전 단계 표준 |
| VDM (Vienna Development Method) (IBM Vienna Lab, 1967~) | 최초의 대규모 형식적 명세 방법론 | PL/I 언어 자체의 형식적 정의를 위해 만들어진 방법론 |
| Constantine-Yourdon Structured Design (1974~) | 모듈 분해·결합도/응집도 | PL/I 대규모 시스템 분해에 적용 |
→ VDM의 의의: PL/I 자체를 형식적으로 정의하기 위해 만들어진 방법론이 언어보다 더 오래 살아남았다. VDM은 후일 Z notation, B method 등 형식적 명세 운동의 출발점이 된다. 즉 언어는 죽어도 설계 방법론은 살아남는다는 본 강의 핵심 명제의 직접 사례.
6. 강의 활용
핵심 명제와의 연결: PL/I는 언어 통합에는 실패했지만, 형식적 명세(VDM)라는 더 깊은 영역을 열었다. 즉 언어가 아무리 야심차게 만들어져도, 설계와 명세가 부재하면 살아남지 못한다 — 거꾸로 말하면 설계 방법론은 언어를 넘어서 산다.
강의에서의 위치: G3에서 대척점 사례. Pascal·C는 작고 정돈된 길을 갔고, PL/I는 모든 것을 포함하는 길을 갔다. 결과는 — 작고 정돈된 쪽이 살아남았다. 이는 본 강의의 No Design, No Code와 정반대로 Too Much Design, No Survival의 사례이기도 하다.
오늘날의 흔적:
- VDM·Z·B method 등 형식적 명세는 안전 필수(safety-critical) 영역에서 살아있음.
- Multics의 야심은 UNIX의 Worse is Better 철학에 대척점으로 인용된다.
- IBM 메인프레임에는 여전히 PL/I 코드가 남아있음 (z/OS Enterprise PL/I).
오늘 LLM 시대로의 다리: PL/I의 실패는 모든 것을 하나의 언어로 시도하면 언어가 무거워져 사라진다는 교훈을 준다. LLM 시대의 Spec-driven Development는 정반대 방향 — 언어는 작게, 명세는 풍부하게. 그러나 명세를 형식화하는 방법은 PL/I 시대의 VDM 정신이 살아 돌아온 것이기도 하다.
출처
- Wikipedia, "PL/I", https://en.wikipedia.org/wiki/PL/I
- Bjørner, D., & Jones, C. B. (Eds.). (1978). The Vienna Development Method: The Meta-Language. Springer LNCS 61.
- IBM. (1976). PL/I Language Reference Manual.
그룹 시리즈
→ synthesis/group-g3 (시대 그룹 종합 카드)