Qual é a origem e o significado da frase "Lambda the ultimate?"

43

Eu tenho mexido com linguagens de programação funcional por alguns anos, e continuo encontrando essa frase. Por exemplo, é um capítulo de "The Little Schemer, que certamente antecede o blog com esse nome. (Não, o capítulo não ajuda a responder minha pergunta).

Entendo o que lambda significa, a idéia de uma função anônima é simples e poderosa, mas não entendo o que "o máximo" significa neste contexto.

Lugares que vi essa frase:

  1. O título do capítulo 8 de The Little Schemer
  2. Um blog: http://lambda-the-ultimate.org/
  3. Uma série de artigos "Lambda the ultimate X": http://library.readscheme.org/page1.html

Sinto que estou perdendo uma referência aqui, alguém pode ajudar?

Eric Wilson
fonte
1
Parece que é o nome de um blog popular, mas se houver outra fonte histórica, estou interessado ...
Klaim
1
Você pode fornecer algumas referências aos lugares que você viu essa frase? Esse contexto seria extremamente útil para encontrar respostas.
Adam Crossland
@ Adam - adicionou algumas referências.
Eric Wilson
O link da série papers redireciona para cultureua.com Alguém pode fornecer um link atualizado, por favor?
tejasbubane

Respostas:

47

Sim, é simplesmente uma frase recorrente no título de vários artigos, a partir de alguns dos anos 70, nos quais Sussman e Steele demonstram o uso do cálculo lambda para programação, por meio de um dialeto minimalista do Lisp chamado " Scheme " o objetivo. Você pode encontrar os documentos aqui ; eles são interessantes e surpreendentemente relevantes.

Não tenho certeza se isso já foi explicitamente declarado, mas é claro (do contexto, depois de ler os artigos e conhecer os antecedentes gerais e os interesses de pesquisa dos autores) que a frase é simplesmente um slogan atraente para a afirmação de que abstrações lambda , como primitivo computacional, não é apenas universal no sentido formal (de ser capaz de codificar qualquer programa de alguma maneira, por mais embaraçoso), mas universal no sentido prático que todo e qualquer construto presente em outras línguas, mesmo aquelas que são desde o início, pode ser reimplementado em um idioma baseado em lambda de maneira eficaz e natural de usar.

A frase repetida leva à forma generalizada óbvia "para todos os X, lambda é o X final", que é o sentido que geralmente considero "Lambda the Ultimate" como o nome do blog, observando que o LtU está preocupado com a linguagem de programação design e teoria. Ironicamente, o LtU provavelmente também seria um dos melhores lugares para encontrar alguém que pudesse falar sobre algo para o qual o lambda não é a implementação final. :]

Observe também que Sussman é um dos autores do SICP , um livro muito influente que também usa a linguagem Scheme e gasta bastante tempo introduzindo abstrações lambda como um conceito.

CA McCann
fonte
2
+1 para localizar os documentos clássicos. Guy L. Steele Jr. também escreveu o livro sobre Common LISP . LISP e Scheme não eram o fim do caminho para Guy, que passou a contribuir com J , Fortress e outras línguas. Guy também esteve envolvido no Jargon File e no Hacker's Dictionary .
John Tobler 12/12
@ John Tobler: Sim! Eu me concentrei apenas em Sussman porque ele parecia ter mais envolvimento com Scheme, que está profundamente ligado aos Documentos Lambda. Não queria dar a impressão de que Steele não havia feito mais nada, já que isso está longe de ser verdade. :]
CA McCann
28

Lambda The Ultimate refere-se à idéia de que as lambdas do lambda-calculus podem efetivamente implementar todos os conceitos incorporados em todas as linguagens de programação, passado, presente e futuro. Classes, Módulos, Pacotes, Objetos, Métodos, Fluxo de Controle, Estruturas de Dados, Macros, Continuações, Corotinas, Geradores, Compreensões de Lista, Fluxos e assim por diante.

Por acaso, essa natureza última inclui representar uma função anônima. Porém, as lambdas não se limitam apenas a funções anônimas. Eles são ensinados dessa maneira, mas a essência do lambda é muito mais profunda do que as funções matemáticas sem nome. Em outras palavras, discordo de:

Entendo o que lambda significa, a idéia de uma função anônima é simples e poderosa, mas não entendo o que "o máximo" significa neste contexto.

Por uma questão prática, o uso de lambdas como abstrações sintáticas ('macros'), que não são chamadas por valor / aplicativo (que funções matemáticas são), é absolutamente crucial para se adotar a ideia de que as lambdas realmente podem servir como núcleo de todo sistema de processamento de linguagem de programação.

