Design: Suporte de chamada de cauda adequado

Criado em 18 jun. 2015  ·  3Comentários  ·  Fonte: WebAssembly/design

O webassembly suportará chamadas de cauda adequadas? Atualmente, há um link em https://github.com/WebAssembly/design/blob/master/AstSemantics.md#control -flow-structure que menciona um "recurso de chamada final adequada com restrição de assinatura", sugerindo que esse suporte foi considerado, mas o link se refere a uma âncora ausente na página de recursos pós MVP: https://github.com/WebAssembly/design/blob/master/PostMVP.md#signature -restricted-Proper-tail-calls

Se a resposta for "talvez", qual é a melhor maneira de contribuir para ajudar nesse apoio?

Comentários muito úteis

Sim, as chamadas finais adequadas serão suportadas, mas provavelmente não no MVP. Isso será especialmente útil para linguagens funcionais que contam com otimização de chamada final garantida. Veja as discussões nos itens 33 e 44. Como é suportado ainda está no ar, pois precisa de experimentação e medições de desempenho.

Todos 3 comentários

Sim, as chamadas finais adequadas serão suportadas, mas provavelmente não no MVP. Isso será especialmente útil para linguagens funcionais que contam com otimização de chamada final garantida. Veja as discussões nos itens 33 e 44. Como é suportado ainda está no ar, pois precisa de experimentação e medições de desempenho.

Eu olhei o nº 33 e o nº 44, e o nº 45 também parece relacionado. Mas não acredito que a chamada final adequada possa ser alcançada por meio de qualquer mecanismo baseado na análise de fluxo de controle (seja o controle de fluxo irredutível suportado ou não).

Como você disse, as linguagens funcionais contam com otimizações de chamada final garantidas, embora tal terminologia seja desaprovada porque convida à confusão com o tipo de TCO executado pelos compiladores C / C ++ / etc, onde várias restrições podem ser impostas sobre quais chamadas são elegíveis. Portanto, o termo "chamadas de cauda adequadas" é usado em seu lugar. Em uma linguagem com chamadas de cauda adequadas, qualquer chamada em uma posição de cauda é necessária para liberar o armazenamento ocupado pelo quadro de ativação de chamada. Isso inclui chamadas indiretas, daí a dificuldade de análise de fluxo de controle local. Portanto, compiladores / tempos de execução de linguagem funcional geralmente têm operações de chamada final explícitas e convenções de chamada para apoiá-los.

É ótimo que você esteja aberto à ideia de suporte de chamada final adequado, e posso entender que esse problema está fora do escopo do MVP. Mas, em vez de apenas fechá-lo, ele poderia ser deixado em aberto, mas com um rótulo pós-MVP / post-qualquer / icebox, de modo que fique claro que o assunto ainda não foi resolvido?

Opa, desculpe, não tive a intenção de fechar antes de corrigir a documentação. Abri o nº 190 para resolver esse problema (e encerrar esse problema). Estamos movendo questões para o texto do design, uma vez que torna mais fácil para os novos leitores entender o estado das coisas em vez de ler todo o estado dos problemas arquivados.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

jfbastien picture jfbastien  ·  6Comentários

nikhedonia picture nikhedonia  ·  7Comentários

bobOnGitHub picture bobOnGitHub  ·  6Comentários

mfateev picture mfateev  ·  5Comentários

ghost picture ghost  ·  7Comentários