PyPy가 표준 Python에 포함되지 않은 이유는 무엇입니까?
저는 파이파이를 보고 있었는데 왜 메인 라인 파이썬 배포판에 채택되지 않았는지 궁금했습니다.JIT 컴파일과 낮은 메모리 설치 공간과 같은 것들이 모든 파이썬 코드의 속도를 크게 향상시키지 않을까요?
간단히 말해서, PyPy가 별개의 프로젝트로 남게 하는 주요 단점은 무엇입니까?
PyPy는 Cython의 포크가 아니므로 Cython에 직접 병합할 수 없습니다.
이론적으로 Python 커뮤니티는 PyPy를 보편적으로 채택할 수 있고, PyPy는 참조 구현이 될 수 있으며, CPython은 중단될 수 있습니다.그러나 PyPy에는 다음과 같은 단점이 있습니다.
- Cython은 C로 작성된 Python 모듈과 통합하기 쉬우며, 이는 Python 애플리케이션이 CPU 집약적인 작업을 처리하는 전통적인 방식입니다(예: SciPy 프로젝트 참조).
- PyPy JIT 컴파일 단계 자체는 CPU 시간을 소모합니다. 컴파일된 코드를 반복적으로 실행해야 전체적으로 더 빨라집니다.이는 시작 시간이 더 길 수 있다는 것을 의미하며, 따라서 PyPy가 글루 코드나 사소한 스크립트를 실행하는 데 반드시 그렇게 효율적이지는 않습니다.
- PyPy와 Cython 동작은 모든 면에서 동일하지 않으며, 특히 "실행 세부사항"(언어에 의해 지정되지는 않지만 실제 수준에서는 여전히 중요한 동작)에 관해서는 더욱 그렇습니다.
- Cython은 PyPy보다 더 많은 아키텍처에서 실행되며 PyPy에 비실용적인 방식으로 임베디드 아키텍처에서 실행되도록 성공적으로 조정되었습니다.
- 메모리 관리를 위한 Cython의 참조 계수 체계는 PyPy의 다양한 GC 시스템보다 예측 가능한 성능 영향을 미치지만 모든 "순수 GC" 전략에 반드시 해당되는 것은 아닙니다.
- PyPy는 아직 Python 3.x를 완전히 지원하지 않지만 활성 작업 항목입니다.
PyPy는 훌륭한 프로젝트이지만 CPU를 많이 사용하는 작업의 런타임 속도가 전부는 아니며 많은 애플리케이션에서 가장 적은 관심사입니다.예를 들어 Django는 PyPy에서 실행할 수 있으므로 템플릿 생성 속도가 빨라지지만 Cython의 데이터베이스 드라이버는 PyPy보다 빠릅니다. 결국 어떤 구현이 더 효율적인지는 특정 애플리케이션의 병목 현상이 어디에 있는지에 따라 달라집니다.
또 다른 예는 PyPy가 게임에 적합하다고 생각하겠지만, PyPy에 사용되는 것과 같은 대부분의 GC 전략은 눈에 띄는 지터를 유발합니다.CPython의 경우 CPU 집약적인 게임 자료의 대부분이 PyGame 라이브러리로 오프로드되는데, PyGame은 주로 C 확장으로 구현되기 때문에 PyPy가 이를 활용할 수 없습니다(pygame-cffi 참조).저는 여전히 파이파이가 게임을 위한 훌륭한 플랫폼이 될 수 있다고 생각하지만, 실제로 사용되는 것을 본 적이 없습니다.
PyPy와 CPython은 근본적인 설계 질문에 대한 접근 방식이 근본적으로 다르며 서로 다른 절충을 하기 때문에 어느 것도 모든 경우에서 다른 것보다 "더 나은" 것은 아닙니다.
우선 Python 2.x와 100% 호환되지 않으며 3.x에 대한 예비 지원만 있습니다.
PyPy가 제공하는 Python 구현은 그들이 만든 프레임워크를 사용하여 생성되며, 이는 매우 멋있지만 기존 CPython 구현과는 완전히 다릅니다.그것은 완전히 대체되어야 할 것입니다.
PyPy와 CPython 사이에는 몇 가지 매우 구체적인 차이점이 있는데, 확장 모듈이 어떻게 지원되는지에 대한 큰 차이점입니다. 표준 라이브러리를 넘어서려면 이 점이 중요합니다.
또한 PyPy가 보편적으로 더 빠르지는 않습니다.
Guido van Rossum의 이 비디오를 보세요.그는 12분 33초에 당신이 질문한 것과 같은 질문에 대해 말합니다.
주요 내용:
- Python 3 호환성 없음
- 연장 지원의 부족
- 글루 코드로 적합하지 않음
- 속도가 전부는 아닙니다.
결국, 그가 결정할 사람이고...
한 가지 이유는 PyPy 사이트에 따르면 현재 32비트 및 64비트 Intel x86 아키텍처에서만 실행되는 반면 CPython은 다른 플랫폼에서도 실행되기 때문일 수 있습니다.이것은 아마도 PyPy의 플랫폼별 속도 향상 때문일 것입니다.속도는 좋은 것이지만, 사람들은 종종 언어 구현이 가능한 한 "플랫폼 독립적"이기를 원합니다.
저는 더 많은 통찰력을 위해 데이비드 비즐리의 기조연설을 보는 것을 추천합니다.PyPy의 본질과 복잡성에 대한 명확성을 제공함으로써 질문에 답합니다.
여기서 언급된 모든 것 외에도, PyPy는 버그 측면에서 CPython만큼 견고하지 않습니다.SymPy를 사용하여 지난 몇 년 동안 PyPy에서 출시된 버전과 야상에서 약 12개의 버그를 발견했습니다.
반면에, 우리는 Cython에서 단 하나의 버그를 발견했고, 그것은 사전 공개된 것이었습니다.
또한 Python 3 지원의 부족을 과소평가하지 마십시오.핵심 파이썬 커뮤니티의 아무도 더 이상 파이썬 2에 대해 신경 쓰지 않습니다.그들은 파이썬 3의 다섯 번째 주요 릴리스가 될 파이썬 3.4의 다음 큰 것들을 연구하고 있습니다.파이파이 놈들은 아직도 그들 중 하나를 얻지 못했습니다.그래서 그들은 경쟁자가 되기 전에 따라잡아야 할 일이 있습니다.
오해하지 마세요.파이파이 대박.하지만 많은 중요한 면에서 CPython보다 낫다는 것은 아직 멀었습니다.
참고로 PyPy에서 SymPy를 사용하면 메모리 설치 공간이 줄어들거나 속도가 빨라지는 것을 볼 수 있습니다.https://bitbucket.org/pypy/pypy/issues/1447/ 을 참조하십시오.
언급URL : https://stackoverflow.com/questions/12867263/why-wasnt-pypy-included-in-standard-python
'programing' 카테고리의 다른 글
최대 평균을 찾는 방법 (0) | 2023.07.10 |
---|---|
import pymono로 인해 'ImportError: cannot name BSON'이 발생합니다.당신은 어떻게 수입 오류를 고칩니까? (0) | 2023.07.10 |
특정 커밋까지 당김 (0) | 2023.07.10 |
페이스북 앱의 Oauth Redirect URI는 어디에서 설정합니까? (0) | 2023.07.10 |
캐시를 사용하도록 설정한 경우에만 Wordpress에서 찾을 수 없는 파일을 반환함 (0) | 2023.07.10 |