"PyPy는 Python에서 Python을 다시 구현 한 것입니다"는 기술적으로 사실이지만 PyPy, IMHO를 설명하는 다소 잘못된 방법입니다.
PyPy에는 두 가지 주요 부분이 있습니다.
- 번역 프레임 워크
- 통역
번역 프레임 워크는 컴파일러입니다. RPython 코드를 C (또는 다른 대상)로 컴파일 하여 가비지 수집 및 JIT 컴파일러와 같은 측면을 자동으로 추가합니다. 그것은 할 수 없습니다 임의의 파이썬 코드 만 RPython을 처리합니다.
RPython은 일반적인 Python의 하위 집합입니다. 모든 RPython 코드는 Python 코드이지만 다른 방법은 아닙니다. RPython은 기본적으로 "PyPy의 번역 프레임 워크로 번역 할 수있는 Python의 하위 집합"이기 때문에 RPython에 대한 공식적인 정의는 없습니다. 그러나 번역하기 위해서는 RPython 코드를 정적으로 입력해야합니다 (유형은 유추되지 않지만 선언하지는 않지만 변수마다 엄격하게 하나의 유형입니다). 선언 / 수정 / 런타임시 클래스.
인터프리터는 RPython으로 작성된 일반적인 파이썬 인터프리터입니다.
RPython 코드는 일반적인 Python 코드이므로 모든 Python 인터프리터에서 실행할 수 있습니다. 그러나 PyPy의 속도 주장 중 그 어느 것도 그런 식으로 실행하지 않습니다. 인터프리터를 번역하는 데 시간 이 오래 걸리기 때문에 테스트주기가 매우 빠릅니다 .
PyPyPy 또는 PyPyPyPy에 대한 추측은 실제로 의미가 없다는 것을 이해해야합니다. RPython으로 작성된 통역사가 있습니다. 파이썬을 빠르게 실행하는 C 코드로 변환합니다. 프로세스가 중지됩니다. 다시 처리하여 속도를 높일 수있는 RPython은 없습니다.
따라서 "PyPy가 CPython보다 빠를 수있는 방법"도 상당히 분명해졌습니다. PyPy는 JIT 컴파일러를 포함하여 더 나은 구현을 제공합니다 (일반적으로 JIT 컴파일러가 없으면 빠르지 않습니다. 즉, PyPy는 JIT 컴파일이 가능한 프로그램에 대해서만 빠릅니다). CPython은 파이썬 언어의 최적화 된 구현으로 설계되지 않았습니다 ( 차이점을 따르는 경우 최적화 된 구현 으로 만들려고하지만 ).
PyPy 프로젝트의 혁신적인 부분은 정교한 GC 스키마 또는 JIT 컴파일러를 직접 작성하지 않는다는 것입니다. 그들은 RPython에서 인터프리터를 비교적 간단하게 작성하며, 모든 RPython은 Python보다 낮은 수준이지만 여전히 C보다 훨씬 높은 객체 지향 가비지 수집 언어입니다. 그런 다음 번역 프레임 워크 는 GC 및 JIT와 같은 것을 자동으로 추가합니다. 번역 프레임 워크는 그래서 큰노력하지만 PyPy python 인터프리터에도 동일하게 적용되지만 구현이 변경되어 실험을 훨씬 더 자유롭게 수행하여 성능을 향상시킬 수 있습니다 (GC 버그 소개 또는 변경에 대처하기 위해 JIT 컴파일러 업데이트에 대한 걱정없이). 또한 Python3 인터프리터를 구현할 때 자동으로 동일한 이점을 얻습니다. PyPy 프레임 워크로 작성된 다른 모든 통역사 (다양한 연마 단계에 여러 가지가 있음). PyPy 프레임 워크를 사용하는 모든 인터프리터는 프레임 워크에서 지원하는 모든 플랫폼을 자동으로 지원합니다.
따라서 PyPy 프로젝트의 진정한 이점은 동적 언어를위한 효율적인 플랫폼 독립적 인터프리터 구현의 모든 부분을 가능한 한 많이 분리하는 것입니다. 그런 다음 한 곳에서 한 가지 좋은 구현을 생각해 내면 많은 통역사에서 재사용 할 수 있습니다. "지금 파이썬 프로그램이 더 빨리 실행됩니다"와 같은 즉각적인 승리는 아니지만 미래에 대한 큰 전망입니다.
그리고 파이썬 프로그램을 더 빨리 실행할 수 있습니다.