Pergunta

Estou pensando em algo como CPS para uso em um intérprete para uma linguagem baseada ator.

Os argumentos de função são passados ??em uma matriz de variantes, e a continuação devolvido na mesma matriz, portanto, uma função simples

def add (x,y) => x + y

para uma chamada a partir da leitura / eval / loop seria

print( add(7, 5) )

iria sobre a entrada ser

[&add, x, y, &print, _, &repl, ...]

onde _ é um espaço vazio onde o valor de retorno de função é escrito.

Na próxima etapa da execução, os argumentos se tornam

[&print, 12, &repl, ...]

então

[repl, ...]

e assim por diante. A implementação em C é basicamente

for (;;)
   args = (args[0].function_pointer)(args);

com cheques para correr o final da matriz args e alocando mais espaço.

Os argumentos são contíguos, eo 'continuação' como um objeto é apenas um subconjunto dos argumentos.

Se eu fosse para implementar continuações de primeira classe, eles precisariam de clonagem a matriz argumento; você também não recebem fechamentos gratuitamente. O objetivo principal é algo que desempenha bem com simples geração de código de máquina, e permite que você suspender e execução currículo.

Embora este regime foi inspirado pelo pensamento sobre CPS, não é bastante CPS, e é muito semelhante ao que uma pilha C aparado de forma agressiva pode parecer - apenas as variáveis ??ao vivo, e os pontos de retorno para cada função.

Existe um nome para esse estilo, e em particular a matriz argumento? É uma espécie de trampolins + uma pilha, embora o que eu estou acostumado a chamar 'pilha' é mais a história, em vez do futuro da execução.

Foi útil?

Solução

Isso é quase Forth. Ter uma pilha de primeira classe é praticamente como ter continuações.

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