Quelle est votre opinion sur Clojure?

Que pensez-vous de Clojure? Je pense à l’apprendre ensuite, en utilisant actuellement Erlang et en général content, sauf le fiasco des disques… Clojure est-il aussi puissant que LISP?

Pensez à l’apprendre. Si ce n’est pour aucune autre raison, vous pouvez l’utiliser dans un projet réel.

You : Can I use this small Java library called Clojure? Boss: Why do you need it? You : For some concurrency improvements. Boss: Ok. 

Ce que vous faites référence à Lisp-1 vs Lisp-2 est la question de savoir si les fonctions et les variables partagent le même espace de noms. Dans Lisp-1 Lisps, comme Scheme et Clojure, ils le font. Dans Lisp-2 Lisps, comme Common Lisp, ils ne le font pas. C’est surtout une question de goût et / ou de commodité – cela n’affecte pas la puissance du langage de programmation.

Par exemple, dans Clojure, vous pouvez le faire:

 (defn my-apply [func arg1 arg2] (func arg1 arg2)) 

C’est une fonction qui prend une fonction et deux valeurs et applique la fonction aux valeurs. Par exemple:

 user=> (my-apply + 1 2) 3 

Dans Common Lisp, vous devez écrire ceci comme

 (defun my-apply (func arg1 arg2) (funcall func arg1 arg2)) 

La raison pour laquelle vous avez besoin de “funcall” est que, puisque “func” est dans l’espace de nom des variables, vous ne pouvez pas l’utiliser directement comme une fonction, comme vous pouvez le faire dans Clojure, qui ne fait pas cette distinction. Donc, vous devez dire Common Lisp “interprétez cette variable comme une fonction et appelez-la avec ces arguments”. Une autre conséquence est que pour obtenir le même résultat, vous devez appeler “my-apply” comme ceci:

 => (my-apply #'+ 1 2) 3 

Ici, le problème est inversé: “+” est une fonction, mais vous voulez la passer en tant que variable, vous devez donc la “convertir”. “# ‘+” est l’abréviation de “(function +)”, btw.

J’utilise Clojure et non CL car:

  • Il communique bien avec Java, donc je peux externaliser mon codage
  • Il a access aux milliards de bibliothèques Java qui font toutes sortes de choses, y compris Swing et Weka
  • Comme il fonctionne sur la machine virtuelle Java, vous pouvez supposer plus sûrement que votre problème fonctionnera partout
  • Si vous pouvez montrer que les mêmes bibliothèques sont utilisées avec beaucoup moins de code, vous pouvez convertir les programmeurs Java en mode lambda
  • Et surtout, je ne suis pas lié à Emacs

: wq

Clojure est un dialecte de LISP, donc oui, c’est aussi puissant que LISP.

Pour ce que nous avons maintenant un bon outil LISP pour la JVM, j’aime ce langage.

Je pense que le nom est intelligent.

“Clojure a le potentiel de faire de la programmation orientée vers la concurrence ce que Java a fait pour la programmation orientée object il y a dix ans: simplifier l’utilisation d’un langage (ou, dans le cas de Clojure, un environnement linguistique) similaire à ce à quoi les programmeurs sont déjà habitués. “- Bill Clementson

Et les gens, le LISP consiste en une famille de langages de programmation. Il existe des dialectes Lisp tels que Common Lisp et Clojure. Et en plus de cela, il existe de nombreuses implémentations de Common Lisp ou Scheme.

J’ai utilisé Erlang au travail pour des tests de charge de réseau coordonnés et c’était parfait pour cela car le problème était bien dans le «bon endroit» d’Erlang de «faire correctement un logiciel orienté communication dissortingbué». Je trouve Clojure BEAUCOUP mieux pour le code qui doit faire quelque chose de complexe sur une seule boîte avec plusieurs threads (c’est un scénario plus courant).

Vous êtes en avance sur vous-même parce que vous connaissez Erlang et cela vous aidera à identifier les problèmes dans lesquels il brille vraiment. Qu’est-ce que tu penses que Clojures est vraiment “sweet spot”?

Clojure est un Lisp-1, oui. Pensez-y comme un Common Lisp plus agréable sans tous les bagages historiques. Il possède également plusieurs fonctionnalités d’access concurrentielles modernes, telles que STM et Agents (ils ont décidé de ne pas implémenter le modèle Acteurs d’Erlang). L’avantage de l’exécution sur la JVM est simple: il existe déjà de nombreuses bibliothèques écrites pour cela (principalement en Java).

Clojure dans Clojure est un effort continu pour réécrire le compilateur Clojure dans Clojure, pour le rendre plus portable et plus facile à maintenir. En dehors de core.clj, la majeure partie de Clojure est actuellement écrite en Java. Après ce déplacement, il sera possible de le porter sur BEAUCOUP de machines virtuelles, y compris Parrot.

J’aime mieux Common Lisp que Clojure car la syntaxe est plus régulière et n’est pas liée aux horribles API Java (IMHO).

Pour Common Lisp, j’ai également le choix entre plusieurs implémentations excellentes et bien testées et un standard mature sur lequel s’appuyer.

Mais si je devais utiliser Java pour un travail, je penserais certainement à utiliser Clojure. 🙂

ce que je veux dire par “est-ce que Clojure est aussi puissant que LISP” est que j’ai lu quelque part ici sur stackoverflow que Common Lisp est lisp-2 et Clojure est lisp-1? (Je pourrais facilement être ici) …

en ce qui concerne la concurrence, j’aime vraiment l’histoire d’Erlang, car il est si facile de dissortingbuer des applications en les écrivant dans le modèle Actor

du créateur de Clojure à l’adresse http://groups.google.com/group/clojure/browse_thread/thread/2a2b24ffef5d1631?pli=1

“Même avec les acteurs, Clojure n’aura pas encore d’histoire de la concurrence dissortingbuée, mais j’envisage simplement d’adopter la vente en gros d’Erlang, en utilisant Jinterface pour les processus dissortingbués Clojure <-> Clojure ou même Clojure <-> Erlang. est terminé. Restez à l’écoute. ”