O que há de tão bom no Lisp? [fechadas]

103

Não sei Lisp o suficiente para dizer se é bom ou ruim. Parece que todo mundo que usou Lisp adora, mas as línguas mais populares hoje em dia são descendentes de C.

Então, o que há de tão bom no Lisp e por que não é mais usado? Existe algo simplesmente ruim sobre Lisp (além da quantidade incessante de parênteses)?

Darrell Brogdon
fonte
5
"As línguas mais populares hoje em dia descendem do C" apenas superficialmente. Se você olhar para os recursos em vez de apenas o uso de colchetes, você descobrirá que as linguagens modernas não estão tão longe do Lisp, e estão ficando cada vez mais próximas. Um programa em C # ou Python ou Ruby, digamos, se parecerá muito mais com Lisp do que com C.
Ken
11
Um bom exemplo de linguagem que se parece com C, mas age mais como Lisp é o JavaScript. Muito de seu design é semelhante ao Scheme.
JAL
Bom ponto, Ken: um número crescente de recursos que costumavam ser exclusivos do Lisp (funções de primeira classe, funções como dados, até mesmo macros) estão chegando em outras linguagens. E o feedback não é unilateral: Lisp está desenvolvendo novas técnicas e expressões idiomáticas em reconhecimento de outras linguagens (por exemplo, CLOS em resposta ao sucesso do paradigma orientado a objetos).
itowlson
6
Lisp pegou ideias de todos os lugares, mas CLOS em resposta a quê? CLOS (1986-1987) foi em grande parte uma padronização de sistemas de objetos anteriores para Lisp, por exemplo, Lisp Machine Lisp (1980) included Flavors. Eu não acho que "o sucesso do paradigma OO" ainda era aparente em 1980: "C with Classes" tinha apenas um ano (e ainda faltavam 3 anos para ser renomeado como "C ++"), e eu não sei que o Simula-67 sempre foi muito popular. Lisp tem vários outros recursos avançados que as linguagens populares de hoje não possuem; OO por acaso teve sucesso, mas Lisp não entendeu porque (ou quando) era popular.
Ken
Não acho que todos que usaram Lisp gostem. Minha experiência é diferente. Tente perguntar a alunos de ciência da computação que começaram com Scheme. Provavelmente cerca de 10% vão adorar, 30% vão respeitar e 60% vão odiar. Eu também não acho que as línguas mais populares sejam descendentes de C.
Rainer Joswig

Respostas:

59

Lisp é o Chuck Norris das linguagens de programação.

Lisp é a barra contra a qual outras línguas são comparadas.

Conhecer o Lisp demonstra a iluminação do desenvolvedor.

Já ouvi falar de 3 pontos fracos (e seus contra-argumentos):

  1. Tipagem dinâmica.

    Há um argumento para as linguagens tipadas estaticamente girando em torno de fornecer ao compilador informações suficientes para capturar uma certa classe de erros para que eles não aconteçam em tempo de execução. Mas você ainda precisa testar.

    Este artigo defende a tipagem dinâmica junto com mais testes: Strong Typing vs. Strong Testing .

  2. Difícil de entender.

    Na verdade, existem duas partes para isso: aprendizado e ferramentas.

    Lisp exige algum esforço para realmente "pegar", mas vale a pena, porque aprender Lisp realmente fará de você um programador melhor em outras linguagens. Por exemplo, depois de realmente "obter" encerramentos, você entenderá as classes internas do Java. E depois de "obter" funções de primeira classe, você ficará deprimido cada vez que usar uma linguagem sem elas.

    Eu li The Little Schemer e estou lendo Practical Common Lisp , que são excelentes.

    Em seguida, estão as ferramentas. Estou em um Mac, então me concentrei no Aquamacs Emacs (torna o Emacs habitável para um novato) e no Steel Bank Common Lisp (SBCL).

  3. Falta de bibliotecas.

    Não posso dizer com certeza ainda, mas duvido. Para construir sites, parece que o Hunchentoot e o Elephant fornecem um bom conjunto de ferramentas. Mas realmente não vejo Lispers reclamando da falta de bibliotecas (talvez porque Lisp seja tão poderoso que eles simplesmente não são necessários?).

