ti-enxame.com

Por que o LISP é útil?

LISP obviamente é uma vantagem para o material AI , mas não aparece para mim, que o LISP é mais rápido que Java, C # ou até C. Eu não sou um mestre do LISP, mas acho incrivelmente difícil entender a vantagem de obter um software comercial no LISP.

No entanto, é considerado como uma linguagem de hackers.

Por que Paul Graham defende Lisp? Por que ITA Software escolheu o LISP em relação a outros idiomas de alto nível? Que valor isso tem sobre esses idiomas?

64
Geek

Existem algumas razões pelas quais estou trabalhando para me tornar competente com o Common LISP.

  1. Código homoicônico. Isso permite código auto-modificado estruturado.
  2. Macros com reconhecimento de sintaxe. Eles permitem a reescrita do código padrão.
  3. Pragmatismo. O LISP comum é projetado para realizar tarefas de profissionais que trabalham. A maioria das linguagens funcionais não é, em regra.
  4. Flexibilidade. Pode fazer muitas coisas diferentes, tudo a velocidades razoáveis.
  5. Wartiness. O mundo real é bagunçado. A codificação pragmática acaba tendo que usar ou inventar construções confusas. O LISP comum tem verrugas suficientes para realizar as tarefas.

Indiscutivelmente, os únicos motivos reais para escolher o Common LISP é que as bibliotecas padrão são datadas.

Vou falar um pouco e dizer que, no caso geral, a sintaxe não deve ser um problema para um trabalhador profissional de software.

78
Paul Nathan

Eu gosto do LISP pela sua

  • maneira unificada, simples e elegante de representar código e dados.
  • ponto de vista único, que me dá os 80 pontos de QI de bônus cruciais na solução de problemas difíceis (com gorjeta para Alan Kay)
  • ambiente de desenvolvimento extremamente ágil, interativo e conversacional
  • poder sem precedentes para criar e manipular abstrações

Programar é combater a complexidade. As abstrações são a única ferramenta eficaz para combater a complexidade cada vez maior (com nosso tamanho de crânio muito limitado e constante). Gerenciar abstrações com o LISP é como ter um gênio com n + 1 desejos.

24
Maglob

Acredito que a resposta correta do LISP é mais gnômica. Algo como: "Se você precisar perguntar, não está pronto."

Então, se alguém questionar mais, a resposta correta é "yes" se for uma questão de// ou ou "Você não está pronto."

21
glenatron

Eu acho que a vantagem do LISP no campo inteligência artificial (AI) que todo mundo menciona é um acidente histórico ... O LISP começou para/no AI, mas é uma linguagem de uso geral.

Eu acredito que a velocidade de execução não é o único aspecto importante de uma linguagem (eu fiz uma vez, no entanto). No entanto, um dos aspectos que eu mais gosto no LISP é que, para mim, ele combina Python e C em um. Posso começar a codificar sem declarações e protótipos imediatamente e muito rapidamente (o tempo de execução e o REPL é muito importante para isso. Depois que tenho algo em execução, adiciono declarações de tipo e "otimizo" meu código, pouco a pouco. gostaria de pressionar uma tecla em SLIME e observar a linguagem de máquina gerada para a função em que estou interessado. No Python, não há declarações de tipo, então eu Não é possível obter mais velocidade, mas em C, fazer qualquer coisa rapidamente é muito mais doloroso, pois o LISP é muito útil.

Dito isto, gosto do LISP principalmente por causa de macros . Quando você finalmente entende o que as macros podem alcançar, acho que você aceita os parênteses facilmente. Além disso, editores como Emacs gerenciam os parênteses para que você não precise. Admito, no entanto, que não encontrei parênteses tão ruins no começo e sei que algumas pessoas simplesmente não conseguem suportá-los. Mas como todo o objetivo das macros é gerar código em tempo de compilação, o código no LISP usa uma estrutura de dados padrão, e os parênteses simplesmente são uma representação do código como listas, o que é necessário para facilitar a gravação das macros.

Não conheço outro idioma no qual você possa escrever pequenas sub-linguagens para descrever melhor seu problema com a facilidade do LISP. Essa é a vantagem sobre a qual Paul Graham fala em Batendo as médias. É extrema modularidade e concisão. Em Java, preciso escrever muito texto bruto para expressar uma única idéia. No LISP, eu poderia escrever algumas macros que geram esse código automaticamente e depois apenas usá-las. De qualquer forma, você precisa entenda alguns exemplos disso e julgue por si mesmo.Quando "vi", fiquei impressionado e ainda acho que o LISP é a melhor linguagem apenas por esse motivo. Sempre procuro macros nos principais idiomas para ver se eles correspondem o poder das macros LISP, mas até o momento não encontrei nenhuma.

Termino com algumas críticas em relação ao software comercial:

  1. O software comercial precisa de bibliotecas e boas, e o LISP não é bom nisso. Normalmente não preciso deles, mas quando preciso, tenho que escolher entre uma pequena seleção de software incompleto que algumas pessoas usam. Eu devo contribuir para consertar isso, eu acho ...

  2. O software de negócios geralmente é construído por grandes grupos de pessoas e acho que a comunicação pode ser impedida com macros, pois elas basicamente mudam o idioma. Muitos programadores se sentem mais confortáveis ​​em detectar certos padrões no código, mesmo que o texto do programa seja mais longo e mais repetitivo. Suponho que na ITA eles tenham algumas regras sobre macros ou uma enorme biblioteca de macros que facilite a colaboração (ou, mais simplesmente, todos os programadores são especialistas em LISP).

18
Pau Fernández

Eu não gosto do LISP.

(Gosto de muitos dos conceitos que ele usa, de como disponibiliza técnicas poderosas de forma nativa e assim por diante.

Mas nunca fui convencido a usá-lo ((embora várias pessoas tentaram ) porque os benefícios do idioma podem ser alcançado com outras linguagens de programação (algumas diretamente, outras indiretamente); portanto, não há benefício suficiente para que eu gaste o tempo aprendendo e suportando a terrível sintaxe.)))

