O que é ótimo sobre o Clojure? [fechadas]

40

Eu dei uma olhada no Clojure recentemente e me deparei com este post no Stackoverflow que indica alguns projetos seguindo as práticas recomendadas e, em geral, um bom código Clojure. Eu queria falar sobre o idioma depois de ler alguns tutoriais básicos, então dei uma olhada em alguns projetos do "mundo real".

Depois de examinar ClojureScript e Compojure (dois dos" bons "projetos acima mencionados, eu sinto que o Clojure é uma piada. Eu não entendo porque alguém escolheria o Clojure, digamos, Ruby ou Python, duas linguagens que eu amo e que têm uma sintaxe tão limpa e são muito fáceis de entender, enquanto o Clojure usa tanto parênteses e símbolos em todos os lugares que arruíne a legibilidade para mim.

Eu acho que Ruby e Python são lindos, legíveis e elegantes. Eles são fáceis de ler, mesmo para quem não conhece a língua de dentro para fora. No entanto, o Clojure é opaco para mim e sinto que preciso conhecer todos os pequenos detalhes sobre a implementação da linguagem para poder entender qualquer código.

Então, por favor, me ilumine!

  • O que há de bom em Clojure?
  • Qual é o mínimo absoluto que eu deveria saber sobre o idioma para apreciá-lo?
por marco-fiset 11.12.2012 / 22:09
fonte

3 respostas

46

Para o fundo que você deu, se eu posso parafrasear:

  1. Você está familiarizado com o Ruby / Python.
  2. Você ainda não vê as vantagens do Clojure.
  3. Você não encontra a sintaxe Lisp ou Clojure clara.

... Acho que a melhor resposta é ler o livro Clojure Programming de Emerick, Carper e Grand. O livro tem várias comparações de código explícitas com Python, Ruby e Java, e tem explicações de texto abordando codificadores dessas linguagens. Pessoalmente, cheguei ao Clojure depois de construir projetos de bom tamanho com Python e ter alguma experiência em Lisp; ler esse livro ajudou a me convencer a começar a usar o Clojure não apenas em projetos paralelos, mas para fins profissionais.

Para resolver suas duas perguntas diretamente:

  1. O que há de bom no Clojure? Muitas respostas neste site e em outros lugares, por exemplo veja link
  2. Qual é o mínimo absoluto que eu deveria saber sobre o idioma para poder apreciá-lo? Eu sugeriria conhecer as grandes idéias por trás do design do Clojure, conforme articulado em Programação do Clojure e A Alegria de Clojure livros-sábios, e nas palestras de Rich Hickey, esp. a conversa Simple Made Easy . Depois de conhecer o what / why , você pode começar a entender o como ao ler o código Clojure, esp. como mudar seu pensamento de classes, objetos, estado / mutação para "apenas funções e dados" (funções de ordem superior, mapas / conjuntos / seqüências, tipos).

Sugestões adicionais: a elegância e o poder de Lisp são em parte de sua sintaxe minimalista e totalmente consistente. É muito mais fácil apreciar isso com um bom editor, por exemplo Emacs com o modo clojure e ParEdit. Conforme você se familiariza com isso, a sintaxe desaparece e você "enxerga" semânticas, intenções e abstrações concisas. Em segundo lugar, não comece lendo a fonte para o ClojureScript ou o Compojure, esses são demasiado-de-uma vez; tente alguns problemas do 4clojure.org, e compare soluções com os principais codificadores lá. Se você vir 4-6 outras soluções, invariavelmente alguém terá escrito uma solução de estilo FP bem idiomática e sucinta, que você pode comparar com uma solução de estilo imperativo desajeitada, detalhada e desnecessariamente complicada.

    
por 12.12.2012 / 01:58
fonte
20

Os dialetos Lisp têm um nicho único devido à sua sintaxe simples. Esta sintaxe simples torna a metaprogramação através do uso de macros muito simples. Isso permite que você modele o idioma para adequar-se ao domínio do seu problema, em vez de modelar para adequar o domínio do problema ao seu idioma. É muito legal quando você se preocupa com isso e permite que você faça muitas coisas com facilidade, o que é muito difícil em outros idiomas.

A desvantagem é que, como todo programa Lisp define essencialmente sua própria linguagem, você realmente precisa ter uma compreensão sólida das coisas para entender o que está acontecendo.

Agora, para responder às suas perguntas ...

  1. O fechamento é um dialeto Lisp moderno executado na JVM / CLR. Isso facilita o aproveitamento do poder do Lisp em uma infraestrutura existente.

  2. É essencial entender como usar macros para criar o Lisp no domínio do seu problema para apreciar seu uso. Eu realmente só entendi isso depois de implementar um tempo de execução Lisp, quando descobri que muitos dos principais recursos de linguagem podem ser facilmente implementados no próprio Lisp. É preciso um projeto de tamanho razoável para obter isso.

Agora, com suas vantagens, apesar de ser divertido programá-lo, eu pessoalmente não tenho muitos casos em que gostaria de recorrer a ele para problemas diários. É uma ferramenta muito boa para aprender a expansão da mente, e depois de aprender Lisp corretamente, tornou-se muito mais natural aproveitar as facilidades da meta-programação em outras linguagens.

A sintaxe simples facilita a interpretação dos computadores (permitindo macros fáceis e poderosas), mas torna muito difícil para um ser humano analisar rapidamente expressões complexas.

    
por 11.12.2012 / 22:32
fonte
10

Os pontos strongs do Clojure têm sido destacados muitas vezes e, com certeza, contribuem para uma linguagem muito poderosa, então não vou repeti-los novamente aqui.

Sempre amei o lisp, desde os tempos de uni e fiquei muito empolgado quando descobri o Clojure (talvez a chance de usar o lisp fora da academia, enfim!). No entanto, quando comecei a aprender, um sentimento desagradável começou a surgir, embora eu não consiga identificar exatamente o que é que não gosto. Primeiro de tudo, eu diria que codificar em Common lisp foi fácil e divertido para mim, mas o Clojure tem uma curva de aprendizado mais acentuada. Clisp tinha certa beleza e elegância para isso. Não tenho certeza se vou conseguir o mesmo sentimento do Clojure. Eu estou querendo saber se esse sentimento vai embora quando eu tiver mais experiência.

Eu tenho outro palpite para minha misteriosa repulsa. Eu acho que pode ser a sua grande flexibilidade. Por exemplo, você pode ter estruturas que são meio vetor e meio mapa e com alguns caracteres de código você pode aceitá-los como parâmetros, separá-los e processá-los corretamente. Sim, remove todo o clichê, mas de alguma forma não parece certo. É como se você nunca soubesse muito bem que as regras sob todos aqueles parênteses, pontos-e-vírgulas, etc. estão operando.

Para mim, eu ainda amo a linguagem por todas as suas vantagens (basicamente, rodando na JVM e simplificando a simultaneidade, sendo muito mais poderosa e concisa do que Java e com falhas de design menos óbvias), mas o júri ainda está fora para saber se algo poderia ter sido melhorado.

    
por 11.12.2012 / 23:15
fonte

Tags