2009-02-26 4 views
117

저는 최근에 Stackless Python에 대해 읽었으며 바닐라 cPython과 비교할 때 많은 장점이있는 것으로 보입니다. 무한 재귀, 마이크로 스레드, 연속 등의 멋진 기능을 모두 갖추고 있으며 cPython (the Python wiki이 믿어지면 약 10 %)보다 더 빠릅니다. (버전 2.5 이상, 2.6 이상) 3.0).Stackless Python의 단점은 무엇입니까?

이 모든 것이 사실로보기에는 너무 좋아 보인다. 그러나 TANSTAAFL, 나는 파이썬 커뮤니티에서 스택리스에 대한 열정을 많이 보지 못했으며 PEP 219은 결코 실현되지 않았습니다. 왜 그런가요? Stackless의 단점은 무엇입니까? Stackless 'closet에 어떤 해골이 숨겨져 있습니까?

(나는, 스택리스 진짜 동시성을 제공하지 않습니다 동시 방식으로 프로그래밍 단지 쉬운 방법을 알고있다. 그것은 정말 날 귀찮게하지 않습니다.)

답변

149

Wiki에서 "Stackless is 10 % faster"가 어디서 왔는지는 모르겠지만 그 성능 수치는 측정하지 않았습니다. Stackless가 큰 차이를 만드는 것에 대해 생각할 수 없습니다.

스택리스는 여러 가지 조직/정치적 문제가있는 놀라운 도구입니다.

첫 번째 기록에서 비롯됩니다. Christian Tismer는 약 10 년 전에 결국 Stackless가 된 것에 대해 이야기하기 시작했습니다. 그는 자신이 원했던 것에 대한 아이디어를 가지고 있었지만, 그가 무엇을하고 있으며 왜 사람들이 그것을 사용해야 하는지를 설명하기가 어려웠습니다. 이것은 그의 배경이 코 루틴과 같은 아이디어에 관한 CS 교육을받지 못했고 프레젠테이션과 토론이 매우 구현 지향적 이었기 때문에 부분적으로 그 이유는 부분적으로 말입니다. 그들의 문제.

그런 이유로 초기 문서가 열악했습니다. 타사 기고가들로부터 최고로 그것을 사용하는 방법에 대한 몇 가지 설명이있었습니다. PyCon 2007에서 나는 PyCon 조사 수치에 따라 상당히 잘 진행된 "Using Stackless"에 대한 강연을했습니다. 리차드 테우 (Richard Tew)는 이들을 수집하고, stackless.com을 업데이트하고, 새로운 Python 릴리스가 출시 될 때 배포를 유지 관리하는 데 큰 성과를 올렸습니다. 그는 CCP Games의 직원으로, Stackless를 게임 시스템의 필수 요소로 사용하는 EVE Online 개발자입니다.

CCP 게임은 Stackless에 대해 사람들이 가장 많이 사용하는 실례입니다. Stackless의 기본 자습서는 Grant Olson의 "Introduction to Concurrent Programming with Stackless Python"이며 게임 지향적입니다. 나는 이것이 스택리스가 게임 지향적이라는 사람들에게 왜곡 된 생각을 주었다고 생각한다.

또 다른 어려움은 소스 코드입니다.원래 형태로 파이썬의 많은 부분을 변경해야했기 때문에 파이썬의 귀도 반 로섬 (Guido van Rossum)이주의를 기울였습니다. 그 이유 중 일부는 나중에 "더 높은 수준의 양식이있을 때 goto를 지원하는 것"으로 제거 된 call/cc에 대한 지원이라고 생각합니다. 나는이 역사에 대해 확신하지 못한다. 그래서이 단락은 "Stackless는 너무 많은 변화를 요구했다."라고 읽었다.

이후 릴리스에서는 변경이 필요하지 않았으며, Tismer는 Python에 포함시키기를 계속했습니다. CPython은 파이썬 구현 일뿐 아니라 참조 구현을 의미하며, 자이 썬에서 구현할 수 없기 때문에 스택리스 기능을 포함하지 않는다 (공식적인 견해는 알고있다). 또는 Iron Python.

"코드베이스의 중요한 변경 사항은"에 대한 계획은 전혀 없습니다. Arafangion의 인용문과 참조 하이퍼 링크는 대략 2000/2001 년에 나온 것이다. 구조적인 변화는 오래 전에 끝났고, 위에서 언급 한 바입니다. Stackless는 현재 안정적이고 성숙한 상태이며, 지난 몇 년 동안 코드베이스가 약간 수정되었습니다.

