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


40

Ultimamente, tenho visto o Clojure e me deparei com esta postagem no Stackoverflow que indica alguns projetos seguindo as práticas recomendadas e o bom código geral do Clojure. Eu queria entender o idioma depois de ler alguns tutoriais básicos, então dei uma olhada em alguns projetos do "mundo real".

Depois de analisar o ClojureScript e o Compojure (dois dos "bons" projetos acima mencionados), sinto que Clojure é uma piada. Eu não entendo por que alguém escolheria o Clojure, digamos, Ruby ou Python, duas linguagens que eu amo e que possuem uma sintaxe tão limpa e são muito fáceis de entender, enquanto o Clojure usa tantos parênteses e símbolos em todos os lugares que arruina a legibilidade de 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 o idioma de dentro para fora. No entanto, Clojure é opaco para mim e sinto que devo conhecer todos os pequenos detalhes sobre a implementação da linguagem para poder entender qualquer código.

Então, por favor, me esclareça!

  • O que há de tão bom no Clojure?
  • Qual é o mínimo absoluto que devo saber sobre o idioma para apreciá-lo?

14
I don't understand why someone would pick Clojure over say, Ruby or Python- roda na jvm e pode usar a biblioteca java inteira. ... have such a clean syntaxindiscutivelmente, linguagens funcionais como o lisp têm uma sintaxe e estrutura muito limpas, é apenas uma para a qual a maioria das pessoas não está acostumada.

22
O nome dele é sexy.
programador

4
Qualquer adolescente que mora no porão pode pegar Python e Ruby em questão de poucos meses. Se isso é tudo o que eles querem usar, nunca sairão do porão. Não estou dizendo que alguém que tenha desenvolvido desenvolvimento profissional em Python por muitos anos seja menos mortal comparado a alguém que escreve C incorporado, mas se Python e Ruby são tudo o que sabem e tudo o que querem saber, então algo é suspeito. A propósito, levei pessoalmente mais de 6 anos após me formar para descobrir e apreciar a programação funcional e o Lisps. Minha primeira reação a Scheme foi um estremecimento.

4
"indiscutivelmente, linguagens funcionais de lisp como têm uma sintaxe e estrutura muito limpas, é apenas uma para a qual a maioria das pessoas não está acostumada.": Tenho muito pouca experiência com o Lisp e comecei a ler o livro "Practical Common Lisp". Até agora, não encontrei nenhum problema com a sintaxe; IMHO os mitos sobre a sintaxe do Lisp ser menos legível são apenas FUD.
Giorgio

4
Comecei a olhar para Clojure recentemente (mas tenho experiência anterior com Haskell e Scala, então a sintaxe não é tão chocante). Na verdade, achei surpreendentemente legível. Existem muitos fewsímbolos fora dos parênteses em comparação com muitos idiomas e quase nenhuma palavra reservada. A razão pela qual você acha ilegível é porque é um paradigma totalmente novo e funciona de uma maneira fundamentalmente diferente de uma linguagem típica orientada a objetos. Dê algum tempo e energia.
KChaloux

Respostas:


47

Para o fundo que você forneceu, se é que posso parafrasear:

  1. Você está familiarizado com 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 numerosas comparações explícitas de código com Python, Ruby e Java e possui explicações em texto abordando os codificadores dessas linguagens. Pessoalmente, vim para Clojure depois de criar projetos de bom tamanho com Python e ter alguma experiência em Lisp; a leitura desse livro me ajudou a começar a usar o Clojure não apenas em projetos paralelos, mas para fins profissionais.

Para abordar suas duas perguntas diretamente:

  1. O que há de tão bom em Clojure? Muitas respostas neste site e em outros lugares, por exemplo, consulte https://www.quora.com/Why-would-someone-learn-Clojure
  2. Qual é o mínimo absoluto que devo saber sobre o idioma para apreciá-lo? Eu sugeriria conhecer as grandes idéias por trás do design de Clojure, conforme articuladas nos livros de Programação de Clojure e The Joy of Clojure , e nas palestras de Rich Hickey, esp. a palestra Simple Made Easy . Depois de saber o que / por que você pode começar a entender 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 / sequências, tipos).