Para a teoria: Há uma conexão interessante com o paradoxo de Bertrand Russell e os axiomas da compreensão (e extensão) na teoria ingênua dos conjuntos. Um lambda é para funções que a notação de construtor de conjuntos é para conjuntos: lambdas são notações de construtores de funções. Há uma diferença importante, geralmente ignorada, entre (lambda (x) (* xx)) e o que isso avalia (a função que esquadrinha). Se alguém não consegue distinguir entre os dois em geral, isto é, entre a notação e a denotação (um erro que Church e Frege cometeram), então se depara com paradoxos. Para sets e Frege, é o Barbeiro de Sevilha de Bertrand Russell que ilustra o erro; para funções e Igreja, é o Halting Oracle de Alan Turing.

Note que os paradoxos são coisas boas, práticas. Queremos que EVAL seja expressável e queremos que lambdas signifique mais do que apenas funções. Que assumir o contrário leva à contradição é o resultado desejável; serve como um bom teste de sanidade: as lambdas dificilmente podem ser definitivas se expressarem apenas meras funções.


Racket (anteriormente PLT Scheme) continua a processar a idéia de que linguagens de programação práticas realmente podem ser construídas, desde o início, em 'just lambda'.

Kernel , de Shutt, argumenta que o lambda não é realmente a abstração máxima. Ele argumenta que ainda existe um conceito mais primitivo (para o grego, apelidado de vau), que Sussman era conhecido como FLEX.

Felleisin e companhia (para Racket) obtêm grande parte do poder do vau de Shutt usando o conceito de fases ou níveis de metal, o que significa aproximadamente executar o código-fonte em vários estágios de tradução (como no pré-processamento C, mas usando o mesmo idioma em cada 'step', e os 'steps' não são realmente completamente distintos no tempo). (Portanto, eles argumentam que um lambda em uma fase superior se aproxima bastante de um vau.) De fato, eles argumentam que as fases são melhores que as FDPs, precisamente por serem mais limitadas; em resumo, "os FDPs são muito poderosos" (veja o trabalho de Wand, contra o qual Shutt argumenta).

O 3-Lisp de Brian Smith, "Reflexão processual nas linguagens de programação", tenta uma reformulação rigorosa da teoria das linguagens do tipo LISP, seguindo as linhas de notação distintamente acentuada (símbolos / idioma / programas) das denotações (coisas / referências / valores / resultados ) http://dspace.mit.edu/handle/1721.1/15961

Mitchell Wand, "The Theory of FRLs is Trivial", envia mais pregos para o caixão (temporário?) Que Kent Pittman criou para os FLEXs (que, como Felleisen, argumenta contra os FLEXs por tornar a compilação muito difícil).

Paul Graham argumenta com força e detalhadamente em "On Lisp" que o poder real é lambdas como transformadores de sintaxe (macros), e não como transformadores de valores (funções matemáticas). O desenvolvimento de Plotkin do cálculo lambda aplicado pode ser considerado um pouco contrastante, porque Plotkin limita o cálculo de Church ao seu subconjunto de chamada por valor / aplicativo. Obviamente, lidar com a parte aplicativa de forma eficiente é muito importante, por isso é importante desenvolver uma teoria especializada para o uso de lambda. (Plotkin e Graham não discutem um contra o outro.)

De fato, em geral, a noção de Lambda como Ultimate é apenas uma dessas reviravoltas no eterno debate entre eficiência e expressividade; é a posição de que o lambda é a melhor ferramenta para expressividade e, com bastante estudo, acabará por se mostrar a melhor ferramenta para eficiência também. Em outras palavras, podemos, se quisermos, ver o futuro das linguagens de programação como nada mais e nada menos que o estudo de como implementar eficientemente todos os fragmentos praticamente relevantes do cálculo lambda.

"As Próximas 700 Linguagens de Programação" de Landin, http://www.cs.cmu.edu/~crary/819-f09/Landin66.pdf , é uma referência acessível que contribui para o desenvolvimento desse conceito de que Lambda é Ultimate.

William Cushing
fonte
Uau. Resposta digna de ovação de pé. Tantas dicas a seguir.
hmijail
13

Eu acho que é simplesmente uma referência a alguns documentos escritos por Sussman e Steele entre 1975 e 1980 chamados:

  • Lambda: O Imperativo Supremo
  • Lambda: O Último Declarativo
  • Lambda: o melhor GOTO
  • LAMBDA: O Melhor Opcode

Veja o artigo da Wikipedia.

Trasplazio Garzuglio
fonte