Sono contento della risposta di Adrej, ma vorrei approfondire ulteriormente.
Per cominciare, la semantica denotazionale vuole dire qualcosa del tipo "il significato di questa notazione è quello". Un vero semantico vorrebbe immaginare che i significati siano ciò che esiste nella nostra mente e le notazioni sono solo un modo per esprimere quei significati. Da ciò deriva il requisito secondo cui la semantica denotazionale dovrebbe essere compositiva. Se i significati sono primari e le notazioni secondarie, allora non abbiamo altra scelta che definire i significati di notazioni più grandi come funzioni dei significati dei loro costituenti.
Se accettiamo questo punto di vista, allora una buona semantica denotazionale deve catturare i significati che presumiamo di avere nella nostra mente. Qualsiasi semantica compositiva non si adatterebbe necessariamente al conto. Se trovo una definizione semantica compositiva e nessuno è d'accordo sul fatto che affermi qualsiasi significato abbiano in testa, allora è di scarsa utilità. La semantica dei giochi è attualmente in questa situazione. È una definizione compositiva e tecnicamente abbastanza forte, ma pochissime persone concordano sul fatto che abbia qualcosa a che fare con i significati che hanno in mente.
Detto questo, qualsiasi definizione compositiva presenta vari vantaggi tecnici. Possiamo usarlo per verificare equivalenze o altre proprietà per induzione sulla sintassi dei termini. Possiamo usarlo per verificare la solidità dei sistemi di prova, sempre per induzione sulla sintassi dei termini. Possiamo verificare la correttezza dei compilatori o delle tecniche di analisi del programma (che, per loro natura, sono definite dall'induzione sulla sintassi). Una definizione semantica completamente astratta presenta vantaggi ancora più tecnici. Puoi usarlo per mostrare che due programmi non sono equivalenti, cosa che non puoi fare con nessuna semantica compositiva arbitraria. Una definizione semantica completamente definibile è persino migliore. Qui i domini semantici hanno esattamente ciò che puoi esprimere nel linguaggio di programmazione (con alcune disposizioni). Quindi, puoi enumerare i valori nei domini per vedere quali valori ci sono, il che sarebbe difficile da fare con le notazioni sintattiche. Per tutti questi motivi, la semantica dei giochi ha un punteggio brillante.
Tuttavia, le definizioni semantiche compositive hanno perso il loro vantaggio nel corso degli anni. Robin Milner e Andy Pitts hanno sviluppato una serie di tecniche di " ragionamento operativo ", che lavorano esclusivamente sulla sintassi ma usando la semantica operativa dove necessario per parlare di comportamento. Queste tecniche di ragionamento operativo sono a bassa tecnologia. Nessuna matematica elaborata. Nessun oggetto infinito. Possiamo insegnare loro a laureandi e chiunque può usarli. Quindi, molte persone si chiedono perché abbiamo bisogno della semantica denotazionale. (Martin Berger è probabilmente in questo campo.)
Personalmente, non ho problemi ad avere molti strumenti nella mia cassetta degli attrezzi. Le tecniche denotazionali potrebbero avere un punteggio migliore per alcuni problemi e tecniche operative per altri. I ricercatori che sviluppano la teoria potrebbero essere meglio sintonizzati su un approccio o sull'altro. Abbastanza spesso, possiamo sviluppare le intuizioni in un approccio e trasferirle nell'altro approccio. (Molto del lavoro di Andy Pitts è di questo tipo. La parametricità relazionale è stata sviluppata nel contesto denotazionale ma è in grado di capire come riaffermarlo come ragionamento operativo. Quando lo guardo, dico "wow, non avrei mai ho pensato che sarebbe stato possibile. "Anche la logica di separazione sta andando in questo modo. Steve Brookes ha fornito una prova di validità di 60 pagine per la logica di separazione simultanea usando la semantica denotazionale.
Gli approcci operativi ottengono ottimi risultati anche quando i linguaggi di programmazione diventano molto elaborati, con tutti i tipi di tipi di ordine superiore. Potremmo non avere idea di come modellare queste cose matematicamente. Oppure, i modelli matematici standard potrebbero rivelarsi incoerenti sotto lo stress del loopiness. (Ad esempio, vedi "Il polimorfismo non è una teoria teorica" di Reynolds.) Approcci operativi che funzionano esclusivamente sulla sintassi possono schierare nettamente tutti questi problemi matematici.
Un altro approccio che è intermedio tra approccio operativo e approccio denotazionale è la realizzabilità . Invece di lavorare con termini sintattici come negli approcci operativi, andiamo in parte denotativi usando qualche altra forma di rappresentanti matematici. Questi rappresentanti potrebbero non qualificarsi come veri e propri "significati" denotazionali, ma sarebbero almeno un po 'più astratti dei termini sintattici. Ad esempio, per il calcolo lambda polimorfico, possiamo prima dare significati a termini non tipizzati (in alcuni modelli del calcolo lambda non tipizzato) e quindi usarli come rappresentanti ("realizzatori") per fare un po 'di "ragionamento operativo" livello più astratto.
Quindi, lascia che ci sia una sana competizione tra approcci denotazionali, operativi e di realizzabilità. Non c'è nulla di male.
D'altra parte, potrebbe esserci anche una competizione "malsana" in crescita tra i diversi approcci. Le persone che lavorano con un approccio potrebbero esserne così strettamente legate da non vedere il punto degli altri approcci. Idealmente dovremmo essere tutti consapevoli dei punti di forza e di debolezza dei diversi approcci e sviluppare un atteggiamento scientifico nei loro confronti anche se non sono i nostri preferiti individuali.