Question

Je développe dans Lisp et dans Scheme, mais je lisais au sujet de Clojure et je souhaite ensuite savoir dans quels cas est-il préférable de l'utiliser que d'utiliser Lisp ou Scheme? Merci

Était-ce utile?

La solution

"Clojure s'exécute sur la machine virtuelle" " signifie que vous obtenez toute la corne d'abondance des bibliothèques Java disponibles. Vous pouvez créer de jolies interfaces graphiques dans Swing, utiliser le code du serveur Web ou du client Web d’Apache, connecter un solutionneur de Sudoku déjà construit ... à votre guise.

Un autre gros avantage de Clojure est son support de concurrence extrêmement poli, avec environ 3 saveurs différentes. Si vous avez une tâche nécessitant beaucoup de calcul et pouvant être mise en parallèle, Clojure peut vous faciliter la tâche. Eh bien, plus facile.

Mise à jour: un autre argument. Clojure est assez fortement fonctionnel, donc c'est un avantage si vous voulez vous forcer à penser et à écrire de manière fonctionnelle.

Autres conseils

Il est impossible de répondre à cette question. Vous devriez utiliser Clojure presque 100% du temps sur CL et Scheme, c'est ce que je dirais. Mais cela ne signifie pas que vous devriez m'écouter. D’autres peuvent faire valoir que c’est le contraire qui se produit.

Pour moi, la syntaxe et les noms de fonction dans Clojure sont esthétiquement agréables. Certaines bibliothèques Java sont inestimables pour ce que je fais pour la compilation de données, la programmation Web et les éléments d'interface graphique. La programmation fonctionnelle est stimulante et agréable. Les défauts de Clojure sont sans importance et sont compensés par ses avantages à mes yeux. Certains défauts intolérables dans d’autres Lisp sont "corrigés" dans Clojure, car il est nouveau et il peut ignorer la compatibilité en amont. Il a une approche novatrice et sans doute puissante de la concurrence. La communauté Clojure est dynamique, accueillante et géniale. Tout cela en dit autant sur moi et ce que j’apprécie autant que Clojure ou d’autres Lisps.

Il existe des bibliothèques pour CL et Scheme qui n'existent pas dans Clojure ou Java. Il y a des gens qui n'aiment pas que Clojure utilise trop de syntaxe comme [] et {} et qui veulent utiliser des parens partout. Si vous voulez une POO de style CLOS ou de nombreuses structures de données modifiables, un autre Lisp est sans doute mieux. La JVM est un poids lourd, peut-être trop lourd et trop de bagages pour certaines personnes. De nombreuses fuites de Java dans Clojure (de par leur conception) viennent heurter la sensibilité de certaines personnes. Le STM et les structures de données immuables ont des frais généraux qui rendent certaines choses plus lentes ou moins élégantes (par exemple, le calcul des chiffres). Clojure est nouveau et reste rude dans certains domaines, mais change et évolue rapidement dans d’autres. Clojure n'a pas encore passé l'épreuve du temps, alors que d'autres Lisps l'ont déjà fait. Clojure n'est pas un "standard" et certaines personnes trouvent un langage défini par une implémentation peu attrayant. Etc. Aucune de ces choses ne m'importe, mais elles peuvent vous intéresser.

Ceci est presque entièrement subjectif. La langue que vous devez utiliser dépend de ce que vous savez déjà, de ce que vous êtes disposé à apprendre, des bibliothèques que vous souhaitez utiliser, des éditeurs et des outils avec lesquels vous êtes à l'aise, des défauts de langage que vous êtes prêt à vivre et à utiliser, et quelles sont les imperfections que vous ne pouvez pas tolérer et qui vous aident à faire votre travail plus rapidement, à moindre coût, de façon plus agréable, ou à atteindre vos objectifs.

En gros, tout ce qui vous rend chaud et confus. Apprenez-les tous, faites un choix éclairé en fonction de vos goûts et utilisez celui que vous préférez. Ils sont tous bons.

Quand? Autant que possible. Pourquoi? Structures de données immuables - elles sont vraiment bonnes. Il existe de nombreuses autres raisons .

