Libri sulla semantica del linguaggio di programmazione


31

Ho letto " Semantics with Applications " di Nielson & Nielson e mi piace molto l'argomento. Mi piacerebbe avere un altro libro sulla semantica del linguaggio di programmazione, ma posso davvero ottenerne solo uno.

Ho dato un'occhiata al libro Turbak / Gifford , ma è troppo lungo; Pensavo che Winskel sarebbe andato bene, ma non ho accesso ad esso (non è nella nostra biblioteca universitaria, e ho poco denaro), e non sono nemmeno sicuro che non sia datato. Slonneger sembra OK, ma la parte pratica lo rende un po 'troppo lungo e non sono molto a mio agio con il suo stile.

Quindi la mia domanda è: Winskel è un buon libro? Ed è datato?

Inoltre, ci sono altri libri concisi sull'argomento?


5
aggiunti collegamenti alle pagine dei publisher per tutti i libri. potrebbe essere utile per gli altri che cercano di navigare.
Suresh Venkat,

2
A quale tipo di semantica sei interessato? Denotazionali? Operativa? Una panoramica?
Ohad Kammar,

@Ohad Kammar: sono interessato a entrambi.
Jay,

Risposte:


31

Dipende tutto da quanto vuoi andare in profondità e quanto sai già. Per un principiante, il libro di Winksel è davvero bello, ma sì, non ti sta introducendo allo stato dell'arte della semantica come è stato scritto circa 20 anni fa. Tuttavia è ancora una buona prima introduzione all'argomento. Potrebbe anche valere la pena sottolineare che T. Nipkow ha formalizzato una parte sostanziale del libro di Winskel in Isabelle / HOL, vedi qui . Quindi, se vuoi imparare a usare gli assistenti di correzione interattivi insieme alla comprensione della semantica dei linguaggi di programmazione, hai molto materiale coerente su cui attingere.

Altri libri più avanzati sono:

  • Gunter, Semantics of Programming Languages , un libro più avanzato incentrato sulla semantica denotazionale, un approccio alla semantica, che non è stato all'altezza delle aspettative. Si concentra su linguaggi puramente funzionali e ignora la concorrenza. Questo è il libro da cui mi sono insegnato la semantica come studente universitario, e in retrospettiva vorrei invece aver usato il libro di Winksel. Gunter non è una lettura facile per un principiante.

  • Domini e lambda-calculi di Amadio e Curien. Un altro libro verrà scritto più nella tradizione teorica del dominio, anche se discute i calcoli dei processi.

  • I libri di John Mitchell che sono già stati menzionati sopra. Riguardano anche principalmente il calcolo sequenziale.

Libri come TAPL di Pierce sono molto belli, ma si concentrano strettamente su un aspetto dei linguaggi di programmazione, vale a dire i tipi, tanto importante quanto quello. Non lo consiglierei come prima introduzione all'area generale dei linguaggi di programmazione, ma è obbligatorio leggere per chiunque voglia conoscere i tipi.

A dire il vero, penso che attualmente non ci sia un libro introduttivo aggiornato sulla semantica del linguaggio che rifletta i sostanziali progressi dell'ultimo decennio, con il suo passaggio decisivo dai metodi denotazionali e dal calcolo sequenziale alla concorrenza (calcoli di processo e semantica di gioco) , semantica assiomatica e l'uso di assistenti di prova interattivi nella verifica.

Aggiornamento 22 aprile 2014: Tobias Nipkow e Gerwin Klein hanno pubblicato un nuovo libro

che può essere visto come "Winskel in Isabelle / HOL". È un'introduzione alla semantica dei linguaggi di programmazione (principalmente operativa e assiomatica) ma a differenza dei precedenti approcci basati su carta e penna, questo libro esprime tutta la sua matematica in Isabelle / HOL. In altre parole, è allo stesso tempo un libro sulla dimostrazione del teorema.

Il libro è nuovo di zecca quindi non ho usato per insegnare, ma sembra davvero adatto come introduzione che è lanciata a un livello inferiore rispetto a Software Foundations di Pierce et al.


2
C'è uno spostamento dai metodi denotazionali? Mi sembra più il tipo di persone che in precedenza avrebbero usato prove ondulate a mano, oggi ci si aspetta che producano prove formali. Poiché i metodi denotazionali non riescono ancora a modellare facilmente tutto ciò che facciamo e richiedono molti più prerequisiti, quei ricercatori utilizzano metodi più accessibili come giochi, calcoli di processo, assistenti di verifica. Non sono sicuro che ci sia un declino nei metodi denotazionali.
Ohad Kammar,

4
Si prega di non confondere la semantica denotazionale con la teoria dei domini . La semantica del gioco può essere, e di solito è, perfettamente denotazionale, cioè il significato di un programma è una funzione dei significati delle sue parti.
Andrej Bauer,

