Machine Language(0&1) -> Assembly -> Higher-level Language 순으로 인간 친화적이며 개발이 쉽다.
Higher-level language 중에서도 C-C++-Java-Python 등의 순서로 더 higher level이다.
Higher-level language일수록 개발이 쉽지만, 컴퓨터와는 친화적이지 않고, 즉시 실행할 수 없다.
따라서 high-level language를 lower level로 바꿔주는 Language Translation이 필요하다.

1. Language Translation
: 소스코드를 semantically-equivalent target code로 전환한다. (Assembly / machine language)
2. Error detection
: Translation 과정에서, 소스코드의 에러를 감지하고 보고한다.
| Complier | Interpreter |
|---|---|
| 전체 소스 프로그램을 translate함 | 하나의 statement만 translate함 |
| 프로그램 실행 전에 한번만 translate함 | statement 실행 한번 당 한번 Translate함 |
| 소스 프로그램과 equivalent한 target program을 생성함 | statement와 equivalent한 Target code를 생성함 |
| C, C++ 등 | Javascript 등 |
| Runtime 실행시간이 더 빠름 | 이식성, 유연성이 높음 디버깅, 개발이 용이함 |

Java나 Python같은 언어에서는 빠른 execution time을 위한 compliation과 높은 이식성을 위한 interpretation을 모두 사용한다.
