Come si prevede di utilizzare socket aperti con continuazioni [delimitate]?

4

Sto cercando di capire come un socket aperto o un handle di file dovrebbero interagire con le continuazioni. La ricerca ha rivelato che dynamic-wind è probabilmente parte della soluzione, ma sono più interessato alla metodologia piuttosto che all'implementazione e tutto quello che ho potuto trovare è come implementarlo in varie condizioni.

I programmatori utilizzano persino socket all'interno di continuazioni in modo tale che per dynamic-wind sia necessario chiuderli? O è tipicamente solo un modo per implementare un blocco "finally" se la continuazione esce dopo la gestione del socket?

Cosa dovrebbe succedere se una continuazione viene reinserita dopo che un'ipotetica dynamic-wind chiude il socket?

    
posta John Cartwright 23.05.2013 - 08:35
fonte

1 risposta

1

È normale chiudere automaticamente file, socket e altre risorse quando il programma utilizza una continuazione (o un'eccezione, che spesso viene implementata usando le continuazioni) per uscire da un contesto. Ci sono spesso procedure di libreria che aiutano a farlo automaticamente; per esempio, vedi Racket call-with-input-file * , call-with-semaphore , ecc. Tutti usano dynamic-wind nella loro implementazione .

Spesso è difficile scrivere codice che usi o gestisca correttamente le risorse in presenza di continuazioni. Ad esempio, se un file viene chiuso quando il controllo salta, dovrebbe essere riaperto quando il controllo salta di nuovo dentro? Se è così, forse deve essere aperto in una modalità diversa la seconda volta, ad esempio aggiungi invece di troncare. Ma ora potrebbe essere difficile garantire che l'output sia ben formato; i salti di continuazione possono significare che le parti vengono scritte più volte, fuori uso, ecc. E così via. Quindi è spesso utile semplicemente proibire la continuazione dei salti in un contesto una volta uscito. Racket fornisce call-with-continuation-barrier per questo scopo, ma può anche essere fatto con dynamic-wind e una variabile mutabile.

La storia è quasi la stessa per le continuazioni delimitate. Ad esempio, shift salta oltre i limiti e applica la procedura che ti permette di superare i limiti di contesto acquisiti.

    
risposta data 23.05.2013 - 18:49
fonte

Leggi altre domande sui tag