Sugestões adicionais: a elegância e o poder do Lisp são parcialmente da sua sintaxe minimalista e totalmente consistente. É muito mais fácil apreciar isso com um bom editor, por exemplo, Emacs com modo clojure e ParEdit. À medida que você se familiariza com isso, a sintaxe diminui e você "vê" semântica, intenções e abstrações concisas. Em segundo lugar, não comece lendo a fonte do ClojureScript ou do Compojure, elas são muito de uma vez; tente alguns problemas do 4clojure.org e compare as soluções com os principais codificadores de lá. Se você encontrar 4-6 outras soluções, invariavelmente alguém terá escrito uma solução no estilo FP verdadeiramente idiomática e sucinta, que você pode comparar com uma solução no estilo imperativa desajeitada, detalhada e desnecessariamente complicada.


20

Os dialetos Lisp têm um nicho único devido à sua sintaxe simples. Essa sintaxe simples torna a metaprogramação através do uso de macros muito simples. Isso permite que você modele o idioma para se adequar ao domínio do seu problema, em vez de modelá-lo para ajustá-lo ao seu idioma. É muito legal assim que você começa a entender, e permite que você faça muitas coisas facilmente, o que é muito difícil em outros idiomas.

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

Agora, para responder suas perguntas ...

  1. Clojure é um dialeto Lisp moderno que é executado na JVM / CLR. Isso facilita tirar proveito do poder do Lisp em uma infraestrutura existente.

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

Suas vantagens à parte, embora seja divertido programar, eu pessoalmente não tenho muitos casos em que me voltaria para problemas diários. É uma ferramenta muito boa para aprender a expandir a mente e, depois de aprender o Lisp corretamente, tornou-se muito mais natural tirar proveito das instalações de meta programação em outras linguagens.

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


2
Você já olhou para a mesa de luz ?

4
Sua resposta faz parecer que as macros são a maneira normal de abordar a programação Lisp, quando na verdade a maioria dos problemas de programação pode ser resolvida com funções comuns de primeira classe. As macros destinam-se principalmente ao uso na programação de idiomas (ou seja, estendendo o idioma). Veja também bookshelf.jp/texi/onlisp/onlisp_9.html
Robert Harvey

3
@RobertHarvey Eu diria que, se você não está tirando proveito dos marcos, há uma infinidade de outros idiomas nos quais eu gostaria de oferecer funções de primeira classe com uma sintaxe muito mais legível.
bunglestink

@MichaelT que parece arrumado. Eu gosto do conceito.
DPM

3
@RobertHarvey Scala, JavaScript, C #, Python e Haskell estão todos no topo da minha cabeça no que diz respeito a linguagens com funções de primeira classe que eu consideraria mais sintaxe analisável por humanos do que Lisps.
bunglestink

10

Os pontos fortes do Clojure foram destacados muitas vezes e, com certeza, contribuem para uma linguagem muito poderosa, para que eu não os repita novamente aqui.

Eu sempre amei o lisp, desde os dias de uni e fiquei realmente empolgado quando descobri o Clojure (talvez a chance de usar o lisp fora da academia, finalmente!). No entanto, quando comecei a aprender, um sentimento desconfortável começou a surgir, embora não consiga identificar exatamente o que não gosto. Antes de tudo, eu diria que a codificação no Common lisp foi fácil e divertida para mim, mas Clojure tem uma curva de aprendizado mais acentuada. Clisp tinha uma certa beleza e elegância. Não tenho certeza se vou sentir o mesmo de Clojure. Estou pensando se esse sentimento desaparecerá à medida que eu tiver mais experiência.

Tenho outro palpite para minha misteriosa repulsa. Eu acho que pode ser 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á-las como parâmetros, desmontá-las e processá-las corretamente. Sim, ele remove todo o padrão, mas de alguma forma não parece certo. É como se você nunca soubesse muito bem que as regras sob todos esses parênteses, dois pontos, braquetes, etc. estão operando.

Para mim, eu ainda amo a linguagem por todas as suas vantagens (principalmente, 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á em dúvida se algo poderia ter sido melhorado.

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.