{{위키데이터 속성 추적}}
{{프로그래밍 언어 정보
|이름 = B
|로고 = 
|패러다임 = [[절차적 프로그래밍|절차적]]
|연도 = 
|설계자 = [[켄 톰슨]]
|개발자 = [[켄 톰슨]], [[데니스 리치]]
|최근 버전 = 
|최근 버전 출시일 = 
|형 체계 = 없음
|구현체 = 
|방언 = 
|영향을 받은 언어 = [[BCPL]], [[Bon (프로그래밍 언어)|Bon]]
|영향을 준 언어 = [[C (프로그래밍 언어)|C]], [[C++]]
}}

'''B'''는 [[AT&T]] [[벨 연구소]]의 [[켄 톰슨]]이 개발한 [[프로그래밍 언어]]이다. [[C (프로그래밍 언어)|C 언어]]로 흡수되는 형태로 거의 사장되었다. 켄 톰슨이 [[데니스 리치]]의 감수를 받는 형태로 설계하였으며 [[1969년]]에 최초로 등장했다.

== 소개 ==
B는 실질적인 C의 조상 언어로 볼 수 있다. B 언어로 만든 프로그램은 [[컴파일러]]에 의해 중간 코드로 변환되어 실행하는 [[인터프리터]]를 필요로 한다. 실행시에는 인터프리터 번역 순서대로 처리되기 때문에 실행 속도가 극도로 느렸다. 단 [[PDP-7]] 버전은 [[기계어]]로 처리할 수 있도록 개량되었다.

== 역사 ==
켄 톰슨은 DEC의 컴퓨터 PDP-7로 [[유닉스]]를 개발하고 있었지만 당시 유닉스는 프로그램 개발을 [[어셈블리 언어]]로 밖에 할 수 없었다. 그래서 켄 톰슨은 유닉스에서 동작하는 고급언어 개발을 시작했다. 그는 유닉스 개발 이전 [[멀틱스]] 개발에 종사하고 있었는데 멀틱스의 [[BCPL]]을 바탕으로 B 언어를 개발했다.

이후 B 언어는 켄 톰슨 자신과 [[데니스 리치]], [[브라이언 커니핸]]에 의해 개량되어 NewB(NB)를 거쳐 이윽고 [[C (프로그래밍 언어)|C 언어]]로 발전하게 된다.

B언어는 켄 톰슨이 당시의 미니 컴퓨터의 [[메모리 용량]]에서 작동할 수 있게 하려고 불필요한 [[구성 요소]](컴포넌트)를 제거한 일종의 [[BCPL]] 시스템이다.

[[BCPL]]이나 [[Forth]]와 같이 B 언어는 워드 형태의 1개의 데이터형만 가지고 있었다. 많은 연산자(사칙 연산 등)는 이 데이터를 정수로 취급하였고, 그 이외에는 모두 [[포인터 (프로그래밍)|포인터]]로 다루었다. 그 이외의 부분은 C 언어의 초기 버전과 비슷하다. C 언어의 [[C 표준 라이브러리|표준 입출력 라이브러리]]에 비견되는 [[라이브러리]]를 가지고 있었다.

초기에는 유닉스를 사용한 DEC의 PDP-7용과 PDP-11에서 사용되었고 한편 [[GCOS]]라고 하는 OS가 동작하는 [[허니웰]]의 36비트 [[메인프레임]]에도 사용하였다. 최초의 PDP-7용에서는 [[스레드 코드]]로 컴파일 하여 데니스 리치가 기계어로 출력하는 컴파일러를 만들었다. [[1970년]]에 PDP-11에 도입되었지만 역시 이식에는 스레드 코드가 사용되었다. 이때 최초의 [[yacc]]가 PDP-11용으로 개발되었다. 데니스 리치는 이 시기에 유지보수를 담당했다.