Mas sim, por razões que algumas pessoas gostam, verifique estas perguntas do Stack Overflow:

Provavelmente há mais algumas perguntas relacionadas a elas também.

13
Peter Boughton

Vou interpretar "LISP" como " LISP comum "; Não tenho dúvida de que outras respostas dirão " Esquema ". (Dica: o LISP é uma família de idiomas.)

O que significa "mais rápido"? Em termos de tempo necessário para executar uma referência, não, não é mais rápido que C ( mas pode ser ).

"Rápido" em termos de quanto tempo o Joe Random Hacker leva para escrever um programa em funcionamento ou corrigir um bug em um grande sistema de software? Quase certamente.

Quanto a este hacker, eu o uso porque quero escrever código, não clichê. Quero escrever algo uma vez , e não me repetir continuamente. E quero interagir com o programa enquanto o escrevo.

9
Frank Shearar

Gosto do LISP porque é um excelente meio para expressar meus pensamentos. O predicado para o meu idioma favorito é "Se eu pudesse escolher algo para expressar idéias, qual seria?". Atualmente é LISP * ( Scheme para ser específico), a ponto de eu me escrever escrevendo notas de programação nele. Como IRL , notas de papel e caneta. Mesmo quando estou pensando em programas, preciso implementar em PHP ou Ruby ou Python.

Isso não é um truque que eu aprendi ou algo que faço para obter credibilidade nerd (ninguém consegue ver o interior do meu caderno de qualquer maneira); é que o LISP é muito mais natural para mim pensar do que qualquer uma das alternativas e qualquer linguagem que ressoe com você que seja profundamente aquela que você Tesouro.

* Assim como uma nota de rodapé, Haskell está fechando a lacuna rapidamente, à medida que eu aprendo mais.

7
Inaimathi

Paul Graham responde a essa pergunta em O que fez o LISP diferente.

Lembre-se de que ele o usou para sua startup em meados dos anos 90, então Python e Ruby não estavam realmente maduros naquele momento (ou talvez nem sequer tivessem nascido).

O LISP basicamente tem todas as vantagens das linguagens dinâmicas, e eu acho que para a maioria dos aplicativos da Web atuais, Python e Ruby são muito impressionantes, e eles têm a vantagem de estruturas e documentação e comunidades vibrantes.

O recurso matador provavelmente é que todo o programa é feito de expressões. Isso significa que você pode passar blocos de código para funções (ou macros ...), porque um bloco de código nada mais é do que uma expressão.

Python não possui exatamente esse recurso; você teria que definir funções e passá-las. Ruby parece ter blocos, talvez seja um pouco limitado comparado ao que o LISP pode fazer (não tenho certeza)).

6
hasen

