Domanda

Sto pensando qualcosa di simile CPS per l'utilizzo in un interprete per un linguaggio basato attore.

Gli argomenti della funzione sono passati in una matrice di varianti, e la continuazione restituiti nella stessa matrice, quindi una semplice funzione

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

così una chiamata dalla lettura / eval / loop sarebbe

print( add(7, 5) )

sarebbe in entrata essere

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

dove _ è uno slot vuoto in cui viene scritto il valore della funzione di ritorno.

Al successivo passo di esecuzione, gli argomenti diventano

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

poi

[repl, ...]

e così via. L'implementazione in C è fondamentalmente

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

con controlli per scappare alla fine dell'array args e allocare più spazio.

Gli argomenti sono contigui, e 'prosecuzione' come oggetto è solo un sottoinsieme degli argomenti.

Se dovessi implementare continuazioni di prima classe, avrebbero bisogno di clonazione matrice di argomento; anche voi non si ottiene chiusure gratuitamente. L'obiettivo principale è qualcosa che gioca bene con la semplice generazione di codice macchina, e consente di sospendere e riprendere l'esecuzione.

Anche se questo schema è stato ispirato da pensarci CPS, non è del tutto CPS, ed è molto simile a quello che uno stack C aggressivo rifilato potrebbe essere simile - solo le variabili dal vivo, ei punti di cambio di ciascuna funzione.

C'è un nome per questo stile, e in particolare la matrice di argomento? E 'una sorta di trampolini + uno stack, anche se quello che io sono abituato a chiamare 'pila' è più la storia, piuttosto che il futuro di esecuzione.

È stato utile?

Soluzione

Questo è quasi Forth. Avere uno stack di prima classe è più o meno come avere continuazioni.

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