source

Python vs Cpython

bestscript 2022. 11. 22. 09:32

Python vs Cpython

Python과 CPython(Jython,IronPython)은 이해가 안 돼요.

python.org에서는 CPython에 대해 다음과 같이 기술하고 있습니다.

Python(CPython)의 "전통적인" 구현

또 다른 스택 오버플로우 질문에는 다음과 같은 내용이 기재되어 있습니다.

CPython은 C로 작성된 Python의 기본 바이트 코드 인터프리터입니다.

솔직히 두 설명 모두 실제로 무슨 뜻인지 모르겠지만, 가 생각한 것은 샘플 파이썬 코드를 실행할 때 CPython을 사용하면 C 언어로 컴파일한 후 C 코드인 것처럼 실행된다는 것이다.

그렇다면 CPython은 정확히 무엇이며 Python과 비교했을 때 어떻게 다릅니까? Python과 비교해서 CPython을 사용해야 할 것 같습니다. 만약 그렇다면 어떤 장점이 있을까요?

그럼 CPython이 뭐죠?

CPython은 Python의 원래 구현입니다.Python.org 에서 다운로드한 실장입니다.사람들은 그것을 다른 Python의 구현과 구별하고 언어 엔진의 구현과 Python 프로그래밍 언어 자체를 구별하기 위해 CPython이라고 부른다.

후자는 혼란이 발생하는 부분입니다. Python-the-language는 Python 코드를 실행하는 과 분리해야 합니다.

CPython은 C에서 구현됩니다.그것은 단지 구현의 세부 사항일 뿐입니다.CPython은 Python 코드를 바이트 코드로(투과적으로) 컴파일하고 평가 루프에서 해당 바이트 코드를 해석합니다.

또한 CPython은 새로운 기능을 최초로 구현한 기업입니다. Python 언어 개발은 CPython을 기반으로 하며 다른 구현이 뒤따릅니다.

Jython 등은?

Jython, IronPythonPyPy는 Python 프로그래밍 언어의 현재 "기타" 구현입니다. 이들은 각각 Java, C# 및 RPython(Python의 하위 집합)으로 구현됩니다.Jython은 당신의 Python 코드를 Java 바이트 코드로 컴파일하여 당신의 Python 코드를 JVM에서 실행할 수 있도록 합니다.IronPython을 사용하면 Microsoft CLR에서 Python을 실행할 수 있습니다.Python에 구현되어 있는 PyPy는 CPython보다 Python 코드를 더 빠르게 실행할 수 있도록 합니다.이것에 의해, 확실히 당신의 마음을 사로잡을 것입니다. :-)

실제로 C로 컴파일 중

따라서 CPython은 Python 코드를 C로 변환하지 않습니다.대신 인터프리터 루프가 실행됩니다.Python-ish 코드를 C로 변환하는 프로젝트있는데, 그것은 Cython이라고 불립니다.Cython은 Python 언어에 몇 가지 확장을 추가하여 C 확장자로 코드를 컴파일할 수 있습니다. C 확장자는 CPython 인터프리터에 연결되는 코드입니다.

언어와 구현을 구별할 필요가 있습니다.Python은 언어입니다.

위키피디아에 따르면, "프로그래밍 언어는 컴퓨터 또는 알고리즘의 사양인 프로그램을 작성하는 표기법이다."이것은 단순히 코드를 작성하기 위한 규칙과 구문임을 의미합니다.이와는 별도로 대부분의 경우 실제 인터프리터 또는 컴파일러가 되는 프로그래밍 언어 구현이 있습니다.

Python은 언어이다.CPython은 C에서 Python을 구현한 것입니다.Jython은 Java 등에서 구현됩니다.

요약: 이미 CPython을 사용하고 있습니다(여기에서 다운로드한 경우).

저도 CPython, JPython, IronPython, PyPy가 어떻게 다른지 이해하는데 같은 문제가 있었습니다.

설명을 시작하기 전에 세 가지 사항을 확인하고 싶습니다.

  1. Python : 언어입니다.인터프리터(Python 코드를 받아들이는 프로그램)에게 자신을 전달/표현하는 방법만을 기술/설명합니다.
  2. 구현:통역이 구체적으로 어떤 언어로 쓰여졌고, 어떤 일을 하게 되었느냐가 전부입니다.
  3. 바이트 코드:이 코드는 "실제" 컴퓨터 시스템인 하드웨어 프로세서가 아닌 일반적으로 가상 시스템이라고 하는 프로그램에서 처리되는 코드입니다.

CPython은 C언어로 작성된 구현입니다.Python 고유의 바이트 코드(스택 머신 기반 명령 집합)를 생성하여 실행합니다.Python 코드를 바이트 코드로 변환하는 이유는 기계 명령처럼 보이면 인터프리터를 구현하기가 더 쉽기 때문입니다.그러나 Python 코드를 실행하기 전에 바이트 코드를 생성할 필요는 없습니다(단, CPython은 생성합니다).