Eu tive uma reação instintiva a Scheme no passado, mas agora estou pronto para dar uma chance ao LISP ( Clojure , na verdade).

Veja bem, ao longo dos anos, peguei pedaços de linguagens como Java, C #, C++, Python e as coisas não são mais desafiadoras.

Clojure tem muitas promessas, parece ser muito limpo e pode resolver muitos problemas do mundo real. Um argumento forte para uma linguagem limpa como o Clojure é o advento dos computadores com vários núcleos.

Yay LISP!

EDIT: O ITA Software foi fundado por MIT graduados, e Scheme/LISP foi a única língua que muitos dos MIT graduados aprenderam. Para ser justo, porém, um pode trocar algoritmos LISP a quente em um sistema de produção em execução, o que é uma grande vantagem.

6
Job

O que eu mais gosto no LISP é que ele transcende paradigmas. Algumas pessoas dizem que o LISP é funcional, outros dizem que é declarativo e outros dizem que é multiparadigma. Eu acho que tudo isso está errado. Quando você usa o LISP, o paradigma não é mais uma restrição.

Quer objetos? Você pode te-los. Quer programação funcional? Você pode ter isso. Deseja programação lógica em estilo Prolog ? Escreva algumas macros. Deseja programação declarativa no estilo SQL? Vá em frente. Deseja usar algum paradigma que ainda não foi inventado? Estou confiante de que isso pode ser feito no LISP.

Além dos idiomas adiante -, eu ainda tenho que ver outro idioma oferecer esse nível de flexibilidade.

6
Jason Baker

A questão é poder. Potência = Trabalho (funcionalidade do programa)/Tempo

"Não queríamos conquistar os programadores do LISP; estávamos atrás dos programadores de C++. Conseguimos arrastar muitos deles na metade do caminho para o LISP".

- Guy Steele, Java co-autor da especificação

Traçar algum tipo de curva entre C++ e Java. Continue e, em algum momento, você encontrará o LISP.

6
compman

Estou aprendendo LISP ( newLisp ) por alguns motivos.

Razão número um: o LISP me faz pensar de maneira diferente, o que me torna um melhor codificador Ruby.

Parece muito estranho fazer as coisas de certa maneira no LISP, por exemplo, a iteração aninhada para passar por várias listas. Então isso me força a usar outras coisas, como map. Meu idioma favorito, Ruby, tem o mesmo método de mapa, mas nem sempre o uso, porque não é familiar: aprendi a fazer coisas usando uma técnica ruim e, quando a linguagem suporta essa técnica, continuo a usá-lo.

Razão número dois: o LISP é prático e possui boas bibliotecas modernas.

Existe uma estrutura da Web leve e agradável para newLisp chamada dragonfly . Isso me permite usar o código newLisp em vez de PHP para algumas tarefas. Eu realmente não gosto de PHP, e o newLisp parece mais divertido para essa tarefa específica do que Ruby.

Razão número três: o LISP é sintática e conceitualmente consistente.

Para mim, essa é a grande diferença entre Ruby e Python, consistência.

5
philosodad

"Mais rápido" não é uma coisa simples de medir - depende realmente de qual aspecto você está comparando. Dependendo da tarefa e da implementação do LISP, as velocidades podem se aproximar de C. Veja o Great Shoot-Out de Benchmarking para obter detalhes. A implementação SBCL do LISP é parecida com o Java 6 Server e é significativamente mais rápida que Ruby ou Python.

Mas a velocidade pura não é o principal motivo para escolher uma linguagem de programação - se fosse, todos nós estaríamos programando em linguagem Assembly ainda, certo? Para mim, a alegria diária do LISP é que o código seja compilado, mas não preciso desativar o aplicativo, recompilar tudo e começar a correr do zero. Em vez disso, posso alterar uma única função e essa alteração entrará em vigor em todos os lugares e posso ver imediatamente o efeito no meu aplicativo. Além disso, essa abordagem muito rápida "escreva, teste, escreva mais, teste mais" torna muito mais fácil testar imediatamente na hora de escrever o código (e você pode transformar esses testes interativos em testes de unidade posteriormente).

Imagine escrever um e-mail onde, depois de cada linha, você precisaria pressionar um botão para compilar sua saída de e-mail na tela antes de continuar seu pensamento. É isso que escrever em Java ou outra linguagem assim é para mim. Às vezes há uma razão para fazer isso, e eu gosto de Java), mas LISP é apenas mais responsivo e é mais fácil concluir o trabalho.

