2023년 5월 16일 화요일

Interpreter, Compiler

Interpreter, Compiler


A compiler and an interpreter are tools used to translate code written in high-level languages into low-level languages (like machine code) that can be executed by a computer. While they perform similar tasks, they do so in very different ways.

Compiler 와 Interpreter 는 high-level languages(ex. JAVA, Python, PHP, C) 를 low-level languages(ex. 기계어)로 해석하여 컴퓨터가 수행할 수 있게 도와주는 도구이다. Compiler 와 Interpreter는 매우 다른 방식으로 비슷한 동작을 수행해간다. 이를 좀 자세하게 알아보자.


Compiler


A compiler is a program that translates code from a high-level programming language to a lower-level language (like machine code, or an intermediate bytecode). The main characteristic of a compiler is that it processes the entire program code before execution. It checks the entire program for syntax errors and only if it is error-free, it translates the code into machine language. This translated code is saved as an executable file (like .exe in Windows) and can be run independently of the original program.

Compiler 는 앞서 말했듯이, high-level programming language를 lower-level language(Machine code, 중간 바이트 코드)로 해석하는 프로그램이다. Compiler의 주된 특징은 프로그램이 실행전에 전체 코드를 처리한다. Compiler는 전체적인 구문 에러를 검사한 후에, 프로그램이 에러가 없다면, 그제서야 machine language로 변환한다. 그리고 이 변환된 코드는 윈도우의 .exe 파일과 같은 실행파일로 저장되며, 원본 프로그램과 별개로 독립적으로 실행할수 있다.

Pros


  1. Programs run faster because the code has already been translated into machine code. (프로그램 동작이 더 빠름. 이미 machine code로 작성되어있기 때문)
  2. Once compiled, the program can be distributed without its original source code. (한번 컴파일 되고 나면, 원본 소스코드와 분리된다.)

Cons


  1. The entire code needs to be recompiled even if there is a small change in the source code. (작은 소스코드의 변화에도 전체 소스가 다시 컴파일되어야한다.)
  2. Debugging is harder because errors show up after the entire code is compiled. The error messages might not directly relate to the original source code. (디버깅이 힘든데, 전체 소스가 컴파일 된 후에 에러들이 등장하기 때문. 이 때문에 에러 매새지들이 원래 소스 코드들에 직접적으로 연관되어 있지 않을 수 도 있다.)


Interpreter


An interpreter, on the other hand, translates high-level code into machine code line by line. It translates one instruction, then executes it, then moves to the next instruction. This means that the program does not need to be compiled before it is run.

반면에, Interpreter 는 high-level code 를 machine code 로 소스 코드 전체가 아닌 line 별로 바꾼다. 하나의 명령(instruction)을 변환하고 실행하고, 그 다음 명령(instruction)으로 이동하고 이런식으로 진행한다. 이 말은 즉, 프로그램을 실행하기 전에 컴파일을 필수적으로 할 필요가 없다는 말이다.

Pros


  1. Easier to debug, as it stops at the line where an error occurs. (에러가 발생했을 때, 해당 라인에서 멈춰서 디버깅하기 쉽다.)
  2. The program does not need to be recompiled every time a change is made. This makes the development process faster. ( 소스코드의 변화가 생길때 마다, 컴파일할 필요가 없다. 그래서 개발 과정이 좀 더 빨라진다.)

Cons


  1. Programs run slower because each line of code is translated as it is executed. (compiler 방식보다 프로그램이 늦게 동작하는데, 이유는 하나의 코드별로 실행되기 때문.)
  2. The source code must be distributed with the program, which may be undesirable in some situations. ( 소스코드가 분리 되어야한다. 컴파일을 안해서 별도의 프로그램이 생기는게 아니라 예기지 못한 결과가 생길 수 있다.)

댓글 없음:

댓글 쓰기