2
Ho aperto una nuova discussione riguardo a questo commento. Ma anche se non sono sicuro di essere d'accordo con la tua definizione, la semantica del gioco è di natura denotazionale. Penso che dovrei sostituire i "giochi" con la "semantica operativa" nel mio commento e includere la semantica dei giochi come forse un'altra forma di ricerca semantica denotazionale. cstheory.stackexchange.com/questions/3577/…
Ohad Kammar,

1
Non sono convinto che ci sia uno spostamento. Vedi il mio primo commento, alla luce del commento di Andrej.
Ohad Kammar,

1
C'è uno spostamento? Una domanda interessante Come possiamo misurare uno spostamento? Ci sono così tanti criteri che potremmo applicare, da quelli relativamente concreti come la quantità di sovvenzioni di ricerca assegnate a diversi approcci, a idee vaghe come la condivisione della mente. Dato quanto siamo coinvolti, come ricercatori, come impiegati, come richiedenti per la concessione di fondi, nel risultato di una simile domanda, è improbabile che concordiamo una risposta.
Martin Berger,

20

Ecco un campione casuale di materiali disponibili gratuitamente online:

  • Winskel, La semantica formale dei linguaggi di programmazione , anteprima di Google Libri . Non so nulla di questo libro. È nell'elenco perché la domanda si pone specificamente sul suo contenuto, che è online, per lo più.
  • Morgan, Programmazione da specifica , elenco di file ps . L'argomento è la raffinatezza, che è il processo di iniziare con descrizioni non eseguibili di alto livello e trasformarsi sistematicamente in qualcosa di eseguibile. Naturalmente, ogni fase di raffinamento deve preservare la semantica, quindi discute anche di un certo tipo di semantica (basata principalmente su traditori predicati).
  • Harper, Fondamenti pratici dei linguaggi di programmazione , pdf del progetto . Vedi il commento di Dave Clarke di seguito.
  • Remy, utilizzo, comprensione e spiegazione del linguaggio OCaml , pdf . Questo è il libro da cui ho imparato la programmazione funzionale (OCaml, più precisamente) e mi è piaciuto molto . Presenta la semantica delle caratteristiche del linguaggio di base in un modo molto piacevole e nel processo presenta il calcolo lambda e la teoria dei tipi su una base di "necessità di sapere".
  • Peyton Jones, L'implementazione dei linguaggi di programmazione funzionale , djvu . I primi capitoli descrivono il calcolo lambda (e la sua "semantica operativa") e il modo in cui le funzioni linguistiche di livello superiore vengono analizzate nel calcolo lambda. In questo senso, l'articolo fornisce una semantica operativa per i linguaggi funzionali.
  • Pierce (a cura di), Argomenti avanzati su tipi e linguaggi di programmazione , anteprima di Google Libri .
  • Slonneger, sintassi e semantica dei linguaggi di programmazione , elenco di file pdf . L'ho visto brevemente molto tempo fa e non mi è piaciuto molto. È nell'elenco perché è menzionato nella domanda.
  • Brookes, una semantica per la logica di separazione simultanea , pdf . Questo è un grande articolo (80 pagine), non un libro. L'ho incluso perché è uno sviluppo abbastanza recente che trovo interessante.

1
questo è un sacco di collegamenti :)
Suresh Venkat,

3
Ciò sarebbe più utile se fosse stato presentato come un elenco. Ad ogni modo, consiglierei il libro Harper: fare clic su "potrebbe".
Dave Clarke,

Sono d'accordo. Radu, potresti elencare i libri, quindi sappiamo cosa stiamo facendo clic? questa sarebbe una risorsa eccellente.
Suresh Venkat,

È un elenco ora. (La prima versione è stata pubblicata intorno alle 02:00, dopo aver dormito circa 5h la notte precedente.: P)
Radu GRIGore

16

Dividerei i libri sulla semantica del linguaggio di programmazione in due classi: quelli che si concentrano sulla modellizzazione dei concetti del linguaggio di programmazione e quelli che si concentrano sugli aspetti fondamentali della semantica. Non c'è motivo per cui un libro non possa fare entrambe le cose. Ma, di solito, c'è solo così tanto che puoi mettere in un libro e gli autori hanno anche le loro predisposizioni su ciò che è importante.

Il libro di Winskel, già menzionato, fa un po 'di entrambi gli aspetti. Ed è un buon libro per principianti. Un libro altrettanto buono, forse anche migliore, è quello con cui ho iniziato: la descrizione denotazionale dei linguaggi di programmazione di Gordon . Questo è stato il mio primo libro sulla semantica, che ho letto subito dopo aver finito i miei studi universitari. Devo dire che mi ha dato una solida base nella semantica e non ho mai dovuto chiedermi come la semantica denotazionale differisca dalla semantica operativa o semantica assiomatica ecc. Questo libro rimarrà il mio preferito di tutti i tempi sulla semantica denotazionale.