Clojure doit être utilisé lorsque

  • vous devez travailler avec le code java existant.
  • vous travaillez avec des personnes allergiques à lisp ("patron, je voudrais utiliser une bibliothèque java concurrency appelée clojue vs. je voudrais réécrire cela dans le même schéma" [1]
  • vous allez programmer pour un système multiprocesseur.

Le régime serait meilleur quand:

  • vous devez prouver que votre code est correct. Clojures (appel à java) gêne mais n'empêche pas cela.
  • vous travaillez avec des personnes allergiques à Java.
  • vous développez pour une plate-forme sans JVM (assez récente)

[1] oui c'est une mauvaise mauvaise mauvaise raison. tel est le monde dans lequel nous vivons ...

ABCL (Armed Bear Common Lisp) et plusieurs implémentations de Scheme (KAWA, SISC , ...) s'exécutent également sur la machine virtuelle Java.

De manière générale, Common Lisp est disponible en différentes "saveurs" - ABCL en fait partie. Les autres compilations en C, en code natif, ont des environnements de développement étendus ou des extensions spécialisées comme les langages logiques ou les bases de données.

Clojure OTOH est un nouveau dialecte Lisp qui met l’accent sur la programmation fonctionnelle paresseuse et la programmation simultanée. Son auteur (Rich Hickey) est un développeur de logiciel très expérimenté (il a également écrit les interfaces Java et .net pour Common Lisp) et a fait un excellent travail avec Clojure. Même s’il ya un battage publicitaire autour de la langue, cela vaut la peine d’être examiné - c’est certainement l’un des meilleurs dialectes Lisp mis au point ces dernières années (comparé à Newlisp ou Arc).

Il y a beaucoup de raisons, certaines mentionnées ci-dessus. Ma prise est:

  1. Les bibliothèques préexistantes. Ceci est tel un avantage. Je ne peux tout simplement pas assez louer cette fonctionnalité.
  2. La langue est plus adaptée à la matériel actuellement disponible (multi-core) et le développement paradigmes utilisés aujourd'hui. Il est tellement plus facile de raisonner sur la concurrence. Les aspects fonctionnels sont également plus agréables. Vous pouvez faire de la programmation fonctionnelle en Lisp, bien sûr, mais il est très facile de casser le paradigme sans le savoir, à son insu et sans le vouloir.
  3. Cross plate-forme. Je cours identique programmes sur Linux, Windows et le Mac. Il y a beaucoup de Lisps natif qui traversent des plates-formes, mais support pour toutes les fonctionnalités sur tous les plates-formes est un peu inégale et vous constamment être sur le qui-vive pour les choses qui manquent sur un plate-forme ou l'autre. De même, le les bibliothèques dont vous avez besoin ne sont pas toujours toujours soutenu à travers plates-formes. ABCL et certains des Les implémentations de schéma JVM ont ceci soutien cohérent aussi bien, mais je préfère toujours Clojure à cause de point 2.
  4. La nature de la langue communauté. Voyons les choses en face, beaucoup de le temps la communauté Common Lisp est juste méchant à traiter. C'est pas du tout le cas avec Clojure. Il est facile d'obtenir de l'aide utile sans la condescendance et la méchanceté vient souvent avec une réponse du Communauté Common Lisp. Comme j'ai appris pour moi plusieurs fois, il n'y a pas de question si stupide que vous ne serez pas poli et serviable réponse de la communauté Clojure.

Si je devais trouver une chose à me plaindre, ce serait le support de l'IDE. Peut-être que c'est une question d'apprendre de nouvelles habitudes, mais il est toujours plus facile pour moi de gérer les mécanismes du développement Java que Clojure. J'ai essayé et utilisé Clojure Box, inclus dans NetBeas, La Clojure sur Intellij IDEA et dans le sens contraire des aiguilles d'une montre sur Eclipse. Ils fonctionnent tous correctement si vous travaillez principalement à partir du REPL, mais pour la compilation et l’exécution des fichiers de classe, ils se sentent encore un peu maladroits.

Un sous-ensemble de Clojure peut également être compilé pour javascript

Clojure s'exécute sur la JVM (et sur le CLR), donc il y a ça.

La conception de Clojure consiste à intégrer plusieurs styles de programmation concurrente en toute sécurité, ce qui rend délibérément difficile l’écriture erronée dans d’autres langues du code dangereux, volumineux et souvent interrompu. Si votre domaine problématique implique une programmation simultanée, la gamme d’outils intégrés de Clojure pour la gestion de la concurrence peut être plus adaptée que les bibliothèques spécifiques à l’implémentation ou au plus petit dénominateur commun disponibles dans d’autres Lisps et Schémas.

L’un des plus grands avantages de Clojure est la multitude de bibliothèques que vous pouvez utiliser avec. Vous avez le pouvoir de Java avec l'expressivité de Lisp, et c'est une combinaison de dur à cuire. Clojure est plus adapté au développement du monde réel, car il a été conçu pour le développement du monde réel. Avec Clojure, vous avez des bibliothèques impressionnantes, des fonctionnalités modernes impressionnantes et une incroyable communauté de gens serviables et animés du même esprit.

Je dois dire que Clojure est une meilleure langue, tout autour. C’est une déclaration très argumentative à faire, je vais donc souligner ici que c’est tout simplement mon opinion honnête.

Rochers Clojure.

J'essaie toujours d'apprendre de nouvelles langues, alors je suis intéressé par l'apprentissage de Clojure. Mais SBCL et d'autres implémentations de Common Lisp ne sont-elles pas beaucoup, beaucoup plus rapides que Clojure? N'auriez-vous pas besoin de beaucoup plus de 4 processeurs (et d'une tâche raisonnablement parallélisable) pour compenser la différence de performances entre une application Clojure et même une version SBCL à un seul thread de la même application?

En règle générale, j’ai tendance à préférer Clojure à d’autres langues dans les cas où l’une ou l’autre de celles-ci convient: (1). Le modèle de domaine a tendance à avoir un aspect très récursif et / ou graphique. (2). Il est possible de tirer parti d'un environnement JVM multicœur (par exemple, Elastic Beanstalk). (3). Il existe une barrière floue entre les données et le code (pensez à la calculatrice RPN où les nœuds peuvent être des opérateurs ou des nombres)

Cela peut sembler un peu artificiel, mais une grande partie de mon travail consiste à traiter avec des graphiques et des arbres d’informations, qu’il s’agisse de réseaux sociaux, d’une sorte d’optimisation sous contrainte ou de construction de relations sémantiques. Je trouve que mon autre langage préféré, Ruby, ne peut pas me donner le mélange d’expressivité et de puissance de calcul brute par rapport à Clojure, en particulier en ce qui concerne la résolution quantitative, récursive et concurrente de problèmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top