Por que o Lisp é útil? [fechadas]


64

O Lisp obviamente é uma vantagem para as coisas de IA , mas não me parece que o Lisp seja mais rápido que Java, C # ou até C. Eu não sou um mestre em Lisp, mas acho incrivelmente difícil entender a vantagem alguém escreveria software comercial em Lisp.

No entanto, é considerado como uma linguagem de hackers.

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


20
A linha "Eu não acho que o Lisp seja mais rápido que Java, C # ou, na verdade, mais rápida que C" é um pouco confusa. C é normalmente considerado o padrão para "código rápido porque você está programando próximo ao metal" - é a referência a ser batida em quase tudo. Agora, Java e outras linguagens GC podem superá-lo em alguns contextos, por exemplo, velocidade de alocação / limpeza de memória. Mas essa frase parece um pouco atrasada.
Michael H.

2
Lisp é uma linguagem de nível superior ao mencionado, portanto geralmente é mais lento.
precisa saber é o seguinte

5
@ Bo Tian: "linguagem de nível superior" precisa de uma definição inequívoca. Mesmo que tivesse um, isso soa como um não-sequitur. (graças @ Marcos)
Mike Dunlavey

5
@BoTian "nível superior" não é igual a "mais lento" por padrão.

24
O Lisp existe para mostrar o quão errado todos os outros designers de idiomas estiveram.

Respostas:


78

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. Lisp comum é projetado para fazer as coisas por 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 está 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, as únicas razões 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.


8
A sintaxe pode ser um problema se afetar significativamente a legibilidade ou a capacidade de gravação. Eu não acho que esse seja o caso do Lisp. Um bom editor ou IDE pode fazer o realce de sintaxe suficientemente bom e a correspondência de parênteses para não ser um grande problema.
precisa saber é o seguinte

4
Além disso, usei apenas o Lisp um pouco (Common Lisp), e a sensação geral que tive foi que o nº 2 foi o maior benefício para o Lisp. Talvez esteja pensando no paradigma errado, mas acho que nunca tive uma situação em que o código auto-modificável fosse necessário. Se você tiver um motivo específico para usá-lo, sim, mas, caso contrário, as macros parecerão o verdadeiro recurso matador. Edit: Acabei de perceber que estes são, de fato, o mesmo recurso.
precisa saber é o seguinte

3
@ Matt: Sim. FWIW, eu recentemente me deparei com Nemerle, uma linguagem experimental CLR em C # com macros. nemerle.org . Acho que vale a pena cutucar em algum momento, apenas pela experiência.
Paul Nathan

2
"Pragmatismo. O CL é projetado para realizar tarefas de profissionais que trabalham. A maioria das linguagens funcionais não é, em regra.": Não concordo com esta afirmação. Estou muito interessado no Lisp e tentando dedicar algum tempo para aprendê-lo. Mas acho que outras linguagens de FP também são muito eficazes para "fazer as coisas", pelo menos essa tem sido minha experiência com Scala e Haskell até agora.
Giorgio

11
"O CL é projetado para realizar tarefas de profissionais que trabalham. A maioria das linguagens funcionais não é, em regra.": Você pode elaborar isso? Especialmente na segunda parte da frase. Você pode citar alguns exemplos?
Giorgio

23

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 Lisp é como ter um gênio com n + 1 desejos.


5
+1 em "A programação está combatendo 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)". (Eu gostaria de poder dar um +10.)
Giorgio

O que é o "ambiente de desenvolvimento extremamente ágil, interativo e conversacional"?
qed

6
Não deveriam ser (+ 1 n)desejos, ou ainda melhor praticidade (incf n)?
precisa saber é o seguinte

21

Eu 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 é "sim" se for uma pergunta de / ou ou "Você não está pronto".


5
Paul Graham cita Louis Armstrong: “Se você precisar perguntar o que é o jazz, nunca saberá.”
Jason Baker

25
+1. Embora às vezes frases como "Se você tem que perguntar, você não está pronto" me faz pensar que quem diz isso simplesmente não pode explicar
SuperM

5
As linguagens funcionais Lisp e Lisp do @superM têm a propriedade de que, uma vez que as aprendemos, não podemos mais explicá-las!
Esoterik

