Qual è la differenza tra una continuazione (come in Smalltalk) e un interrupt (come in un assemblatore)?
-
03-07-2019 - |
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!
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.