1. 파이썬이란?
1-1. 파이썬은 크게 두가지 의미에서 사용된다
- 프로그래밍 언어 Python의 언어 사양 - 문법이나 작동방식등을 모아둔 것
- 언어의 사양에 따른 처리방식의 대표격 CPython
- 귀도 반 로섬이 개발한 본체 CPython의 처리계통을 말한다.
- 이번 글에서는 CPython을 기준으로 운영체제는 리눅스(도커)를 사용한다.
1-2. 그 외의 파이썬 인터프리터 예시
- PyPy : 파이썬으로 실행되는 파이썬
- Jython : 자바로 실행되는 파이썬
- Pyodide : WebAssembly를 대상으로 하는 파이썬
2. 프로그래밍 언어의 실행방식
2-1. 인터프리터 방식
- 소스 코드를 한줄 씩 읽어가며 순차적으로 해석하며 움직이는 실행방식
- 이 순차 해석을 실행하는 프로그램을 인터프리터라고 부른다
- 스크립트 형식의 언어에 많이 사용되며, Python, Ruby, JavaScript 등이 있다.
2-2. 컴파일 방식
- 소스코드를 사전에 기계어로 변환 - 컴파일 - 하고나서 실행하는 방식
- C, C++, Go, Rust등이 있다.
하지만 위의 방식들은 어디까지나 간단하게 범주를 나눈 것으로, 실제로는 입력 형식이나 결과물에 따라 다양한 중간 표현식도 자주 사용.
3. 파이썬이 실행될 때에 대한 간략한 개요
def hello():
#This is a comment line
print("Hello, world")
if __name__ == "__main__":
hello()
3-1. 프로그래밍 언어와 소스 코드
- 프로그램의 소스코드는 다른 문자열
- 문자열에 의미를 가지게 하는 것을 언어라고 부른다
- 예를 들어 "1+2"는 수식인지, 한국어인지, 파이썬의 코드인지 아니면 자바스크립트의 코드인지 모른다.
- 언어에 따라 같은 문자열이라도 해석이 달라진다
- 언어 중에서도 특히 컴퓨터에게 해석을 부탁하는 것이 프로그래밍 언어
3-2. 프로그래밍 언어와 추상구문트리
- 프로그래밍 언어는 소스코드의 문자열을 해체해서 컴퓨터가 해석하기 쉬운 형식으로 교환하는 것이 필수적이라고 볼 수 있다.
- 이 교환을 하는 과정을 Parse(파스)라고 부르며, 이것을 실행하는 것을 Parser(파서)라고 부른다
- 컴퓨터가 해석하기 쉬운 형태 = Abstract Syntax Tree, AST
- 프로그래밍언어는 인간이 AST를 구축하기 쉽게 하기위해 존재한다.
- 이때 파이썬의 파서는 파이썬 3.9 이전과 이후로 나뉜다.
- 파이썬 3.9부터는 PEG - Parsing Expression Grammer, PEP617 - 파서를 사용한다.
- 그 이전에는 LL(1)파서가 이용되었고, 이 파서는 Python 3.10에서 삭제된다.
- 이 글에서는 3.11.0을 사용한다
- 주된 흐름은 "구문분석 -> 토큰화 -> 추상화 -> AST -> 컴파일 -> 바이트 코드 -> 실행"으로 이루어진다.
- 이때 토큰화를 할 때, Tokenize Module이 그 역할을 해준다.
- 표준 라이브러리인 tokenize모듈은 파이썬 소스코드를 토큰으로 분해해서 출력한다.
- 토큰은 의미를 가지는 최소 단위
- 그 후 추상화를 할 때, AST Module이 그 역할을 해준다.
- 표준 라이브러리인 AST모듈은 파이썬 소스코드를 추상화해서 출력한다.
- AST는 프로그램으로서 의미를 가지는 정보를 구조체로 표현한 것으로, 이 때 주석은 포함되지 않는다.
- 그 후 바이크 코드로 변환할 때, dis Module이 그 역할을 해준다.
- 파이썬 바이트 코드를 역 어셈블한(합친) 결과를 출력
- 파이썬 바이트 코드는 Python VM(가상머신)이 해석한 기계어
정리하자면 다음과 같다
"구문분석 -> 토큰화(tokenize Module)->
추상화 -> AST(AST Module) ->
컴파일 -> 바이트 코드(dis Module) -> 실행"
3.2 파이썬 가상머신에 의한 바이트코드 실행
- 파이썬 가상머신은 파이썬의 바이트 코드를 순차 실행하는 가상 머신이다.
- 실제 컴퓨터에서는 CPU가 메모리상의 기계어를 순차실행하고 있다.
- 실제 코드는 Python/ceval.c에 기술되어 있는 거대한 루프이다.
- 기억 영역에 스택 구조를 사용하는 스택 머신이라고 불리는 계산 모델이다.
728x90
반응형
'Python > ETC' 카테고리의 다른 글
[공지] 파이썬 웹 프레임워크 정리 페이지 프로젝트 (0) | 2023.04.26 |
---|---|
[번역] 장고(Django)와 플라스크(Flask) : 2023년 어떤 것을 선택해야 하는가? 1편 (0) | 2023.04.20 |
[파이썬 기본 다지기] Python에서 변수를 Print할 때 쓰는 방법들 (0) | 2023.04.15 |
[EuroPython] 어떻게 Python 3.11은 빨라질 수 있었을까? 2편 - dictionary (0) | 2023.01.27 |
[EuroPython] 어떻게 Python 3.11은 빨라질 수 있었을까? 1편 (2) | 2023.01.27 |