CPL (프로그래밍 언어)

CPL은 1960년대 초 영국의 케임브리지 대학교와 런던 대학교가 공동으로 설계한 범용 프로그래밍 언어이다. 처음에는 케임브리지 대학교 수학 연구소에서 Cambridge Programming Language라는 이름으로 시작되었으며, 런던 대학교 컴퓨터 유닛이 개발에 참여하면서 Comb...

정식 명칭Combined Programming Language
이전 명칭Cambridge Programming Language
분류범용 프로그래밍 언어, 시스템 프로그래밍 언어
패러다임명령형 프로그래밍, 절차형 프로그래밍, 구조적 프로그래밍, 함수형 프로그래밍
설계자크리스토퍼 스트레이치, 데이비드 배런, 존 벅스턴, 데이비드 하틀리, 에릭 닉슨 등
개발 기관케임브리지 대학교 수학 연구소, 런던 대학교 컴퓨터 유닛
개발 시기1962년~1966년
최초 발표1963년
영향을 받은 언어ALGOL 60
영향을 준 언어BCPL
주요 구현 대상Titan, Atlas
현재 상태역사적 언어

CPL은 1960년대 초 영국의 케임브리지 대학교런던 대학교가 공동으로 설계한 범용 프로그래밍 언어이다. 처음에는 케임브리지 대학교 수학 연구소에서 Cambridge Programming Language라는 이름으로 시작되었으며, 런던 대학교 컴퓨터 유닛이 개발에 참여하면서 Combined Programming Language로 이름이 바뀌었다. CPL이라는 이름은 두 기관이 진행한 공동 언어 개발 계획을 나타낸다.[1]

CPL은 ALGOL 60이 제시한 블록 구조와 수학적인 표현 능력을 바탕으로, 과학 계산뿐 아니라 상업 데이터 처리, 시스템 프로그래밍과 기계에 가까운 저수준 처리까지 하나의 언어로 다루는 것을 목표로 했다. 당시의 특정 응용 분야용 언어를 넘어, 여러 종류의 프로그램을 같은 언어 체계에서 작성할 수 있는 대규모 범용 언어를 만들려는 시도였다.

언어에는 값과 데이터의 종류를 구분하는 타입과 모드 체계, 배열과 구조화된 데이터, 함수와 절차, 재귀 호출, 참조와 포인터에 해당하는 기능, 조건식, 반복문, 입출력, 분리 컴파일과 같은 기능이 포함되었다. 명령문뿐 아니라 식을 중심으로 프로그램을 구성할 수 있었으며, 프로그램의 일부를 값처럼 다루는 고차 함수와 함수형 프로그래밍에 가까운 요소도 수용했다. 이러한 설계에는 크리스토퍼 스트레이치피터 랜딘이 연구하던 프로그래밍 언어 의미론과 함수 개념도 반영되었다.

CPL은 당시 기준으로 매우 넓은 기능 범위와 복잡한 문법을 가졌다. 케임브리지의 Titan과 런던의 Atlas를 대상으로 컴파일러 개발이 진행되었지만, 언어 전체를 효율적으로 구현하는 작업은 계획보다 오래 걸렸다. 일부 하위 언어와 컴파일러가 만들어졌으나, CPL 전체가 안정적으로 보급되기 전에 개발 계획은 사실상 종료되었다. CPL 프로젝트는 1962년 초부터 1966년 말까지 이어졌다.[2]

마틴 리처즈는 CPL 컴파일러를 부트스트랩하기 위한 단순한 언어를 설계하는 과정에서 복잡한 타입 및 모드 일치 규칙과 여러 정의 구조를 제거하고, 기계의 워드를 기본 데이터 단위로 사용하는 BCPL을 만들었다. BCPL은 CPL보다 작고 구현하기 쉬운 시스템 프로그래밍 언어로 발전했으며, 이후 B를 거쳐 C로 이어졌다. 이에 따라 CPL 자체의 직접적인 사용은 제한적이었지만, CPL에서 BCPL·B·C로 이어진 계보를 통해 현대 시스템 프로그래밍 언어의 형성에 간접적으로 큰 영향을 주었다.[3]

역사

Cambridge Programming Language 계획

런던 대학교와의 공동 개발

1963년 언어 발표

Titan과 Atlas 구현 계획

CPL Working Papers

프로젝트의 종료

설계 목표

범용 언어의 지향

과학 계산과 상업 처리의 통합

고수준 추상화와 저수준 제어

기계 독립성과 구현 가능성

언어 구조

프로그램과 블록

선언과 정의

이름과 유효 범위

값, 위치와 참조

식과 명령문

함수와 절차

타입과 모드 체계

기본 모드

배열과 구조화된 데이터

참조와 포인터

모드 변환

다형성과 일반화된 연산

제어 구조

조건식과 조건문

반복문

블록과 복합 명령문

함수 호출과 재귀

비지역 제어 흐름

함수형 프로그래밍 요소

함수를 값으로 다루는 구조

고차 함수

람다 계산의 영향

피터 랜딘과 CPL

데이터와 저장소 모델

값과 저장 위치

배열

구조체와 레코드

동적 데이터 구조

저장소 관리

입출력과 외부 데이터

입력과 출력

파일 처리

문자와 문자열

데이터 형식 변환

문법과 표기법

ALGOL 계열 표기

예약어와 기호

섹션 기호

선언문과 실행문

문법의 복잡성

컴파일과 실행

컴파일러 구조

분리 컴파일

라이브러리와 외부 코드

Titan용 구현

Atlas용 구현

London CPL1

구현상의 문제

언어 규모

타입 검사와 모드 일치

복잡한 정의 구조

대상 컴퓨터의 차이

컴파일러 부트스트랩

BCPL과의 관계

Bootstrap CPL

CPL에서 제거된 기능

워드 중심 데이터 모델

BCPL 컴파일러의 구현

CPL과 BCPL의 설계 차이

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

ALGOL 60

BCPL

B

C

PAL

함수형 프로그래밍 언어

영향

시스템 프로그래밍 언어의 형성

BCPL·B·C 계보

프로그래밍 언어 의미론

구조적 프로그래밍

언어 구현 연구

활용과 보급

연구 기관에서의 사용

교육과 언어 연구

실제 프로그램

보급이 제한된 이유

역사적 평가

대규모 범용 언어로서의 CPL

구현보다 앞선 언어 설계

직접적인 실패와 간접적인 성공

현대 프로그래밍 언어에서의 유산

장점과 한계

관련 문서

  1. D. W. Barron 외, The Main Features of CPL, The Computer Journal, 1963
  2. Martin Richards, How BCPL Evolved from CPL
  3. Dennis M. Ritchie, The Development of the C Language