En quoi Clojure est-il génial? [fermé]

40

Je me suis récemment tourné vers Clojure et je suis tombé sur ce billet sur Stackoverflow qui indique que certains projets respectent les meilleures pratiques et le bon code Clojure. Je voulais me familiariser avec la langue après avoir lu quelques tutoriels de base, alors j’ai jeté un coup d’œil à des projets "réels".

Après avoir examiné ClojureScript et Compojure (deux des "bons" projets susmentionnés), je me sens juste comme si Clojure était une blague. Je ne comprends pas pourquoi quelqu'un choisirait Clojure plutôt que Ruby ou Python, deux langages que j'aime beaucoup, dont la syntaxe est aussi claire et claire, et qui sont très faciles à maîtriser, alors que Clojure utilise tellement de parenthèses et de symboles partout qui gâche la lisibilité. moi.

Je pense que Ruby et Python sont beaux, lisibles et élégants. Ils sont faciles à lire, même pour quelqu'un qui ne connaît pas la langue à fond. Cependant, Clojure est opaque pour moi et j’ai le sentiment que je dois connaître tous les détails de l’implémentation du langage pour pouvoir comprendre n’importe quel code.

Alors s'il te plaît, éclaire-moi!

  • En quoi Clojure est-il si bon?
  • Quel est le minimum absolu que je devrais connaître à propos de la langue pour l'apprécier?
marco-fiset
la source
14
I don't understand why someone would pick Clojure over say, Ruby or Python- il fonctionne sur le jvm et peut utiliser toute la bibliothèque java. ... have such a clean syntaxsans aucun doute, les langages fonctionnels comme lisp ont une syntaxe et une structure très claires, ce qui est tout simplement impossible pour la plupart des gens.
22
Son nom est sexy.
programmeur
4
Tout adolescent vivant dans un sous-sol peut récupérer Python et Ruby en quelques mois. Si c'est tout ce qu'ils veulent utiliser, ils ne sortiront jamais du sous-sol. Je ne dis pas que quelqu'un qui a fait du développement professionnel Python pendant de nombreuses années est un mortel inférieur comparé à quelqu'un qui écrit C intégré, mais si Python et Ruby sont tout ce qu'ils savent et tout ce qu'ils veulent savoir, alors quelque chose est louche. À propos, cela m'a pris personnellement plus de 6 ans après la fin de mes études pour découvrir et apprécier la programmation fonctionnelle et Lisps. Ma première réaction à Scheme a été une secousse du genou.
Job
4
"sans aucun doute, les langages fonctionnels comme les lisp ont une syntaxe et une structure très claires, ce qui n’est pas habituel pour la plupart des gens.": J'ai très peu d’expérience Lisp et je viens de commencer à lire le livre "Practical Common Lisp". Jusqu'à présent, je n'ai rencontré aucun problème de syntaxe. IMHO, les mythes selon lesquels la syntaxe Lisp est moins lisible ne sont que des FUD.
Giorgio
4
J'ai commencé à regarder Clojure récemment (mais j'ai déjà utilisé Haskell et Scala, la syntaxe n'est donc pas si choquante). En fait, je l’ai trouvé étonnamment lisible. Il y a des fewsymboles très en dehors de la parenthèse par rapport à beaucoup de langues, et presque pas de mots réservés. La raison pour laquelle vous le trouvez illisible est qu’il s’agit d’un paradigme totalement nouveau qui fonctionne de manière fondamentalement différente de celle d’une langue typique orientée objet. Donnez-lui du temps et du pouvoir.
KChaloux

Réponses:

47

Pour le contexte que vous avez donné, si je puis me permettre de paraphraser:

  1. Vous connaissez Ruby / Python.
  2. Vous ne voyez pas encore les avantages de Clojure.
  3. Vous ne trouvez pas la syntaxe Lisp ou Clojure claire.

... Je pense que la meilleure réponse est de lire le livre Clojure Programming d'Emerick, Carper et Grand. Le livre propose de nombreuses comparaisons de code explicites avec Python, Ruby et Java, ainsi que des explications textuelles adressant les codeurs de ces langues. Personnellement, je suis arrivé à Clojure après avoir construit des projets de bonne taille avec Python et acquis une certaine expérience de Lisp. En lisant ce livre, j'ai été convaincu de commencer à utiliser Clojure non seulement dans des projets parallèles, mais à des fins professionnelles.

