Domanda

Penso di capire (in generale) cosa shift e reset significare. Tuttavia non capisco perché siano nominati così? Cosa fare shift e reset Poiché le primitive delimitate di continuazione hanno a che fare con le parole "shift" e "reset" in inglese?

È stato utile?

Soluzione

Si chiamano così a causa del modo in cui vengono implementati (in generale).

Citato da Implementazione diretta di Maiusc e Reset nel compilatore Mincaml

Interpretando un programma usando la semantica di continuazione, possiamo considerare lo stato del programma come uno stack di continuazione. Quindi, reset può essere considerato come segnare lo stack di continuazione e shift catturare lo stack di continuazione fino al segno più vicino creato da reset. Ecco la panoramica dell'implementazione:

  • Quando si chiama reset, imposta a Ripristina il segno allo stack
  • Quando si chiama shift (fun k -> M), muoversi una parte dei cornici dello stack fino al segno di ripristino più vicino al mucchio
  • Quando si chiama una continuazione k, imposta a Ripristina il segno allo stack e copiare i frame corrispondenti dal heap nella parte superiore dello stack.

Un segno di ripristino viene inserito quando k si chiama, perché le continue catturate vengono eseguite in una continuazione vuota.

Altri suggerimenti

Perché è così che Danvy & Filinski ha chiamato quei due operatori in Il primo documento in cui hanno esposto quel modello di stile di passaggio di continuazione (Guarda anche qui), ed è ciò che Scala implementa.

L'implementazione in Scala è descritta in questo altro documento. Il riferimento in esso a Danvy & Filinski è chiaro:

In questo documento, studiamo l'aggiunta degli operatori di controllo che si spostano e si ripristiniamo a questo framework linguistico, che insieme implementano continuazioni delimitate statiche (Danvy e Filinski 1990, 1992)

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