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?
Respostas:
Existem algumas razões pelas quais estou trabalhando para me tornar competente com o Common Lisp.
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.
fonte
Eu gosto do Lisp pela sua
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.
fonte
(+ 1 n)
desejos, ou ainda melhor praticidade(incf n)
?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".
fonte
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:
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 ...
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).
fonte
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.
fonte
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.
fonte
M-x eval-region
(oueval-buffer
), mas isso é tudo.C-j
(o que é moralmente equivalente a entrar) e terá efeito imediato.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.
fonte
A questão é poder. Potência = Trabalho (funcionalidade do programa) / Tempo
Traçar algum tipo de curva entre C ++ e Java. Continue e, em algum momento ao longo da linha, você encontrará Lisp.
fonte
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).
fonte
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.
fonte
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.PLEASE
?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.
fonte
"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.
fonte
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.
fonte
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?
fonte
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.
fonte
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.
fonte
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).
fonte