에서 파이썬의 튜토리얼 하나는 파이썬의 원래 구현은 C에 있음을 읽을 수있다;
반면에 C로 작성된 Python 구현은 (...)
파이썬이 C ++가 아닌 C로 작성된 이유가 무엇인지 궁금합니다.
이 결정의 근거가되는 이유를 알고 싶습니다. 답변은 역사적 참고 자료로 뒷받침되어야합니다 (의견이 아닌).
에서 파이썬의 튜토리얼 하나는 파이썬의 원래 구현은 C에 있음을 읽을 수있다;
반면에 C로 작성된 Python 구현은 (...)
파이썬이 C ++가 아닌 C로 작성된 이유가 무엇인지 궁금합니다.
이 결정의 근거가되는 이유를 알고 싶습니다. 답변은 역사적 참고 자료로 뒷받침되어야합니다 (의견이 아닌).
답변:
내가 본 모든 것에서 실용적이고 역사적인 이유의 조합입니다. (주로) 역사적 이유는 CPython 1.0이 1989 년에 출시 되었기 때문입니다. 당시 C는 최근에 표준화되었습니다. C ++ 컴파일러는 아무도 없었기 때문에 C ++은 거의 알려지지 않았고 결정적으로 이식 할 수 없었습니다.
C ++은 오늘날 훨씬 더 널리 보급되어 있지만 쉽게 구할 수 있지만 CPython을 C ++과 호환되는 C의 하위 집합으로 다시 작성하려면 상당한 노력이 필요합니다. 그 작업 자체만으로는 실질적인 이점이 거의 없거나 전혀 없습니다.
소프트웨어 회사가 할 수있는 최악의 실수 인 처음부터 다시 작성하고 완전히 다시 작성하는 것에 대한 Joel의 블로그 게시물 과 비슷 합니다. 필자는 Microsoft의 Windows 3.0 코어에서 Windows NT 코어로의 전환과 Apple의 MacOS 9에서 Mac OS / X 로의 전환을 지적함으로써 반대했습니다. 어느 쪽도 회사를 죽이지 않았지만 둘 다 확실히 크고 비싸고 장기적인 프로젝트였습니다. 또한 둘 다 성공에 결정적인 요소를 지적한다. (대부분의) 사용자는 (적어도인지 된) 이점에 따라 여가 시간에 새로운 코드베이스로 전환 할 수있을 정도로 오랫동안 두 코드베이스를 유지 하는 것이다.
그러나 개발 팀에게는 파이썬의 규모와 같은 종류의 변화가 훨씬 더 어렵습니다. 파이썬 2에서 3으로의 변경조차도 꽤 많은 작업이 필요했으며 비슷한 오버랩이 필요했습니다. 그러나 적어도 그 경우에는 변경 사항에 직접적인 이점이 있으며 C ++ 자체로 다시 쓰는 것이 (적어도 즉시) 제공하지는 않습니다.
C ++에 대한 Linus Torvalds의 분노가 제기되었으므로 이에 대해서도 언급하겠습니다. 귀도에서 내가 본 것은 C ++에 대한 강하고 부정적인 감정이 있다는 것을 나타냅니다. 내가 겪은 최악의 상황에 대해서는 C ++ 을 가르치는 것은 종종 재앙이라는 것이지만, 그는 교사가 C ++을 알지 못했거나 알지 못했기 때문에 이것이 바로 이것이라고 말했다.
또한 많은 C 코드를 비교적 쉽게 C ++로 변환 할 수는 있지만 C ++ 에서 실제로 많은 이점을 얻으려면 그보다 약간 더 많은 재 작성이 필요할뿐만 아니라 관련된 대부분의 개발자에게 상당한 재교육이 필요하다고 생각합니다. 잘 작성된 C ++ 대부분은 같은 작업을 수행하기 위해 잘 작성된 C와 크게 다릅니다. 그것은이다 없는 변화의 문제 malloc
에 new
와 printf
에 cout
상상력의 스트레칭으로.
원래 ANSI C89로 작성된 이유 는 아주 간단하기 때문입니다. 당시 C ++은 다른 컴파일러와의 비 호환성으로 인해 실행 가능한 선택이 아니기 때문입니다. 하나의 컴파일러로 컴파일 된 코드가 다른 컴파일러로 컴파일 된 코드를 호출 할 수있게 해주는 ABI 사양을 만들 때까지 2005 년이 걸렸습니다.
더 흥미로운 질문은 여전히 C89로 작성된 이유 입니다.
사람들은 실제로 C ++과 C99 컴파일러가없는 플랫폼에서 파이썬을 사용하기 때문에 놀라운 대답이 있습니다! Forth에서 영감을 얻은 스레드 코드 인터프리터 최적화가 병합되었을 때 C89의 일부가 아닌 (필수적으로) 코드 가 계산 을 사용했기 때문에 그것에 대해 큰 토론 이있었습니다 goto
. Python이 현재 사용되는 일부 플랫폼에서는이 기능을 사용하지 못할 수 있다는 두려움이 분명히있었습니다.
Unladen Swallow에서도 똑같은 일이 발생했습니다. C ++로 작성된 LLVM을 사용합니다. Unladen Swallow를 CPython에 병합하기위한 요구 사항은 사람들이 Python을 실행하는 플랫폼이 있으므로 C ++ 컴파일러가 없기 때문에 JIT 컴파일러없이 컴파일 할 수 있어야한다는 것이 매우 분명했습니다.
물론 요즘 CPython은 더 이상 유일한 Python 구현이 아닙니다. PyPy는 RPython (정적으로 유형이 지정된 Python의 하위 집합), Java의 Jython, C #의 IronPython, NQP 및 PIR의 Pynie 등으로 작성됩니다.
더 좋은 질문은 "파이썬이 파이썬으로 작성되지 않은 이유는 무엇입니까?"입니다.
요컨대, 파이썬 클래스와 객체에 대한 충분한 프리미티브가 C로 작성되면 나머지 인터프리터를 작성하는 데 사용될 수 있으므로 C ++을 사용하여 아무것도 얻지 못합니다.