Ich habe Nielson & Nielsons " Semantics with Applications " gelesen und ich mag das Thema wirklich. Ich hätte gerne noch ein Buch über Programmiersprachensemantik - aber ich kann wirklich nur eines bekommen.
Ich habe mir das Turbak / Gifford- Buch angesehen, aber es ist zu langatmig. Ich dachte, Winskel wäre in Ordnung, aber ich habe keinen Zugang dazu (es befindet sich nicht in unserer Universitätsbibliothek und mir fehlt das Geld), und ich bin mir nicht einmal sicher, ob es nicht veraltet ist. Slonneger scheint in Ordnung zu sein, aber der praktische Teil macht es etwas zu lang, und ich bin mit seinem Stil nicht sehr zufrieden.
Meine Frage ist also - ist Winskel ein gutes Buch? Und ist es veraltet?
Gibt es auch andere knappe Bücher zu diesem Thema?
Antworten:
Es kommt darauf an, wie tief du gehen willst und wie viel du bereits weißt. Für einen Anfänger ist Winksel's Buch wirklich schön, aber ja, es führt Sie nicht in den Stand der Semantik ein, wie er vor ungefähr 20 Jahren geschrieben wurde. Trotzdem ist es immer noch eine gute erste Einführung in das Thema. Es könnte sich auch lohnen, darauf hinzuweisen, dass T. Nipkow einen wesentlichen Teil von Winskels Buch in Isabelle / HOL formalisiert hat, siehe hier . Wenn Sie also lernen möchten, interaktive Proof-Assistenten zu verwenden und die Semantik von Programmiersprachen zu verstehen, müssen Sie auf eine Menge zusammenhängenden Materials zurückgreifen.
Andere Bücher, die fortgeschrittener sind, sind:
Gunter, Semantik der Programmiersprachen , ein fortgeschritteneres Buch, das sich mit denotationaler Semantik befasst, einem Ansatz zur Semantik, der die Erwartungen nicht erfüllt. Konzentriert sich auf rein funktionale Sprachen und ignoriert Parallelität. Dies ist das Buch, von dem ich mir als Student Semantik beigebracht habe, und im Nachhinein wünschte ich, ich hätte stattdessen Winksel's Buch verwendet. Für einen Anfänger ist Gunter keine einfache Lektüre.
Domains und Lambda-Kalküle von Amadio und Curien. Ein weiteres Buch, das mehr in der domänentheoretischen Tradition geschrieben wird, obwohl es Prozesskalküle behandelt.
John Mitchells Bücher, die bereits oben erwähnt wurden. Meist geht es auch um sequentielle Berechnungen.
Bücher wie Pierces TAPL sind sehr schön, konzentrieren sich jedoch eng auf einen Aspekt der Programmiersprachen, nämlich die Typen, die so wichtig sind. Ich würde es nicht als erste Einführung in den allgemeinen Bereich der Programmiersprachen empfehlen, aber es ist obligatorisch, für alle zu lesen, die etwas über Typen lernen möchten.
Um ehrlich zu sein, ich denke, es gibt derzeit kein aktuelles Einführungsbuch zur Sprachsemantik, das die erheblichen Fortschritte des letzten Jahrzehnts widerspiegelt, mit seiner entscheidenden Verlagerung von Denotationsmethoden und sequentiellen Berechnungen hin zur Nebenläufigkeit (Prozesskalküle und Spielesemantik). , Axiomatik-Semantik und die Verwendung interaktiver Proof-Assistenten bei der Verifikation.
Update 22. April 2014: Tobias Nipkow und Gerwin Klein haben ein neues Buch veröffentlicht
was als "Winskel in Isabelle / HOL" gesehen werden kann. Es ist eine Einführung in die Semantik von Programmiersprachen (hauptsächlich operationell und axiomatisch), aber im Gegensatz zu früheren Ansätzen auf Stift- und Papierbasis bringt dieses Buch all seine Mathematik in Isabelle / HOL zum Ausdruck. Mit anderen Worten, es ist gleichzeitig ein Buch über das Beweisen von Theoremen.
Das Buch ist brandneu, daher habe ich es nicht zum Unterrichten verwendet, aber es eignet sich sehr gut als Einführung, die niedriger ist als die von Software Foundations von Pierce et al.
quelle
Hier ist eine zufällige Auswahl von Materialien, die kostenlos online verfügbar sind:
quelle
Ich würde die Bücher zur Programmiersprachensemantik in zwei Klassen unterteilen: jene, die sich auf die Modellierung von Programmiersprachenkonzepten konzentrieren, und jene, die sich auf die grundlegenden Aspekte der Semantik konzentrieren. Es gibt keinen Grund, warum ein Buch nicht beides kann. Aber in der Regel kann man nur so viel in ein Buch schreiben, und die Autoren haben auch ihre eigenen Vorlieben für das, was wichtig ist.
Das bereits erwähnte Buch von Winskel leistet einen Beitrag zu beiden Aspekten. Und es ist ein gutes Buch für Anfänger. Ein ebenso gutes, vielleicht sogar noch besseres Buch ist das, mit dem ich angefangen habe: Gordons Denotational Description of Programming Languages . Dies war mein erstes Buch über Semantik, das ich kurz nach Abschluss meines Studiums las. Ich muss sagen, es hat mir eine solide Grundlage in der Semantik gegeben, und ich musste mich nie wundern, wie sich die Denotationssemantik von der operativen Semantik oder der axiomatischen Semantik usw. unterscheidet. Dieses Buch wird mein absoluter Favorit auf dem Gebiet der Denotationssemantik bleiben.
Andere Bücher, die sich eher auf Modellierungsaspekte als auf grundlegende Aspekte konzentrieren, sind die folgenden:
Tennents Semantik der Programmiersprachen , ein mehr oder weniger aktuelles Buch über die Semantik imperativer Programmiersprachen. Es ist leicht zu lesen. In späteren Abschnitten des Buches ist es jedoch eher abstrakt, und es kann sein, dass Sie Schwierigkeiten haben, herauszufinden, warum die Dinge auf eine bestimmte Art und Weise erledigt werden.
Reynolds ' Theorien der Programmiersprachen . Jeder, der sich auf Semantik spezialisiert hat, sollte dieses Buch unbedingt lesen. Es ist immerhin von Reynolds. (David Schmidt bemerkte einmal zu mir: "Auch wenn Reynolds Ihnen die Morgenzeitung vorliest, möchten Sie aufmerksam zuhören, weil Sie vielleicht etwas Wichtiges lernen"!) Sie deckt sowohl die Modellierungsaspekte als auch die grundlegenden Aspekte gut ab.
Die besten Bücher zu grundlegenden Aspekten sind Gunters (das ich als ein Lehrbuch für Hochschulabsolventen betrachte) und Mitchells (das ein gutes Nachschlagewerk ist, das Sie in Ihrem Bücherregal haben sollten, weil es ziemlich umfassend ist).
quelle
Ich habe es wirklich genossen, Winskel zu lesen, als ich den Semantikkurs belegte. Ich kann jedoch nicht sagen, ob es veraltet ist, da ich auf diesem Gebiet nicht forsche. Ein Plus von Winskel ist, dass es auch in anderen Sprachen als Englisch übersetzt ist.
Für eine weiterführende Lektüre, eher für Absolventen, würde ich John Mitchells Bücher Foundations for Programming Languages und Concepts in Programming Languages vorschlagen . Wenn Sie nur die ersten Kapitel lesen, erfüllen sie vermutlich auch Ihre Anforderungen an die Prägnanz.
Sie werden keine freien Entwürfe für diese Bücher finden. Wenn Sie also ein begrenztes Budget haben, wählen Sie in Radus Antwort die "Macht".
quelle
Nun, ich bin kein Experte auf diesem Gebiet, aber es gibt einige allgemeine Ratschläge, die ich geben kann.
Erstens gibt es einige Leute, die das Buch bereits gelesen und Rezensionen dazu abgegeben haben. Zum Beispiel fand ich für das Winskel-Buch Die formale Semantik der Programmiersprachen (siehe [1] und [2] ) Rezensionen bei Amazon.
Teil einer Bewertung lautet:
18/20 Personen finden die Bewertung hilfreich. Sie können nach Amazon (oder anderen Quellen) suchen, um weitere Bewertungen zu erhalten.
Zweitens bietet Amazon zusammen mit diesem Buch Typen und Programmiersprachen sowie grundlegende Kategorietheorien für Informatiker an. Zu einem anderen Thema bietet Dave Clarke diese Bücher als hervorragende Bücher zum Thema "Typensysteme und Semantik von Programmiersprachen" an. Auch hier bin ich kein Experte, aber diese könnten für Sie nützlich sein.
quelle
Ich möchte zwei Bücher hinzufügen, die zu den bisher gegebenen Antworten nicht gefunden wurden:
Stumps Buch ist prägnant, aber sehr klar.
quelle
Für einen Anfänger, der sich mit Operational Semantics befasst, würde ich Programmiersprachen und Operational Semantics von Maribel Fernández vorschlagen . Alles wird auf sehr einfache und leicht verständliche Weise erklärt. http://www.springer.com/computer/swe/book/978-1-4471-6367-1
quelle