Lambda The Ultimate bezieht sich auf die Idee, dass die Lambdas von Lambda-Calculus jedes eingebaute Konzept in jeder Programmiersprache, Vergangenheit, Gegenwart und Zukunft effektiv implementieren können. Klassen, Module, Pakete, Objekte, Methoden, Kontrollfluss, Datenstrukturen, Makros, Fortsetzungen, Coroutinen, Generatoren, Listenverständnisse, Streams und so weiter.
Zu dieser letztendlichen Natur gehört es natürlich, für eine anonyme Funktion einzutreten. Aber Lambdas sind im Kern nicht nur auf anonyme Funktionen beschränkt. Sie werden auf diese Weise unterrichtet, aber die Essenz von Lambda geht viel tiefer als mathematische Funktionen ohne Namen. Mit anderen Worten, ich habe Probleme mit:
Ich verstehe, was Lambda bedeutet, die Idee einer anonymen Funktion ist sowohl einfach als auch mächtig, aber ich verstehe nicht, was "das Ultimative" in diesem Kontext bedeutet.
Aus praktischer Sicht ist die Verwendung von Lambdas als syntaktische Abstraktionen ("Makros"), die nicht nach Wert aufrufbar / anwendbar sind (welche mathematischen Funktionen sind), von entscheidender Bedeutung, um die Idee zu akzeptieren, dass Lambdas tatsächlich als solche dienen können Kern eines jeden Programmiersprachen-Verarbeitungssystems.
Für die Theorie: In der naiven Mengenlehre besteht eine interessante Verbindung zu Bertrand Russells Paradoxon und den Axiomen des Verstehens (und der Erweiterung). Ein Lambda ist eine Funktion, was eine Mengenerstellungsnotation für Mengen ist: Lambdas sind eine Funktionserstellungsnotation. Es gibt einen wichtigen Unterschied, der normalerweise ignoriert wird, zwischen (Lambda (x) (* xx)) und dem, was daraus resultiert (die Funktion, die quadriert). Wenn man im Allgemeinen nicht zwischen den beiden unterscheidet, dh zwischen der Notation und der Bezeichnung (ein Fehler, den Church und Frege beide gemacht haben), dann hat man mit Paradoxen zu kämpfen. Bei Sets und Frege ist es Bertrand Russells Barber of Seville, der den Fehler veranschaulicht. für Funktionen und Kirche ist es Alan Turing's Halting Oracle.
Beachten Sie, dass die Paradoxien gute, praktische Dinge sind. Wir möchten, dass EVAL zum Ausdruck kommt, und Lambdas sollen mehr als nur Funktionen bedeuten. Die Annahme, dass das Gegenteil zu Widersprüchen führt, ist das erstrebenswerte Ergebnis. es dient als netter Gesundheitstest: Lambdas können kaum ultimativ sein, wenn sie nur bloße Funktionen ausdrücken.
Racket (ehemals PLT-Schema) verfolgt weiterhin die Idee, dass praktische Programmiersprachen wirklich von Grund auf auf „nur Lambda“ aufgebaut werden können.
Kernel von Shutt argumentiert, dass Lambda nicht wirklich die ultimative Abstraktion ist. Er argumentiert, dass es noch einen primitiveren Begriff gibt (für Griechisch, genannt Vau), der Sussman als FEXPR bekannt war.
Felleisin und Company (für Racket) erhalten einen Großteil der Leistung von Shutt's Vau, indem sie das Konzept von Phasen oder Metaebenen verwenden. Dies bedeutet ungefähr, dass der Quellcode mehrere Übersetzungsstufen durchlaufen muss (wie bei Preprocessing C, aber jeweils in derselben Sprache) 'step' und die 'steps' sind zeitlich nicht völlig verschieden). (Also argumentieren sie, dass ein Lambda in einer höheren Phase gut genug einem Vau nahekommt .) Tatsächlich argumentieren sie, dass Phasen besser als FEXPRs sind, gerade weil sie begrenzter sind; kurz gesagt, "FEXPRs sind zu mächtig" (siehe Wand's Arbeit, gegen die Shutt argumentiert).
Brian Smiths 3-Lisp, "Prozedurale Reflexion in Programmiersprachen", versucht eine rigorose Neuformulierung der Theorie der LISP-ähnlichen Sprachen, indem Notationen (Symbole / Sprache / Programme) von Bezeichnungen (Dinge / Referenzen / Werte / Ergebnisse) scharf unterschieden werden ). http://dspace.mit.edu/handle/1721.1/15961
Mitchell Wands "The Theory of FEXPRs is Trivial" wirft mehr Nägel in den (temporären?) Sarg, den Kent Pittman für FEXPRs herstellte (der wie Felleisen gegen FEXPRs argumentiert, die Kompilierung zu schwierig zu machen).
Paul Graham argumentiert mit Nachdruck und ausführlich in "On Lisp", dass die wahre Kraft Lambdas als Syntaxtransformatoren (Makros) und nicht als Werttransformatoren (mathematische Funktionen) sind. Plotkins Entwicklung des applikativen Lambda-Kalküls könnte als etwas kontrastierend angesehen werden, da Plotkin den Kalkül von Church auf seine Call-by-Value / applikative Teilmenge beschränkt. Natürlich ist es sehr wichtig, den anwendungsbezogenen Teil effizient zu handhaben. Daher ist es wichtig, eine Theorie zu entwickeln, die auf die Verwendung von Lambda spezialisiert ist. (Plotkin und Graham streiten sich nicht.)
Tatsächlich ist die Vorstellung von Lambda als Ultimate nur eine solche Wendung in der ewigen Debatte zwischen Effizienz und Ausdruckskraft. es ist die position, dass lambda das ultimative instrument für ausdruckskraft ist und sich bei ausreichender studie letztendlich auch als ultimatives instrument für effizienz erweisen wird. Mit anderen Worten, wir können, wenn wir wollen, die Zukunft der Programmiersprachen als nicht mehr und nicht weniger als das Studium betrachten, wie alle praktisch relevanten Fragmente des Lambda-Kalküls effizient implementiert werden können.
Landins "Die nächsten 700 Programmiersprachen", http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf , ist eine barrierefreie Referenz, die zur Entwicklung des Konzepts beiträgt, dass Lambda Ultimate ist.