Thinking Different




C언어의 탄생

 

1972년 벨 연구소의 데니스 리치가 만든 범용 프로그래밍 언어로써 켄 톰슨이 만든 B 언어를 확장시켜 만든 언어이다.

C언어, Unix 의 창시자 '데니스 리치'

 

C언어의 뿌리는 1960년에 발표된 ALGOL60 이라는 언어를 통해서 시작이 되었다. 그 후 1963년 ALGOL60을 확장시켜 CPL 로 개발되었으며, 1967년 마틴 리차드가 CPL을 단순화 시킨 BCPL(Basic CPL)을 개발했다.

1969년 켄 톰슨에 의해 BCPL 언어를 B언어로 개발하였다. 여기까지가 C언어의 뿌리이다.

 

데니스 리치가 만든 C언어의 특징으로 많은 문법을 간략화하여 용이함을 더했다. (보통 그 당시 널리 사용되던 포트란, 코볼, 베이식과 비교하면 START, END 문장과 같은 것들을 { } 스코프로 변경하여 간략화 하는 등 용량과 편의성에서 많은 부분을 개선했다고 할 수 있다.)

 

아래 코드를 보면 좌(어셈블리어), 우(C언어) 로 작성된 Hello World 출력 코드 이다. 엄청나게 간소화 된 것을 확인할 수 있다.

 

Hello World 프로그램을 각각 어셈블리(좌)와 C언어(우)로 작성한 모습 / 출처 : 위키백과 (http://ko.wikipedia.org/)

 

 

 

C언어와 어셈블리어

 

C언어는 처음부터 어셈블리어와 비교할만한 효율을 가지게 저수준으로 설계됐다. 그렇다보니 대부분의 시스템 운영체제(OS) 의 경우 C언어로 작성되어있는 경우가 대다수다. 우리가 사용하는 리눅스나 윈도우 등도 c로 만들어진 프로그램 덩어리이다.

또한 C 언어의 경우 작은 임베디드 시스템 등에도 쓰이는 언어로써 저수준을 지원하기 위해서 인라인 어셈블러를 통해 어셈블리 코드를 코드 안에 직접 집어넣을 수 있는 확장 기능을 적극적으로 지원한다. 이런 경우 호환성을 희생하고 속도를 얻을 수 있다.

 

 

 

C언어의 성능

 

역시나 저수준의 레벨인 어셈블리어와 비교할만큼 속도를 가지게 설계되어 타 언어들과는 비교가 불가능할만큼 속도가 빠르다. Java의 경우에도 Java로 만들어진 프로그램을 구동하기 위해 가상머신이라는 JVM 위에서 돌아가게 되는데 이 JVM 또한 C로 만들어졌다. C의 경우 기계어로 컴파일되어 구동되는 시점이 시스템 단위에서 기계어로 실행되므로 속도가 빠를 수 밖에 없다.

 

 

프로그래밍 언어의 시작은 어떤 걸로?

 

많은 분들이 프로그래밍 언어 시작을 Java로 해라, 파이썬으로 해라, C언어로 해라. 등등 말이 많지만, 필자의 경우 개인적으로 처음 시작하는 언어는 C언어로 시작하는것을 적극 추천하는 사람 중 한명이다. 저수준 언어이면서도 고수준 언어라고 할 수 있을 만큼, 시스템이 구동되는 기본적인 원리를 알면서 배워가야 즉, 기초가 튼튼해야 다른 언어를 배워가면서도 보다 깊고 넓은 지식을 바탕으로 프로그래밍을 올바르게 작성할 수 있다고 생각되기 때문이다.

 

 

 

"C는 유별나고 결함이 있으며, 엄청나게 성공했다."

 - 데니스 리치 -