CPython의 바이트 코드를 보고 싶다면 볼 수 있습니다.다음과 같은 방법이 있습니다.

>>> def f(x, y):                # line 1
...    print("Hello")           # line 2
...    if x:                    # line 3
...       y += x                # line 4
...    print(x, y)              # line 5
...    return x+y               # line 6
...                             # line 7
>>> import dis                  # line 8
>>> dis.dis(f)                  # line 9
  2           0 LOAD_GLOBAL              0 (print)
              2 LOAD_CONST               1 ('Hello')
              4 CALL_FUNCTION            1
              6 POP_TOP

  3           8 LOAD_FAST                0 (x)
             10 POP_JUMP_IF_FALSE       20

  4          12 LOAD_FAST                1 (y)
             14 LOAD_FAST                0 (x)
             16 INPLACE_ADD
             18 STORE_FAST               1 (y)

  5     >>   20 LOAD_GLOBAL              0 (print)
             22 LOAD_FAST                0 (x)
             24 LOAD_FAST                1 (y)
             26 CALL_FUNCTION            2
             28 POP_TOP

  6          30 LOAD_FAST                0 (x)
             32 LOAD_FAST                1 (y)
             34 BINARY_ADD
36 RETURN_VALUE

이제 위의 코드를 살펴보겠습니다.행 1 ~ 6은 함수 정의입니다.8행에서는 CPython(인터프리터)에서 생성된 중간 Python 바이트 코드(또는 Python 바이트 코드용 디스어셈블러)를 표시하기 위해 사용할 수 있는 'dis' 모듈을 Import합니다.

메모: 이 코드에 대한 링크는 #sublic IRC 채널에서 입수했습니다.https://gist.github.com/nedbat/e89fa710db0edfb9057dc8d18d979f9c

그리고 자바어로 쓰여져 자바 바이트 코드를 만들어 내는 Jython도 있습니다.Java 바이트 코드는 Java Virtual Machine(JVM; Java 가상 머신)의 구현인 Java Runtime Environment에서 실행됩니다.만약 이것이 혼란스럽다면, 당신은 Java가 어떻게 동작하는지 전혀 모르는 것 같습니다.평신도 용어로 Java(컴파일러가 아닌 언어) 코드는 Java 컴파일러에 의해 취득되어 JRE만을 사용하여 실행할 수 있는 파일(Java 바이트 코드)을 출력합니다.이는 Java 코드가 컴파일된 후 Java 바이트 코드 포맷으로 다른 머신에 포팅할 수 있도록 하기 위한 것으로, JRE만이 실행할 수 있습니다.그래도 혼란스러운 경우는, 이 Web 페이지를 참조해 주세요.

여기서, 당신은 CPython의 바이트코드가 Jython처럼 휴대 가능한지를 물을 수 있을 것이다.CPython 구현에서 생성된 바이트 코드는 코드의 추가 실행을 용이하게 하기 위해인터프리터에 고유했다(또한 이러한 중간 바이트 코드 생산은 많은 다른 인터프리터에서 처리의 용이성을 위해 이루어졌을 것으로 추측된다).

Jython에서는 Python 코드를 컴파일 할 때 Java 바이트 코드가 됩니다.JVM에서 실행할 수 있습니다.

마찬가지로 IronPython(C# 언어로 작성)은 Python 코드를 Microsoft가 개발한 JVM과 유사한 기술인 Common Language Runtime(CLR)로 컴파일합니다.

기사에서는 Python의 다른 구현 간의 차이점에 대해 자세히 설명합니다.기사에서 말하는 것처럼:

가장 먼저 깨달은 것은 '피톤'은 인터페이스라는 것이다.Python의 동작과 동작에 관한 사양이 있습니다(다른 인터페이스와 마찬가지로).또, (모든 인터페이스와 같이) 복수의 실장이 있습니다.

두 번째로 깨달아야 할 것은 '인터프리터'와 '컴파일'은 인터페이스가 아니라 구현의 속성이라는 것입니다.

Python은 프로그램 작성에 사용할 수 있는 일련의 규칙입니다.이 언어에는 몇 가지 구현이 있습니다.

어떠한 실장을 실시해도, 프로그램의 텍스트를 받아 해석해, 지시를 실행하는 등, 거의 같은 작업을 실시합니다.그 누구도 당신의 코드를 C나 다른 언어로 컴파일하지 않습니다.

CPython은 C로 작성된 원래 구현입니다. ("CPython"의 "C" 부분은 Python 인터프리터 자체를 작성하는 데 사용된 언어를 의미합니다.)

Jython은 동일한 언어(Python)이지만 Java를 사용하여 구현되었습니다.

IronPython 인터프리터는 C#로 작성되었습니다.

Python으로 작성된 Python 인터프리터인 PyPyPy는 Python으로 작성된 인터프리터입니다.선택해주세요:)