Altri libri che si concentrano sugli aspetti di modellazione piuttosto che sugli aspetti fondamentali sono i seguenti:

  • La semantica dei linguaggi di programmazione di Tennent , che è un libro più o meno aggiornato sulla semantica dei linguaggi di programmazione imperativi. È di facile lettura Tuttavia, tende ad essere astratto nelle parti successive del libro e potresti dover lottare per capire perché le cose vengono fatte in un modo particolare.

  • Teorie di Reynolds sui linguaggi di programmazione . Chiunque sia specializzato in semantica dovrebbe assolutamente leggere questo libro. Dopotutto è di Reynolds. (David Schmidt una volta mi disse: "anche se Reynolds ti sta leggendo il giornale del mattino, vuoi ascoltare attentamente, perché potresti imparare qualcosa di importante"!) Ha una buona copertura sia degli aspetti della modellazione che degli aspetti fondamentali.

I migliori libri sugli aspetti fondamentali sono quello di Gunter (che considero un libro di testo laureato) e quello di Mitchell (che è un buon libro di riferimento da avere sullo scaffale perché è abbastanza completo).


È bello averti qui, Uday!
Radu GRIGore,

Sono contento di essere anche qui. Questa è una risorsa molto bella!
Uday Reddy

Che ne dici di: Transizioni e alberi: un'introduzione alla semantica operativa strutturale di Hans Hüttel 2010. Sembra avere buone recensioni ma nessuno lo menziona qui.
Arturo Hernandez,

1
@Giorno: grazie per la risposta. Cosa significano "modellare i concetti del linguaggio di programmazione" e "gli aspetti fondamentali della semantica"? Quali sono le loro differenze e relazioni?
Tim

1
@Tim: per fornire la semantica di un linguaggio di programmazione, è necessario formare alcune strutture matematiche, ad esempio insiemi nel caso più semplice, ma strutture sofisticate come domini, categorie, coalgebre ecc. Per problemi che gli insiemi non sono in grado di gestire. Per "aspetti fondamentali" intendo la teoria di queste strutture più sofisticate. Nel primo caso, l'attenzione è rivolta ai linguaggi di programmazione e, nel secondo caso, alle basi matematiche.
Uday Reddy,

8

Mi è davvero piaciuto leggere Winskel mentre frequentavo il corso di laurea in semantica. Non so dire se sia datato, dal momento che non faccio ricerche in questo campo. Un vantaggio di Winskel è che puoi trovarlo tradotto in altre lingue oltre all'inglese.

Per un'ulteriore lettura, più a livello di laurea, suggerirei i libri di John Mitchell Basi per linguaggi di programmazione e concetti in linguaggi di programmazione . Se leggi solo i primi capitoli, immagino che soddisfino anche le tue esigenze di concisione.

Non troverai bozze gratuite di questi libri, quindi se hai un budget limitato cerca la "potenza" nella risposta di Radu.


6

Bene, non sono un esperto in materia, ma ci sono alcuni consigli generali che posso dare.

Innanzitutto, ci sono alcune persone che hanno già letto il libro e ci hanno fornito delle recensioni. Ad esempio, per il libro di Winskel The Formal Semantics of Programming Languages (vedi [1] e [2] ) ho trovato recensioni su Amazon.

Parte di una recensione recita:

Questo libro confonde tra sintassi e semantica sin dall'inizio, come separare i letterali dai suoi valori. Non sono state utilizzate notazioni speciali per differenziarle. Questo è un problema cruciale che l'autore dovrebbe affrontare in un argomento come questo. Inoltre, alcune altre notazioni che ha usato sono piuttosto confuse, come mostrare le premesse e le conclusioni.

L'autore sembrava presumere che abbiate TUTTI i prerequisiti necessari mentre spiegava i materiali di base in alcuni primi capitoli (ovvero teoria degli insiemi, semantica operativa, induzioni, definizioni induttive) molto brevemente. Lo stile utilizzato dall'autore nell'introduzione è quello di mettere due o tre paragrafi di testi e mettere alcune formule, quindi fare esercizi. Che è, per me, abbastanza frustrante ...

18/20 persone ritengono utile la recensione. Puoi cercare Amazon (o altre fonti) per vedere più recensioni.

In secondo luogo, Amazon offre tipi e linguaggi di programmazione e teoria delle categorie di base per gli informatici insieme a questo libro. Su un altro argomento, Dave Clarke offre questi libri come eccellenti su "Sistemi di testo e semantica del linguaggio di programmazione". Ancora una volta, non sono un esperto, ma quelli potrebbero esserti utili.


TaPL va un po 'troppo lentamente per i miei gusti. È un buon libro, ma l'ho menzionato perché la persona che lo chiede sembra preoccupata per i libri "a vento lungo".
Radu GRIGore,

@Radu: Sicuramente TAPL è lento, ma è una buona introduzione. Il libro Harper che hai citato nei tuoi link va molto più veloce e copre molto più terreno, anche se non è stato ancora completato.
Dave Clarke,

4
Prendi quella recensione di Amazon del libro di Winskel con un pizzico di sale. Viene spesso usato come testo raccomandato nei corsi semantici universitari e probabilmente attira studenti scontenti. Ho letto il libro e ho trovato i capitoli introduttivi più che sufficienti. Anche la sua notazione sembrava essere completamente standard.
Dominic Mulligan,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.