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의 경우 코드 분석& 최적화 시간을 소요하기 때문이다.



댓글

이 블로그의 인기 게시물

실무진 면접 경험으로 정리하는 백엔드 (1) : 에듀 테크 기업 면접

노마드코더 개발자북클럽 Clean code 완주, 독후감

Blogger 커스터마이징 : CSS 수정 (sticky-header)