À quoi sert Clojure? [fermé]

100

Pour quelles applications du monde réel les gens utilisent-ils Clojure?

J'utilise Groovy pour les trucs de colle, Java pour les gros systèmes, les scripts Python / Perl pour l'analyse et la colle. Je pouvais me voir appeler Clojure depuis Java, mais je ne vois pas où je l'utiliserais à part entière. Il me semble qu'il serait plus facile d'utiliser presque n'importe quel langage de script pour les tâches ad hoc.

Je ne suis en aucun cas un expert de Groovy ou un fanboy, mais il me semble qu'il a un meilleur cadre de support, des outils et beaucoup de constructions de langage (fermetures, programmation fonctionnelle). La même chose pourrait être dite pour Scala.

Se pourrait-il que son avenir soit en tant que langage intégré dans d'autres systèmes?

Fortyrunner
la source
23
Tout sauf me faire un sandwich.
Wheaties
12
@wheaties: Avez-vous essayé (sandwich me BLT)?
FrustratedWithFormsDesigner
3
Pourquoi n'utiliseriez-vous pas Clojure pour les «gros systèmes» aussi? ISTM que, étant moins verbeux que Java, vos systèmes n'auraient pas besoin d'être aussi gros dans Clojure. :-)
Ken
2
En regardant les réponses - je suppose que les gens l'utilisent pour des trucs sympas. Je me demande cependant combien d'entreprises le choisiront pour des activités de développement à long terme?
Fortyrunner
1
Je sais que cela fait longtemps, mais il faut un esprit vif pour programmer dans un langage fonctionnel. Les esprits aiguisés coûtent cher, donc je ne connais pas le potentiel de Clojure en matière de LTD d'un point de vue commercial - pas avant qu'il ne devienne beaucoup plus omniprésent qu'il ne l'est encore aujourd'hui (cinq ans plus tard).
Sean Allred

Réponses:

93

J'ai utilisé Clojure pour:

  1. Racler des pages Web
  2. Scripts shell
  3. Création de sites Web
  4. Jouer avec OpenGL
  5. Écriture de serveurs Web asynchrones
  6. Création de modèles HTML
  7. Exécution de tâches parallèles (récupération de plusieurs URL et traitement en parallèle)
  8. Jouer avec l'audio en temps réel
  9. Des simulations

C'est le truc pratique / amusant.

Mais Clojure a aussi beaucoup de profondeur théorique. Des idées qui deviendront de plus en plus pertinentes à mesure que le courant dominant comprendra vraiment le potentiel de la programmation fonctionnelle.

Une opinion personnelle, mais Clojure fournit de meilleures constructions de langage pour organiser correctement les logiciels (sans causer de douleur excessive au programmeur en activité) de tous les langages que j'ai utilisés jusqu'à présent académiquement et professionnellement - C, C ++, Objective-C, Java, JavaScript, Python, Ruby.

Ce qui ne veut pas dire que Clojure est parfait. Mais il me semble que c'est construit sur une meilleure base que la plupart de ce qui existe.

dnolen
la source
Êtes-vous David Nolen? le gars qui a donné la conférence sur "Clojurescript: Lisp's Revenge". C'était un discours génial!
Amogh Talpallikar
1
//, Qu'entendez-vous par «fournit de meilleures constructions de langage pour organiser correctement les logiciels»? EG dev.clojure.org/display/community/Library+Coding+Standards ?
Nathan Basanese
2
@maSnun sur le temps de démarrage du matériel moderne est d'environ 1 seconde ou moins. C'est parfait pour les scripts shell.
dnolen le
1
@dnolen Merci d'avoir pris le temps de répondre. Je suis un nouveau passionné de clojure et cela prend environ 20 secondes lorsque j'essaye d'exécuter le fichier jar que je crée avec lein uberjar. Je suis sur OS X, Macbook avec core i5 et 16 Go de RAM. Utilisez-vous des optimisations spéciales?
masnun
5
Les uberjars @maSnun ne sont pas destinés aux scripts shell, ils sont destinés au déploiement d'applications. Optimiser les applications est une question générale JVM, rien de spécifique à Clojure. Vous pouvez écrire des scripts shell hash bang avec Clojure aussi facilement que n'importe quel autre langage de script et c'est ce que je recommanderais.
dnolen le
18

Clojure est largement utilisé pour traiter de gros volumes de données. Il est très bien adapté à l'exploration de données / IA commerciale (ex: Runa) et aux prévisions à grande échelle (aka WeatherBill). L'histoire de concurrence de Clojure aide vraiment dans ces domaines lourds de données où le traitement parallèle est simplement la seule réponse.

Arthur Ulfeldt
la source
13

Eh bien, c'est une question difficile à répondre. Qu'est-ce que tu veux faire? Il n'y a pas beaucoup de choses pour lesquelles Clojure ne convient pas vraiment. Je veux dire, ce n'est pas vraiment génial pour des scripts de ligne de commande uniques à cause du temps de démarrage de la JVM (à moins que vous n'utilisiez cake ou quelque chose de similaire), mais cela peut être dit pour n'importe quel langage JVM.

Clojure est particulièrement adapté aux tâches de concurrence. Il a été conçu à partir de zéro pour être un langage génial pour la concurrence, et son système STM est fantastique. Si vous avez besoin de faire des choses liées à la concurrence hardcore, Clojure pourrait être particulièrement adapté à cette tâche.

Cependant, il faut se rappeler que Clojure est un langage à usage général. Il n'est pas seulement adapté à certaines niches, et il a tendance à être utile pour beaucoup ou toutes les choses auxquelles les autres langages JVM pourraient être adaptés.

Clojure a été conçu pour être un langage fantastique à part entière, et pas nécessairement un langage glu. Vous pouvez créer des systèmes à partir de zéro dans Clojure sans jamais toucher directement au code Java. Non pas que cela ne fasse pas un bon langage de colle, je sais que beaucoup de gens l'ont utilisé comme tel.

Si vous avez quelque chose à l'esprit, la meilleure chose à faire est de considérer à quoi ressemblerait la solution dans toutes les langues qui sont des options. Si ça a l'air / se sent mieux dans Groovy, allez avec Groovy. Ce sont deux langues radicalement différentes, et elles ont toutes les deux leurs objectifs.

Rayne
la source
Même alors, je me suis retrouvé à écrire des scripts CLI Clojure, simplement parce que je trouvais le langage agréable à écrire et que le temps de démarrage ne me dérangeait pas dans mon cas.
nha le
7

Vous pouvez utiliser Clojure partout où vous utiliseriez Groovy ou java. Pourquoi voudriez-vous faire ça? Certaines personnes aiment lisp. Ceux-ci choisiront clojure plutôt que Groovy. Certaines personnes n'aiment pas lisp. Ceux-ci choisiront Groovy.

Vagif Verdi
la source
2
Ce n'est pas seulement une question de choix, clojure a des tonnes de fonctionnalités que les autres langages ont) d'une manière ou d'une autre, personne n'a rien mentionné, je me souviens à peine des discussions dans les conférences, donc je ne pourrai pas écrire une réponse correcte ici
holms