Saturday, August 11, 2012

컴파일러(Compiler)

D언어에서 가장 많이 쓰이는 두가지 도구는 텍스트 편집기와 컴파일러 입니다.
D프로그램은 텍스트 편집기로 작성 됩니다.

컴파일 언어인 D와 같은 프로그래밍 언어를 사용하려면 컴파일과 컴파일러의 기능에 대한 이해가 필수적입니다.

기계어

컴퓨터의 두뇌가 되는 부분은 마이크로프로세서 입니다(혹은 CPU로 불리며 중앙 처리 장치;Central Processing Unit의 약자). CPU에게 무엇을 할지 지시하는 것을 코딩이라고 부르며, 이러한 명령어를 수행할 때 CPU에게 직접적으로 전해지는 명령어는 기계어라고 부릅니다.

대다수의 CPU 아키텍쳐(Architecture)는 특정 아키텍쳐에 맞는 기계어를 사용하도록 설계 되어 있습니다. 이런 기계어는 아키텍쳐가 설계되는 단계에서 하드웨어의 구성에 알맞도록 제작됩니다. 가장 원천적이고 기계적인, 실리콘 기판 단계에서 이루어지는 기계어는 전기적 신호를 통해 행해집니다. 이러한 전기적 신호로 구성된 세계에서는 인간이 코딩을 하는것이 주 목적이 아니기 때문에 이 단계에서 CPU에 바로 기계어를 코딩해서 짜 넣는다는 것은 매우 힘든 작업입니다.

이러한 기계어는 여러 특수한 숫자들로 이루어 져 있으며, CPU는 이러한 숫자를 사용하여 연산을 합니다. 가상의 8비트 CPU를 예로 들자면, 숫자 4는 연산을 불러오는 작업의 명령어일 수 있으며, 숫자 5는 저장을 하도록 하는 명령어, 숫자 6은 더하기 연산의 명령어일 수 있습니다. 가장 왼쪽의 3비트는 연산을 지정하는 명령어이고 가장 오른쪽의 5비트가 연산에 사용되는 값이라고 가정한다면 이러한 8비트 CPU의 기계어 프로그램은 다음과 같을수도 있겠습니다

   연산       값              의미
   100      11110        불러오기      11110
   101      10100        저장하기      10100
   110      10100        더하기        10100
   000      00000        멈추기
하드웨어에 매우 가까운 기계 언어는 하이레벨의 프로그래밍인 카드놀이학생 정보 기록 프로그램의 제작에는 적절하지 않습니다.
*역자 주: 기계어에 가깝고 인간이 이해하기 어려울수록 로우 레벨(low level)이라고 부르며 인간이 이해하기 쉬운, 고차원적인 논리가 가능한, 기계어와 멀어지는 언어일수록 하이레벨(high level)이라고 부릅니다.

프로그래밍 언어

CPU를 효율적으로 제어하기 위해 제작된 것이 프로그래밍 언어 입니다. 이러한 프로그래밍 언어는 하이레벨의 개념들을 표현하는데 적합합니다. 프로그래밍 언어들은 하드웨어의 제약들을 고려할 필요가 없도록 제작되었습니다;프로그래밍 언어의 주된 목적은 하드웨어가 할수 있는 일들을 효율적으로 이용하지는 것입니다. 프로그래밍 언어는 인간이 이해하기 쉽도록 제작되어 있습니다. 마치 인간이 사용하는 언어와 같다고도 볼수 있겠습니다.
if (카드를 선택한다) {
   카드보이기();
}

컴파일된 언어

어떤 프로그래밍 언어에서는 짜여진 코드가 프로그래밍이 실행되기 전에 컴파일 되어야 합니다. 이러한 언어는 빠른 실행 속도를 보장합니다만 개발 단계에서 주된 2가지 작업을 요구합니다:코드를 짜고 컴파일을 해야 합니다. D는 컴파일된 언어입니다.

해석형 언어(Interpreted languages)

어떠한 프로그래밍 언어는 컴파일을 할 필요가 없습니다. 이러한 언어는 해석형 언어라고 불립니다. 코드에서 바로 프로그램이 실행 가능합니다. 이러한 프로그래밍 언어의 예로는 파이썬(Python)이나 루비(Ruby) 혹은 펄(Perl) 등이 있습니다. 컴파일이 생략되었기 때문에 프로그램 개발에는 용이합니다. 하지만 프로그램이 실행될때마다 코드가 분해되어 해석되어야 하기 때문에 이러한 프로그래밍 언어로 쓰여진 프로그램은 컴파일된 언어에 비해서 느릴 수 밖에 없습니다.

컴파일러

컴파일러의 주된 기능은 해석입니다. 컴파일러는 프로그래밍 언어를 기계어로 해석합니다. 프로그래머가 말하고자 하는 바를 CPU가 이해할 수 있는 말로 해석한다고 볼수 있습니다. 이러한 해석을 컴파일이라고 부릅니다. 모든 컴파일러는 각자의 프로그래밍 언어를 이해합니다. 예를 들자면 "D 컴파일러"가 있습니다.

컴파일 오류

컴파일러가 프로그래밍 언어의 규칙에 따라 컴파일을 진행할때 문법의 부적절한 오류가 발견 될 경우 즉시 컴파일을 중지합니다. 부적절한 오류라고 하는 것은 그 언어의 사양(Specification;역자 주:한글로는 규칙, 문법이라고 해석 하는것이 좋을 수도 있겠습니다.)에 맞지 않는 것을 의미합니다. 제대로 닫히지 않는 괄호라거나 세미콜론이 빠졌다거나 오타가 있다거나 하는 이러한 모든 것들이 컴파일 오류를 발생시킵니다.

꼭 오류라고는 지칭할 수 없지만 문제를 발생시킬 수도 있는 의심스러운 부분이 있다면 컴파일 경고를 보이기도 합니다.

No comments:

Post a Comment