Por que o Lisp é útil? [fechadas]

62

Lisp obviamente é uma vantagem para o AI coisas, mas não me parece que Lisp é mais rápido que Java, C #, ou mesmo C. Eu não sou um mestre de Lisp, mas eu acho incrivelmente É difícil entender a vantagem que se obteria ao escrever software de negócios em Lisp.

No entanto, é considerado como uma linguagem de hackers.

Por que o Paul Graham defende o Lisp? Por que o ITA Software escolheu o Lisp em vez de outras linguagens de alto nível? Qual o valor que ele tem sobre esses idiomas?

    
por Peter Mortensen 24.11.2013 / 12:52
fonte

17 respostas

75

Existem algumas razões pelas quais estou trabalhando para me tornar competente no Common Lisp.

  1. Código homoicônico. Isso permite código auto-modificado estruturado.
  2. Macros com reconhecimento de sintaxe. Eles permitem a regravação do código clichê.
  3. Pragmatismo. Common Lisp é projetado para fazer as coisas por profissionais que trabalham. A maioria das linguagens funcionais não são, via de 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 bagunçadas. O Common Lisp tem uma quantidade suficiente de verrugas para conseguir fazer as coisas.

Indiscutivelmente, as únicas razões reais para escolher contra Common Lisp é que as bibliotecas padrão são datadas.

Eu sairei em um membro e direi que, no caso geral, a sintaxe não deve ser um problema para um profissional de software.

    
por 06.05.2015 / 20:21
fonte
21

Eu gosto de Lisp pelo seu

  • forma unificada, simples e elegante de representar código e dados.
  • ponto de vista único, que me dá os 80 pontos de QI para resolver problemas difíceis (com gorjeta de chapéu para Alan Kay)
  • ambiente de desenvolvimento extremamente ágil, interativo e conversacional
  • poder sem precedentes para criar e manipular abstrações

A programação está lutando contra a complexidade. As abstrações são a única ferramenta eficaz para combater a crescente complexidade (com o nosso tamanho do crânio muito limitado e constante). Gerenciar abstrações com Lisp é como ter um gênio com n + 1 desejos.

    
por 31.01.2011 / 07:13
fonte
21

Eu acredito que a resposta correta de Lisp é mais gnômica. Algo como: "Se você tiver que perguntar, você não está pronto."

Então, se alguém perguntar mais, a resposta correta é "yes" se for uma pergunta do tipo / ou pergunta ou "Você não está pronto".

    
por 07.05.2015 / 19:57
fonte
17

Acho que a vantagem do Lisp no campo inteligência artificial (AI) que todos mencionam é um acidente histórico. .. Lisp começou por / em AI, mas é uma linguagem de propósito 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 gosto no Lisp é que, para mim, combina Python e C em um. Eu posso começar a codificar sem declarações e protótipos imediatamente e muito rapidamente (o tempo de execução e o REPL são muito importante para isso). Depois de ter algo em execução, adiciono declarações de tipo e "otimizar" meu código, pouco a pouco. É uma maravilha pressionar uma tecla em SLIME e assistir a linguagem de máquina gerada para a função na qual estou interessado. Python, não há declarações de tipo, então não consigo mais velocidade, mas em C, fazer qualquer coisa rapidamente é muito mais doloroso. O Lisp é muito útil neste caso.

Dito isto, eu gosto do Lisp principalmente por causa de macros . Quando você finalmente entender o que as macros podem alcançar, acho que você coloca facilmente parênteses. Além disso, editores como o Emacs gerenciam os parênteses para que você não precise. Eu admito, no entanto, que eu não encontrei parênteses tão ruins no começo, e eu sei que algumas pessoas simplesmente não conseguem suportá-las. Mas como todo o propósito das macros é gerar código em tempo de compilação, o código em Lisp usa uma estrutura de dados padrão, e os parênteses são simplesmente uma representação de código como listas, o que é necessário para tornar macros simples de escrever.

Eu não conheço nenhum outro idioma em que você pode escrever pequenos sub-idiomas para descrever melhor o seu problema com a facilidade do Lisp. Essa é a vantagem que Paul Graham fala em Como vencer as médias . É extrema modularidade e concisão. Em Java, tenho que escrever muito texto bruto para expressar uma única ideia. Em Lisp eu poderia escrever algumas macros que geram esse código automaticamente e depois usá-las. De qualquer forma, você precisa entender alguns exemplos disso e depois julgar por si mesmo. Quando eu "vi", fiquei impressionado, e ainda acho que Lisp é a melhor linguagem apenas por esse motivo. Eu sempre procuro por macros em linguagens mainstream para ver se elas combinam com o poder das macros Lisp, mas até hoje não encontrei nenhuma. Forth é um segundo próximo.

