B (프로그래밍 언어)
B는 1969년경 벨 연구소의 켄 톰프슨이 BCPL을 바탕으로 설계한 시스템 프로그래밍 언어이다. 초기 UNIX 개발 과정에서 어셈블리어보다 높은 수준의 언어로 시스템 프로그램과 개발 도구를 작성하기 위해 만들어졌으며, 이후 데니스 리치가 언어와 구현을 확장하는 과정에 참여하였다. B는...
| 분류 | 프로그래밍 언어, 시스템 프로그래밍 언어 |
|---|---|
| 설계자 | 켄 톰프슨 |
| 개발자 | 켄 톰프슨, 데니스 리치 |
| 개발 기관 | 벨 연구소 |
| 개발 시기 | 1969년경 |
| 패러다임 | 절차적 프로그래밍, 명령형 프로그래밍 |
| 타입 체계 | 무형식, 기계 워드 기반 |
| 영향을 받은 언어 | BCPL, Fortran, PL/I, TMG |
| 영향을 준 언어 | C |
| 주요 구현 환경 | DEC PDP-7, DEC PDP-11, Honeywell GCOS |
| 주요 용도 | 시스템 소프트웨어, 언어 처리 도구, 초기 UNIX 프로그램 |
| 현재 상태 | 역사적 언어 |
B는 1969년경 벨 연구소의 켄 톰프슨이 BCPL을 바탕으로 설계한 시스템 프로그래밍 언어이다. 초기 UNIX 개발 과정에서 어셈블리어보다 높은 수준의 언어로 시스템 프로그램과 개발 도구를 작성하기 위해 만들어졌으며, 이후 데니스 리치가 언어와 구현을 확장하는 과정에 참여하였다. B는 C의 직접적인 전신으로서 BCPL에서 C로 이어지는 언어 계보의 중간 단계에 해당한다.
B는 재귀 호출과 비수치 중심의 시스템 프로그래밍을 주요 대상으로 삼았으며, 작고 제한이 적은 문법과 다양한 연산자를 제공하였다. 별도의 정수형, 문자형, 포인터형을 구분하지 않고 모든 값을 대상 컴퓨터의 기본 기계 워드로 표현했으며, 같은 값이 문맥에 따라 정수나 메모리 주소로 해석되었다. 이 구조는 메모리와 하드웨어를 직접 다루기 쉬웠지만, 바이트 단위 문자 처리와 서로 다른 크기의 자료를 효율적으로 표현하는 데에는 제약이 있었다. 켄 톰프슨의 B 매뉴얼도 B를 재귀적이고 주로 비수치적인 시스템 프로그래밍 응용을 위한 언어로 설명한다.[1]
B의 기본 설계는 마틴 리처즈가 만든 BCPL에서 유래하였다. BCPL의 컴파일러와 실행 환경은 당시 DEC PDP-7의 작은 메모리에 그대로 이식하기에는 컸기 때문에, 켄 톰프슨은 자신이 앞서 개발한 Bon과 BCPL의 특징을 바탕으로 더 단순한 언어를 구성하였다. B는 BCPL의 중괄호 기반 블록, 식 중심 표현, 주소와 워드를 직접 조작하는 모델을 계승하면서도 초기 UNIX 환경에 맞게 언어와 구현을 축소하였다.
초기 B 구현은 중간 형태의 스레드 코드로 프로그램을 변환하고 이를 실행 환경이 해석하는 방식으로 동작하였다. 이러한 구조는 작은 컴퓨터에서 구현하기 쉬웠지만, 새로 도입된 DEC PDP-11의 바이트 주소 지정과 다양한 자료 크기를 충분히 활용하기에는 적합하지 않았다. 데니스 리치는 B에 자료형과 기계어 코드 생성을 도입한 New B, 또는 NB를 개발했으며, 이 언어는 구조체와 새로운 타입 체계가 추가되면서 C로 발전하였다. 데니스 리치는 C의 개발사를 설명하면서 B가 BCPL의 자료 모델과 연산자를 계승했지만 PDP-11의 문자 처리와 자료 구조를 표현하기에는 부족했다고 서술하였다.[2]
B 자체는 C가 정착한 뒤 실용적인 시스템 개발 언어의 위치에서 빠르게 물러났지만, 초기 UNIX의 언어 환경을 형성하고 C의 문법과 실행 모델이 만들어지는 기반을 제공하였다. 함수 정의, 자동 변수와 외부 변수, 포인터와 유사한 주소 조작, 배열, 전위·후위 증가 연산자, 복합 대입 연산자 등 B의 여러 요소는 형태가 수정되거나 타입 체계와 결합된 채 C에 이어졌다. 따라서 B는 현재 사용되는 범용 언어라기보다 UNIX와 C의 형성 과정을 이해하는 데 중요한 역사적 프로그래밍 언어로 다루어진다.