5
Michael H.

Você pode dizer "Lealdade à marca"?

Comecei em Fortran. Eu amei.

Eu mudei para o LISP. No começo eu odiava. Então eu aprendi a amar e odiar Fortran.

Mais tarde Pascal, C, C++, vários montadores, C #. (Na verdade, eu não amo C #.)

Eu acho que sou inconstante?

4
Mike Dunlavey

Quando o LISP foi criado, eles começaram a partir da matemática, não da ciência da computação (que ainda não existia). E a equipe do LISP acertou algumas coisas REALMENTE. O LISP teve coleta de lixo em 1960 ou mais! Eles realmente fizeram um ótimo trabalho.

Eu acho que a música The Eternal Flame a cobre.

4
Zachary K

Um grande atrativo é a comunidade. O LISP atraiu os desenvolvedores mais ambiciosos e brilhantes desde que a linguagem foi inventada. Onde quer que os pesquisadores tentem resolver problemas que nunca foram resolvidos, é provável que você encontre o LISP, como em inteligência artificial (AI) pesquisa, visão computacional, planejamento, representação de conhecimento e otimização heurística complexa. A linguagem se presta a resolver problemas de baixo para cima e de cima para baixo ao mesmo tempo, o que parece ajudar a enfrentar os desafios mais difíceis.

A sintaxe exensível via macros significa que raramente é necessário estender a definição de linguagem. Muito do que exigiria uma extensão de idioma em um idioma mais restrito está apenas a uma macro do LISP. Portanto, os programadores do LISP são livres para usar conceitos de linguagem recém-inventados sem um novo padrão de linguagem e sem necessariamente uma penalidade de velocidade real. Em um nível básico, resmas de código padrão são desnecessárias por pequenas extensões. Novas idéias no fluxo de controle, como a unificação no estilo Prolog, são implementadas de forma eficiente e compacta como extensões.

O sistema OOP, FECHA , está em uma classe própria em termos de flexibilidade. É muito difícil voltar ao rudimentar C++/Java/C # OOP depois de provar. GoF 5 padrões de design se tornam desnecessários, pois podem ser expressos de maneira simples e direta.

A linguagem não possuía um único proprietário corporativo e nenhuma implementação definitiva, apesar de possuir um padrão ANSI com muitas implementações em conformidade. Novas implementações importantes surgem a cada década e as antigas ainda são bastante ativas. Os especialistas podem planejar usar seus conhecimentos especializados por muito tempo. Isso causa algum atrito anarquista e fragmentação da comunidade, mas também significa que o tapete não pode ser puxado e a linguagem não pode se tornar moribunda por razões políticas corporativas ou de projeto. Sempre há várias implementações comerciais e de código aberto sendo trabalhadas. Os mais focados no desempenho avaliam regularmente um fator 2x das implementações de linguagem imperativa muito mais rápidas e com forte financiamento.

O calcanhar de Aquiles da comercialização inicial do LISP era uma pegada de memória para acomodar os recursos de segurança de tipo do idioma e os ambientes avançados de desenvolvimento de software que eles incluíam, com recursos incríveis, como documentação online completa, incluindo gráficos. Um 64 MB Symbolics LISP Machine não era viável em termos de custo em relação a uma estação de trabalho Sun de 8 MB. Hoje, os preços RAM entraram em colapso e há um enorme interesse nas linguagens LISP, especialmente considerando que as principais linguagens Java, C #, PHP hoje avançaram apenas minimamente nos últimos 30 anos.

Atualmente, existem linguagens modernas em concorrência com o LISP para compartilhar com desenvolvedores inteligentes: Python, Lua , Erlang , Haskell e OCaml . Mas nenhum oferece a mesma combinação de maturidade, adaptabilidade, várias implementações e velocidade compatíveis com os padrões.

2
bcaulf

Na verdade, eu não faço LISP. Mas o local em que trabalho faz elementos finitos com milhões de linhas principalmente de Fortran. O cara aqui a quem eu mais respeito sobre coisas de computação (códigos mecânica dos fluidos computacional ) acha que a combinação ideal é LISP do lado de fora (principalmente porque você evita problemas confusos no gerenciamento de memória) e Fortran para o nível baixo algoritmos (o Fortran é melhor para explorar os recursos vetoriais de SSE / AVX , e achamos improvável que esse lead seja fechado).

1
Omega Centauri