Pergunta

Eu tenho lido recentemente sobre Stackless Python e parece ter muitas vantagens em comparação com baunilha CPython. Ele tem todos os recursos interessantes como recursão infinita, microroscas, continuações, etc, e ao mesmo tempo é mais rápido que CPython (cerca de 10%, se o Python wiki é para ser acreditado) e compatível com (pelo menos versões 2.5, 2.6 e 3.0).

Todos estes olhares quase demasiado bom para ser verdade. No entanto, TANSTAAFL , eu não vejo muito entusiasmo para Stackless entre a comunidade Python, e PEP 219 nunca entrar em realização. Por que é que? Quais são as desvantagens de Stackless? O que esqueletos estão escondidos no armário Stackless'?

(eu sei que Stackless não oferecer concorrência real, apenas uma maneira mais fácil de programar de forma simultânea. Realmente não me incomoda.)

Foi útil?

Solução

Eu não sei onde que "Stackless é 10% mais rápido" na Wiki veio, mas, novamente eu nunca tentei medir esses números de desempenho. Eu não posso pensar no que Stackless faz para fazer uma diferença tão grande.

Stackless é uma ferramenta incrível com vários problemas organizacionais / políticas.

A primeira vem da história. Christian Tismer começou a falar sobre o que eventualmente se tornou Stackless cerca de 10 anos atrás. Ele tinha uma idéia do que ele queria, mas tinha dificuldade em explicar o que estava fazendo e por que as pessoas devem usá-lo. Isto é parcialmente porque o seu fundo não têm a formação CS sobre idéias como co-rotinas e porque suas apresentações e discussões são muito implementação orientada, que é difícil para quem não já hip-profundas em continuações para entender como usá-lo como uma solução para seus problemas.

Por essa razão, a documentação inicial era pobre. Houve algumas descrições de como usá-lo, com o melhor de contribuintes de terceiros. No PyCon 2007 dei uma palestra sobre " Usando Stackless ", que passou por cima muito bem, de acordo com o números da pesquisa PyCon. Richard Tew tem feito um grande trabalho coletando estes, atualizando stackless.com , e manter a distribuição quando novos lançamentos Python vem à tona. Ele é um empregado de CCP Games , desenvolvedores do EVE Online, que usa Stackless como uma parte essencial de seu sistema de jogo.

jogos CCP também é o maior exemplo do mundo real as pessoas usam quando falam sobre Stackless. A principal tutorial para Stackless é Grant Olson do " Introdução à Programação Concorrente com Stackless Python " , que também é orientada jogo. Eu acho que isso dá às pessoas uma ideia enviesada que Stackless é jogos orientados, quando é mais que os jogos são mais facilmente orientados continuação.

Outra dificuldade tem sido o código-fonte. Em sua forma original exigia mudanças em muitas partes do Python, o que fez Guido van Rossum, a liderança Python, cauteloso. Parte da razão, penso eu, foi o suporte para a chamada / cc que foi removido mais tarde como sendo "muito como apoio um goto quando há melhores formas de alto nível." Eu não estou certo sobre esta história, por isso leia este parágrafo como "Stackless costumava exigir muitas mudanças."

Versões posteriores não requerem as alterações e Tismer continuou a empurrar para a sua inclusão em Python. Embora tenha havido alguma consideração, a posição oficial (tanto quanto eu sei) é que CPython não é apenas uma implementação de Python mas isso é dito como uma implementação de referência, e que não irá incluir a funcionalidade Stackless porque não pode ser implementado por Jython ou Iron Python.

Não há absolutamente nenhum plano para " mudanças significativas para a base de código ". Essa citação e referência hiperlink de Arafangion do (veja o comentário) são de cerca de 2000/2001. As mudanças estruturais têm sido feito, e é o que eu mencionei acima. Stackless como é agora é estável e maduro, com apenas pequenos ajustes para o código base ao longo dos últimos anos.

Uma limitação final com Stackless - não há forte defensor de Stackless. Tismer agora está profundamente envolvido com PyPy , que é uma implementação do Python para Python. Ele implementou a funcionalidade Stackless em PyPy e considera muito superior a si Stackless, e sente que PyPy é o caminho do futuro. Tew mantém Stackless mas ele não está interessado em advocacia. Eu considerei estar nesse papel, mas não podia ver como eu poderia fazer uma renda a partir dele.

Embora se você quiser treinamento em Stackless, não hesite em contato me :!)

Outras dicas

demorou bastante tempo para encontrar essa discussão. Em que vez que eu não estava no PyPy, mas teve um caso de 2 anos com psyco, até que a saúde parou tudo isso muito abruptamente. Agora estou novamente ativo e projetar um abordagem alternativa -. irá apresentá-lo em EuroPython de 2012

A maioria das declarações Andrews estão corretas. Alguns pequenas adições:

Stackless foi significativamente mais rápido do que CPython, 10 anos atrás, porque eu otimizada do circuito intérprete. Naquela época, Guido não estava pronto para isso. Alguns anos mais tarde, as pessoas fizeram otimizações semelhantes e até mais e os melhores, o que torna Stackless um pouco mais lento, como esperado.

No inclusão: Bem, no começo eu era muito insistente e convencido de que Stackless é o caminho a percorrer. Mais tarde, quando era quase possível obter incluído, eu perdi o interesse nisso e preferiu deixar -lo ficar assim, parcialmente por causa da frustração, parcialmente manter o controle de Stackless.

Os argumentos como "outras implementações não pode fazê-lo" sentiu sempre coxo para mim, uma vez que existem outros exemplos onde este argumento também poderiam ser usados. Achei melhor me esquecer isso e ficar em boa amizade com Guido, ter a minha própria distro.

Enquanto isso, as coisas estão mudando novamente. Eu estou trabalhando em PyPy e Stackless como uma extensão vamos falar sobre isso às vezes mais tarde

Felicidades - Chris

Se bem me lembro, Stackless foi programado para inclusão no CPython oficial, mas o autor de stackless disse o pessoal CPython não fazê-lo, porque ele planejava fazer algumas mudanças significativas para a base de código - presumeably ele queria a integração feito mais tarde, quando o projeto estava mais maduro.

Eu também estou interessado nas respostas aqui. Eu joguei um pouco com Stackless e parece que seria um bom complemento sólido para Python padrão.

PEP 219 faz menção a possíveis dificuldades com a chamada código Python a partir do código C, se Python quer mudar para uma pilha diferente. Não precisaria haver maneiras de detectar e prevenir esta (para evitar destruindo a pilha C). Eu acho que isso é, porém tratável, então eu também estou querendo saber por que Stackless deve ficar por conta própria.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top