엔지니어 블로그
[컴퓨터 밑바닥의 비밀] 프로그래밍 언어와 컴파일러,인터프리터 언어의 발생 본문
CPU는 똑똑한 바보
CPU는 스위치의 개폐만으로 0,1을 표현하고 더 나아가 Boolean 논리를 나타낼 수 있는 것에서 착안하여 만들어졌다. CPU는 생각보다 단순하다. A 지점에서 데이터를 가져와 간단한 연산 후 B 지점으로 옮기는 작업만 수행할 뿐이다. 하지만 굉장한 장점 하나가 단순함을 모두 상쇄한다. CPU는 속도가 매우 빠르다. 인간의 계산 속도를 아득히 뛰어넘을 정도다. 이러한 장점을 토대로 CPU는 인간에게 제 2의 두뇌가 되어줬다.
인간은 제 2의 두뇌, CPU를 제어하고 작업을 시키기 위해 CPU의 언어를 사용해야했다. CPU가 인간의 언어를 이해할 수 없기 때문이다. 그래서 0과1로 작성된 천공카드를 통해 CPU에게 명령어를 전달했고, CPU는 명령어를 수행했다. 이 0,1로 작성된 내용이 바로 Code고 Source가 된다.
어셈블리어의 등장
CPU의 언어로 소통하던 와중에 인간은 CPU가 결국 간단한 한정적인 명령어만을 수행하고 있는 것을 발견했다. 이를 토대로 '어셈블리어'를 탄생시켰다. 어셈블리어는 기계어를 특정 작업과 대응시키고 기계어를 인간이 이해할 수 있는 단어와 대응시킨 언어다. 이후로 인간은 01011 과 같은 기계어가 아닌, put,call,sub 과 같은 인간이 이해할 수 있는 단어를 통해 CPU에게 작업을 시킬 수 있게 되었다.
저수준 계층의 세부사항 대 고수준 계층의 추상화
어셈블리어는 인간이 이해할 수 있는 단어로 이루어져 있지만, 여전히 기계어와 같이 저수준 계층의 언어다. 다시 말해 저수준 계층 언어는 모든 세부사항에 대해 신경써야 한다. 예를들어 '물을 마신다' 라는 추상적인 인간의 언어가 있을때, 저수준 계층 언어는 이를 수행하기 위해 수많은 세부사항을 처리해야한다.
오른쪽 다리를 내딛는다
멈춘다
왼쪽 다리를 내딛는다
멈춘다
정수기 앞에 도달할 때 까지 반복한다
물컵을 찾는다
...
오른쪽 다리를 내딛는다
몸춘다
왼쪽 다리를 내딛는다
멈춘다
CPU는 너무나 단순하기 때문에 인간의 추상적인 표현을 위와같이 이해할 수 없다. 그렇다면 인간의 언어와 기계의 언어 사이의 간극을 좁힐 방법은 없을까?? 다시 말해 인간의 추상적인 언어를 CPU가 이해할 수 있는 구체적인 표현으로 자동 변환할 수 있는는 방법이 있다면 생산성을 획기적으로 향상시킬 수 있을 것이다.
이를 해결하기 위해 고급 프로그래밍 언어가 시작되었다. 세부사항의 내용 중 반복적인 내용은 while, '만약 .. 라면 .. 해라' 라는 내용은 if를 사용 하는 방식으로 말이다. 또, if와 while 등의 구문이 중첩 된 것을 위해 재귀표현이 등장했다.
컴퓨터가 재귀를 이해하도록 만들기
재귀는 단계 안에 단계가 중첩 된 구조를 보이며 이를 Tree 구조로 나타낼 수 있다. 그렇다면 위와 같은 트리구조를 어떻게 명령어로 실행할 수 있을까?? 바로 Compiler의 존재때문이다. Compiler는 리프노드부터 기계 명령어로 번역하기만 하면 그 결과를 부모 노드에 적용하고, 이러한 방식을 반복하여 트리를 하나의 명령어로 재조합 할 수 있게 된다.
Interpreter 언어의 탄생
Compiler가 구문트리를 번역하여 명령어를 실행하는 것 까지 봐왔다. 하지만 시스템 아키텍쳐에 따라 명령어를 실행 하지 못하는 경우가 생긴다. 예를 들어 x86 플랫폼용으로 생성한 실행 파일을 ARM 플랫폼에서는 실행할 수 없다. 이러한 문제를 해결하기 위해 해석형 언어 즉 Interpreter 언어가 탄생하게 됐다.
서로 다른 아키텍쳐를 가진 CPU에서 명령어를 실행하게 된다면, Compiler는 구문트리를 명령어로 번역한 후 가상머신으로 넘겨 실행하게 된다
본 내용은 "컴퓨터 밑바닥의 비밀" 을 읽고 정리 한 내용입니다.
'글공부' 카테고리의 다른 글
[OS] 멀티 스레딩 환경의 동기화 (1) | 2025.04.01 |
---|---|
[JVM] GC란? (0) | 2025.03.27 |
[컴퓨터 밑바닥의 비밀] 운영체제,프로세스,스레드의 근본 이해하기 - 1 (0) | 2025.03.11 |
[컴퓨터 밑바닥의 비밀] 컴파일러 (0) | 2025.03.07 |
[컴퓨터구조] 컴퓨터 구조의 큰 그림 (0) | 2023.12.06 |