python은 오픈 소스이기 때문에 필요에 따라 python을 커스터마이즈할있습니다.커스터마이즈 후, 그 버전에 원하는 이름을 붙일 수 있습니다.그래서 여러 가지 맛의 비단뱀을 사용할 수 있습니다.각각의 맛은 특별한 요구 사항을 충족시키기 위해 맞춤화된 버전의 비단뱀입니다.이는 Ubuntu, Linux, RedHat Linux 등 UNIX의 여러 가지 맛이 있다는 사실과 유사합니다.다음은 비단뱀의 향미 중 일부입니다.

  • CPython- python 소프트웨어 재단에서 제공하는 python.org에서 다운로드한 python 프로그래밍 언어의 기본 구현입니다.그것은 C와 python으로 쓰여 있다.C코드를 쓸없고 python 코드만 쓸 수 있습니다.CPython은 인터프리터이자 컴파일러로 호출할 수 있습니다.여기서 python 코드먼저 python 바이트 코드로 컴파일되고 그 후 PVM 또는 Python Virtual Machine에 의해 머신 코드로 해석됩니다.

JavaScript 소스 코드가 바이트 코드 없이 한 줄씩 기계 코드로 직접 해석되므로 JavaScript만이 완전히 해석된 언어입니다.JavaScript 엔진은 Google Chrome의 V8 엔진과 같이 표준 인터프리터 또는 Just-In-Time 컴파일러로 구현할 수 있으며 바이트 코드가 포함되지 않지만 코드 실행 빈도 등의 결정에 따라 이미 컴파일된 기계 코드를 저장합니다.

여기에 이미지 설명 입력

  • Cython- Cython은 python과 C의 슈퍼셋인 프로그래밍 언어입니다.그것은 C와 python으로 쓰여 있다.Python 구문과 옵션인 C-syntax로 C와 같은 성능을 제공하도록 설계되었습니다.Cython은 C 코드를 생성하고 C 컴파일러에 의해 컴파일되는 컴파일 언어입니다.Cython에서는 기본 python 또는 CPython과 유사한 코드를 작성할 수 있습니다.그 차이는 다음과 같습니다.
    • Cython옵션인 추가 C 코드를 작성할 수 있도록 합니다.
    • Cython에서는 내부적으로 Python 코드가 C 코드로 변환되어 C 컴파일러에 의해 컴파일 됩니다.Cython의 실행 속도는 상당히 빨라지지만 원래 C 언어 실행에는 미치지 못합니다.이는 Cython이 작성된 CPython 코드를 이해하기 위해 CPython 인터프리터CPython 표준 라이브러리에 호출해야 하기 때문입니다.

여기에 이미지 설명 입력

  • JPython / Jython- Python 프로그래밍 언어의 Java 구현.Java와 python으로 작성되어 있습니다.여기서는 python 코드가 먼저 Java 바이트 코드로 컴파일되고 다음으로 JVM 또는 Java Virtual Machine에 의해 해당 바이트 코드가 기계 코드로 해석됩니다.이것은 Java 코드가 실행되는 방법과 유사합니다. Java 코드가 먼저 중간 바이트 코드로 컴파일되고 그 바이트 코드가 JVM에 의해 기계 코드로 해석됩니다.

  • PyPy- Python 프로그래밍 언어의 RPython 구현.RPYthon(Restricted Python)이라고 하는 파이썬의 제한된 하위 집합으로 작성됩니다.바이트 코드를 해석하기 위해 PyPy는 Just-in-time 컴파일러를 가지고 있고, CPython은 인터프리터를 가지고 있기 때문에 PyPy는 CPython보다 더 빠르게 실행됩니다.

여기에 이미지 설명 입력

