BCPL

BCPL은 1966년 영국의 컴퓨터 과학자 마틴 리처즈가 설계한 시스템 프로그래밍 언어이다. 정식 명칭은 Basic Combined Programming Language이며, 복잡하고 구현하기 어려웠던 CPL에서 컴파일러 작성과 시스템 소프트웨어 개발에 필요한 핵심 요소를 추려 단순화한...

정식 명칭Basic Combined Programming Language
분류범용 프로그래밍 언어, 시스템 프로그래밍 언어
패러다임명령형 프로그래밍, 절차적 프로그래밍, 구조적 프로그래밍
설계자마틴 리처즈
설계1966년
최초 구현1967년
개발 기관케임브리지 대학교, MIT Project MAC
영향을 받은 언어CPL
영향을 준 언어B, C
타입 체계명시적인 자료형 구분이 없는 워드 기반 모델
주요 구현 방식O-code, Intcode, Cintcode
주요 용도컴파일러, 운영체제, 시스템 소프트웨어
구현 상태역사적 언어, 현대적 구현과 배포판 유지

BCPL은 1966년 영국의 컴퓨터 과학자 마틴 리처즈가 설계한 시스템 프로그래밍 언어이다. 정식 명칭은 Basic Combined Programming Language이며, 복잡하고 구현하기 어려웠던 CPL에서 컴파일러 작성과 시스템 소프트웨어 개발에 필요한 핵심 요소를 추려 단순화한 언어로 만들어졌다.

마틴 리처즈는 케임브리지 대학교에서 CPL 컴파일러 개발에 참여한 경험을 바탕으로 BCPL을 설계했으며, 1967년 봄 MIT의 Project MAC에 머무는 동안 CTSS용 최초의 BCPL 컴파일러를 구현했다. BCPL 컴파일러 자체도 BCPL로 작성되었고, 기계 독립적인 중간 표현과 대상 컴퓨터별로 교체할 수 있는 코드 생성기를 사용하였다. 이러한 구조는 서로 다른 명령어 집합과 워드 크기를 가진 컴퓨터로 컴파일러를 옮기는 작업을 단순화했다.

BCPL은 변수와 값에 정수, 포인터, 문자와 같은 고정된 자료형을 부여하지 않는다. 대부분의 값을 컴퓨터의 한 워드로 표현하고, 각 값이 무엇을 의미하는지는 연산과 프로그램의 문맥에 따라 결정한다. 이 단순한 모델은 정교한 정적 타입 검사를 제공하지 않는 대신 컴파일러의 규모를 줄이고, 메모리 주소와 비트 단위 값을 직접 조작해야 하는 시스템 프로그래밍에 적합한 환경을 제공했다.

언어에는 함수와 루틴, 재귀 호출, 조건문, 반복문, 벡터, 포인터 연산, 전역 선언과 별도의 컴파일 단위를 구성하기 위한 기능이 포함되었다. 특히 VALOFRESULTIS를 이용한 값 블록, 다양한 반복 제어문, 코루틴 지원과 같은 기능은 비교적 작은 언어 안에서 복잡한 제어 흐름을 표현할 수 있게 했다.

초기 BCPL 컴파일러는 소스 프로그램을 가상의 스택 기계를 위한 O-code로 변환한 뒤, 대상 컴퓨터용 코드 생성기가 이를 실제 기계어 또는 어셈블리어로 번역하는 구조를 사용했다. 이후에는 IntcodeCintcode를 비롯한 중간 코드와 가상 머신이 개발되었으며, 이를 통해 BCPL 프로그램과 BCPL로 작성된 시스템을 여러 컴퓨터에서 실행할 수 있었다.

BCPL은 CTSS와 Multics 환경을 비롯하여 IBM System/360, Honeywell 6000 계열, PDP 계열, Atlas 2, ICT 1900 계열과 여러 미니컴퓨터로 이식되었다. 케임브리지 대학교에서는 컴파일러 연구와 교육, 시스템 소프트웨어 개발에 널리 사용되었으며, 휴대용 운영체제 TRIPOS도 주로 BCPL로 작성되었다. TRIPOS의 일부 구조와 구성 요소는 이후 AmigaDOS의 기반으로 이어졌다.

