2019. 9. 6. 00:15ㆍComputer Science
#오늘의 개념 :
Compiler vs Interpreter 의 차이
1. Compiler 란?
- 정의
인간의 언어에 가까운 고급 언어로 작성된 원시 프로그램을 입력으로 받아 기계어(機械語)로 된 목적 프로그램을 출력하기 위해 사용되는 언어 번역 프로그램 (정의가 너무 어렵당 ..)
==> 즉, 고급언어(프로그래밍 언어) -> 기계어(0,1로 이루어진 이진 숫자 : 기계가 이해할 수 있는 언어)로 변환해주는 것.
- 역사
초기 컴퓨터 프로그램들은 어셈블리어로 작성되었다. 그러나 서로 다른 CPU 아키텍처가 등장할 때마다 매번 똑같은 프로그램을 서로 다른 어셈블리어로 작성하는 비용이 커지면서, 고급 프로그래밍 언어의 필요성이 대두되었다. 그러나 초기 컴퓨터 하드웨어의 메모리 크기가 너무 작아, 컴파일러의 등장에 기술적 장애물이 되었다.
1950년대 초부터 기계어에 독립적인 최초의 고급 프로그래밍 언어가 나타났고, 실험적인 컴파일러들이 등장하기 시작했다. 세계 최초의 컴파일러는 1952년 그레이스 호퍼가 개발한 프로그래밍 언어 A-0를 기계어로 번역하는 컴파일러이다. 컴파일러라는 용어 또한 이때 호퍼가 처음 사용하였다. 최적화 기능이 탑재된 최초의 "완전한" 컴파일러는 1957년 IBM의 존 배커스가 개발한 포트란 컴파일러이다.
**어셈블리어 : 어셈블리어란 사용자가 이해하기 어려운 기계어 대신에 명령 기능을 쉽게 연상할 수 있는 기호를 기계어와 1:1로 대응시켜 코드화한 기호 언어
2. Interpreter 란?
- 정의
고급 언어로 작성된 원시코드 명령어들을 한번에 한 줄씩 읽어들여서 실행하는 프로그램
==> Interpreter 의 사전적 의미가 '번역기' 임. 말그대로 한 줄씩 번역을 해준다의 의미.
- 특징
-
소스 코드를 직접 실행함
-
소스 코드를 중간 코드로 변환 후, 변환한 것을 바로 실행.
- 역사 (출처 - 위키백과)
최초의 인터프리트 방식의 고급 언어는 리스프였다. 리스프는 1958년 스티브 러셀이 IBM 704 컴퓨터에 최초로 구현하였다. 러셀은 존 매카시의 논문을 읽고 리스프의 eval 함수가 기계어로 구현될 수 있었다는 것을 발견했는데, 이는 맥캐시를 놀라게 했다.[2] 작업 중인 리스프 인터프리터가 그 결과 만들어졌으며 리스프 프로그램의 실행, 더 정확히 말해, "리스프 식의 평가"에 사용될 수 있었다. ????
3. 차이점은 ??
Compiler | Interpreter | |
번역 단위 | 전체 | 문장 단위 |
프로그램 실행속도 | 빠름 | 느림 |
실행파일 생성 여부 | O | X |
메모리 할당 여부 | O(실행파일을 생성하므로) | X |
에러 발생 | 전체 코드를 변환 후 에러 보고 | 에러가 나면 그 이후의 코드는 실행안됨. |
언어 | C, C++, Java | 스크립트 언어 - Python, HTML, JS, Ruby 등 .. |
결국은 둘 다 고급언어를 기계어로 바꾸는 프로그램인데, 왜 각각 존재하는 걸까 ??? 이유가 있을거야 분명!
컴파일러가 존재하지만, 인터프리터가 나온 이유는 ??
=> 만약, 굉장히 큰 소스 코드라면, 해당 파일을 컴파일하기 위해서는 엄청난 시간이 걸릴 것.
=> 만약, 컴파일 시간이 5분이 걸린다면, 코드를 5번 업데이트하면 총 컴파일 시간은 25분이 소요 .. 이 경우, 인터프리터를 사용한다면 컴파일 시간을 줄일 수 있음.
참조
'Computer Science' 카테고리의 다른 글
[CS] 3. 메모리와 디스크의 핵심: 순차 논리 (컴퓨터 구조와 프로그래밍) (0) | 2021.08.28 |
---|---|
[CS] Base64 인코딩에 대해 - 컴퓨터 내부의 언어 체계 (0) | 2021.07.31 |
[CS] 아스키코드(ASCII), 유니코드(Unicode), UTF-8 에 대해 - 컴퓨터 내부의 언어 체계 (0) | 2021.07.31 |