본문 바로가기
파이썬/기초문법

Python 인터프리터 vs 컴파일러 / Is Python interpreted or compiled? Yes 번역

by 행복론자 2020. 4. 20.

Python이 인터프리터 언어냐 컴파일 언어냐는 질문은 자주 등장하지만 이에 대해 쉽게 답을 내릴 수 없습니다.

세상은 생각보다 복잡하기 때문입니다.

 

컴파일(compile) 한다는 것은 우리가 작성한 소스코드를 컴퓨터가 실제로 실행할 수 있는 binary 코드로 바꾼다는 의미입니다. (CPU 명령어) 

예를 들어 C언어로 만든 코드를 실행할 때는 컴파일 작업이 필요합니다. 

 

반대로 인터프리트(interpreted)의 의미는 우리가 만든 소스코드를 한줄 한줄 해석해 실행하는 것을 말합니다.

 

우리가 흔히 프로그래밍 언어를 인터프리터/컴파일러 두가지로 구분하려고 하지만 단순히 그렇게 나누기에는 너무 제한적입니다.

보통 컴파일한다는 것은 인간에게 친숙한 high level language 소스를 기계어로 바꿔준다고 생각하지만 

Javascript8을 Javascript5로 바꿔주는 것도 일종의 컴파일입니다.

 

그런 의미에서 Python도 컴파일 작업을 수행합니다.

프로그래머가 작성한 코드는 bytecode로 변환되며 이는 CPU명령어와 비슷합니다. 하지만 CPU가 직접 실행하는 것이 아니라 VM이 이 변환된 코드를 실행합니다.

 

간단한 Python code와 이에 해당하는 bytecode를 보겠습니다. 

import dis


def example(x):
    for i in range(x):
        print(2 * i)


dis.dis(example)

 

 

위 코드 수행 결과입니다. 기계어처럼 생겼지만 완벽한 기계어는 아닙니다. 

  3           0 SETUP_LOOP              34 (to 37)
              3 LOAD_GLOBAL              0 (range)
              6 LOAD_FAST                0 (x)
              9 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
             12 GET_ITER
        >>   13 FOR_ITER                20 (to 36)
             16 STORE_FAST               1 (i)

  4          19 LOAD_GLOBAL              1 (print)
             22 LOAD_CONST               1 (2)
             25 LOAD_FAST                1 (i)
             28 BINARY_MULTIPLY
             29 CALL_FUNCTION            1 (1 positional, 0 keyword pair)
             32 POP_TOP
             33 JUMP_ABSOLUTE           13
        >>   36 POP_BLOCK
        >>   37 LOAD_CONST               0 (None)
             40 RETURN_VALUE

 

 

dis는 Python 기본 내장 패키지로 Python bytecode를 보여줍니다. 

Python의 컴파일 방식은 은연중에 이루어집니다. 단순히 .py 파일을 실행시키면 됩니다. 

Python은 필요한만큼만 컴파일을 수행합니다. 이는 Java와 다른 점입니다.

예를 들어 Java 소스를 실행하려고 하면 Java 컴파일러를 수행해서 Java 소스를 컴파일된 class 파일로 만들어야 합니다. 이런 이유로 Java는 compiled 언어로 불립니다. 반면에 Python은 이런 과정을 거치지 않는 것처럼 보여져 interpreted 언어로 불리지만

두 언어 모두 똑같이 작성된 코드를 bytecode로 바꿔주는 작업 이후 VM을 통해 코드를 실행합니다.

 

Python의 특징중 하나로 신속하게 실행된다는 점이 있는데 이는 보통 compiled 언어에서는 보기 드문 특성입니다.

하지만 Python 역시 작성된 코드를 bytecode로 바꿔줍니다.

 

결론적으로 특정 프로그래밍 언어로 작성된 코드가 어떻게 실행되냐는 단순히 언어적인 특성이 아니라 

언어가 구현체 따라 다르다고 볼 수 있습니다. 

 

예를 들어 우리가 흔히 사용하는 Python은 C로 만들어진 CPython이지만 just-in-time (JIT) 방식을 사용한 PyPy는 다른 구현체로써 CPython 보다 훨씬 더 빠릅니다. 

 

그래서 Python이 컴파일 언어냐고 묻는다면? 맞습니다. 

또 그럼 Python이 인터프리터 언어냐고 묻는다면? 맞습니다. 

세상은 그렇게 단순하지 않습니다.. 

 

(의역/생략 많음)

원문 : 

https://nedbatchelder.com/blog/201803/is_python_interpreted_or_compiled_yes.html

 

Is Python interpreted or compiled? Yes.

Thursday 29 March 2018A common question: “Is Python interpreted or compiled?” Usually, the asker has a simple model of the world in mind, and as is typical, the world is more complicated.In the simple model of the world, “compile” means to convert a progra

nedbatchelder.com

 

반응형
이 포스팅은 쿠팡파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

댓글