사이드바 열기

'프로그래밍'에 해당되는 글 1건

  1. 2008.01.14 History of C Language 2
History of C Language

(1) The birth of C language and A process of development

C 언어는 1972년에 미국 'Bell' 연구소의 연구원 'Dennis Ritchie'에 의해 개발된 Programing Language이다.
1969년 Bell 연구소에서는 DEC사의 PDP-7이라는 대형 컴퓨터에 사용할 목적으로, UNIX라고 하는 OS(Operation System)을 개발하는 역사적인 Project에 착수하였다. 그러나, 초기의 UNIX는 특정 System의 Hardware에 의존하는 Assembly Language로 작성되어 있어서, 다른 컴퓨터 기종에서는 사용할 수 없는, 큰 단점을 가졌다. 비슷한 시기에 Bell 연구소의 연구원 Ken Thompson은 BCPL이라는 기존의 System Programing Language를 기본으로 하여 Compatibility가 높은 High Level Language인 B Language를 개발하였다.
Dennis Ritchie는 UNIX Operation System의 개발을 맡고 있었는데 운영체제는 그 특성상 하드웨어를 직접 제어할 수 있어야 했다. 또한 당시의 컴퓨터 환경이 지금과는 달라 CPU의 속도나 Memory의 용량이 충분하지 않았기 때문에 Program의 크기는 작아야 했고 속도는 빨라야 했다.
이런 모든 요구를 만족시킬 수 있는 유일한 언어는 Assembly Language뿐이었다. 그러나 Assembly Language는 특정 기계에 종속적이며 이식성이 없기 때문에 여러 Platform에 수정없이 사용하는 것이 목적인 UNIX와는 잘 어울리지 않았다. C Language보다 먼저 발표된 Fortran이나 Basic같은 고급언어들은 효율이 좋지 못해 대형 프로젝트에 쓰기에는 역시 부적합하였다.
1972년 Dennis Ritchie는 B Language의 성능을 개선시켜 Assembly Language의 강력한 기능과 High Level Language의 이식성을 동시에 갖춘 C Language를 개발하였고, Assembly Language로 작성되었던 초기의 UNIX를 C language로 다시 작성하였다. 그 결과로 UNIX는 프로그램의 개발과 연구에 유용한 환경을 제공하는 훌륭한 OS로 새롭게 탄생하게 되었다.

C Language가 발표되기 전의 언어들은 각각 장단점이 있어서 특정 분야에서 독점적인 지위를 가지는 고유의 영역을 확보하고 있었다. 예를 들어 Pascal이나 Basic은 교육용 언어로 분류되었고, COBOL은 상업용 Software 작성에 효율적이었으며, Fortran은 과학 기술용 언어로 주로 사용되었다. 또한 LISP는 인공 지능 구현에 적합했으며 Assembly는 System Programing을 위한 최적의 언어였다. 그러나 이러한 분류는 모든 분야에서 강점을 보이는 범용의 C Language가 등장함으로써 의미를 잃게 되었다.
C Language는 1970년대를 지나면서 UNIX와 함게 점차 보급되기 시작하였고, 1980년대 이후로 PC(Personal Computer)의 대중화에 힘입어 MS-DOS 등에서도 광범위하게 사용되었다. 그러나 Dennis Ritchie가 처음 C Language를 Design할 때에 비해 컴퓨터 환경이 많이 변해 비효율적인 면들이 점점 들어나기 시작했으며 또한 애매한 문법들이 존재했었다.
각 컴파일러 개발사들은 경쟁적으로 수많은 C컴파일러를 발표했다. 각 제작사들은 시장의 요구와 필요에 따라 조금씩 언어의 기능을 확장함으로써 C언어에도 많은 변종들이 생겨나게 되었다. 이렇게 되면 작성한 컴파일러에 따라 소스 차원의 호환성이 없어지는 문제점이 있으며 이는 사회적으로 큰 낭비를 초래하였다. 변화된 환경에 적응하고 경쟁으로 인해 훼손된 이식성을 복구하기 위해서는 표준의 제정이 절실히 필요해졌다. 그래서 ANSI는 83년부터 표준 제정작업에 들어가 89년에 표준안을 완성했으며 90년에 ISO에 의해 승인(ISO9899)되었다. 이때 제정된 C 표준을 ANSI C(또는 C90)라고 하며 그 이전의 C를 Classic C(K&R C)라고 한다. ANSI C는 클래식 C에 비해 안전성을 높이고 애매한 기능을 정리하고 새로운 기능을 추가하게 된다.
최근엔 C Language의 기능에 OOP(Object Oriented Programing) 기법을 도입한 C++라는 새로운 언어가 주목을 받고 있다. C++는 새로운 언어이기는 하지만 C Language를 기본으로 하기 때문에 대부분의 상용 제품들은 C++환경에서 순수한 C grammar만으로도 Programing이 가능하도록 배려하고 있다.

ALGOL60⇒CPL⇒BCPL⇒B⇒C⇒C++

(2) ANSI(American Nation Standards Institute)-C

UNIX를 개발하는 과정에서 탄생한 C Language는 초기에 OS와 같은 System Program의 작성을 위하여 일부 전문가들만이 사용하였다. 그러나 시간이 지날수록 C Language가 가지고 있는 여러 가지 특징과 장점이 대학과 연구 기관을 중심으로 일반 대중들에게 소개되기 시작하였고, 또한 Hardware Technology의 발전으로 PC가 대중화되면서 UNIX System에서만 수행될 수 있었던 여러 가지 복잡한 작업들이 PC에서도 충분히 수행될 수 있게 되었다. 따라서 많은 Software 개발 회사들은 PC에서도 C Language를 쉽게 사용할 수 있도록 다양한 C Compiler를 개발하게 된다. 더욱이 Compiler는 일종의 상품이기 때문에 타사 제품과 차별화되는 기능이 있어야 하고 변화된 환경에 적응할 수 있는 새로운 기능을 추가할 필요가 있다. 각 제작사들은 시장의 요구와 필요에 따라 조금씩 언어의 기능을 확장함으로써 C Language에서도 많은 변종이 생겨나게 되었다. 이렇게 되면 작성한 Compiler에 따라 Source 차원의 호환성이 없어지는 문제점이 있으며 이는 사회적으로 큰 낭비를 초래하였다.
위에 언급하였듯이, ANSI에서 표준을 제정하게 된다. ANSI-C라 불리는 표준 C Language는 안전성, 문법의 정리와 더불어 새로운 기능을 추가하였다.

① Standard Library Function의 규격화, Header File 통일
② Prototype Function 선언 기능 추가(컴파일러의 함수호출부에서 타입체크)
③ 정수, 실수 상수의 type를 지정할 수 있는 L, U, F 등의 접미어 추가
④ enum, void 형과 const, volatile 제한자 추가
⑤ 인접 문자열 상수를 합쳐 주고 확장열의 기능 추가
⑥ 함수 내부에서 선언하는 지역배열이나 구조체의 초기화
⑦ 구조체끼리 대입할 경우 구조체 크기만큼 메모리 복사

이후에도 C표준은 지속적으로 확장되었는데 95년에 유럽과 동양의 언어를 지원하기 위한 멀티 바이트 문자 지원이 추가되었다. 이때 제정된 C 표준을 C95라고 하는데 ANSI C에 비해 언어의 기능상 큰 변화는 없었다.
Posted by LaLuna
이전페이지 1 다음페이지
위로

사이드바 열기