PyPy
1. 개요
PyPy는 동적 언어 구현을 위한 프레임워크로, 파이썬 프로그래밍 언어의 호환 가능하고 빠른 구현을 목표로 한다. RPython이라는 파이썬의 제한된 부분 집합으로 PyPy 인터프리터를 작성하여, JIT 컴파일러를 생성하는 기술을 사용한다. PyPy는 Python뿐만 아니라 다른 동적 프로그래밍 언어의 구현을 위한 툴킷으로도 사용될 수 있으며, Python 2.7과 3.10 버전을 지원한다. 2007년 공식 릴리스 1.0 버전을 발표했으며, 지속적인 개발을 통해 CPython과의 호환성을 개선해왔다. PyPy는 유럽 연합, 구글, 파이썬 소프트웨어 재단 등으로부터 자금 지원을 받아왔다.
| 이름 | PyPy |
|---|---|
| 종류 | 파이썬 인터프리터 및 컴파일러 툴체인 |
| 프로그래밍 언어 | RPython |
|---|
| 첫 릴리스 | 2007년 중반 |
|---|
| 운영 체제 | 크로스 플랫폼 |
|---|---|
| 라이선스 | MIT 라이선스 |
| 웹사이트 | PyPy 공식 웹사이트 |
|---|
-
파이썬 구현 -
사이썬
사이썬은 파이썬 문법에 C 언어의 정적 타입 선언을 추가하여 성능을 향상시키는 프로그래밍 언어이자 컴파일러로, 파이썬과 C/C++ 라이브러리 간 연동을 용이하게 하여 과학 컴퓨팅 라이브러리에서 활용된다. -
파이썬 구현 -
스택리스 파이썬
스택리스 파이썬은 파이썬 인터프리터 내에서 마이크로 스레드를 이용해 프로그램 실행을 관리하는 그린 스레드 형태로서, 이벤트 기반 비동기 프로그래밍의 대안으로 사용되며, CPython의 GIL로 병렬 처리는 불가하지만 greenlet을 통해 그린 스레딩 솔루션을 제공한다. -
파이썬 소프트웨어 -
패키지킷
패키지킷은 다양한 리눅스 배포판에서 패키지 설치, 업데이트 및 관리를 단순화하기 위해 서로 다른 패키지 관리 시스템을 통합하여 일관된 인터페이스를 제공하는 시스템이다. -
파이썬 소프트웨어 -
Trac
Trac은 웹 기반 프로젝트 관리 및 버그 추적 시스템으로, 티켓 관리, 버전 관리, 위키 기능을 통합하고 Subversion, Git 등 다양한 버전 관리 시스템과 연동되며 플러그인으로 기능 확장이 가능하다. -
MIT 라이선스 소프트웨어 -
MS-DOS
MS-DOS는 마이크로소프트가 개발한 개인용 컴퓨터용 디스크 운영 체제로, IBM PC의 표준 운영 체제로 널리 사용되었으며, 단일 작업 환경과 명령줄 인터페이스를 특징으로 한다. -
MIT 라이선스 소프트웨어 -
Zcash
Zcash는 존스 홉킨스 대학교 연구를 기반으로 개발된 익명성 강화 암호화폐로, zk-SNARK 영지식 증명을 통해 거래 당사자의 익명성을 보장하지만, 범죄 악용 우려와 규제 대상 가능성이 존재한다.
2. 상세 및 프로젝트의 동기
PyPy는 동적 언어 구현을 위한 공통 번역 및 지원 프레임워크를 제공하며, 언어 명세와 구현 측면 간의 명확한 분리를 강조한다. 또한 소프트웨어 프레임워크를 사용하여 파이썬 프로그래밍 언어의 호환 가능하고 유연하며 빠른 구현을 제공하여, 낮은 수준의 세부 정보를 인코딩하지 않고도 새로운 고급 기능을 사용할 수 있도록 한다.
PyPy는 파이썬 처리기 상에서 동작 가능하며, 파이썬의 제한적인 구현인 RPython으로 구현되었다. 따라서 PyPy 내부 개선 영역 파악 및 개발자의 다양한 실험적 구현 시도가 용이하다.
PyPy는 파이썬뿐만 아니라 일반적인 동적 프로그래밍 언어 구현을 위한 툴킷 및 프레임워크로도 사용될 수 있다. 언어 사양 정의와 구체적이고 낮은 수준의 구현 분리가 가능하다. 파이썬 이외의 언어를 구현한 예로, PyPy로 구현된 Ruby 처리기인 Topaz가 있다.
PyPy의 목적 중 하나는 파이썬의 유연하고 빠른 구현을 만드는 것이다. 제공된 프레임워크를 사용하면 낮은 수준의 세부 사항을 고려하지 않고도 고도화된 기능을 구현할 수 있다.
2.1. RPython
PyPy 인터프리터는 RPython (Restricted Python)이라는 파이썬의 제한된 부분 집합으로 작성되었다. RPython은 변수의 유형이 컴파일 시간에 타입 추론될 수 있도록 파이썬 언어에 몇 가지 제약 조건을 둔다. RPython은 픽시와 같은 비 Python 언어 구현을 작성하는 데에도 사용된다.
2.2. JIT 컴파일러
PyPy는 트레이싱 실행 시 컴파일 (트레이싱 JIT)을 채용하고 있다. 특징적인 것은, 실행되는 코드에 JIT 컴파일을 적용하는 것이 아니라, 처리계의 코드를 JIT 컴파일로 특수화하는 것이다. 이 기법은 통상적인 JIT보다 성능이 더 좋다는 것이 실험으로 밝혀졌기 때문에 채용되었다. PyPy는 이 기법을 Meta-tracing JIT라고 부르고 있다.
3. 프로젝트 현황
PyPy는 버전 7.3.17 기준으로 CPython 2.7과 3.10 두 가지 버전을 지원한다. CPython v3와 호환되는 최초의 PyPy 버전은 2014년에 나온 PyPy v2.3.1이다. CPython v3와 호환되는 PyPy 인터프리터는 PyPy3라고도 부른다.
PyPy는 32비트/64비트 x86 및 32비트/64비트 ARM 프로세서에서 JIT 컴파일을 지원한다. 윈도우, 리눅스, OpenBSD 및 Mac OS X에서 매일 밤 테스트를 거친다. PyPy는 구현 관련 기능을 사용하지 않는 순수 Python 소프트웨어를 실행할 수 있다.
CPython C API 확장 기능을 위한 호환성 계층인 CPyExt가 있지만, 아직 불완전하고 실험적인 상태이다. C 공유 라이브러리와 인터페이스하는 선호되는 방법은 내장 C 외부 함수 인터페이스 (CFFI) 또는 ctypes 라이브러리를 사용하는 것이다.
4. 역사
PyPy는 Psyco 프로젝트의 후속작으로, 스코프를 갖춘 JIT 특수화 컴파일러를 갖는 것을 목표로 했다. 연구 개발 중심 프로젝트에서 시작하여, 2007년 중반에 성숙 단계에 도달하여 공식 1.0 버전을 출시했다. PyPy의 주요 연혁은 다음과 같다.
| 연도 | 내용 |
|---|---|
| 2008년 8월 | 파일론스(Pylons), 파이글렛(Pyglet), Nevow 및 장고(Django)와 같은 인기 있는 Python 라이브러리 실행 지원 |
| 2010년 3월 12일 | 속도에 초점을 맞춘 PyPy 1.2 출시. 안정적이지는 않지만 작동하는 JIT 컴파일러 포함 |
| 2011년 4월 30일 | PyPy 버전 1.5 출시, CPython 2.7과의 호환성 달성 |
| 2013년 5월 9일 | PyPy 2.0 출시, ARMv6 및 ARMv7 JIT에서 알파 품질의 JIT 컴파일 지원 도입, CFFI를 표준 라이브러리에 포함 |
| 2014년 6월 20일 | PyPy3 안정 버전 선언, Python 3 호환성 도입. PyPy 2.3.1과 함께 출시 |
| 2017년 3월 21일 | PyPy와 PyPy3의 버전 5.7 출시, PyPy3는 Python 3.5에 대한 베타 품질 지원 도입 |
| 2018년 4월 26일 | 버전 6.0 출시, Python 2.7 및 3.5 지원 (Windows에서는 여전히 베타 품질) |
| 2019년 2월 11일 | 버전 7.0 출시, Python 2.7 및 3.5 지원 |
| 2019년 10월 14일 | 버전 7.2 출시, Python 3.6.9 지원 |
| 2019년 12월 24일 | 버전 7.3 출시, Python 3.6.9 지원 |
| 2020년 2월 16일 | 소스 코드 호스팅을 Bitbucket에서 heptapod.net으로 이전, CFFI 프로젝트 저장소 이전 발표. 새로운 로고와 웹사이트 디자인 공개 (새로운 로고의 저작자와 라이선스는 미상) |
| 2023년 12월 29일 | 호스팅이 GitHub로 이전, 개발은 이제 git으로 추적 |
4.1. 자금 지원
PyPy는 2004년 12월부터 2007년 3월까지 유럽 연합의 특정 목표 연구 프로젝트로 자금 지원을 받았다. 2008년 6월, 구글 오픈 소스 프로그램의 일환으로 PyPy에 자금 지원을 발표했으며 CPython과의 호환성을 높이는 데 주력하기로 합의했다. 2009년, 중소기업에 특화된 유럽 연합 자금 지원 기관인 Eurostars는 "PYJIT - PyPy 기반의 동적 프로그래밍 언어를 위한 빠르고 유연한 툴킷"이라는 PyPy 프로젝트 멤버들의 제안을 수락했다. Eurostars의 자금 지원은 2011년 8월까지 지속되었다.
PyCon US 2011에서 파이썬 소프트웨어 재단은 PyPy가 언어의 최신 버전과의 성능 및 호환성 작업을 계속할 수 있도록 10000USD의 보조금을 지급했다.
ARM 아키텍처로의 포팅은 라즈베리 파이 재단의 부분적인 지원을 받았다.
PyPy 프로젝트는 또한 상태 블로그 페이지를 통해 기부를 받는다. 2013년 현재, 파이썬 3 버전 호환성, 수치 계산을 위한 내장 최적화 NumPy 지원 및 더 나은 병렬 처리를 가능하게 하는 소프트웨어 트랜잭션 메모리 지원 등 다양한 하위 프로젝트에 자금이 지원되었다.