PyPy

PyPy
PyPy
Pypy logo (2011).png
초기 릴리즈2007년 중반; 15년 전(2007)
안정된 릴리스
7.3.9[1] (2022년 3월 30일, 4개월 전 (2022년 3월 30일))
저장소
기입처RPython
운영 체제크로스 플랫폼
유형Python 인터프리터 및 컴파일러 도구 체인
면허증.MIT
웹 사이트pypy.org Edit this on Wikidata

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]병렬 처리를 위한 소프트웨어 트랜잭션 메모리 지원 등 다양한 하위 프로젝트가 자금을 지원했습니다.

「 」를 참조해 주세요.

메모들

  1. ^ https://www.pypy.org/posts/2022/03/pypy-v738-release.html 를 참조해 주세요.
  2. ^ "Interview Maciej Fijalkowski PyPy".
  3. ^ "PyPy Speed". speed.pypy.org. Retrieved 2019-12-01.
  4. ^ "What's New In Python 3.8 — Python 3.9.1 documentation". docs.python.org. Retrieved 2021-02-15.
  5. ^ "What's New In Python 3.9 — Python 3.10.0 documentation". docs.python.org. Retrieved 2021-11-26.
  6. ^ "PEP 584 -- Add Union Operators To dict". Python.org. Retrieved 2021-11-26.
  7. ^ "PEP 572 -- Assignment Expressions". Python.org. Retrieved 2021-02-15.
  8. ^ "PEP 570 -- Python Positional-Only Parameters". Python.org. Retrieved 2021-02-15.
  9. ^ "PEP 634 -- Structural Pattern Matching: Specification". Python.org. Retrieved 2021-02-15.
  10. ^ Samuele Pedroni (March 2007). "PyPy – Goals and Architecture Overview". Archived from the original on 2012-06-14.
  11. ^ "PyPy – Goals and Architecture Overview – Mission Statement". Retrieved 11 October 2013.
  12. ^ 당사의 런타임 인터프리터는 코딩 가이드인 "RPython" – PyPy 문서입니다.
  13. ^ "이것은 Python의 적절한 서브셋이며, 쉬운 분석과 효율적인 코드 생성을 가능하게 하는 방식으로 제한됩니다." Ancona 등, 2007.
  14. ^ Bolz, Carl; Cuni, Antonio; Fijalkowski, Maciej; Rigo, Armin. Tracing the Meta-Level: PyPy's Tracing JIT Compiler. ICOOOLPS '09. doi:10.1145/1565824.1565827.
  15. ^ 티모시 발리지 인터뷰입니다
  16. ^ "PyPy – Python compatibility". pypy.org. Retrieved 2020-12-15.
  17. ^ "PyPy v7.3.7: bug-fix release of 3.7, 3.8". pypy.org. Retrieved 2021-11-10.
  18. ^ a b the PyPy team (20 June 2014). "PyPy3 2.3.1 – Fulcrum". PyPy blog.
  19. ^ "PyPy v7.2.0: release of 2.7, and 3.6". pypy.org. 16 October 2019.
  20. ^ "PyPy – Python compatibility".
  21. ^ "Running pylons on top of PyPy".
  22. ^ "Running Pyglet on top of PyPy".
  23. ^ "Running Nevow on top of PyPy".
  24. ^ "PyPy runs unmodified django 1.0 beta".
  25. ^ "Introducing the PyPy 1.2 release".
  26. ^ "PyPy 1.5 Released: Catching Up".
  27. ^ a b c Jake Edge (15 May 2013). "A look at the PyPy 2.0 release". LWN.net.
  28. ^ "PyPy 2.0 – Einstein Sandwich". 9 May 2013.
  29. ^ "PyPy2.7 and PyPy3.5 v5.7 – two in one release". 21 March 2017.
  30. ^ "PyPy2.7 and PyPy3.5 v6.0 dual release". 26 April 2018.
  31. ^ 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.
  32. ^ Mattip (2019-10-14). "PyPy Status Blog: PyPy v7.2 released". PyPy Status Blog. Retrieved 2020-08-17.
  33. ^ Mattip (2019-12-24). "PyPy Status Blog: PyPy v7.3.0 released". PyPy Status Blog.
  34. ^ "PyPy and CFFI have moved to Heptapod". 16 February 2020.
  35. ^ "EU Community Research and Development Information Service Entry".
  36. ^ "Eurostars – Aim Higher".
  37. ^ "Project Page on Eureka Network".
  38. ^ "A thank you to the PSF". 22 March 2011.
  39. ^ "PyPy Status Blog: Oh, and btw: PyPy gets funding through "Eurostars"". 10 December 2010.

레퍼런스

외부 링크