Qual è la differenza fondamentale tra la semantica operativa di piccole e grandi dimensioni?
Sto facendo fatica a capire di cosa si tratta e la motivazione per avere i due.
x = 0; while ( true ) { x = x + 1; }
?
Qual è la differenza fondamentale tra la semantica operativa di piccole e grandi dimensioni?
Sto facendo fatica a capire di cosa si tratta e la motivazione per avere i due.
x = 0; while ( true ) { x = x + 1; }
?
Risposte:
La semantica a piccoli passi definisce un metodo per valutare le espressioni un passo di calcolo alla volta. Formalmente parlando, una semantica a piccoli passi per un linguaggio di espressione è una relazione chiamato la relazione di riduzione . La semantica a piccoli passi descrive in dettaglio ciò che accade a un'espressione. È in grado di fornire un resoconto preciso anche di programmi non terminanti, con una catena infinita da . Un programma di terminazione è tale che termina con un valore tale che . \ newcommand {\ llbracket} {[\! [} \ newcommand {\ rrbracket} {] \!]}→ : E × E e 0 → e 1 → e 2 → … e 0 → e 1 → ⋯ → v ∀ e ′ ∈ E , v ↛ e ′
All'altra estremità dello spettro c'è la semantica denotazionale . La semantica denotazionale assegna un "significato" a ciascuna espressione. È una funzione dalle espressioni alle denotazioni: ( è chiamato dominio). Lo spazio delle denotazioni può essere completamente estraneo allo spazio sintattico, ad esempio potrebbero essere espressioni valutate in un numero e potrebbe essere un insieme di numeri come o .
La semantica dei grandi passi è un po 'nel mezzo. Una semantica big-passo su un linguaggio di espressione e un insieme di valori è un rapporto . Collega un'espressione al suo valore (possibilmente valori multipli se la lingua non è deterministica). Spesso, un valore speciale viene utilizzato per le espressioni non terminanti.V ⇓ : E × V ⊥
Quindi perché abbiamo queste tre nozioni? Tutte queste nozioni possono modellarsi a vicenda, ma il modello aggiunge un certo grado di complessità.
Dal punto di vista operativo, la semantica a piccoli passi corrisponde a guardare ogni operazione eseguita da un interprete per la lingua. La semantica big-step esamina solo il valore risultante. La semantica denotazionale esamina un'interpretazione matematica che può o meno avere a che fare con ciò che accade su un computer.
La semantica a piccoli passi è la più ovvia. Fornisce chiaramente informazioni utili su programmi non terminanti. Più in generale, fornisce informazioni dettagliate sul comportamento del programma.
La semantica denotazionale trasforma i costrutti sintattici in oggetti matematici arbitrari; può esprimere ciò che gli scienziati vogliono (puoi definire la denotazione di un'espressione come tutte le possibili catene di riduzione da essa), ma a costo di aggiungere un livello di complessità. Viene utilizzato quando vogliamo sottrarre alcuni dettagli, ad esempio come viene valutata l'espressione.
La semantica del grande passo è nel mezzo: estrae i dettagli della valutazione ma mantiene la natura sintattica del risultato. Di solito il concetto viene utilizzato quando è presente una semantica a piccoli passi sottostante, come modo per esprimere concisamente “ "come" ". In tali costruzioni, mentre i concetti sono molto diversi (uno ci consente di parlare di singole fasi di calcolo e di programmi non terminanti, l'altro no), le definizioni appariranno molto simili, perché in questo caso le regole che definiscono il la semantica big-step ha fondamentalmente la forma "if e ... e eè un valore quindi ”.
3
in ((2+1)+1)⇓3
"suppongo che" denotazionale sia un valore fondamentale, ma in quale caso il "grande passo" non si assocerebbe necessariamente direttamente a quello? La differenza ha qualcosa a che fare con il contesto, ad esempio a (a + 1)
seconda dell'ambiente che contiene a
?
3