Ich höre immer wieder, wie man Kategorietheorie lernen muss, um die Theorie der Programmiersprache wirklich zu verstehen. Bisher habe ich viel PL gelernt, ohne jemals in den Bereich der Kategorien einzusteigen. Ich nahm jedoch an, dass es Zeit war, den Sprung zu wagen, um zu sehen, was ich vermisst hatte.
Leider scheint keine der Quellen, die ich finden kann, irgendwelche Verbindungen zu Typsystemen oder zur Programmierung herzustellen. Sie sagen, es ist eine Einführung in die Kategorietheorie für Informatiker, aber dann in allgemeinen abstrakten Unsinn (das sage ich liebevoll), ohne praktische Beispiele oder Anwendungen zu nennen.
Ich denke, meine Frage hat zwei Gründe:
- Ist Kategorietheorie wesentlich für das Verständnis der "tiefen Konzepte" in PL?
- Was ist eine Quelle, die die Kategorietheorie unter dem Gesichtspunkt praktischer Anwendungen zu Typsystemen und Programmierung erklärt?
Bisher habe ich mich am weitesten mit einer vagen Vorstellung von Funktoren beschäftigt (die, soweit ich das beurteilen kann, nicht mit Funktoren in ML zu tun zu haben scheinen). Ich fürchte mich vor der Abstraktion, die ich im Kopf behalten muss, um Monaden aus kategorietheoretischer Sicht zu verstehen.
Antworten:
Die Kategorietheorie ist nicht erforderlich, um Programmiersprachen zu verstehen, und es ist nicht einmal erforderlich, fortgeschrittene Forschungen über Programmiersprachen durchzuführen. Die meisten Programmiersprachen kennen (viel) keine Kategorietheorie.
Kategorietheoretische Methoden haben sich vor allem in einem kleinen Teil der Programmiersprachenforschung als nützlich erwiesen, und zwar bei der Analyse der funktionalen Programmierung, insbesondere seit Moggis großer Entdeckung, dass einige Computereffekte eine monadische Struktur aufweisen. In den 1990er Jahren, nach Moggis Durchbruch, wurde viel geforscht, um kategoriale Methoden auf andere Formen von Programmiersprachen auszudehnen. Nach meinem besten Wissen haben sich kategoriale Methoden jedoch für OO, gleichzeitige, parallele und verteilte Berechnungen, zeitgesteuerte Berechnungen oder Compiler nicht als besonders nützlich erwiesen. Aus diesem Grund haben die Menschen die Ausweitung kategorialer Methoden größtenteils aufgegeben.
Kategoriale Ansätze zur getippten Programmierung funktionieren gut in reinen Funktionen. In der Tat sind einige einfache Schreibsysteme Kategorien. Dies ist beschrieben in z
Derzeit wird viel an Typen für gleichzeitige Prozesse gearbeitet (z. B. Sitzungstypen), und seit September 2016 ist keine dieser Typen kategorischer Natur.
Das heißt, man kann nie zu viel Mathematik lernen, und es ist nützlich, die Kategorietheorie zu kennen. Es ist also eine Frage von Kosten / Nutzen. Wenn Sie Mathematik mögen, wenn Sie vielleicht etwas Hintergrundwissen in der Algebra haben (z. B. was ist die freie Gruppe über eine Menge, freier Ring usw.), dann wird das Erlernen der Kategorietheorie einfach sein, und wenn Sie vorhaben, eine Arbeit zu machen, die (inspiriert von) funktionale Programmierung, das Kennen von Kategorien wird nützlich sein.
Schließlich ist Kategorietheorie eine schöne Mathematik und es lohnt sich, sie einfach zu studieren, weil sie so ordentlich ist.
Siehe Uday Reddys Beitrag in dieser Diskussion für eine andere Ansicht.
quelle
Das Erlernen der Kategorietheorie ist eine enorme Zeitinvestition, und die Frage, ob es sich lohnt, ist sehr berechtigt. Auch damit habe ich immer noch zu kämpfen und ich weiß bereits, warum ich es lernen sollte. Ich schrieb:
Die Idee hier ist, Kategorien anstelle von Mengen oder "nicht spezifizierten Bits" als mögliche Semantik für eine gegebene Typentheorie oder Programmiersprache zu verwenden. Warum sollte man das wollen? Betrachten Sie die Dualität zwischen einer Handlung und einer Beobachtung. Unterschiedliche Beobachtungen (oder zumindest deren zeitliche Reihenfolge) stören sich nicht (außerhalb der Quantenmechanik), dies gilt jedoch nicht unbedingt für unterschiedliche Handlungen. Die in der Mengenlehre verankerten Vorurteile gegenüber der Logik erschweren die Modellierung von Handlungen im Vergleich zur Modellierung von Beobachtungen.
Ich bin nicht davon überzeugt, dass es wirklich eine perfekte Entsprechung zwischen Kategorietheorie und Typentheorie gibt, wie hier behauptet :
Es ist richtig, dass die Kategorietheorie Semantik für die Typentheorie liefern kann (was sehr nützlich sein kann), aber ich bezweifle, dass die Typentheorie wirklich eine ausreichend mächtige formale syntaktische Sprache bietet, um alle in der Kategorietheorie durchgeführten Berechnungen auszudrücken.
In der Praxis kann der Nutzen der Kategorietheorie durch das Vorschlagen nützlicher Fragen und Analogien entstehen. Die Kategorietheorie kann aber auch Aktivitäten und Fragen vorschlagen, die sich letztendlich nur als Ablenkung (Zeitverschwendung) von den wirklich wichtigen Themen herausstellen. Und Sie können sicherlich Logik und Typentheorie lernen, ohne sich um Kategorietheorie zu kümmern.
quelle