컴파일러는 높은 수준의 소스 코드를 바이트 코드로 변환하고 바이트 코드를 머신 코드로 변환합니다.실장 중에는 일반 인터프리터가 있는 것도 있고 저스트 인 타임 컴파일러가 있는 것도 있습니다.예를 들어 수백만 번 실행되는 루프를 실행하기 위해 JIT 컴파일러는 바이트 코드를 기계 코드로 변환하고 다음 반복 머신에서는 바이트 코드를 인식합니다.JIT 컴파일러는 코드 실행 빈도 등의 결정에 따라 컴파일된 머신 코드를 저장하므로 매번 바이트 코드를 머신 코드로 변환할 필요가 없습니다.JIT 컴파일러의 단점은 코드 분석 시 초기 실행 속도가 느리다는 것입니다.반면 일반 인터프리터는 반복할 마다 바이트 코드를 기계 코드로 반복적으로 변환하므로 예를 들어 수백만 번 실행되는 루프를 완료하는 데 더 많은 시간이 걸립니다.

  • IronPython- 대상 python의 C# 실장.NET 프레임워크

  • Ruby Python- Ruby 플랫폼과 연동

  • Anaconda Python- 데이터 사이언스, 머신러닝, 인공지능, 딥러닝, 대용량 데이터 처리과학 컴퓨팅용 파이썬 및 R 프로그래밍 언어 배포 패키지는 skikit-learn, tensorflow, pytorch, numba, panda, jupyter, numpy, matplotlib 등 수많은 라이브러리를 제공합니다.

  • Stackless- 동시성을 위한 Python

각 구현의 속도를 테스트하기 위해 N 값 50,000을 사용하여 integrate_f를 500회 호출하는 프로그램을 작성하고 여러 번의 실행에 걸친 실행 시간을 기록합니다.다음 표에 벤치마크 결과를 나타냅니다.

실행 실행 시간(초) 스피드 업
큐피톤 9.25
CPython + Cython 0.21 44배
PyPy 0.57 16배

implementationPython을 구현하는 데 사용된 언어를 의미하며 Python Code를 구현하는 방법을 의미하지 않습니다.하면 C와의 통합이 용이할 만 아니라 C도 이용할 수 있다는 .CPython은 C/C++와 쉽게 할 수 있습니다.

CPython을 사용하여 되었습니다.CPython® Java(J)YThon) 또는 를 이용할 수 있도록 한 최초의 구현에는 다른 포크가 있었습니다.NET Python (Iron Python)

사용하는 구현에 따라 라이브러리의 가용성이 달라질 수 있습니다.를 들어 Ctypes는 Jython에서 사용할 수 없기 때문에 Ctype을 사용하는 라이브러리는 Jython에서 작동하지 않습니다.마찬가지로 Java 클래스를 사용하려면 CPython에서 직접 사용할 수 없습니다.글루(JEP)가 필요하거나 Jython(Java Implementation of Python)을 사용해야 합니다.

글로벌 인터프리터 잠금으로 인해 CPython은 멀티스레딩을 실제로 지원하지 않습니다(적합하지만 최적은 아닙니다).또한 재귀에 대한 최적화 메커니즘이 없으며 다른 구현 및 라이브러리가 해결하려고 하는 다른 많은 제한이 있습니다.

python wiki의 이 페이지를 보세요.

페이지의 코드 스니펫을 보면 통역사가 무엇인지 알 수 있습니다.

Python의 최초 및 표준 구현은 보통 다른 옵션과 대조하고 싶을 때 호출됩니다(그 이외의 경우에는 그냥 "Python"입니다).이 이름은 휴대용으로 코딩되어 있다는 사실에서 유래했습니다.이것은 http://www.python.org에서 가져와 ActivePythonEnthout 배포판을 사용하여 대부분의 Linux 및 Mac OS X 머신에 자동으로 설치되는 Python입니다.만약 당신이 당신의 머신에 Python의 프리 인스톨 버전을 발견했다면, 당신의 회사나 조직이 Python을 좀 더 특별한 방법으로 사용하고 있지 않다면, 아마도 그럴 것이다.

Python으로 스크립트 또는 애플리케이션을 작성하거나 Python의 이점 또는 장점을 발견하지 않는 한 표준 시스템을 사용하는 것이 좋습니다.이는 언어의 참조 구현이기 때문에 대체 시스템보다 가장 빠르게 실행되고, 가장 완전하며, 보다 최신적이고 견고한 경향이 있습니다.

프로그래밍 언어 실장은 컴퓨터 프로그램을 실행하기 위한 시스템이다.

프로그래밍 언어 구현에는 두 가지 일반적인 방법이 있습니다.

  • 해석:통역사는 어떤 언어로 된 프로그램을 입력으로 받아 그 언어로 쓰여진 액션을 어떤 기계에서 실행한다.
  • 컴파일:컴파일러는 어떤 언어로 된 프로그램을 입력으로 받아 그 프로그램을 다른 언어로 번역합니다.이것은 다른 인터프리터나 다른 컴파일러에 대한 입력으로 사용될 수 있습니다.

PythonGuido van Rossum이 1991년에 만든 해석된 고급 프로그래밍 언어입니다.

CPython은 Python 컴퓨팅 언어의 레퍼런스 버전이며, Guido van Rossum에 의해 C로 작성되었습니다.

기타 Python 구현 목록

원천

언급URL : https://stackoverflow.com/questions/17130975/python-vs-cpython