O LISP (e dialetos como Scheme, Common LISP e Clojure) não obtiveram muito suporte da indústria, embora sejam linguagens de programação bastante decentes. (No momento, parece que eles estão ganhando força).
Agora, isso não está diretamente relacionado à pergunta: qual você usaria um dialeto LISP para um programa de produção? Que tipo de programa e por quê? Os usos do tipo de integração em algum outro código (por exemplo, C) também estão incluídos, mas observe que é isso que você quer dizer com sua resposta. Preferem-se conceitos amplos, mas também aplicações específicas.
Respostas:
Você usaria um dialeto LISP para um programa de produção?
absolutamente
Que tipo de programa e por quê?
Lisp é uma linguagem dinâmica de uso geral. Hoje, ele tem as mesmas dificuldades básicas que outras linguagens dinâmicas de uso geral que não são publicadas pela Microsoft: threads nativos, integração de GUI, operação determinística do GC e pequenas pegadas de memória.
Threads nativos são alcançados pelo LispWorks e SBCL, acredito. Possivelmente outros? Eu não investiguei completamente.
LispWorks e Franz Common Lisp - produtos comerciais - integram-se à GUI a graus de sucesso. Não tendo o $$ para comprá-los, não sei como funciona. Eu suspeito que eles funcionam muito bem ...
Uma operação de GC determinista pode ser feito (ele é feito em Java para algum nível de sucesso), mas eu não sei se os sistemas Lisp existentes (aqueles mantidos) têm qualquer código para fazer isso.
Pequena área de memória que acredito ser alcançada por alguns Lisps.
Meu ponto básico é que o Common Lisp está tecnicamente pronto para criar sistemas de produção. E faz .
A grande maioria dos desenvolvedores se assusta com (escolha uma) linguagens dinâmicas, macros, parênteses, falta de IDE favorito, má experiência na faculdade, poucos trabalhos nela e depois não a usa.
Pessoalmente, eu pularia na construção de um sistema de produção completo no Common Lisp do zero em um ambiente de equipe.
editar: eu realmente não respondi por que o Lisp em oposição a outros idiomas.
Na minha experiência com o Lisp - não significativo, mas consideravelmente mais que o 'olá mundo' -, achei a linguagem extremamente útil após as primeiras dores de "Argh new language". A maioria do idioma se encaixa de uma maneira muito regular e bastante óbvia, que eu realmente não acho que outros idiomas funcionem. Parte disso é a fusão de expressões e declarações. Parte disso é o tipo de dados da lista principal. Parte disso é o sistema de tipos. Parte disso é o sistema macro. Não me interpretem mal, porém, não são pontos de dor. Mas eles não me chutam na cara tanto quanto as dores de outras línguas.
Um exemplo simplista é a rotina de comprimento de lista do Python. A abordagem do Python é chamar
len(mysequence)
. Mas, se pensarmos nisso, um comprimento é uma propriedade de uma sequência. Então,mysequence.len()
é uma ideia mais apropriada. Lisp remove essencialmente essa distinção sintática.(length thing)
é a sintaxe da chamada de função e a sintaxe do método. Claro, algumas pessoas acham isso frustrante e querem a diferença sintática. Eu preferiria ter a regularidade.edit2: eu converti a parte da minha tese de mestrado que é executada na área de trabalho em Common Lisp e foi um prazer trabalhar até agora.
fonte
Eu pessoalmente conheço pessoas que usam o Lisp na forma de Clojure em alguns bancos de investimento e startups em Londres. Também escolhi o Clojure como a principal linguagem de desenvolvimento para minha própria startup, por isso estou disposto a colocar meu dinheiro onde minha boca está :-)
Eu achei uma experiência muito esclarecedora aprender o Clojure durante o ano passado (depois de muita experiência com Java e C #). Os principais motivos para isso são:
Também parece ser uma opção prática para o uso real da produção pelos seguintes motivos:
fonte
Eu usaria o LISP se fosse a melhor escolha para o trabalho. Apenas algumas coisas que influenciam a "melhor escolha":
Todos esses fatores devem ser considerados ao decidir se o LISP é apropriado para um projeto. No mundo corporativo, eu nunca experimentei isso.
fonte
Absolutamente. Paul Graham explica bem .
fonte
Onde: O Emacs é um aplicativo do mundo real que usa LISP.
Motivo: foi uma ótima maneira de expressar o mapeamento entre pressionamento de tecla e ação. É interpretado e rápido, bem definido e simples.
fonte
Ambos Macsyma e Autocad são baseados em um dialeto do Lisp. Eu os classificaria como 'mundo real' e também como Emacs.
fonte
Absolutamente eu consideraria isso. Especialmente para novos trabalhos de desenvolvimento com algum potencial de computação paralela. Esse parece ser um ponto ideal para esses tipos de linguagens funcionais.
fonte
O Lisp é uma das melhores opções para implementar compiladores. E, como o uso de DSLs e eDSLs está aumentando agora, o Lisp está se tornando mais valioso. Estou usando um dialeto Lisp para todas as minhas tarefas relacionadas ao DSL.
fonte
No momento, estou tentando usar o newLisp como um substituto para o Php no meu site pessoal, através da estrutura Dragonfly . Se eu descobrir como fazer o Apache funcionar bem, eu o usarei (o servidor da Web incorporado funciona muito bem, mas eu preferiria trabalhar com o Apache). E uma vez que isso aconteça, usarei o newLisp em qualquer lugar em que usaria o Php, porque não gosto do Php e gosto do newLisp.
No momento, Clojure não é uma boa opção para aplicativos Android, mas sei que as pessoas estão trabalhando nisso. Então, se isso for descoberto, seria outro lugar para eu usar um dialeto do Lisp para aplicativos do mundo real ... mas, novamente, isso é porque eu simplesmente não gosto de Java.
Mas, honestamente, prefiro Ruby a Lisp ... mas isso é principalmente uma questão de comunidade e documentação.
fonte
Eu implementei um aplicativo comercial proprietário no Common Lisp chamado Tankan que roda no Microsoft Windows como um executável nativo.
É um programa para treinar você mesmo a memorizar caracteres kanji japoneses.
O programa é executado como um servidor HTTP em segundo plano. A execução deste servidor e a navegação para suas páginas são coordenadas por um pequeno aplicativo de ícone da área de notificação do sistema (também conhecido como "Bandeja") que desenvolvi usando o Visual C ++.
O aplicativo de ícone da pequena bandeja inicia, monitora e para o servidor baseado em Lisp e se comunica com ele usando os tubos Win32 vinculados à sua entrada e saída padrão. Por meio de um canal, o servidor Lisp informa o aplicativo de ícone da bandeja da URL precisa com o número de porta correto, e esse aplicativo de ícone da bandeja pode iniciar o navegador pela API do Shell para navegar nessa URL. O usuário clica duas vezes no ícone para abrir a interface do usuário.
O programa Lisp mantém em sua memória um estado de sessão bastante complexo que contém o histórico de entrada do usuário e vários relacionamentos entre vários objetos. A notação de objeto circular do Lisp (ativada pela
*print-circle*
variável) e como ela funciona nosprint-object
métodos CLOS personalizados são de grande ajuda na implementação da persistência: os usuários podem salvar o estado no disco e retomar de onde pararam. Tudo é salvo, incluindo o estado da interface do usuário. Há muita subestrutura compartilhada no gráfico de objetos, bem como ciclos. Além disso, muitos itens estáticos que não precisam ser persistidos, como o conteúdo dos objetos de entrada do dicionário. Com os métodos personalizados de objeto de impressão ANSI Common Lisp, você pode criar representações impressas condensadas para objetos que são legíveis por máquina,Quase nenhum JavaScript é usado na interface da web. Mesmo os controles para ocultar e mostrar partes da interface do usuário são feitos através do envio de formulários e da nova renderização do HTML. Portanto, todos os detalhes do estado da interface do usuário estão no servidor e persistem quando o usuário salva. A re-geração do HTML é muito rápida. Isso é feito por uma expressão gigante de aspas Lisp, que alimenta uma macro geradora de HTML. O código compilado pelo Clozure Common Lisp (CCL) faz com que isso aconteça tão rápido que você nem percebe que quando clica em um botão [+] na interface do usuário para abrir algo, está enviando uma solicitação a um servidor que regenera o página danada inteira, e não simplesmente executando algum JavaScript local para alterar a visibilidade de um elemento de documento local.
O programa foi originalmente desenvolvido com o CLISP. Graças ao ANSI CL ser uma linguagem padrão, com implementações que se adaptam bem e não muitas armadilhas furtivas na linguagem (comportamento "indefinido" ou "definido pela implementação"), ele é facilmente transportado para o CCL.
O CLISP não foi abandonado; ainda é usado para alimentar o back-end de licenciamento, usando muito da mesma base de código comum.
Desenvolvi um sistema de licenciamento original para o programa, usando criptografia de curva elíptica fornecida pela biblioteca IronClad, usada pelo servidor de licenciamento para assinar licenças para certificá-las. (Lembro-me de que poderia ter usado o programa de linha de comando do OpenSSL para gerar os parâmetros EC para a chave do servidor.)
As licenças são representadas como objetos Lisp. É uma homenagem à portabilidade do Lisp que um programa do Windows compilado pelo Clozure Common Lisp possa gerar uma licença baseada em expressão S, um programa CLISP em execução em um servidor Debian possa preencher o campo de assinatura digital ausente nesse objeto e enviá-lo de volta para o programa Windows que pode validar a assinatura.
No servidor, além do serviço de licenciamento baseado em CGI, eu simples API de linha de comando para gerenciar licenças. Você pode listar licenças, encontrar licenças específicas e editar seus atributos: por exemplo, editar a data de validade de uma licença temporária para conceder uma exceção ao usuário. O back-end de licenciamento também gera emails. Eu não usei nenhuma biblioteca para manipulação de CGI no lado do servidor: apenas código Lisp rolado manualmente para lidar com as variáveis de ambiente Apache e argumentos da linha de comando. (Embora o código da biblioteca seja usado para lidar com codificação de URL e geração de HTML.) Nenhum banco de dados é usado para armazenamento; as licenças são geradas em um arquivo chamado
licenses.lisp
e é isso.fonte
Se alguém me pagou, com certeza.
Eles provavelmente estariam mais interessados em pagar alguém que conhece o idioma. Eu só brinquei com elisp e esquema algumas vezes.
fonte