rickmode
fonte
4
Para abordar (3) - Você já olhou para Clojure?
viksit
5
"Mas realmente não vejo Lispers reclamando da falta de bibliotecas (talvez porque Lisp seja tão poderoso que eles simplesmente não são necessários?)." Eu corrigiria a última declaração para "(talvez porque Lisp seja tão poderoso que eles simplesmente não são necessários PARA ELES?)" Isso faz uma grande diferença.
Agnius Vasiliauskas
49
Não diz nada por que o ceceio é ótimo, dê um voto negativo de mim.
Kilon
30
Votos negados porque "X é incrível! X é ótimo! X é como Y, o que também é ótimo porque eu digo que é ótimo!" não é uma resposta a "Por que X é considerado ótimo?". A referência política também é inadequada e inútil (a maioria das pessoas nem mesmo acha que o libertarianismo é uma boa ideia). Os três pontos são úteis, mas gostaria que não fossem "Tem um ponto fraco A ... Mas na verdade não é nem um ponto fraco!".
Superbest
1
Lisp é o Chuck Norris das linguagens de programação. então é isso que o torna tão bom. Entendi. Votos negativos.
NiCk Newman
71

“Lisp é uma linguagem de programação programável.”
- John Foderaro, CACM, setembro de 1991

Esta é a minha opinião:

Superficialmente, Lisp é uma linguagem de programação funcional simples e agradável. Quase não há sintaxe e todas as peças se encaixam de maneira lógica.

Se você cavar um pouco mais fundo, ler SICP e escrever um avaliador metacircular, descobrirá duas coisas: Um, o interpretador inteiro (dados apenas alguns primitivos) é apenas uma página de código, e dois, a relação entre o código e os dados permite técnicas de programação elegantes.

Uma vez que você tenha absorvido isso completamente, parece que outras línguas estão gravadas na pedra quando elas apenas permitem que você diga algumas coisas. Lisp pode construir qualquer abstração se você puder definir a sintaxe e a semântica para ela.

Josh Lee
fonte
1
Você poderia, em teoria, incorporar qualquer linguagem ao Lisp como Rust, Ruby, C, Java, Python, Erlang. Portanto, a versão da expressão s de Python (Hy) e a de Rust são chamadas de (Risp) [embora eu não saiba o quão estáveis ​​são]. Se você escrever código em Hy em vez de Python, terá a capacidade de macros e edição estrutural como parinfer / paredit ( shaunlebron.github.io/parinfer ). As macros permitem que você insira suas próprias DSLs no Lisp e também podem ser usadas para transformar código lento em código rápido por meio de macros do compilador. Você também pode transformar o código Python (Hy) em Rust (Risp), transformando a árvore sexp.
aoeu256
Eu também ouvi este ditado várias vezes. Você poderia esclarecer um pouco mais sobre @ aoeu256?
Aluno
66

Lisp é bom porque tem uma sintaxe mínima, simples e regular.

Lisp é ruim porque tem uma sintaxe mínima, simples e regular.

Daniel Earwicker
fonte
4
O que há de ruim em uma sintaxe mínima, simples e regular?
oskarkv
27
@oskarkv - uma sintaxe mínima totalmente regular significa que não há preconceito para qualquer uso particular. Isso soa bem, até que você encontre o princípio de Pareto: é mais eficiente ser tendencioso para os casos mais comuns e parar de fingir que todos os casos são igualmente prováveis. Se 20% de seus clientes estão em Nova York e 80% em Los Angeles, faz sentido ficar em cima do muro, em algum lugar na fronteira entre Kansas / Oklahoma, para permanecer "imparcial" em termos geográficos? Ou tem mais sentido ir aonde a maioria dos clientes está? Preferimos linguagens que direcionam seus recursos para problemas prováveis.
Daniel Earwicker
4
A sintaxe Lisp é muito boa. Aprendi Haskell depois de Clojure, mas até então a sintaxe de Haskell parecia um obstáculo. A uniformidade da taxa solar de Lisp é ótima. Então, eu não sei exatamente de que preconceito você está falando. Tendência para a inflexibilidade? Soa mal.
oskarkv
3
Parece ruim quando você coloca dessa forma. Eu não disse assim! E quanto ao preconceito em relação às ocorrências mais comuns, as situações mais prováveis? Esses são (é claro) termos relativos, então depende do que você está fazendo. Se você realmente não tem informações sobre o que vai fazer, não adianta tentar se preparar. Mas provavelmente não é verdade - você tem informações e, portanto, pode se preparar ("polarizar") para as situações mais prováveis ​​para as quais precisa estar pronto.
Daniel Earwicker
22

"Qualquer programa C ou Fortran suficientemente complicado contém uma implementação ad hoc, especificada informalmente, repleta de erros e lenta de metade do Common Lisp."

Décima regra de Greenspun

Paolo
fonte
16

Aqui estão alguns links úteis:

Greg Hewgill
fonte
1
On Lisp é ótimo (estou apenas na metade, embora admita que as macros estão ficando um pouco densas); mas você precisa saber Lisp para lê-lo. Além deste pequeno problema, é um ótimo livro não apenas sobre Lisp, mas sobre engenharia de software em geral.
JS