18

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

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 gosto no Lisp é que, para mim, 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 são muito importantes para isso). Depois de ter algo em execução, adiciono declarações de tipo e "otimizo" meu código, pouco a pouco. É uma maravilha pressionar uma tecla no 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 não posso obter mais velocidade, mas em C, fazer qualquer coisa rapidamente é muito mais doloroso. Lisp é muito útil neste caso.

Dito isto, gosto do Lisp principalmente por causa das 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 o Emacs gerenciam 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 representam o código como listas, o que é necessário para simplificar a gravação das macros.

Não conheço outro idioma em que você possa escrever pequenas sub-linguagens para descrever melhor seu problema com a facilidade do Lisp. Essa é a vantagem que Paul Graham fala em Beating the Averages . É extrema modularidade e concisão. Em Java, tenho que 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 usá-las. De qualquer forma, você precisa entender alguns exemplos disso e depois julgar por si mesmo. Quando o "vi", fiquei impressionado e ainda acho que o Lisp é a melhor linguagem apenas por esse motivo. Eu sempre procuro macros nos principais idiomas para ver se eles correspondem ao poder das macros Lisp, mas até o momento não encontrei nenhum. Adiante é um segundo próximo.

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

  1. O software de negócios 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).


7
Experimente o clojure, é um cisco na JVM. Portanto, usando a JVM, você pode usar todo o material java.
Zachary K

@zachary: Existem pelo menos 2 implementações Common Lisp na JVM. ABCL é relativamente maduro.
Larry Coleman

O Clojure é 100% compatível com Java (pelo menos nunca encontrei nada em Java que o Clojure não possa melhorar e de forma que os Javaists não possam reclamar). Clojure é fortemente influenciado pelo melhor do Common Lisp e pelo melhor do FP. Com isso, SBCL, CLisp e Emacs, qualquer Lisper deve se sentir como um rei hoje em dia.
precisa saber

13

Eu não gosto de Lisp.

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

