[python] PyPy가 표준 Python에 포함되지 않은 이유는 무엇입니까?

나는 PyPy 를보고 있었고 왜 그것이 주요 파이썬 배포판에 채택되지 않았는지 궁금합니다. JIT 컴파일 및 메모리 사용량 감소와 같은 것이 모든 Python 코드의 속도를 크게 향상시키지 않습니까?

간단히 말해서 PyPy의 주요 단점은 별도의 프로젝트로 유지되게하는 것입니까?



답변

PyPy는 CPython의 포크가 아니므로 CPython에 직접 병합 될 수 없습니다.

이론적으로 파이썬 커뮤니티는 PyPy를 보편적으로 채택 할 수 있고, PyPy는 참조 구현이 될 수 있으며 CPython은 중단 될 수 있습니다. 그러나 PyPy에는 자체 약점이 있습니다.

  • CPython은 C로 작성된 Python 모듈과 쉽게 통합 할 수 있으며, 이는 일반적으로 Python 응용 프로그램이 CPU를 많이 사용하는 작업을 처리하는 방식입니다 (예 : SciPy 프로젝트 참조).
  • PyPy JIT 컴파일 단계 자체는 CPU 시간을 요합니다. 컴파일 된 코드를 반복적으로 실행해야만 전체적으로 더 빨라집니다. 즉, 시작 시간이 더 길어질 수 있으므로 PyPy가 글루 코드 또는 사소한 스크립트를 실행하는 데 반드시 효율적일 필요는 없습니다.
  • PyPy와 CPython의 동작은 모든면에서 동일하지 않으며, 특히 “구현 세부 사항”(언어에 의해 지정되지 않았지만 실제적인 수준에서 여전히 중요한 동작)과 관련하여 동일합니다.
  • CPython은 PyPy보다 더 많은 아키텍처에서 실행되며 PyPy에 비실용적 인 방식으로 임베디드 아키텍처에서 실행되도록 성공적으로 조정되었습니다.
  • 메모리 관리를위한 CPython의 참조 카운팅 체계는 PyPy의 다양한 GC 시스템보다 예측 가능한 성능 영향을 미칠 수 있지만 모든 “순수한 GC”전략에 반드시 해당되는 것은 아닙니다.
  • PyPy는 Python 3.x를 아직 완벽하게 지원하지는 않지만 활성 작업 항목입니다.

PyPy는 훌륭한 프로젝트이지만 CPU를 많이 사용하는 작업의 런타임 속도는 모든 것이 아니며 많은 응용 프로그램에서 가장 걱정되는 것은 아닙니다. 예를 들어 Django는 PyPy에서 실행할 수 있으며 템플릿을 더 빠르게 만들 수 있지만 CPython의 데이터베이스 드라이버는 PyPy보다 빠릅니다. 결국, 어떤 구현이 더 효율적인지는 주어진 응용 프로그램의 병목 현상 위치에 달려 있습니다.

또 다른 예 : PyPy가 게임에는 유용 ​​할 것이라고 생각하지만 PyPy에서 사용되는 것과 같은 대부분의 GC 전략은 눈에 띄는 지터를 유발합니다. CPython의 경우 대부분의 CPU 집약적 게임 항목은 PyGame 라이브러리로 오프로드됩니다. PyGame은 주로 C 확장으로 구현되므로 PyPy는 활용할 수 없습니다 (pygame-cffi 참조). 나는 여전히 PyPy가 게임을위한 훌륭한 플랫폼 일 수 있다고 생각하지만 실제로 사용되는 것을 본 적이 없습니다.

PyPy와 CPython은 근본적인 디자인 질문에 대해 근본적으로 다른 접근 방식을 취하고 있으며 다른 절충점을 가지므로 모든 경우에 어느 쪽도 다른 쪽보다 “더 나은”것은 아닙니다.


답변

우선, Python 2.x와 100 % 호환되지 않으며 3.x에 대한 예비 지원 만 있습니다 .

PyPy가 제공하는 Python 구현은 그들이 만든 프레임 워크를 사용하여 생성되는데, 이는 매우 시원하지만 기존 CPython 구현과는 완전히 다릅니다. 완전히 교체해야합니다.

PyPy와 CPython 간에는 매우 구체적인 차이점 이 있습니다. 확장 모듈 이 어떻게 지원되는지는 큰 문제입니다. 표준 라이브러리를 넘어서고 싶다면 큰 문제입니다.

PyPy가 보편적으로 빠르지 않다는 점도 주목할 가치가 있습니다.


답변

Guido van Rossum의이 비디오를 보십시오 . 그는 당신이 12 분 33 초에 당신이 물었던 동일한 질문에 대해 이야기합니다.

하이라이트:

  • 파이썬 3 호환성 부족
  • 확장 지원 부족
  • 접착제 코드로 적합하지 않음
  • 속도가 전부는 아니다

결국, 그는 결정할 사람입니다 …


답변

한 가지 이유는 PyPy 사이트 에 따르면 현재 32 비트 및 64 비트 Intel x86 아키텍처에서만 실행되고 CPython은 다른 플랫폼에서도 실행되기 때문입니다. PyPy의 플랫폼 별 속도 향상 때문일 수 있습니다. 속도는 좋지만 사람들은 종종 언어 구현이 가능한 한 “플랫폼 독립적”이되기를 원합니다.


답변

더 많은 통찰력을 얻으려면 David Beazley 의이 기조 연설을 시청하는 것이 좋습니다 . PyPy의 자연 및 복잡성을 명확하게하여 귀하의 질문에 답변합니다.


답변

여기에 언급 된 모든 것 외에도 PyPy는 버그 측면에서 CPython만큼 강력하지 않습니다. SymPy를 사용하면 지난 몇 년 동안 PyPy에서 출시 된 버전과 야간에 약 12 ​​가지의 버그가 발견되었습니다.

반면 CPython에서는 버그가 하나만 발견되었으며 시험판에있었습니다.

또한 Python 3 지원 부족을 할인하지 마십시오. 핵심 Python 커뮤니티의 어느 누구도 더 이상 Python 2에 관심이 없습니다. 그들은 파이썬 3.4에서 다음 큰 일을하고 있는데, 파이썬 3의 다섯 번째 주요 릴리스가 될 것입니다. 그래서 그들은 경쟁자가되기 전에 할 일이 있습니다.

내가 틀리지 마 파이 파이는 대단합니다. 그러나 여전히 많은 중요한 방법으로 CPython보다 나은 것은 아닙니다.

그런데 PyPy에서 SymPy를 사용하면 더 작은 메모리 공간 (또는 속도 향상)이 표시되지 않습니다. https://bitbucket.org/pypy/pypy/issues/1447/을 참조 하십시오 .


답변