pypy3
Pypy3
Pypy = RPython으로 작성된 ( Interpreter + JIT compiler )
2007년 구현된 python의 언어 구현 중 하나.
c로 짜인 python의 기본 구현인 cpython과는 다르게
pypy는 python으로 python을 구현했다.
성능면에서 cpython을 능가하는 케이스가 많다.
코테에서
통과돼야하는 시간복잡도를 가진 로직인데도 불구하고
python3 인터프리터로 통과가 안 될 때
input 문법을 pypy3 문법으로 바꾸고 인터프리터로 pypy3를 사용하여 채점할 때
더 빠른 시간 내에 정답을 내는 것을 볼 수 있다.
GCC( = C/C++로 만든 C/C++ 컴파일러 ) 와 같이
자신의 언어로 스스로를 구현하는 부트스트래핑을 사용하는데
부트스트래핑은 어셈블리어로 최적화를 하는 것보다 생산성이 좋다.
pypy 실행 절차
- RPython(= Restricted Python) 해석기를 Python으로 작성.
동적 타이핑 언어인 파이썬에서
엄격한 파이썬 문법으로 컴파일되게한다. - Toolchain이 Rpython 함수를 그래프형태의 Control Flow Graph로 번역
- 다양한 언어를 지원하는 pypy-backend에서- C- LLVM IR- pypy.js- jython
- ironpython 등의
타깃 코드로 번역 - 해당 언어의 컴파일러가 실행파일로 컴파일하는 과정에서
CPython보다 효율적인 실행파일을 생성한다. - JIT 컴파일을 통해 최적화된 기계어를 실행하며
python runtime 상에서 실행속도를 높인다.
Pypy의 JIT와 CPython의 Interpreter
JIT 컴파일 대 인터프리팅
- JIT는 "hot code"를 찾아내는 등의 최적화 과정을 거친 기계어로 바꿈
- Cpython은 한 줄 한 줄 읽어가며
stack based VM에서 python bytecode(.pyc)를 실행한다.
python bytecode 이전에는 ast가 존재하는데
python 소스코드로부터 ast를 생성한다.
- Cpython의 경우 기계어로의 compile step이 없기 때문에
시작 시간은 pypy보다 빠르다.
pypy의 경우 코드 분석& 최적화 시간을 소요하기 때문이다.
댓글
댓글 쓰기