Qual è la differenza tra una continuazione (come in Smalltalk) e un interrupt (come in un assemblatore)?

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

Domanda

Faccio fatica a capire il concetto di Continuations (come usato in Seaside with Smalltalk). Uno snippet di Wikipedia dice:

  

" ... si riferiscono a continuazioni di prima classe, che sono costrutti che danno a un linguaggio di programmazione la possibilità di salvare lo stato di esecuzione in qualsiasi punto e tornare a quel punto in un punto successivo del programma ... "

Non è semplicemente un altro modo di esprimere ciò che un programmatore assembler farebbe quando programmava un interrupt? O ho completamente perso il punto!

È stato utile?

Soluzione

Una continuazione può essere vista come una copia istantanea del processo in esecuzione. Catturare una continuazione significa che l'attuale processo viene copiato e messo da parte. Successivamente, il codice continua a essere eseguito normalmente. Valutare una continuazione significa che il processo corrente è terminato e quello copiato viene ripreso esattamente nello stato in cui è stato catturato. Le continuazioni possono in genere essere riprese più volte.

Un interrupt è più simile a un coroutine, dove ci sono due diversi thread di esecuzione (codice dell'applicazione, gestore di interrupt) che si alternano tra loro.

Altri suggerimenti

Le continuazioni sono all'incirca equivalenti a setjump / longjump in C. Puoi aspettarti che il tuo contesto sia intatto quando chiami la continuazione (stack, flag, registri, puntatore di istruzioni e così via) dopo averlo lasciato. Quindi è simile a una chiamata di interruzione del software, tranne per il fatto che non è necessario restituire (o più precisamente, chiamare la continuazione) al termine del gestore e la continuazione non è implicita.

In qualche modo sono simili. Tuttavia, le continuazioni vengono chiamate dal programma stesso e gli interruzioni vengono generalmente generati dalla CPU o dai dispositivi sul computer. Inoltre, un interrupt è più simile a un segnale C, viene appena chiamato e quindi il controllo ritorna al programma. L'interruzione è responsabile del salvataggio dello stato e del ripristino successivo.

Inoltre, va notato che è possibile implementare facilmente continuazioni in assemblatore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top