B(프로그래밍 언어)
B (programming language)설계자 | 켄 톰프슨 |
---|---|
개발자 | 켄 톰슨, 데니스 리치 |
첫 등장 | 1969년;[1] | 전 (
타이핑 규율 | 유형이 없는(모든 것은 단어임) |
파일 이름 확장명 | .b |
영향을 받은 | |
BCPL, PL/I, TMG | |
영향받은 | |
C |
B는 1969년경 벨랩스에서 개발된 프로그래밍 언어다.그것은 켄 톰슨과 데니스 리치에 의해 개발되었다.
B는 BCPL에서 파생되었으며, 그 이름은 BCPL의 수축일 가능성이 있다.톰슨의 동료인 데니스 리치는 이 이름이 톰슨이 멀티크스에서 사용하기 위해 고안한 초기 프로그램 언어인 본을 기반으로 한 것일 수도 있다고 추측했다.[note 1]
B는 시스템 및 언어 소프트웨어와 같은 반복적이고 숫자가 아닌 기계에 독립적인 애플리케이션을 위해 설계되었다.[3]그것은 유형이 없는 언어였고, 그 어떤 것이든 기초적인 기계의 자연 메모리 워드 포맷이 유일한 데이터 유형이었다.문맥에 따라 그 단어는 정수나 기억 주소로 취급되었다.
벨에 도착한 DEC PDP-11 등 ASCII 프로세싱이 가능한 기계가 보편화되면서 메모리 워드로 채워진 문자 데이터에 대한 지원이 중요해졌다.그 언어의 유형이 없는 성질은 단점으로 여겨졌고, 이로 인해 톰슨과 리치는 새로운 내부 및 사용자 정의 유형을 지원하는 언어의 확장 버전을 개발하게 되었고, 이는 C 프로그래밍 언어가 되었다.
역사
1969년경, 켄[2] 톰슨과 후에 데니스 리치는[3] 그것을 주로 톰슨이 멀티크스 프로젝트에 사용한 BCPL 언어를 기반으로 하여 B를 개발했다.B는 본질적으로 톰슨이 그 당시의 미니컴퓨터의 메모리 용량에 맞도록 하기 위해 그가 할 수 있다고 느끼는 어떤 구성요소도 제거된 BCPL 시스템이었다.BCPL에서 B로의 전환은 톰슨의 선호에 맞게 이루어진 변경(대부분 일반적인 프로그램에서 공백이 아닌 캐릭터의 수를 줄이는 선에 따라)도 포함했다.[2]BCPL의 전형적인 ALGOL 유사 구문의 대부분은 이 과정에서 다소 심하게 변경되었다.할당 연산자:=
로 되돌아가다.=
루티샤유저의 슈퍼플랜과 평등한 운영자로부터=
로 대체되었다.==
.
Thompson은 다음과 같이 "두 주소 할당 연산자"를 추가했다.x =+ y
x에 y를 추가하는 구문(C에서 연산자가 기록됨)+=
) 이 구문은 더글러스 매킬로이가 TMG를 구현한 데서 유래한 것으로, B의 컴파일러가 처음 구현되었다(그리고 ALGOL 68에서 TMG로 나왔다).x +:= y
구문).[2][4]톰슨은 증감 연산자를 발명함으로써 더 나아갔다.++
그리고--
이들의 접두사 또는 사후 픽스 위치는 피연산자의 변경 전 또는 후에 값을 취하는지 여부를 결정한다.이 혁신은 B의 초기 버전에 있지 않았다.Dennis Ritchie에 따르면, 사람들은 종종 DEC PDP-11의 자동 증가와 자동 감소 주소 모드를 위해 그들이 만들어졌다고 추측했지만, B가 처음 개발되었을 때 기계가 존재하지 않았기 때문에 이것은 역사적으로 불가능하다.[2]
포루프의 세미콜론 버전은 켄 톰슨이 스티븐 존슨의 작품에서 차용한 것이다.[5]
B는 유형이 없거나, 더 정확히 말하자면 컴퓨터 단어라는 하나의 데이터 유형을 가지고 있다.대부분의 연산자(예:+
,-
,*
,/
)은 이것을 정수로 취급했지만, 다른 사람들은 이를 참조할 기억 주소로 취급했다.다른 많은 면에서 그것은 C의 초기 버전과 많이 닮았다.C의 표준 I/O 라이브러리의 기능과 모호하게 유사한 기능을 포함한 몇 가지 라이브러리 기능이 있다.[3]톰슨의 말에서: "B와 옛 C는 [C]의 모든 종류를 제외하고 매우 유사한 언어였다."[5]
초기 구현은 초기 유닉스를 사용하는 DEC PDP-7과 PDP-11 미니컴퓨터와 운영 체제 GCOS를 실행하는 Honeywell GE 645[6] 36비트 메인프레임을 위한 것이었다.초기 PDP-7 구현은 스레드 코드로 컴파일되었으며, 리치는 기계 코드를 생성하는 TMG를 사용하여 컴파일러를 작성했다.[7][8][9]1970년에 PDP-11을 획득하여 포트에 나사산 코드를 사용하였고, 조립자와 B언어 자체는 B로 쓰여 컴퓨터를 부팅하였다.이 PDP-11 구성으로 yacc의 초기 버전이 제작되었다.리치는 이 기간 동안 유지보수를 맡았다.[2][9]
B의 유형이 없는 특성은 허니웰, PDP-7, 그리고 많은 구형 컴퓨터에서는 말이 되었지만, PDP-11과 대부분의 현대 컴퓨터들이 완벽하게 지원하는 문자 데이터 유형에 우아하게 접근하기 어려웠기 때문에 PDP-11에서는 문제가 되었다.1971년에 시작된 Ritchie는 컴파일러를 기계코드로 변환하면서 언어를 변경했는데, 특히 변수에 대한 데이터 타이핑을 추가했다.1971년과 1972년 사이에 B는 "New B"(NB)와 C로 진화했다.[2]
B는 C언어로 대체되어 거의 멸종되었다.[10]그러나, 소규모 시스템의 하드웨어 제한, 광범위한 라이브러리, 툴링, 라이센스 비용 문제, 그리고 단순히 업무용으로 충분하다는 다양한 이유로 GCOS 메인프레임(2014년[update] 기준)[11]과 특정 임베디드 시스템(2000년[update] 기준)에서 계속 사용되고 있다.[10]영향력이 큰 애버MUD는 원래 B로 쓰여졌다.
예
Ken Thompson의 Users' Reference에서 B에 이르는 예는 다음과 같다.[3]
/* 다음 함수는 n-음수가 아닌 n-을 출력한다. 베이스 b, 여기서 2[=10]이 루틴은 다음과 같은 사실을 이용한다. ASCII 문자 집합에서 0에서 9까지의 자릿수는 순차적이다. 암호 값*/ 인쇄하다(n, b) { 돌출시키다 설탕을 넣다; 자동차로 a; /* Wikipedia 노트: 자동 키워드는 다음과 같은 변수를 선언함 자동 저장(필수란 기능 범위)이 아님 C++11과 같은 "자동 입력".*/ 만일 (a = n / b) /* 할당, 동일성 테스트가 아님 */ 인쇄하다(a, b); /* 재귀 */ 설탕을 넣다(n % b + '0'); }
/* 다음 프로그램은 상수 e-2 ~ 약 4,000자리의 소수점, 그리고 50자를 다음 줄에 인쇄한다. 5자로 된 그룹방법은 단순 출력 변환이다. 확장된 1/2! + 1/3! + ...= .111.... 여기서 숫자의 기본값은 2, 3, 4, . . */ 입니다. 본래의() { 돌출시키다 설탕을 넣다, n, v; 자동차로 i, c, 망토를 입히다, a; i = 망토를 입히다 = 0; 하는 동안에(i<n) v[i++] = 1; 하는 동안에(망토를 입히다<2*n) { a = n+1; c = i = 0; 하는 동안에 (i<n) { c =+ v[i] *10; v[i++] = c%a; c =/ a--; } 설탕을 넣다(c+'0'); 만일(!(++망토를 입히다%5)) 설탕을 넣다(망토를 입히다%50?' ': '*n'); } 설탕을 넣다('*n*n'); } v[2000]; n 2000;
참고 항목
메모들
참조
- ^ "B - computer programming language".
- ^ a b c d e f g Ritchie, Dennis M. (March 1993). "The Development of the C Language". ACM SIGPLAN Notices. 28 (3): 201–208. doi:10.1145/155360.155580.
- ^ a b c d Thompson, Ken (7 January 1972). "Users' Reference to B" (PDF). Bell Laboratories. Archived from the original (PDF) on 17 March 2015. Retrieved 21 March 2014.
- ^ Michael S. Mahoney (18 August 1989). "Interview with M.D. McIlroy". Princeton.edu. Murray Hill.
- ^ a b Ken Thompson. "VCF East 2019 -- Brian Kernighan interviews Ken Thompson". YouTube. Archived from the original on 2021-11-23. Retrieved 2020-11-16.
I saw Johnson's semicolon version of the for loop and I put that in [B], I stole it.
- ^ Ritchie, Dennis M. (1984). "The Evolution of the Unix Time-sharing System". AT&T Bell Laboratories Technical Journal. 63 (6 Part 2): 1577–1593. doi:10.1002/j.1538-7305.1984.tb00054.x. Archived from the original on 11 June 2015.
- ^ "TMG". multicians.org.
- ^ Ritchie, Dennis M. "The Development of the C Language". Bell Labs/Lucent Technologies. Archived from the original on 11 June 2015.
- ^ a b McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
- ^ a b Johnson and Kernighan. "THE PROGRAMMING LANGUAGE B". Bell Laboratories. Archived from the original on 11 June 2015. Retrieved 21 March 2014.
- ^ "Thinkage UW Tools Package". Thinkage, Ltd. Retrieved 26 March 2014.