Pour répondre directement à vos deux questions:

  1. Qu'est-ce qu'il y a de si bien chez Clojure? Beaucoup de réponses sur ce site et ailleurs, par exemple voir https://www.quora.com/Why-would-someone-learn-Clojure
  2. Quel est le minimum absolu que je devrais connaître à propos de la langue pour l'apprécier? Je suggérerais de connaître les grandes idées qui sous-tendent le design de Clojure, telles qu'elles sont exposées dans les livres de Clojure Programming et The Joy of Clojure , et dans les exposés de Rich Hickey, en particulier. la conversation Simple Made Easy . Une fois que vous savez quoi / pourquoi vous pouvez alors commencer à comprendre comment lors de la lecture du code Clojure, en particulier. comment changer votre façon de penser de classes, objets, états / mutations à "juste fonctions et données" (fonctions d'ordre supérieur, cartes / ensembles / séquences, types).

Suggestions supplémentaires: L'élégance et la puissance de Lisp viennent en partie de sa syntaxe minimaliste et parfaitement cohérente. Il est beaucoup plus facile d'apprécier cela avec un bon éditeur, par exemple Emacs avec le mode clojure et ParEdit. Au fur et à mesure que vous vous familiarisez avec elle, la syntaxe s'estompe et vous «voyez» la sémantique, les intentions et des abstractions concises. Deuxièmement, ne commencez pas par lire le code source de ClojureScript ou Compojure, ceux-ci sont trop nombreux. essayez quelques problèmes de 4clojure.org et comparez les solutions avec les meilleurs codeurs. Si vous voyez 4 à 6 autres solutions, invariablement quelqu'un aura écrit une solution de style FP vraiment idiomatique et succincte que vous pourrez comparer à une solution de style impérial maladroite, verbeuse et inutilement compliquée.

limiste
la source
20

Les dialectes Lisp ont une niche unique en raison de leur syntaxe simple. Cette syntaxe simple rend la méta-programmation grâce à l'utilisation de macros très simple. Cela vous permet de modéliser le langage en fonction de votre domaine de problème au lieu de le modéliser pour l'adapter à votre langage. C'est vraiment cool une fois que vous avez compris, et cela vous permet de faire facilement beaucoup de choses très difficiles dans d'autres langues.

L'inconvénient est que, comme chaque programme Lisp définit essentiellement son propre langage, vous avez vraiment besoin de bien comprendre ce qui se passe.

Maintenant, pour répondre à vos questions ...

  1. Clojure est un dialecte Lisp moderne qui s'exécute dans la JVM / CLR. Cela facilite l'exploitation de la puissance de Lisp dans une infrastructure existante.

  2. Il est essentiel de comprendre comment utiliser les macros pour construire Lisp dans le domaine de votre problème afin d’apprécier son utilisation. Je ne comprenais vraiment cela qu'après avoir implémenté un runtime Lisp, quand j'ai découvert qu'une grande partie des fonctionnalités du langage principal pouvaient facilement être implémentées dans Lisp lui-même. Il faut un projet de taille raisonnable pour l'obtenir.

Mis à part ses avantages, bien qu’il soit amusant de programmer, je n’ai personnellement pas beaucoup de cas où je me tournerais vers elle pour régler des problèmes quotidiens. C'est un très bon outil pour apprendre à développer l'esprit, et après avoir correctement appris Lisp, il est devenu beaucoup plus naturel de tirer parti des installations de méta-programmation dans d'autres langues.

La syntaxe simple facilite l’interprétation pour les ordinateurs (autorisant des macros aussi puissantes et faciles), mais il est très difficile pour un humain d’analyser rapidement des expressions complexes.

bunglestink
la source
2
Avez-vous regardé la table lumineuse ?
4
Votre réponse donne l’impression que les macros sont la manière habituelle d’aborder la programmation Lisp, alors que la plupart des problèmes de programmation peuvent être résolus avec des fonctions ordinaires de premier ordre. Les macros sont principalement destinées à être utilisées pour la programmation linguistique (c'est-à-dire l'extension du langage). Voir aussi bookshelf.jp/texi/onlisp/onlisp_9.html
Robert Harvey
3
@ RobertHarvey Je dirais que si vous ne tirez pas parti de Marcos, il existe une pléthore d'autres langages vers lesquels je me tournerais pour proposer des fonctions de première classe avec une syntaxe beaucoup plus lisible.
Bunglestink
@MichaelT qui a l'air soigné. J'aime le concept.
DPM
3
@RobertHarvey Scala, JavaScript, C #, Python et Haskell sont tous sur ma tête en ce qui concerne les langages avec des fonctions de première classe que je considérerais plus syntaxiques que Lisps.
bunglestink
10

Les forces de Clojure ont été soulignées à maintes reprises et constituent un langage très puissant. Je ne les répéterai donc pas ici.

J'ai toujours aimé lisp depuis l'université et j'étais vraiment enthousiasmé lorsque j'ai découvert Clojure (peut-être la chance d'utiliser lisp en dehors du monde universitaire enfin!). Cependant, alors que je commençais à apprendre, un sentiment de malaise a commencé à s’infiltrer, bien que je ne puisse pas déterminer exactement ce que je n’aime pas. Tout d'abord, je dirais que coder dans Common lisp était facile et amusant pour moi, mais Clojure a une courbe d'apprentissage plus abrupte. Clisp avait une certaine beauté et élégance. Je ne suis pas sûr d'avoir le même sentiment de Clojure. Je me demande si ce sentiment va disparaître au fur et à mesure que je gagne en expérience.

Je devine encore ma mystérieuse répulsion. Je pense que ce pourrait être sa grande flexibilité. Par exemple, vous pouvez avoir des structures moitié vecteur et moitié carte et avec quelques caractères de code, vous pouvez les accepter en tant que paramètres, les séparer et les traiter correctement. Oui, cela enlève tout le standard, mais de toute façon ça ne se sent pas bien. C’est comme si vous ne saviez jamais très bien que les règles de toutes ces parenthèses, ces deux points, ces brakets, etc. fonctionnent.

Pour moi, j'aime toujours le langage pour tous ses avantages (principalement fonctionner dans la machine virtuelle Java et simplifier la concurrence, tout en étant beaucoup plus puissant et concis que Java et avec des défauts de conception moins évidents), mais le jury reste encore à déterminer si aurait pu être amélioré.

DPM
la source