Para que é útil o Clojure? [fechadas]

100

Para quais aplicativos do mundo real as pessoas usam o Clojure?

Eu uso Groovy para cola, Java para grandes sistemas, scripts Python / Perl para análise e cola. Eu poderia me ver chamando o Clojure de Java, mas não consigo ver onde poderia usá-lo sozinho. Acho que seria mais fácil usar quase qualquer linguagem de script para tarefas ad hoc.

Não sou um expert em Groovy ou fanboy de forma alguma, mas me parece que ele tem um framework de suporte melhor, ferramentas e muitas construções de linguagem (closures, programação funcional). O mesmo pode ser dito para Scala.

Será que seu futuro é como uma linguagem embutida em outros sistemas?

Fortyrunner
fonte
23
Tudo exceto fazer um sanduíche para mim.
wheaties
12
@wheaties: Você já tentou (sandwich me BLT)?
FrustratedWithFormsDesigner
3
Por que você não usaria Clojure para "grandes sistemas" também? ISTM que, sendo menos prolixo do que Java, seus sistemas não precisariam ser tão grandes em Clojure. :-)
Ken
2
Olhando para as respostas - acho que as pessoas estão usando para algumas coisas legais. Eu me pergunto quantas empresas irão escolher para desenvolvimento de longo prazo?
Fortyrunner de
1
Eu sei que já faz muito tempo, mas é preciso muita inteligência para programar em uma linguagem funcional. Mentes afiadas são caras, então não sei sobre o potencial LTD da Clojure do ponto de vista de negócios - não até que se torne muito mais difundido do que é até hoje (cinco anos depois).
Sean Allred,

Respostas:

93

Eu usei o Clojure para:

  1. Raspagem de páginas da web
  2. Scripts de shell
  3. Construindo sites
  4. Brincando com OpenGL
  5. Escrevendo servidores web assíncronos
  6. Modelos de HTML
  7. Executar tarefas paralelas (buscar vários URLs e processar em paralelo)
  8. Brincando com áudio em tempo real
  9. Simulações

Essa é a parte prática / divertida.

Mas Clojure também tem muita profundidade teórica. Idéias que se tornarão cada vez mais relevantes à medida que o mainstream realmente compreender o potencial da Programação Funcional.

Uma opinião pessoal, mas Clojure fornece a melhor construção de linguagem para organizar o software corretamente (sem causar dor indevida para o programador em trabalho) de todas as linguagens que usei até agora acadêmica e profissionalmente - C, C ++, Objective-C, Java, JavaScript, Python, Ruby.

O que não quer dizer que Clojure seja perfeito. Mas me parece que foi construído em uma base melhor do que a maioria das que estão por aí.

dnolen
fonte
Você é David Nolen? o cara que deu a palestra sobre "Clojurescript: Lisp's Revenge". Foi uma palestra incrível!
Amogh Talpallikar
1
//, o que você quer dizer com "fornece melhores construções de linguagem para organizar o software corretamente"? EG dev.clojure.org/display/community/Library+Coding+Standards ?
Nathan Basanese
2
@maSnun no tempo de inicialização do hardware moderno é de cerca de 1 segundo ou menos. Isso é bom para scripts de shell.
dnolen
1
@dnolen Obrigado por responder. Sou um novo entusiasta de clojure e levo cerca de 20 segundos para tentar executar o arquivo jar que criei com lein uberjar. Estou no OS X, Macbook com Core i5 e 16 GB de RAM. Você usa alguma otimização especial?
domingo,
5
@maSnun uberjars não são para scripts de shell, eles são para implantação de aplicativos. A otimização de aplicativos é uma questão geral da JVM, nada específico do Clojure. Você pode escrever scripts de shell hash bang com Clojure tão facilmente quanto qualquer outra linguagem de script e é isso que eu recomendaria.
dnolen,
18

Clojure está sendo usado extensivamente para processar grandes volumes de dados. É muito adequado para mineração de dados / IA comercial (ou seja: Runa) e previsões em grande escala (também conhecido como WeatherBill). A história de simultaneidade do Clojure realmente ajuda nesses domínios de dados pesados, onde o processamento paralelo é simplesmente a única resposta.

Arthur Ulfeldt
fonte
13

Bem, essa é uma pergunta difícil de responder. O que você quer fazer? Não há muita coisa para a qual o Clojure não seja adequado. Quero dizer, não é muito bom para scripts de linha de comando isolados por causa do tempo de inicialização da JVM (a menos que você esteja usando cake ou algo semelhante), mas isso pode ser dito para qualquer linguagem JVM.

Clojure é especialmente adequado para tarefas de simultaneidade. Ele foi construído do zero para ser uma linguagem incrível para simultaneidade, e seu sistema STM é fantástico. Se você precisa fazer algumas coisas relacionadas à concorrência, Clojure pode ser especialmente adequado para essa tarefa.

No entanto, é preciso lembrar que Clojure é uma linguagem de propósito geral. Não é adequado apenas para determinados nichos e tende a ser útil para muitas ou todas as coisas para as quais as outras linguagens JVM podem ser adequadas.

Clojure foi projetado para ser uma linguagem fantástica em seu próprio direito, e não necessariamente uma linguagem cola. Você pode construir sistemas do zero no Clojure sem nunca tocar no código Java diretamente. Não que não seja uma boa linguagem de cola, sei que muitas pessoas a usam dessa forma.

Se você tem algo em mente, a melhor coisa a fazer é considerar como seria a solução em quaisquer idiomas que sejam opções. Se parecer / parecer melhor no Groovy, escolha o Groovy. Ambos são idiomas radicalmente diferentes e ambos têm seus propósitos.

Rayne
fonte
Mesmo assim, comecei a escrever scripts CLI Clojure, só porque achei a linguagem agradável de escrever e não me importei com o tempo de inicialização no meu caso.
nha
7

Você pode usar o Clojure em qualquer lugar em que usaria Groovy ou java. Por que você gostaria de fazer isso ? Algumas pessoas gostam de ceceitar. Aqueles escolherão o clojure em vez do Groovy. Algumas pessoas não gostam de ceceitar. Aqueles escolherão Groovy.

Vagif Verdi
fonte
2
Não é apenas uma questão de escolha, clojure tem toneladas de recursos que nenhuma outra linguagem tem) de alguma forma, ninguém mencionou nada, eu mal me lembro de palestras em conferências, então não serei capaz de escrever uma resposta adequada aqui
holms