Mas nunca fui convencido a realmente usá-lo ((embora várias pessoas tenham tentado ) porque os benefícios da linguagem podem ser alcançados com outras linguagens de programação (algumas diretamente, outras indiretamente), portanto, não há benefícios suficientes 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á também mais algumas perguntas relacionadas a elas.


26
"Aceitando a terrível sintaxe". Talvez demore muito tempo desde que eu era novato no Lisp, mas a simplicidade e a regularidade da sintaxe do Lisp são um recurso importante, pois é isso que possibilita a extensão do Lisp por si só. Posso adicionar iteradores personalizados, adicionar novas construções de escopo "with-xxx", que são automaticamente limpas após a instalação, para que o desenvolvedor não precise, etc. A sintaxe é um recurso, não um bug.
Michael H.

5
A capacidade de estender um idioma consigo mesmo não requer uma sintaxe limitada a meia dúzia de caracteres. Além disso: "A sintaxe é um recurso, não um bug" ? - Eu sei. Eu não chamei isso de bug.
Peter Boughton

8
Ok, como você obtém os benefícios do sistema macro? Quantas linguagens permitem criar uma extensão orientada a objetos para elas em um capítulo razoavelmente curto (Paul Graham, "On Lisp").
David Thornley

6
A sintaxe não é mais horrível do que outros idiomas. Descobri que os parênteses visualmente "desaparecem" depois de um tempo. Com um bom recuo, o código é facilmente legível.
Barry Brown

8
Mas ter a capacidade de mover-se facilmente entre S-exps parece enorme ... Então, no assunto de parênteses, eu gosto da seguinte citação: Parênteses? Quais parênteses? Não notei nenhum parêntese desde o meu primeiro mês de programação em Lisp. Eu gostaria de pedir às pessoas que se queixam de parênteses em Lisp se eles são incomodados por todos os espaços entre as palavras em um jornal" - Ken Tilton
Cedric Martin

9

Vou interpretar "Lisp" como " Common Lisp "; Não tenho dúvida de que outras respostas dirão " Esquema ". (Dica: 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 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 clichê. Quero escrever algo uma vez e não me repetir continuamente. E quero interagir com o programa enquanto o escrevo.


Isso não seria incrível se você pudesse escrever uma pequena função dentro do seu editor que fizesse imediatamente algo para o resto do seu código? Ou você já pode fazer isso?
Mark C

4
@ Mark: Eu acho que você está descrevendo o Emacs.
Ferruccio

@Ferruccio Eu pensei que você deveria primeiro executar seu código.
Marque C

2
@ Mark C: Bem, você precisa destacar a região e depois M-x eval-region(ou eval-buffer), mas isso é tudo.
precisa saber é o seguinte

11
@MarkC: Além disso, se você estiver no zero buffer, você pode apenas escrever sua função e pressione C-j(o que é moralmente equivalente a entrar) e terá efeito imediato.
Tikhon Jelvis

7

Eu 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, é o Lisp * ( esquema 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, 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 Lisp é muito mais natural para mim pensar do que qualquer uma das alternativas, e qualquer linguagem que ressoe com você que seja profundamente uma que você valoriza.

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


6

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 a meio caminho do Lisp".

- Guy Steele, co-autor de especificações Java

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


2
O problema aqui é que você perde muita funcionalidade do C ++ acessando o Java, mas a recupera novamente (geralmente em forma aprimorada) ao acessar o Lisp.
David Thornley

@ DavidT A pergunta SO nessa citação exata tem um link para a fonte (procure por "citar"). A citação não deve ser levada tão a sério.
Mark C

@ David: Como macros. Não é apenas porque eles os deixaram de fora em Java (e, portanto, em C #), mas fizeram da falta deles uma "virtude". As macros são realmente úteis se eu estiver criando uma DSL sobre o idioma base.
Mike Dunlavey

@ Mike Dunlavey: Eu realmente não gosto de macros em C ++ (diabos, eu não gosto de elas em C, mas não tenho muita escolha lá). Eu realmente gosto de macros no Common Lisp. Sabe, acho que meu problema com esse comentário é que eu gosto tanto do C ++ quanto do Common Lisp muito mais do que do Java.
David Thornley

@ David: Estou com você 100% em macros no Lisp. Em C / C ++ eles são feios e propenso ao abuso, mas para o tipo de ( franja reconhecidamente coisas) eu faço, eles são tão muito melhor do que nada. Obviamente, quando faço isso em C ++, pode muito bem ser considerado abuso, mas no Lisp é considerado calorosamente inteligente. Vai saber.
Mike Dunlavey

6

Paul Graham meio que responde a essa pergunta em What Made Lisp Different .

Lembre-se de que ele o usou para sua startup em meados dos anos 90, então Python e Ruby não eram 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 das aplicações web atuais, Python e Ruby são impressionantes, e têm a vantagem de estruturas, 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).


O artigo de Paul Graham é interessante porque, exceto por alguns itens, a maioria dos idiomas hoje em dia parece ter os recursos que ele lista. Então, talvez Lisp fosse mais atraente naquela época; hoje em dia é mais valioso como a linguagem que introduziu esses recursos?
Andres F.

AST como sintaxe de idioma ainda é domínio do Lisp. Eu não estou ciente da linguagem não lisp, na qual as macros têm linguagem completa disponível, durante o tempo de compilação (Sim, o compilador basicamente entrega a chamada de macro para a definição de macro, que é o programa Lisp por si própria. Você deseja fazer http e db na macro no momento da compilação ?)
przemo_li

6

Tive uma reação instintiva a Scheme no passado, mas agora estou pronto para dar uma chance a 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 pelos graduados do MIT, e Scheme / Lisp foi o único idioma que muitos dos graduados do MIT aprenderam. Para ser justo, porém, é possível trocar os algoritmos Lisp a quente em um sistema de produção em execução, o que é uma grande vantagem.


8
Re: As coisas não são mais um desafio - experimente Haskell e deixe-nos saber o que você pensa. Além disso, você sempre pode tentar aprender INTERCAL para variar!
Mark C

3
@ Mark C, desculpe, mas não estou tocando INTERCAL. O desafio não é o único critério; tem que ser capaz de resolver problemas reais rapidamente também. Pelo menos Haskell é usado e amado por muitos.
Job

Isso foi de brincadeira, é claro.
Mark C

11
Atualizar o código em execução (com cuidado!) Em um servidor de produção é uma das alegrias do Lisp, sim. Python, pelo menos quando eu estava brincando com ele, não fez isso bem; você teria que recompilar manualmente todas as funções / métodos referentes às suas alterações, enquanto todas as implementações do Common Lisp tratam disso para você. Eu uso esse mesmo poder para o desenvolvimento: escrever, testar algo, editar, testar - sem loop de compilação, e você pode fazer seus testes interativos e transformá-los em testes de unidade, se desejar.
Michael H.

@Job eu esqueci ... PLEASE?
Mark C

6

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 uma programação lógica no 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 das línguas do tipo Forth , ainda não vi outra língua oferecer esse nível de flexibilidade.


+1 Programação multiparadigma, décadas antes do F #, ponto muito bom.
Orbling

Eu gostaria de poder votar isso dez vezes. Não há nenhuma colher ... não existe um paradigma ... Ele descreve o meu sentimento sobre Lisp comum com grande precisão :)
MadPhysicist

5

"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 do Benchmarking para se aprofundar nos detalhes. A implementação do Lisp da SBCL está a par do Java 6 Server e é significativamente mais rápida que o Ruby ou Python.

Mas a velocidade pura não é o principal motivo para escolher uma linguagem de programação - se fosse, todos nós ainda estaríamos programando em linguagem assembly , certo? Para mim, a alegria diária do Lisp é que o código seja compilado, mas não preciso interromper 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. É para mim que escrever em Java ou outra linguagem assim. Às vezes, há uma razão para fazer isso, e eu gosto muito de Java, mas o Lisp é apenas mais responsivo e é mais fácil concluir o trabalho.


Se eu estivesse começando hoje de novo, provavelmente escolheria Ruby - ele herdou grande parte da natureza Lisp, mas tem bibliotecas mais modernas e um único ditador benevolente que o leva adiante. Mas essa não foi a pergunta feita pelo OP.
Michael H.

Na verdade, eu escolhi o ruby ​​para começar e agora estou tentando aprender o novoLisp.
Filodado

5

Estou aprendendo o Lisp ( newLisp ) por alguns motivos.

Razão número um: Lisp me faz pensar de maneira diferente, o que me torna um melhor codificador de 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 muito agradável para o newLisp chamada libélula . Isso me permite usar o código newLisp em vez do PHP para algumas tarefas. Eu realmente não gosto de PHP, e newLisp parece mais divertido para esta tarefa específica do que Ruby.

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

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


+1: "Lisp é sintática e conceitualmente consistente." Esta é uma característica muito importante de um idioma. Algumas linguagens mal projetadas carecem de consistência, são como uma grande coleção de expressões idiomáticas reunidas em alguma ordem (eu tenho uma linguagem em mente, mas não vou citar :-)). Lisp é a esse respeito muito consistente. Assim que tiver algum tempo, definitivamente tentarei aprender.
Giorgio

4

Você pode dizer "Lealdade à marca"?

Comecei em Fortran. Eu amei.

Eu mudei para 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

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 Lisp acertou algumas coisas. 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.


Sim, aparentemente Lisp foi a primeira linguagem GCed.
Mark C

2

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 na pesquisa em inteligência artificial (IA), 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, CLOS , é uma classe própria em termos de flexibilidade. É muito difícil voltar ao rudimentar C ++ / Java / C # OOP depois de provar. Os  padrões de design do GoF 5 se tornam desnecessários, pois podem ser expressos de maneira simples e direta.

O idioma 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 ocupava espaço na 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. Uma máquina Symbolp Lisp de 64 MB 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 da RAM caíram e há um enorme interesse nas linguagens Lisp, especialmente considerando que as principais linguagens Java, C # e PHP hoje avançaram apenas minimamente em relação aos 30 anos atrás.

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.


1

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 que eu mais respeito sobre coisas de computação (codifica a mecânica dos fluidos computacional ) acha que a combinação ideal é Lisp do lado de fora (principalmente porque você evita problemas complicados com o gerenciamento de memória) e Fortran para os algoritmos de baixo nível (Fortran é o melhor para explorar os recursos vetoriais do SSE / AVX , e achamos improvável que esse lead seja fechado).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.