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은 변수와 값에 정수, 포인터, 문자와 같은 고정된 자료형을 부여하지 않는다. 대부분의 값을 컴퓨터의 한 워드로 표현하고, 각 값이 무엇을 의미하는지는 연산과 프로그램의 문맥에 따라 결정한다. 이 단순한 모델은 정교한 정적 타입 검사를 제공하지 않는 대신 컴파일러의 규모를 줄이고, 메모리 주소와 비트 단위 값을 직접 조작해야 하는 시스템 프로그래밍에 적합한 환경을 제공했다.
언어에는 함수와 루틴, 재귀 호출, 조건문, 반복문, 벡터, 포인터 연산, 전역 선언과 별도의 컴파일 단위를 구성하기 위한 기능이 포함되었다. 특히 VALOF와 RESULTIS를 이용한 값 블록, 다양한 반복 제어문, 코루틴 지원과 같은 기능은 비교적 작은 언어 안에서 복잡한 제어 흐름을 표현할 수 있게 했다.
초기 BCPL 컴파일러는 소스 프로그램을 가상의 스택 기계를 위한 O-code로 변환한 뒤, 대상 컴퓨터용 코드 생성기가 이를 실제 기계어 또는 어셈블리어로 번역하는 구조를 사용했다. 이후에는 Intcode와 Cintcode를 비롯한 중간 코드와 가상 머신이 개발되었으며, 이를 통해 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 PARC의 Alto 초기 소프트웨어, Bravo 문서 편집기, 그래픽 프로그램과 네트워크 소프트웨어에도 사용되었다. 또한 최초의 다중 사용자 가상 세계로 알려진 MUD1을 비롯한 여러 초기 대화형 프로그램이 BCPL로 작성되었다.
C가 다양한 시스템에서 널리 보급되면서 BCPL은 일반적인 상용 개발과 시스템 프로그래밍의 중심에서 점차 벗어났다. 그러나 BCPL의 작은 언어 설계, 자체 호스팅 컴파일러, 중간 코드를 이용한 이식 방식과 워드 중심 실행 모델은 컴파일러와 시스템 프로그래밍 언어의 역사에서 중요한 사례로 남아 있다. 마틴 리처즈는 이후에도 Cintcode 기반 BCPL 시스템과 휴대용 운영 환경을 유지하며 현대 컴퓨터에서 실행할 수 있는 구현을 제공해 왔다.