파이썬과 CPython (Jython, IronPython) 에 대한 소란이 무엇입니까 , 나는 그것을 얻지 못했습니다.
python.org 는 CPython이 다음과 같다고 언급합니다.
“전통적인”파이썬 구현 (닉네임 CPython)
또 다른 스택 오버플로 질문 은 다음과 같이 언급합니다.
CPython은 C로 작성된 Python의 기본 바이트 코드 인터프리터입니다.
솔직히 나는 그 두 설명이 실제로 의미하는 것을 얻지 못했지만 CPython을 사용하면 샘플 파이썬 코드를 실행할 때 그 의미를 C 언어로 컴파일 한 다음 C 인 것처럼 실행한다고 생각했습니다. 암호
그렇다면 CPython은 정확히 무엇이고 파이썬과 비교할 때 어떻게 다른가? 아마도 파이썬보다 CPython을 사용해야한다면 그 장점은 무엇입니까?
답변
CPython은 무엇입니까?
CPython은 원래 Python 구현입니다. Python.org에서 다운로드 한 구현입니다. 사람들은 그것을 CPython이라고 부르며 나중에 다른 파이썬 구현과 구별하고 언어 엔진의 구현을 파이썬 프로그래밍 언어 자체 와 구별합니다 .
후자는 혼란이 시작되는 곳입니다. 파이썬 코드를 실행 하는 것과는 별도로 파이썬 언어를 유지해야합니다 .
CPython과는 일이 정말 그냥 구현 세부 즉 C로 구현 될 수 있습니다. CPython은 Python 코드를 바이트 코드 (투명하게)로 컴파일하고 평가 루프에서 해당 바이트 코드를 해석합니다.
CPython은 또한 새로운 기능을 구현 한 최초의 업체입니다. Python-the-language 개발은 CPython을 기본으로 사용합니다. 다른 구현은 다음과 같습니다.
자이 썬 등은 어떻습니까?
Jython , IronPython 및 PyPy 는 현재 Python 프로그래밍 언어의 “기타”구현입니다. 이들은 각각 Java, C # 및 RPython (Python의 하위 집합)으로 구현됩니다. Jython은 Python 코드를 Java 바이트 코드로 컴파일 하므로 Python 코드는 JVM에서 실행될 수 있습니다. IronPython을 사용하면 Microsoft CLR 에서 Python을 실행할 수 있습니다 . PyPy는 Python의 하위 집합으로 구현되어 CPython보다 빠르게 Python 코드를 실행할 수 있습니다. 🙂
실제로 C로 컴파일
따라서 CPython은 Python 코드를 C 자체로 변환 하지 않습니다 . 대신 인터프리터 루프를 실행합니다. 이 인 프로젝트 수행 C에 파이썬 틱 코드를 번역, 그리고 그 호출됩니다 사이 썬 . Cython은 Python 언어에 몇 가지 확장을 추가 하고 CPython 인터프리터에 연결 되는 코드 인 C 확장으로 코드를 컴파일 할 수 있습니다 .
답변
언어와 구현을 구별해야합니다. 파이썬은 언어입니다.
Wikipedia 에 따르면 , “프로그래밍 언어는 계산 또는 알고리즘의 사양 인 프로그램 작성을위한 표기법”입니다. 이것은 단순히 코드 작성을위한 규칙과 구문이라는 것을 의미합니다. 별도로 우리는 대부분의 경우 실제 인터프리터 또는 컴파일러 인 프로그래밍 언어 구현 을 가지고 있습니다 .
파이썬은 언어입니다. CPython은 C에서 Python을 구현 한 것입니다. Jython은 Java 등을 구현 한 것입니다.
요약하면 : 이미 CPython을 사용하고 있습니다 (여기 에서 다운로드 한 경우 ).
답변
CPython, JPython, IronPython, PyPy가 어떻게 다른지 이해하는 데 동일한 문제가있었습니다.
따라서 설명을 시작하기 전에 세 가지를 기꺼이 제거하려고합니다.
- Python : 언어이며, 통역사 (python 코드를 허용하는 프로그램)에게 자신을 전달 / 표현하는 방법 만 설명 / 설명합니다.
- 구현 : 통역사가 어떻게 작성되었는지, 구체적 으로 어떤 언어 로 무엇을하는지에 관한 것 입니다.
- 바이트 코드 : 이것은 “실제”컴퓨터 시스템 인 하드웨어 프로세서가 아닌 가상 시스템이라고하는 프로그램에 의해 처리되는 코드입니다.
CPython은 C 언어로 작성된 구현입니다. 파이썬 고유의 바이트 코드 (스택 머신 기반 명령 세트)를 생성 한 다음 실행합니다. 파이썬 코드를 바이트 코드로 변환하는 이유는 기계 명령어처럼 보이는 경우 인터프리터를 더 쉽게 구현할 수 있기 때문입니다. 그러나 파이썬 코드를 실행하기 전에 바이트 코드를 생성 할 필요는 없습니다 (그러나 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 (인터프리터)이 생성 한 중간 파이썬 바이트 코드 (또는 파이썬 바이트 코드의 디스어셈블러)를 보는 데 사용할 수있는 ‘dis’모듈을 가져옵니다.
참고 : #python IRC 채널 에서이 코드에 대한 링크를 얻었습니다 : https://gist.github.com/nedbat/e89fa710db0edfb9057dc8d18d979f9c
그리고 자이 썬 (Jython)이 있는데, 자바로 작성되어 자바 바이트 코드를 생성하게됩니다. Java 바이트 코드는 JVM (Java Virtual Machine)의 구현 인 Java Runtime Environment에서 실행됩니다. 이것이 혼란 스럽다면 Java가 어떻게 작동하는지 전혀 모른다고 생각합니다. 일반인 용어로, Java (컴파일러가 아닌 언어) 코드는 Java 컴파일러에서 가져 와서 JRE를 통해서만 실행할 수있는 파일 (Java 바이트 코드)을 출력합니다. 이는 Java 코드가 컴파일 된 후 Java 바이트 코드 형식으로 다른 시스템으로 이식 될 수 있도록하기 위해 수행되며, 이는 JRE에서만 실행할 수 있습니다. 그래도 여전히 혼란 스러우면이 웹 페이지를 살펴볼 수 있습니다 .
CPython의 바이트 코드가 Jython과 같이 이식 가능한지 물어볼 수 있습니다. CPython의 구현에서 생산 된 바이트 코드는 코드의 추가 실행을 위해 쉬운 그것을 만들기위한 인터프리터 특정했다 (I는 또한 처리의 많은 다른 통역으로 이루어집니다 단지 편의를 위해, 그와 같은 중간 바이트 코드 생성을 의심).
따라서 Jython에서는 Python 코드를 컴파일 할 때 JVM에서 실행될 수있는 Java 바이트 코드로 끝납니다.
마찬가지로 C # 언어로 작성된 IronPython은 Python 코드를 CLR (Common Language Runtime)로 컴파일합니다.이 언어는 Microsoft에서 개발 한 JVM과 유사한 기술입니다.
답변
이 기사 는 다른 파이썬 구현의 차이점을 철저히 설명합니다. 기사가 말한 것처럼 :
가장 먼저 알아야 할 것은 ‘Python’이 인터페이스라는 것입니다. 파이썬이 무엇을해야하고 어떻게 동작해야하는지에 대한 사양이 있습니다 (모든 인터페이스와 마찬가지로). 그리고 모든 인터페이스와 마찬가지로 여러 가지 구현이 있습니다.
두 번째로 알아야 할 것은 ‘해석’과 ‘컴파일’은 인터페이스가 아니라 구현의 속성이라는 것입니다.
답변
파이썬은 언어입니다. 프로그램을 작성하는 데 사용할 수있는 규칙 세트입니다. 이 언어에는 여러 가지 구현이 있습니다.
어떤 구현을 수행하더라도 프로그램의 텍스트를 취해 해석하고 명령을 실행하여 거의 동일한 작업을 수행합니다. 아무도 코드를 C 또는 다른 언어로 컴파일하지 않습니다.
CPython은 C로 작성된 원래 구현입니다. “CPython”의 “C”부분은 Python 인터프리터 자체를 작성하는 데 사용 된 언어를 나타냅니다.
자이 썬은 같은 언어 (파이썬)이지만 자바를 사용하여 구현된다.
IronPython 인터프리터는 C #으로 작성되었습니다.
파이썬으로 작성된 파이썬 인터프리터 인 PyPy도 있습니다. 선택하십시오 🙂
답변
implementation
파이썬 코드를 구현하는 방법이 아니라 파이썬을 구현하는 데 사용 된 언어를 의미합니다. CPython을 사용하면 C 런타임의 가용성은 물론 C / C ++와 쉽게 통합 할 수 있다는 이점이 있습니다.
CPython은 원래를 사용하여 구현되었습니다 C
. Python이 Java (JYthon) 또는 .NET Runtime (IronPython)을 활용할 수 있도록하는 원래 구현에는 다른 포크가있었습니다.
사용하는 구현에 따라 라이브러리 가용성이 다를 수 있습니다. 예를 들어 , Jython 에서는 Ctypes를 사용할 수 없으므로 ctypes를 사용하는 라이브러리는 Jython에서 작동하지 않습니다. 마찬가지로 Java 클래스를 사용하려는 경우 CPython에서 직접 사용할 수 없습니다. 접착제 (JEPP)가 필요하거나 Jython (The Java Implementation of Python)을 사용해야합니다.
답변
CPython은 Global Interpreter Lock 때문에 멀티 스레딩을 실제로 지원하지 않는다는 것을 알아야합니다 . 또한 재귀에 대한 최적화 메커니즘이 없으며 다른 구현 및 라이브러리가 채우려 고 시도하는 다른 많은 제한 사항이 있습니다.
파이썬 위키 에서이 페이지 를 보아야 합니다.
이 페이지 의 코드 스 니펫을 보면 통역사가 무엇인지 알 수 있습니다.