[Python]인터프리터언어?컴파일러언어?

이성훈·2021년 9월 9일
0

PYTHON

목록 보기
1/2
  • compiler : high-lvl prgming language를 low-lvl prgming language(기계어)로 바꾸는, 소스코드를 실행가능한 CPU명령어로 바꾸는 언어 번역 프로그램이다.
  • interpreter : compiler와 다르게, 한번에 한줄씩 읽으며, 기계어가 아닌 중간형태로 번역후 실행한다.

요즘에는 컴파일러와 인터프리터간의 간극이 줄어들고있다. 사실, 프로그래밍언어를 정확히 인터프리터언어인지, 컴파일러언어인지 구분하는것은 명확하지도, 쉽지도 않다.

예로들면 JIT(Just-In-Time, 동적번역)Compiler 라는, compile 속도를 높이기 위해 소스코드를 ByteCode로 변환한뒤 기계어로 번역하게 되는데,
이때 정적 컴파일 방식과 인터프리터의 번역하면서 기계어 코드를 생성하는 방식이 혼용된 형태이다. 분류 하자면 컴파일기법에 해당한다.
실제로 최근 JVM, .NET, V8등에서 지원하는 기능이다. (복잡한설명은 피하겠음)

또한, 소스코드를 기계어로만 번역하는것이 compile 이아니다.
javascript8을 javascript5로 번역하는것도 일종의 compile에 해당한다.

본론으로 돌아가서, Python도 compile을 수행한다.
프로그래머가 작성한 소스코드는 ByteCode로 변환되고, 이것은 CPU명령어로 볼수있지만, VM(Virtual Machine)이 대신 이것을 실행한다.
(Java에선 VM이 중점이지만, Python은 Interpreter가 중점인 차이다.ITPTER,VM둘다 존재한다.)

Python에는 CPython(얘 또한 인터프리터면서 컴파일러이다.) 내부의 머신코드를 Disassemble 하여 ByteCode로 보여주는 dis 모듈이 존재한다.
이를 통해 내부적으로 Python의 작동 방식을 엿볼수있는데, 자세한 과정은 새로 포스팅하여 정리하겠다.



def func():
    return ~1

위와 같은 소스코드는 아래의 bytecode로 변환된다.

 1           0 LOAD_CONST               1 (1)
              2 UNARY_INVERT
              4 RETURN_VALUE


**결론 :** * 현재 컴파일러와 인터프리터간의 기술적 장벽이 무너진상태이다. * 대부분의 프로그래밍언어는 컴파일러와 인터프리터 둘다 사용하는 경우가 흔하다.

밑으로는 한번쯤 보면 유익할 compile 어원의 유래이다.
https://www.facebook.com/devkoreaenglish/posts/834541999996046

profile
I will be a socially developer

0개의 댓글