B (프로그래밍 言語)

위키百科, 우리 모두의 百科事典.

B
패러다임 節次的
設計者 켄 톰슨
開發者 켄 톰슨 , 데니스 리치
資料型 體系 없음
影響을 받은 言語
BCPL , Bon
影響을 준 言語
C , C++

B AT&T 벨 硏究所 켄 톰슨 이 開發한 프로그래밍 言語 이다. C 言語 로 吸收되는 形態로 거의 死藏되었다. 켄 톰슨이 데니스 리치 의 監修를 받는 形態로 設計하였으며 1969年 에 最初로 登場했다.

紹介 [ 編輯 ]

B는 實質的인 C의 祖上 言語로 볼 수 있다. B 言語로 만든 프로그램은 컴파일러 에 依해 中間 코드로 變換되어 實行하는 인터프리터 를 必要로 한다. 實行時에는 인터프리터 飜譯 順序대로 處理되기 때문에 實行 速度가 極度로 느렸다. 單 PDP-7 버전은 機械語 로 處理할 수 있도록 改良되었다.

歷史 [ 編輯 ]

켄 톰슨은 DEC의 컴퓨터 PDP-7로 유닉스 를 開發하고 있었지만 當時 유닉스는 프로그램 開發을 어셈블리 言語 로 밖에 할 수 없었다. 그래서 켄 톰슨은 유닉스에서 動作하는 高級言語 開發을 始作했다. 그는 유닉스 開發 以前 멀틱스 開發에 從事하고 있었는데 멀틱스의 BCPL 을 바탕으로 B 言語를 開發했다.

以後 B 言語는 켄 톰슨 自身과 데니스 리치 , 브라이언 커니핸 에 依해 改良되어 NewB(NB)를 거쳐 이윽고 C 言語 로 發展하게 된다.

B言語는 켄 톰슨이 當時의 미니 컴퓨터의 메모리 容量 에서 作動할 수 있게 하려고 不必要한 構成 要素 (컴포넌트)를 除去한 一種의 BCPL 시스템이다.

BCPL 이나 Forth 와 같이 B 言語는 워드 形態의 1個의 데이터型만 가지고 있었다. 많은 演算子(四則 演算 等)는 이 데이터를 精髓로 取扱하였고, 그 以外에는 모두 포인터 로 다루었다. 그 以外의 部分은 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 를 考案했는데 이것이 이름의 유래일 可能性이 있다.

코드 예제 [ 編輯 ]

켄 톰슨이 쓴 《Users' Reference to B》 에서 拔萃됨

/* 다음 函數는 비음(非陰)의 數字 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');
}

같이 보기 [ 編輯 ]

外部 링크 [ 編輯 ]