Qual é a diferença entre uma continuação (como em Smalltalk) e uma interrupção (como em um Assembler)?

StackOverflow https://stackoverflow.com/questions/815431

Pergunta

Eu estou lutando para entender o conceito de Continuations (como o usado em Seaside com Smalltalk). Um trecho da Wikipedia diz:

"... consulte continuações de primeira classe, que são construções que dão uma linguagem de programação a capacidade de salvar o estado de execução em qualquer ponto e retorno a esse ponto em um ponto mais tarde no programa ..."

Não é este simplesmente outra maneira de expressar o que um programador assembler faria ao programar uma interrupção? Ou eu perdi completamente o ponto!

Foi útil?

Solução

A continuação pode ser visto como uma cópia instantâneo do processo em execução. Capturando um meio de continuação que o processo atual é copiado e colocado de lado. Depois disso, o código continua a executar normalmente. Avaliando um meio de continuação que o processo actual é terminada eo copiado é retomado exatamente no estado em que foi capturado. Continuações geralmente pode ser retomado várias vezes.

Uma interrupção é mais como uma co-rotina, onde existem dois threads de execução diferentes (código do aplicativo, manipulador de interrupção) que intercalam uns aos outros.

Outras dicas

Continuations são aproximadamente equivalentes a setjump / longjump em C. Você pode esperar seu contexto estar intacto quando você chamar a continuação (pilha, bandeiras, registros, ponteiro de instrução e assim por diante) depois de sair dela. Por isso, é semelhante a um software de interrupção de chamada, exceto que você não tem que retornar (ou mais precisamente, chamar a continuação) após a conclusão do manipulador ea continuação não é implícito.

Em alguns aspectos eles são semelhantes. No entanto, continuações são chamados pelo próprio programa, e as interrupções são geralmente gerado pelo CPU ou dispositivos no computador. Além disso, uma interrupção é mais como um sinal de C, é apenas chamado e, em seguida, o controle retorna ao programa. A interrupção é responsável por salvar estado e restaurá-lo mais tarde.

Além disso, deve-se notar que você pode implementar continuações com bastante facilidade em assembler.

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