세인드의 블로그

공부를 하다가 우리가 사용하고 있는 C언어가 대체 어디서 어떻게 왜 만들어졌는지가 궁금했다.

우선 다음은 위키백과에서 기술하고 있는 C언어의 발전과정이다.
1970년대 초 켄 톰슨(Ken Thompson)과 데니스 리치(Dennis M. Ritchie)가 당시 새로 개발된 유닉스(Unix) 운영체제에서 사용하기 위해서 만든 언어이다. 켄 톰슨은 BCPL(Basic CPL)언어를 필요에 맞추어 개조해서 "B"언어라 명명했고, 이 B언어에서 C언어가 탄생했다. 유닉스 시스템과 많은 운영체제의 커널또한 C언어로 만들어졌다.

-C언어의 탄생 배경
 시초에 유닉스 시스템은 저급 언어(Low-Level)인 어셈블리어로 만들어졌었다.
컴퓨터 구조마다 사용되는 기계언어가 달라지므로 기계어와 대응하는 어셈블리어도 달라지게 된다.
즉, CPU에 따라서 프로그램을 다시 만들어야 한다는 불편함이 생긴다는 이야기다.
어셈블리어는 위와같이 하드웨어 의존도가 높은 언어였다. 이를 두고 다른 기종간의 이식성이 낮다고 표현한다.
하지만, 유닉스는 애초에 다양한 시스템에서 수정 없이 작동하는것이 목적인 운영체제였다.
이러한 문제점을 해결하기 위해서 켄 톰슨은 이식성이 강한 고급 언어(High-Level)로 유닉스를 개발할 생각을 한다. 이때 켄 톰슨의 눈에 들어온 언어가 바로 BCPL이다. 1969년 켄 톰슨은 BCPL을 바탕으로 C언어의 기초가된 B언어를 만들게 된다.
(B언어의 "B"는 켄 톰슨이 몸담고 있었던 벨 연구소(Bell Laboratories)의 앞글자 B를 따서 정해진 명칭이라는 설과 BCPL의 앞글자인 B를 사용했다는 설이 있다.)

켄 톰슨(왼쪽)과 데니스 리치(오른쪽)

 
이때, 켄 톰슨과 같은 연구소에 있던 데니스 리치에 의해 1970년대 초 B언어를 기초로 한 C언어가 탄생하게 된다.
그 이후로 대부분의 유닉스 시스템은 C언어로 재작성되었고, 많은 운영체제의 커널(Kernel)또한 C로 만들어지게 되었다.

데니스 리치는 C언어를 개발한것 뿐 아니라 브라이언 커니핸(Brian Kernighan)과 함께 최초의 C언어 해설서인 "C프로그래밍 언어"를 기술했다. 그로인해 브라이언 커니핸이 데니스 리치와 함께 C언어를 개발했다는 오해가 생기기도 했지만 브라이언 커니핸은 자신이 C언어의 탄생에 전혀 기여하지 않았다고 밝혔다.