PyPy
PyPy초기 릴리즈 | 중반; 전( |
---|---|
안정된 릴리스 | 7.3.9[1] (2022년 3월 , 전 ( |
저장소 | |
기입처 | RPython |
운영 체제 | 크로스 플랫폼 |
유형 | Python 인터프리터 및 컴파일러 도구 체인 |
면허증. | MIT |
웹 사이트 | pypy |
PyPy(/papapapa//)는 Python 프로그래밍[2] 언어(표준 구현)의 대체 구현입니다.PyPy는 Just-in-Time [3]컴파일러를 사용하기 때문에 PyPy는 종종 CPython보다 더 빠르게 실행됩니다.Python 확장자에 의존하는 코드를 제외하고 대부분의 Python 코드는 PyPy에서 잘 실행되며, Python 확장자는 작동하지 않거나 PyPy에서 실행 시 약간의 오버헤드가 발생합니다.내부적으로 PyPy는 메타트레이싱으로 알려진 기술을 사용합니다.이것은 인터프리터를 트레이스 적시 컴파일러로 변환합니다.인터프리터는 보통 컴파일러보다 쓰기 쉽지만 실행 속도는 느리기 때문에 이 기술을 사용하면 프로그래밍 언어를 효율적으로 구현할 수 있습니다.PyPy의 메타 추적 툴 체인은 RPython이라고 불립니다.
PyPy는 최신 버전의 CPython 생태계와 완전히 호환되지는 않습니다.Python 2.7, 3.6 및 3.7("CPython의 드롭인 대체")과의 호환성을 주장하지만, Python 3.8,[4][8] 3[5][6].9의[7] 새로운 기능과 구문, 그리고 패턴 [9]매칭을 위한 최신 Python 3.10 구문에서는 손해를 본다.
상세 및 동기
PyPy는 동적 언어 구현을 위한 공통 번역 및 지원 프레임워크를 제공하는 것을 목표로 하며, 언어 사양과 구현 측면 간의 명확한 분리를 강조합니다.또한 위의 프레임워크를 사용하여 Python 프로그래밍 언어를 준수하고 유연하며 빠르게 구현하여 낮은 수준의 세부 정보를 [10][11]인코딩하지 않고도 새로운 고급 기능을 가능하게 하는 것을 목표로 합니다.
RPython
PyPy 인터프리터 자체는 RPython(Restricted [12]Python)이라고 불리는 Python의 제한된 서브셋으로 작성됩니다.RPython은 Python 언어에 몇 가지 제약을 가하여 컴파일 [13]시 변수 유형을 추론할 수 있도록 합니다.
PyPy 프로젝트는 RPython 코드를 분석하여 바이트 코드의 형태로 변환하는 툴체인을 개발했으며, 이를 C로 낮출 수 있습니다.이전에는 C: Java, Csharp, Javascript 외에 다른 백엔드가 있었지만, 비트롯에 걸려 제거되었습니다.따라서 PyPy의 재귀적 로고는 RPython이 Python 인터프리터에 의해 번역되었기 때문에 뱀이 자신을 삼키는 것입니다.또한 테스트 및 분석을 위해 코드를 번역하지 않고 실행할 수 있으므로 동적 언어 연구에 적합한 테스트 베드를 제공합니다.
플러그형 가비지 컬렉터를 사용할 수 있을 뿐만 아니라 스택리스 Python 기능을 사용할 수도 있습니다.마지막으로 JIT(Just-in-Time) 생성기를 포함하고 있으며 인터프리터 소스 코드에 몇 개의 주석이 주어지면 인터프리터에 저스트 인 타임 컴파일러를 구축합니다.생성된 JIT 컴파일러는 추적 JIT입니다.[14]
RPython은 Pixie [15]등의 비 Python 언어 구현 기술에도 사용됩니다.
프로젝트현황
버전 7.3.7의 PyPy는 2.7, 3.7 및 3.[16][17]8의 3가지 CPython 버전과 호환됩니다.CPython v3와 호환되는 첫 번째 PyPy 버전은 PyPy v2.3.1(2014)[18]입니다.CPython v3와 호환되는 PyPy 인터프리터는 PyPy3로도 알려져 있습니다.
PyPy는 32비트/64비트 x86 [19]및 32비트/64비트 ARM 프로세서에서 JIT 컴파일을 지원합니다.Windows, Linux, OpenBSD 및 Mac OS X에서 매일 밤 테스트됩니다. PyPy는 구현별 [20]기능에 의존하지 않는 순수 Python 소프트웨어를 실행할 수 있습니다.
CPyExt라고 하는 CPython C API 확장에 대한 호환성 계층이 있지만 불완전하고 실험적입니다.C 공유 라이브러리와의 인터페이스에는 내장된 C 외부 기능 인터페이스(CFFI) 또는 ctype 라이브러리를 사용하는 것이 좋습니다.
역사
PyPy는 2002년부터 2010년까지 Armin Rigo에 의해 개발된 Python용 Just In Time 전문 컴파일러인 Python 프로젝트의 후속작이다.PyPy의 목표는 싸이코가 [clarification needed]이용할 수 없었던 범위를 가진 Just In Time 전문 컴파일러를 갖는 것이다.처음에는 RPython을 Java 바이트 코드, CIL 및 JavaScript로 컴파일할 수도 있었지만 관심 부족으로 인해 이러한 백엔드는 삭제되었습니다.
PyPy는 당초 연구개발 위주의 프로젝트였다.2007년 중반 개발의 성숙한 단계에 이르러 정식 1.0 릴리스에 도달한 다음 초점은 더 많은 CPython 호환성을 갖춘 실제 가동 가능한 버전을 출시하는 것이었습니다.PyPy의 많은 변화는 코드 스프린트 중에 이루어졌다.
- 2008년 8월, PyPy는 Pylons,[21] Pyglet,[22] Nevow[23], Django와 [24]같은 인기 있는 Python 라이브러리를 운영할 수 있었다.
- 2010년 3월 12일, 속도에 초점을 맞춘 PyPy 1.2가 출시되었습니다.아직 안정적이지는 않지만 작동 중인 Just-in-Time [25]컴파일러가 포함되어 있습니다.
- 2011년 4월 30일, PyPy 버전 1.5가 출시되어 CPython 2.[26]7과의 호환성에 도달했습니다.
- 2013년 5월 9일, ARMv6 및 ARMv7 JIT에서 JIT 컴파일을 위한 알파 품질 지원을 도입한 PyPy 2.0이 출시되었으며, CFFI를 표준 [27][28]라이브러리에 포함시켰습니다.
- 2014년 6월 20일, PyPy3는 안정적이라고 선언되었고[18] 보다 현대적인 Python 3과의 호환성을 도입하였다.PyPy 2.3.1과 함께 출시되었으며 동일한 버전 번호가 붙어 있습니다.
- 2017년 3월 21일, PyPy 프로젝트는 PyPy와 PyPy3의 버전 5.7을 출시하였으며, PyPy3는 Python 3.5에 [29]대한 베타 품질 지원을 도입하였다.
- 2018년 4월 26일 버전 6.0이 출시되었으며 파이썬 2.7과 3.5(윈도우즈에서 [30]베타 품질 유지)를 지원하였다.
- 2019년 2월 11일 버전 7.0이 출시되었으며 파이썬 2.7과 3.5를 [31]지원하였다.
- 2019년 10월 14일 파이썬 3.6.[32]9를 지원하는 버전 7.2가 출시되었습니다.
- 2019년 12월 24일 파이썬 3.6.[33]9를 지원하는 버전 7.3이 출시되었습니다.
- 2020년 2월 16일, PyPy 팀은 CFFI(C Foreign Function Interface) 프로젝트의 저장소와 함께 소스 코드 호스팅을 비트버킷에서 heptapod.net으로 이전한다고 발표했다.새로운 로고와 웹사이트 디자인도 공개됩니다.그러나 새로운 로고의 작성자와 라이선스는 알려지지 않았다.[34]
자금 조달
PyPy는 2004년 12월부터 2007년 3월까지 특정 대상 연구[35] 프로젝트인 유럽연합의 자금 지원을 받았다.2008년 6월, PyPy는 Google 오픈 소스 프로그램의 일부라고 발표해, PyPy를 CPython과의 호환성을 높이는 것에 초점을 맞추고 있습니다.2009년,[36] 중소기업에 특화된 유럽연합의 자금 조달 기관인 Eurostars는 "PYJ"라는 제목의 PyPy 프로젝트 멤버들의 제안을 받아들였다.IT – PyPy 기반의 동적 프로그래밍 언어를 위한 빠르고 유연한 툴킷입니다."Eurostars의 [37]자금은 2011년 8월까지 계속되었다.PyCon US 2011에서 Python Software Foundation은 Python의 새로운 버전과의 [38]성능 및 호환성에 대한 작업을 계속할 수 있도록 10,000달러의 보조금을 제공했습니다.포트 투 ARM 아키텍처는 부분적으로 Rasberry [27]Pi Foundation에 의해 후원되었습니다.
PyPy 프로젝트는 또한 상태 블로그 [39]페이지를 통해 기부를 받는다.2013년 현재 파이썬 3 버전 호환성, 수치 계산을 위한 최적화된 내장 NumPy 지원, 더 나은 [27]병렬 처리를 위한 소프트웨어 트랜잭션 메모리 지원 등 다양한 하위 프로젝트가 자금을 지원했습니다.
「 」를 참조해 주세요.
메모들
- ^ https://www.pypy.org/posts/2022/03/pypy-v738-release.html 를 참조해 주세요.
- ^ "Interview Maciej Fijalkowski PyPy".
- ^ "PyPy Speed". speed.pypy.org. Retrieved 2019-12-01.
- ^ "What's New In Python 3.8 — Python 3.9.1 documentation". docs.python.org. Retrieved 2021-02-15.
- ^ "What's New In Python 3.9 — Python 3.10.0 documentation". docs.python.org. Retrieved 2021-11-26.
- ^ "PEP 584 -- Add Union Operators To dict". Python.org. Retrieved 2021-11-26.
- ^ "PEP 572 -- Assignment Expressions". Python.org. Retrieved 2021-02-15.
- ^ "PEP 570 -- Python Positional-Only Parameters". Python.org. Retrieved 2021-02-15.
- ^ "PEP 634 -- Structural Pattern Matching: Specification". Python.org. Retrieved 2021-02-15.
- ^ Samuele Pedroni (March 2007). "PyPy – Goals and Architecture Overview". Archived from the original on 2012-06-14.
- ^ "PyPy – Goals and Architecture Overview – Mission Statement". Retrieved 11 October 2013.
- ^ 당사의 런타임 인터프리터는 코딩 가이드인 "RPython" – PyPy 문서입니다.
- ^ "이것은 Python의 적절한 서브셋이며, 쉬운 분석과 효율적인 코드 생성을 가능하게 하는 방식으로 제한됩니다." Ancona 등, 2007.
- ^ Bolz, Carl; Cuni, Antonio; Fijalkowski, Maciej; Rigo, Armin. Tracing the Meta-Level: PyPy's Tracing JIT Compiler. ICOOOLPS '09. doi:10.1145/1565824.1565827.
- ^ 티모시 발리지 인터뷰입니다
- ^ "PyPy – Python compatibility". pypy.org. Retrieved 2020-12-15.
- ^ "PyPy v7.3.7: bug-fix release of 3.7, 3.8". pypy.org. Retrieved 2021-11-10.
- ^ a b the PyPy team (20 June 2014). "PyPy3 2.3.1 – Fulcrum". PyPy blog.
- ^ "PyPy v7.2.0: release of 2.7, and 3.6". pypy.org. 16 October 2019.
- ^ "PyPy – Python compatibility".
- ^ "Running pylons on top of PyPy".
- ^ "Running Pyglet on top of PyPy".
- ^ "Running Nevow on top of PyPy".
- ^ "PyPy runs unmodified django 1.0 beta".
- ^ "Introducing the PyPy 1.2 release".
- ^ "PyPy 1.5 Released: Catching Up".
- ^ a b c Jake Edge (15 May 2013). "A look at the PyPy 2.0 release". LWN.net.
- ^ "PyPy 2.0 – Einstein Sandwich". 9 May 2013.
- ^ "PyPy2.7 and PyPy3.5 v5.7 – two in one release". 21 March 2017.
- ^ "PyPy2.7 and PyPy3.5 v6.0 dual release". 26 April 2018.
- ^ Cuni, Antonio (2019-02-11). "PyPy Status Blog: PyPy v7.0.0: triple release of 2.7, 3.5 and 3.6-alpha". PyPy Status Blog. Retrieved 2020-08-17.
- ^ Mattip (2019-10-14). "PyPy Status Blog: PyPy v7.2 released". PyPy Status Blog. Retrieved 2020-08-17.
- ^ Mattip (2019-12-24). "PyPy Status Blog: PyPy v7.3.0 released". PyPy Status Blog.
- ^ "PyPy and CFFI have moved to Heptapod". 16 February 2020.
- ^ "EU Community Research and Development Information Service Entry".
- ^ "Eurostars – Aim Higher".
- ^ "Project Page on Eureka Network".
- ^ "A thank you to the PSF". 22 March 2011.
- ^ "PyPy Status Blog: Oh, and btw: PyPy gets funding through "Eurostars"". 10 December 2010.
레퍼런스
- 다비데 안코나, 마시모 안코나, 안토니오 쿠니, 니콜라스 D.마타키스, 2007년.RPython: 동적 및 정적 유형의 OO 언어 조정을 위한 단계입니다.인프로그래프DLS(Dynamic Language Symposium), 2007.ACM 프레스
- Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, 2009.메타 레벨 트레이스: PyPy의 트레이스 JIT 컴파일러.인프로그래프ICOOOLPS, 2009.ACM 프레스
- Corbet, Jonathan (11 May 2011). "A brief experiment with PyPy". LWN.net.
- von Eitzen, Chris (21 November 2011). "PyPy 1.7 widens the performance "sweet spot"". The H. Heinz Heise.
- Rose, John (2 December 2011). "A Day with PyPy". Oracle developer blog.
- "Interview Maciej Fijalkowski pypy". Decisionstats blog. 29 November 2015.