Vou terminar com algumas críticas em relação ao software de negócios:

  1. O software de negócios precisa de bibliotecas, e boas, e o Lisp não é bom nisso. Eu normalmente não preciso deles, mas quando faço isso, eu tenho que escolher de uma pequena seleção de softwares incompletos que poucas pessoas usam. Eu deveria 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, já que elas basicamente alteram a linguagem. Muitos programadores sentem-se mais confortáveis em detectar determinados padrões no código, mesmo que o texto do programa seja mais longo e mais repetitivo. Eu suponho que no ITA eles têm algumas regras sobre macros ou eles têm uma enorme biblioteca de macros que facilita a colaboração (ou, mais simplesmente, todos os programadores são especialistas em Lisp).

por 07.05.2015 / 20:11
fonte
12

Eu não gosto de Lisp.

(Eu gosto de muitos dos conceitos que usa, como faz técnicas poderosas disponíveis nativamente, e assim por diante.

Mas eu nunca fui convencido a usá-lo ((mesmo que várias pessoas) tentei porque os benefícios da linguagem podem ser alcançados com outras linguagens de programação (algumas diretamente, algumas indiretamente), então não há benefícios suficientes para que eu passe o tempo aprendendo e aturar a terrível sintaxe.)))

Mas sim, por motivos que algumas pessoas gostam, confira estas perguntas sobre estouro de pilha:

Há provavelmente mais algumas perguntas relacionadas para essas também.

    
por 23.05.2017 / 14:40
fonte
9

Vou interpretar "Lisp" como " Common Lisp "; Não tenho dúvidas de que outras respostas dirão " Scheme ". (Dica: Lisp é uma família de línguas.)

O que significa "mais rápido"? Em termos de tempo gasto para executar um benchmark, não, não é mais rápido do que C ( mas pode ser ).

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

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

    
por 07.05.2015 / 19:56
fonte
7

Eu gosto de Lisp porque é um meio excelente para expressar meus pensamentos. O predicado para a minha língua favorita é "Se eu pudesse escolher qualquer coisa para expressar idéias, o que seria?". Atualmente é Lisp * ( Scheme para ser específico), a ponto de eu me encontrar escrevendo notas de programação nisso. Como IRL , notas de papel e caneta. Mesmo quando estou pensando em programas, preciso implementar em PHP, Ruby ou Python.

Este não é um truque que eu aprendi, ou algo que eu faço por credibilidade de nerd (ninguém consegue ver o meu notebook de qualquer maneira); é só que Lisp é muito mais natural para mim pensar do que qualquer uma das alternativas, e qualquer linguagem que ressoa com você tão profundamente é aquela que você valoriza.

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

    
por 07.05.2015 / 20:06
fonte
6

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

"We were not out to win over the Lisp programmers; we were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp."

-- Guy Steele, Java spec co-author

Faça algum tipo de curva entre C ++ e Java. Continue, e em algum momento ao longo da linha você encontrará Lisp.

    
por 13.01.2011 / 23:52
fonte
6

Paul Graham meio que responde a essa pergunta em O que tornou o Lisp diferente . p>

Tenha em mente que ele usou isso para sua startup em meados dos anos 90, então Python e Ruby não estava maduro nesse ponto (ou talvez nem tenha nascido).

Lisp basicamente tem todas as vantagens das linguagens dinâmicas, e eu acho que para a maioria das aplicações web de hoje, Python e Ruby são incríveis, e eles têm a vantagem de frameworks e documentação e comunidades vibrantes.

O recurso killer é provavelmente que o programa inteiro é 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.

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

    
por 06.05.2015 / 21:57
fonte
6

Eu tive uma reação automática a Scheme no passado, mas agora estou pronto para dar uma chance ao Lisp ( Clojure ).

Você vê, ao longo dos anos, eu peguei algumas linguagens como Java, C #, C ++, Python, e as coisas não são mais desafiadoras.

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

Yay LISP!

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

    
por 07.05.2015 / 19:57
fonte
6

O que eu gosto em Lisp é que transcende paradigmas. Algumas pessoas dirão que o Lisp é funcional, outros dirão que é declarativo, e outros dirão que é multiparadigma. Eu acho que tudo isso erra o ponto. Quando você usa Lisp, o paradigma não é mais uma restrição.

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

Além de Forth - como em outros idiomas, ainda estou para ver outro idioma oferecer esse nível de flexibilidade .

    
por 07.05.2015 / 20:15
fonte
5

"Mais rápido" não é algo simples de avaliar - depende de qual aspecto você está comparando. Dependendo da tarefa e da implementação de Lisp, as velocidades podem se aproximar de C. Olhe para o Great Benchmarking Shoot-Out para mergulhar em detalhes . A implementação SBCL do Lisp está no mesmo nível do Java 6 Server e é significativamente mais rápida que o Ruby ou o Python.

Mas, pura velocidade não é a principal razão 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 é compilado, mas eu não tenho que derrubar o aplicativo, recompilar tudo e então 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 em meu aplicativo. Além disso, essa abordagem muito rápida de "escrever, testar, escrever mais, testar mais" facilita muito o teste logo de início ao escrever o código (e depois você pode transformar essas sondas interativas em testes de unidade mais tarde).