미국의 벨 연구소에서는 BCPL이 시스템 프로그래밍 언어 연구에 사용되었다. 켄 톰프슨은 메모리가 제한된 초기 PDP-7 환경에서 사용할 수 있도록 BCPL을 더욱 축소하고 문법을 변경하여 B를 만들었다. 데니스 리치는 B를 확장하여 자료형과 기계에 적합한 데이터 표현을 도입했고, 이 과정에서 C가 형성되었다. 이에 따라 BCPL은 CPL에서 B와 C로 이어지는 프로그래밍 언어 계보의 핵심 연결점으로 평가된다.

BCPL은 Xerox PARCAlto 초기 소프트웨어, Bravo 문서 편집기, 그래픽 프로그램과 네트워크 소프트웨어에도 사용되었다. 또한 최초의 다중 사용자 가상 세계로 알려진 MUD1을 비롯한 여러 초기 대화형 프로그램이 BCPL로 작성되었다.

C가 다양한 시스템에서 널리 보급되면서 BCPL은 일반적인 상용 개발과 시스템 프로그래밍의 중심에서 점차 벗어났다. 그러나 BCPL의 작은 언어 설계, 자체 호스팅 컴파일러, 중간 코드를 이용한 이식 방식과 워드 중심 실행 모델은 컴파일러와 시스템 프로그래밍 언어의 역사에서 중요한 사례로 남아 있다. 마틴 리처즈는 이후에도 Cintcode 기반 BCPL 시스템과 휴대용 운영 환경을 유지하며 현대 컴퓨터에서 실행할 수 있는 구현을 제공해 왔다.

역사

CPL의 개발

BCPL의 설계

MIT Project MAC과 최초 구현

초기 컴퓨터로의 이식

케임브리지 대학교에서의 보급

표준화 시도와 언어의 변화

현대 BCPL 구현

언어 설계

설계 목표

CPL의 단순화

워드 중심 데이터 모델

기계 독립성과 저수준 제어

컴파일러 작성을 위한 구성

어휘 구조와 문법

식별자와 키워드

리터럴과 상수

연산자

명령문과 식

블록과 선언

초기 문법과 현대 문법의 차이

데이터와 메모리 모델

타입 없는 값

워드

주소와 포인터

벡터

문자와 문자열

비트 연산

전역 벡터

제어 구조

조건문

반복문

분기와 레이블

함수와 루틴

VALOFRESULTIS

재귀 호출

코루틴

프로그램 구성

정적 선언과 동적 선언

전역 이름

별도 컴파일

라이브러리와 런타임

시스템 인터페이스

컴파일러와 실행 방식

자체 호스팅 컴파일러

구문 분석과 중간 표현

O-code

대상별 코드 생성기

Intcode

Cintcode

네이티브 코드 생성

부트스트래핑과 이식

구현체와 실행 환경

CTSS 구현

Multics 구현

케임브리지 구현

IBM과 Honeywell 계열 구현

PDP 계열 구현

마이크로컴퓨터 구현

현대 Cintcode 시스템

시스템 소프트웨어

컴파일러 작성

운영체제 개발

TRIPOS

AmigaDOS와의 관계

편집기와 문서 처리 시스템

네트워크와 그래픽 소프트웨어

주요 활용 사례

Xerox Alto

Bravo

MUD1

연구와 교육

휴대용 시스템 소프트웨어

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

CPL

B

C

UNIX 계열 시스템 프로그래밍 언어

후대 언어에서 나타나는 유사한 설계

영향

C 언어 계보

중간 표현을 이용한 컴파일러 이식

자체 호스팅과 부트스트래핑

휴대용 시스템 소프트웨어

언어 문법과 제어 구조

현재의 위치

직접적인 사용의 감소

보존된 구현과 소스 코드

컴퓨터 역사 연구와 교육

현대 시스템에서의 실행

장점과 한계

관련 문서