B 언어는 [[자료형]]이 없는 설계로 허니웰이나 PDP-7과 같은 낡은 컴퓨터에서는 쓸모있었지만, PDP-11이나 현대적인 컴퓨터가 지원하는 문자 자료형을 적절히 처리할 수 없었기 때문에 문제가 되었다. [[1971년]] 데니스 리치는 전면적인 변경을 시도해 컴파일러가 기계어 코드를 생성할 수 있도록 하는 한편 자료형을 변수를 추가했다. [[1971년]]부터 [[1972년]]까지 B 언어는 NewB 언어로 진화했고 앨런 슈나이더(Alan Snyder)의 강한 요구로 [[전처리기]]가 더해져서 [[1972년]], [[1973년]] 두해 동안 초기의 C 언어로 진화했다. [[1973년]] 여름에 드디어 PDP-11용 유닉스가 C 언어로 다시 씌여져서 이러한 노력은 완전한 결실을 맺게 되었다. [[1973년]]에는 허니월 635 시스템에서 IBM 360/370 시스템으로 이식할 필요성이 제기되었는데 이 와중에 마이크 레스크(Mike Lesk)는 나중에 C 언어 표준 입출력 라이브러리(stdio)가 되는 《범용 I/O 패키지》를 작성했다.

B 언어는 허니웰의 메인프레임에서 1990년대까지 계속 이용되었다. 또한 단순 업무 활용에 필요하다든가 툴 및 라이선스 문제 등의 이유로 인해 일부 [[임베디드]] 시스템에서도 사용되고 있었다. 한편 유명한 오픈소스 [[다중 사용자 온라인 게임]] [[AberMUD]]도 B 언어로 제작되었다.

B 언어는 BCPL의 영향을 그대로 받았기 때문에 명칭인 B 마저 BCPL의 머리글자를 따왔을 가능성이 높다. 하지만 켄 톰슨은 멀틱스에서 사용하기 위해 전혀 다른 방식의 언어인 [[Bon (프로그래밍 언어)|Bon]]를 고안했는데 이것이 이름의 유래일 가능성이 있다.

== 코드 예제 ==
켄 톰슨이 쓴 ''《Users' Reference to B》''에서 발췌됨
<pre>
/* 다음 함수는 비음(非陰)의 숫자 n을 b진수 형태로 출력한다 (단, 2<=b<=10)
  이 루틴은 ASCII 문자 코드 값이 0에서 9까지 연속하고 있음을 이용하고 있다. */

printn(n,b) {
        extrn putchar;
        auto a;

        if(a=n/b) /* 대입문. 등차 비교가 아님 */
                printn(a, b); /* 재귀 호출 */
        putchar(n%b + '0');
}
</pre>

== 같이 보기 ==
* [[BCPL]]
* [[C (프로그래밍 언어)]]

== 외부 링크 ==
* ''[http://cm.bell-labs.com/cm/cs/who/dmr/chist.html The Development of the C Language] {{웨이백|url=http://cm.bell-labs.com/cm/cs/who/dmr/chist.html |date=20130523224817 }}'', [[데니스 리치]]. [[BCPL]]과 [[C (프로그래밍 언어)|C]]의 관계 중 B에 대해 설명.
* ''[https://web.archive.org/web/20060706005453/http://cm.bell-labs.com/cm/cs/who/dmr/kbman.html Users' Reference to B]'', [[켄 톰슨]]. [[PDP-11]] 버전에 관해 설명.
* ''[https://web.archive.org/web/20070808110320/http://cm.bell-labs.com/cm/cs/who/dmr/bintro.html The Programming Language B]'', S. C. Johnson & B. W. Kernighan, Technical Report CS TR 8, [[벨 연구소]] (1973년 1월). [[허니웰]] 제품용 [[GCOS]]버전 설명서

{{켄 톰프슨}}
{{프로그래밍 언어}}

[[분류:절차적 프로그래밍 언어]]
[[분류:1969년 개발된 프로그래밍 언어]]