Je joue avec les langages de programmation fonctionnels depuis quelques années et je continue de rencontrer cette phrase. Par exemple, c'est un chapitre de "The Little Schemer, qui est certainement antérieur au blog de ce nom. (Non, le chapitre n'aide pas à répondre à ma question.)
Je comprends ce que signifie lambda, l'idée d'une fonction anonyme est à la fois simple et puissante, mais je n'arrive pas à comprendre ce que "l'ultime" signifie dans ce contexte.
Les endroits où j'ai vu cette phrase:
J'ai l'impression qu'il me manque une référence ici, quelqu'un peut-il m'aider?
Oui, c'est simplement une phrase récurrente dans le titre de plusieurs articles, à partir d'un couple dans les années 70, dans lequel Sussman et Steele démontrent l'utilisation du lambda calcul pour la programmation, au moyen d'un dialecte LISP minimaliste nommé " Scheme "ils ont conçu à cet effet. Vous pouvez trouver les papiers eux-mêmes ici ; ils sont intéressants et étonnamment pertinents.
Je ne sais pas si cela est jamais explicitement déclaré, mais il est clair (d'après le contexte, après avoir lu les articles et connaissant le contexte général et les intérêts de recherche des auteurs) que la phrase n'est qu'un slogan accrocheur pour affirmer que les abstractions lambda , en tant que primitive de calcul, ne sont pas seulement universels au sens formel (de pouvoir encoder n'importe quel programme d'une manière ou d'une autre, même maladroite), mais universels dans une pratique sens que toute construction présente dans d'autres langues, même celles qui sont intégrées de fond en comble, peut être réimplémentée dans un langage basé sur lambda d'une manière à la fois efficace et naturelle à utiliser.
La phrase répétée conduit à la forme généralisée évidente "pour tout X, lambda est le X ultime", qui est le sens que j'ai généralement pris "Lambda the Ultimate" pour désigner le nom du blog, notant que LtU est concerné par le langage de programmation conception et théorie. Ironiquement, LtU serait probablement aussi l'un des meilleurs endroits pour trouver quelqu'un qui pourrait vous parler de quelque chose pour lequel lambda est pas l'implémentation ultime. :]
Notez également que Sussman est l'un des auteurs de SICP , un manuel très influent qui utilise également le langage Scheme et passe beaucoup de temps à introduire des abstractions lambda comme un concept.
Lambda The Ultimate fait référence à l'idée que les lambdas du lambda-calcul peuvent efficacement implémenter tous les concept intégré dans chaque langage de programmation, passé, présent et futur. Classes, modules, packages, objets, méthodes, contrôle-flux, structures de données, macros, continuations, coroutines, générateurs, listes de compréhensions, flux, etc.
En l'occurrence, cette nature ultime inclut pour une fonction anonyme. Mais les lambdas ne sont pas, à la base, limités à de simples fonctions anonymes. Ils sont enseignés de cette façon, mais l'essence de lambda va bien plus loin que les fonctions mathématiques sans noms. En d'autres termes, je conteste:
Je comprends ce que signifie lambda, l'idée d'une fonction anonyme est à la fois simple et puissante, mais je n'arrive pas à comprendre ce que "l'ultime" signifie dans ce contexte.
En pratique, l'utilisation de lambdas comme abstractions syntaxiques ('macros'), qui ne sont pas appelées par valeur/applicatives (quelles fonctions mathématiques sont), est absolument crucial pour accepter l'idée que les lambdas peuvent vraiment être au cœur de chaque système de traitement de langage de programmation.
Pour la théorie: Il existe une connexion intéressante avec le paradoxe de Bertrand Russell et les axiomes de la compréhension (et de l'extension) dans la théorie naïve des ensembles. Un lambda est aux fonctions ce que la notation set-builder est aux ensembles: les lambdas sont une notation function-builder. Il y a une différence importante, généralement ignorée, entre (lambda (x) (* x x)) et ce qui est évalué (la fonction qui met au carré). Si l'on ne parvient pas à faire la distinction entre les deux en général, c'est-à-dire entre la notation et la dénotation (une erreur que Church et Frege ont tous deux commise), alors on se heurte aux paradoxes. Pour les décors et Frege, c'est le Barbier de Séville de Bertrand Russell qui illustre l'erreur; pour les fonctions et l'Église, c'est Halting Oracle d'Alan Turing.
Notez que les paradoxes sont des choses bonnes, pratiques. Nous voulons que EVAL soit exprimable, et nous voulons que lambdas signifie plus que de simples fonctions. Que supposer le contraire mène à la contradiction est le résultat souhaitable; il sert de bon test de santé mentale: les lambdas ne peuvent guère être ultimes s'ils n'expriment que de simples fonctions.
Racket (anciennement PLT Scheme) continue de poursuivre l'idée que les langages de programmation pratiques peuvent vraiment être construits, à partir de zéro, sur "juste lambda".
Kernel , par Shutt, soutient que lambda n'est pas vraiment l'abstraction ultime. Il soutient qu'il existe encore un concept plus primitif (pour le grec, surnommé vau) qui était connu de Sussman sous le nom de FEXPR.
Felleisin et compagnie (pour Racket) tirent une grande partie de la puissance du vau de Shutt en utilisant le concept de phases , ou niveaux de métal, ce qui signifie approximativement l'exécution du code source à travers plusieurs étapes de traduction (comme avec le prétraitement C, mais en utilisant le même langage à chaque "étape", et les "étapes" ne sont en fait pas entièrement distinctes dans le temps). (Donc, ils soutiennent qu'un lambda dans une phase supérieure se rapproche assez bien d'un vau.) En fait, ils soutiennent que les phases sont meilleures que les FEXPR, précisément pour être plus limité; en bref, "les FEXPR sont trop puissants" (voir le travail de Wand, contre lequel Shutt s'oppose).
Le 3-LISP de Brian Smith, "Réflexion procédurale dans les langages de programmation", tente une reformulation rigoureuse de la théorie des langages de type LISP selon des notations très distinctes (symboles/langage/programmes) des dénotations (choses/références/valeurs/résultats) ). http://dspace.mit.edu/handle/1721.1/15961
Mitchell The Wand "The Theory of FEXPRs is Trivial" envoie plus de clous dans le cercueil (temporaire?) Que Kent Pittman a travaillé pour les FEXPR (qui, comme Felleisen, plaide contre les FEXPR comme rendant la compilation trop difficile).
Paul Graham soutient avec force et longuement dans "On LISP" que le vrai pouvoir est lambdas comme transformateurs de syntaxe (macros), plutôt que comme transformateurs de valeurs (fonctions mathématiques). Le développement par Plotkin du lambda-calcul applicatif pourrait être considéré comme quelque peu contrasté, car Plotkin limite le calcul de Church à son sous-ensemble appel par valeur/applicatif. Bien sûr, la manipulation efficace de la partie applicative est très importante, il est donc important de développer une théorie spécialisée dans cette utilisation de lambda. (Plotkin et Graham ne se disputent pas.)
En fait, en général, la notion de Lambda comme ultime n'est qu'une tournure de ce genre dans le débat éternel entre efficacité et expressivité; c'est la position que lambda est l'outil ultime pour l'expressivité, et, si l'on étudie suffisamment, se révélera finalement être également l'outil ultime pour l'efficacité. En d'autres termes, nous pouvons, si nous le voulons, voir l'avenir des langages de programmation comme rien de plus et rien de moins que l'étude de la façon de mettre en œuvre efficacement tous les fragments pratiquement pertinents du calcul lambda.
Landin's "The Next 700 Programming Languages", http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf , est une référence accessible qui contribue au développement de cette concept que Lambda est ultime.
Je suppose que c'est simplement une référence à certains articles écrits par Sussman et Steele entre 1975 et 1980 appelés:
Voir article Wikipedia.