Stackless의 최종 제한 사항 - Stackless에 대한 강력한 지지자가 없습니다. Tismer는 이제 Python for Python의 구현 인 PyPy에 깊이 관여합니다. 그는 PyPy에서 Stackless 기능을 구현했으며 Stackless 자체보다 훨씬 뛰어나다 고 생각하며 PyPy가 미래의 방법이라고 생각합니다. Tew는 Stackless를 유지하지만 그는 옹호에 관심이 없습니다. 나는 그 역할을하고 있다고 생각했지만, 어떻게하면 수입을 낼 수 있는지 알 수 없었다.

스택리스로 교육을 받고 싶다면 contact me을 자유롭게 사용해보십시오! :)

3

또한 여기에 대한 답변에 관심이 있어요. 나는 Stackless와 조금 놀았으며 표준 파이썬에 좋은 추가 된 것처럼 보입니다.

PEP 219는 Python이 다른 스택으로 변경하려는 경우 C 코드에서 Python 코드를 호출 할 때 잠재적 인 어려움을 언급합니다. 이를 탐지하고 방지하는 방법이 필요합니다 (C 스택을 지우는 것을 피하기 위해). 나는 이것이 다루기 힘들다고 생각합니다. 그래서 Stackless가 왜 독자적으로서야하는지 궁금합니다.

+3

PEP (219)은 9 살 진지 오래된 것입니다. "C 코드에서 Python 코드 호출"의 어려움은 PEP에서 논의 된 구현에만 있으며 스택리스가 아닙니다. PEP의 이름 ("Stackless Python")은 다소 잘못된 이름입니다. Stackless에서 영감을 얻었습니다. –

4

올바르게 기억한다면 Stackless는 공식 CPython에 포함될 예정이지만 스택이없는 저자는 CPython 사용자에게 코드베이스에 대한 중요한 변경을 계획했기 때문에 그렇게 말하지 않았습니다. 프로젝트가 성숙한 이후에 통합이 이루어졌습니다.

+1

출처이 흥미로운 걸 알지만, 네가 그렇게 말했기 때문에 분명히 너를 믿을 수가 없어. 네가 틀렸다면 나는 바보를 보았을 것이다. 그리고 내가 얼마나 재미 있었는지 이야기하기 시작했다. –

+2

우수한 점. 그것이 참고를 가지고 있지 않아서 죄송합니다. #python의 freenode에있는 irc 대화에 있었기 때문에, http://gnosis.cx/download/charming_python_10_outtakes.html에서 고대 메일 링리스트 대화를 찾을 수있었습니다. 상황에 대한 더 많은 통찰력. – Arafangion

+0

링크가 정말 좋습니다. 그것은 내 질문에 많이 답합니다. –

34

이 토론을 찾기에는 꽤 오래 걸렸습니다. 저 시간에 나는 PyPy에이지 않으며 건강이 이것 모두를 확실히 멈출 때까지 psyco와 가진 2 년 일이, 갑자기 있었다. 이제 다시 활성화되어 대체 접근 방식을 설계했습니다. EuroPython 2012에 표시됩니다.

Andrews 진술의 대부분은 맞습니다. 일부 작은 추가 :

인터프리터 루프를 최적화했기 때문에 스택리스는 10 년 전 CPython보다 훨씬 빠릅니다. 그 때 귀도는 그 준비가되어 있지 않았습니다. 몇 년 후, 사람들은 비슷한 최적화와 더 좋은 것들을 만들었습니다. 스택리스는 예상대로 느려졌습니다.

포함 : 글쎄, 처음에는 매우 뻔뻔스러워서 Stackless가 갈 길이라고 확신했습니다. 나중에, 거의 포함시킬 수있을 때, 나는 그것에 관심을 잃었고, 을 부분적으로는 좌절로부터이 방법으로 유지하게하고, 부분적으로 은 스택리스를 제어합니다.

이 인수가 사용될 수있는 다른 예제가 있기 때문에 "다른 구현에서는 사용할 수 없습니다."와 같은 인수는 나에게 항상 절름촉으로 느꼈습니다. 나는 그 사실을 잊어 버리고 자신의 배포판을 가지고 귀도와 좋은 우호 관계를 유지할 것이라고 생각했습니다.

한편으로는 다시 변하고 있습니다. 나는 그것에 대해 때로는 나중에

건배를 말할 것인가 확장으로 PyPy와 스택리스에서 일하고 있어요 - 크리스

+0

통찰력을 주셔서 감사합니다, 크리스. :) –

관련 문제