컴파일러(Compiler)에 대해서

공부/복습/컴퓨터과학(Computer Science) 2008/03/25 01:48
Gpgstudy 에 올라온 질문을 답하면서 문득 컴파일러에 관하여 포스트 하고
싶어졌습니다.

질문과 답링크 : http://www.gpgstudy.com/forum/viewtopic.php?topic=19250

컴파일 따로 링크 따로 로드 따로 실행따로의  기초적인 프로그램 과정을
따로따로 했던 경험이 있다면 컴파일러에 대한 개념이 좀더 확실하게 있을것입니다.

코맨드라인 환경인 gcc나  또는 VC++2008 같은 통합환경에서도 어찌되었든 컴파일러를
사용하셨다면 , 컴파일과 빌드의 차이점을 알 수 있을 것입니다.

컴파일을 좀더 개념적으로 이야기 하면  소스를 오브젝트 코드로 만드는
일을 의미합니다.

소스라는 말과 오브젝트라는 영어가 나오기 때문에 순간적으로 모호한
느낌이 될지 몰라서 이것을 좀더 풀어서 이야기 해보겠습니다.

소스는 음식먹을때 찍어먹는 소스가 아닌 "원천"이라는 의미의 소스입니다.
여기서 오브젝트는 객체지향프로그래밍에서 말하는 객체를 의미하는 것이
아닌 "목적"을 의미하는 말입니다.

그러면 " 컴파일은 소스코드를 오브젝트 코드로 만드는 것을 의미한다."
라는 문구를 쉽게 바꾸어 보겠습니다.

컴파일은 원래의코드를 원하는 목적의 코드로 바꾸는 것을 의미한다.

네 그렇습니다. 컴파일은 이런뜻입니다. 컴파일러는 말그대로 컴파일을 하는
녀석을 의미합니다. 
만약에 핸드컴파일을 한다면 사람이 되겠지요.
일반적으로는 프로그램이 되겠습니다.

만약에 어떤 원래의코드를 내가 원하는 형태로 바꾸는 프로그램을 만들었다면
개념적으로 그것도 컴파일러가 됩니다.

일반적으로 컴파일러는  하이레벨언어의 코드를 로우레벨언어의 코드로
바꾸는 것이지만 , 어떤 언어A에서 어떤 언어 B로 바꾸는 것도 있고
같은 언어지만 스타일을 바꾸는 형태도 있습니다.

언어에서 언어로 바꾸는 것을 보통 Translator 라고 하고 모 번역기죠...
같은 언어에서 스타일을 바꾸는 것을 Rewriter라고 합니다.
둘다 컴파일러의 일종입니다.

가끔 입문자들이 언어와 컴파일러를 차이를 두지 않고 생각하는
경우가 있는데 아마도 이러한 현상은 어떤 사회적 현상인것 같습니다.

대표적인 경우가 이러한 경우입니다.

너 비주얼C 잘해?

C를 하는데 MS비주얼C 컴파일러를
사용해서 잘 할 수 있니? 라고 볼 수 있는 문장입니다.

하지만 개념이 없는 상태 , 즉 언어와 컴파일러에 대한 개념이 없는 상태에서
사용한다면 문제가 되는 문장입니다.

면밀히 따지면 언어와 컴파일러는 다른것이니까요.
너 C잘하니? 어떤 컴파일러 사용하니?  가 좀더 나은 표현이겠죠.

하지만 이러한 현상은 어느 분야에도 일어나는 현상이라 꼭 따지고 싶지는 않군요.
(예를들어 인터넷 검색을 하다를 구글링 하다 라고 표현하는 식이니
  즉 행위나 관념을 유명상품의 이름으로 대체하는 현상이죠.)





top

Trackback Address :: http://www.xevious7.com/trackback/328

Write a comment