Imagine escrever um e-mail em que, depois de cada linha, você precisa apertar um botão para compilar sua saída de e-mail na tela antes de continuar pensando. Isso é o que escrever em Java ou outra linguagem como essa é para mim. Às vezes, há uma razão para isso e gosto muito do Java, mas o Lisp é mais responsivo e é mais fácil trabalhar.

    
por 07.05.2015 / 19:52
fonte
5

Estou aprendendo o Lisp ( newLisp ) por algumas razões.

Razão número um: Lisp me faz pensar de forma diferente, o que me faz um melhor codificador de Ruby.

Parece muito estranho fazer certas coisas no Lisp, por exemplo, iteração aninhada para passar por várias listas. Então isso me força a usar outras coisas, como map . Minha linguagem favorita, Ruby, tem o mesmo método de mapa, mas nem sempre eu 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á-la.

Motivo número dois: o Lisp é prático e tem boas bibliotecas modernas.

Há um framework web muito bom e leve para o newLisp chamado libélula . Isso me permite usar o código newLisp em vez do PHP para algumas tarefas. Eu não gosto muito do PHP, e o newLisp parece mais divertido para essa tarefa específica do que o Ruby.

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

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

    
por 07.05.2015 / 20:12
fonte
4

Você pode dizer "Lealdade à marca"?

Eu comecei no Fortran. Adorei.

Eu mudei para Lisp. No começo eu odiava isso. Então aprendi a amá-lo e odeio o Fortran.

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

Eu acho que sou inconstante?

    
por 04.10.2010 / 17:57
fonte
4

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 tem algumas coisas REALMENTE certas. Lisp tinha coleta de lixo em 1960 ou mais! Eles realmente fizeram um ótimo trabalho.

Acho que a música The Eternal Flame abrange isto.

    
por 07.05.2015 / 20:17
fonte
2

Um grande atrativo é a comunidade. Lisp teve um atrativo para os desenvolvedores mais ambiciosos e brilhantes desde que a linguagem foi inventada. Onde quer que os pesquisadores estejam tentando 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 da linguagem. Muito do que exigiria uma extensão de linguagem em uma linguagem mais restrita é apenas uma macro de distância com Lisp. Assim, os programadores 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, as resmas do código clichê são desnecessárias por pequenas extensões. Idéias totalmente novas no fluxo de controle, como a unificação de estilo Prolog, são implementadas de forma eficiente e compacta como extensões.

O sistema OOP, CLOS , está em uma classe própria em termos de flexibilidade. É muito difícil voltar ao rudimentar C ++ / Java / C # OOP depois de obter um gostinho. GoF 5 padrões de design tornam-se desnecessários, pois podem ser expressos simplesmente e diretamente.

A linguagem não teve nenhum proprietário corporativo e nenhuma implementação definitiva, embora tenha um padrão ANSI com muitos implementações em conformidade. Grandes novas implementações 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 retirado e a linguagem não pode se tornar moribunda por razões políticas corporativas ou de projeto. Há sempre várias implementações comerciais e de código aberto sendo trabalhadas. Os mais focados no desempenho regularmente benchmark dentro de um fator de 2x das implementações de linguagem imperativa muito mais rápidas e altamente financiadas.

O calcanhar de Aquiles da comercialização inicial do Lisp foi a base da memória para acomodar os recursos de segurança de tipos da linguagem e os ambientes avançados de desenvolvimento de software incluídos, com recursos incríveis como documentação on-line completa, incluindo gráficos. Uma Máquina de Lisp Symbolics de 64 MB não era viável em termos de custos em relação a uma estação de trabalho Sun de 8 MB. Hoje, os preços de RAM entraram em colapso e há um tremendo interesse nas linguagens Lisp, especialmente considerando que as principais linguagens Java, C # e PHP hoje avançaram apenas minimamente sobre as de 30 anos atrás.

Existem linguagens modernas agora em competição com o Lisp para mindshare com desenvolvedores inteligentes: Python, Lua , Erlang , Haskell e OCaml . Mas nenhum oferece a mesma combinação de maturidade, adaptabilidade, múltiplas implementações e velocidade compatíveis com os padrões.

    
por 07.05.2015 / 20:32
fonte
1

Eu não costumo fazer o Lisp. Mas o lugar onde eu trabalho faz elementos finitos com milhões de linhas de Fortran principalmente. O cara aqui que eu mais respeito sobre computação (códigos mecânica dos fluidos computacional ) acha que a combinação ideal é Lisp no lado de fora ( principalmente porque você evita problemas confusos com gerenciamento de memória), e Fortran para os algoritmos de baixo nível (Fortran é melhor para explorar os recursos de vetores de SSE / AVX , e achamos que esse lead provavelmente não será fechado.

    
por 07.05.2015 / 20:21
fonte

Tags