70 votes

Pourquoi la communauté Lisp est-elle si fragmentée ?

Pour commencer, il existe non seulement deux dialectes principaux du langage (Common Lisp et Scheme), mais chacun de ces dialectes possède de nombreuses implémentations individuelles. Par exemple, Chicken Scheme, Bigloo, etc... chacun avec de légères différences.

D'un point de vue moderne, c'est étrange, car les langages actuels ont tendance à avoir des implémentations/spécifications définitives. Pensez à Java, C#, Python, Ruby, etc., où chacun d'entre eux a un site unique et définitif sur lequel vous pouvez vous rendre pour obtenir des documents sur les API, des téléchargements, etc. Bien sûr, Lisp est antérieur à tous ces langages. Mais là encore, même le C/C++ est normalisé (plus ou moins).

La fragmentation de cette communauté est-elle due à l'âge de Lisp ? Ou peut-être que les différentes implémentations/dialectes sont destinés à résoudre des problèmes différents ? Je comprends qu'il y a de bonnes raisons pour lesquelles Lisp ne sera jamais aussi uni que les langages qui se sont développés autour d'une seule implémentation définitive, mais à ce stade, y a-t-il une bonne raison pour que la communauté Lisp ne se dirige pas dans cette direction ?

27 votes

C'est parce que quand ils parlent, ils ne comprennent pas ce qu'ils se disent. ;)

2 votes

Je ne pense pas que ce soit dû à l'âge. C est aussi vieux, mais il a une norme.

28 votes

C est loin d'être aussi vieux ! Lisp a 50 ans et C a presque 40 ans. Ces 10 premières années ont été difficiles !

170voto

Rainer Joswig Points 62532

La communauté Lisp est fragmentée, mais tout le reste l'est aussi.

  • Pourquoi y a-t-il tant de distributions Linux ?

  • Pourquoi y a-t-il tant de variantes de BSD ? OpenBSD, NetBSD, FreeBSD, ... même Mac OS X.

  • Pourquoi y a-t-il tant de langages de script ? Ruby, Python, Rebol, TCL, PHP, et d'innombrables autres.

  • Pourquoi y a-t-il tant de shells Unix ? sh, csh, bash, ksh, ... ?

  • Pourquoi y a-t-il autant d'implémentations de Logo (>100), Basic (>100), C (innombrables), ...

  • Pourquoi y a-t-il autant de variantes de Ruby ? Ruby MRI, JRuby, YARV, MacRuby, HotRuby ?

  • Python peut avoir un site principal, mais il existe plusieurs implémentations légèrement différentes : CPython, IronPython, Jython, Python pour S60, PyPy, Unladen Swallow, CL-Python, ...

  • Pourquoi existe-t-il le C (Clang, GCC, MSVC, Turbo C, Watcom C, ...), le C++, le C#, le Cilk, l'Objective-C, le D, le BCPL, ... ? ?

Laissez certains d'entre eux atteindre la cinquantaine et voyez combien de dialectes et d'implémentations il y a alors.

Je suppose que Lisp est diversifié, parce que chaque langage est diversifié ou devient diversifié. Certains commencent avec une seule implémentation (Lisp de McCarthy) et après cinquante ans, vous avez un zoo. Common Lisp a même commencé avec de multiples implémentations (pour différents types de machines, systèmes d'exploitation, avec différentes technologies de compilation, ...).

De nos jours, Lisp est une famille de langages et non une seule langue. Il n'y a même pas de consensus sur les langues qui appartiennent ou non à cette famille. Il peut y avoir quelques critères à vérifier (expressions s, fonctions, listes, ...), mais tous les dialectes Lisp ne supportent pas tous ces critères. Les concepteurs du langage ont expérimenté avec différentes caractéristiques et nous avons obtenu de nombreux langages, plus ou moins semblables à Lisp.

Si vous regardez Common Lisp, il y a environ trois ou quatre vendeurs commerciaux actifs. Essayez de les rassembler derrière une seule offre ! Cela ne marchera pas. Ensuite, vous avez un tas d'implémentations open source actives avec des objectifs différents : l'une compile en C, une autre est écrite en C, l'une essaie d'avoir un compilateur rapide et optimisé, une autre essaie d'avoir un terrain intermédiaire avec la compilation native, une autre vise la JVM ... et ainsi de suite. Essayez de dire aux mainteneurs d'abandonner leurs implémentations !

Scheme compte environ 100 implémentations. Beaucoup sont mortes, ou presque. Au moins dix à vingt sont actives. Certains sont des projets de loisir. Certains sont des projets universitaires, d'autres des projets d'entreprises. Le site les utilisateurs ont des besoins divers . L'un a besoin d'une GC en temps réel pour un jeu, un autre a besoin d'une intégration en C, un autre n'a besoin que de constructions simples à des fins éducatives, etc. Comment dire aux développeurs d'éviter de pirater leur implémentation.

Il y a ensuite ceux qui n'aiment pas Commmon Lisp (trop gros, trop vieux, pas assez fonctionnel, pas assez orienté objet, trop rapide, pas assez rapide, ...). Certains n'aiment pas Scheme (trop académique, trop petit, ne s'adapte pas, trop fonctionnel, pas assez fonctionnel, pas de modules, les mauvais modules, pas les bonnes macros, ...).

Puis quelqu'un a besoin d'un Lisp combiné à Objective-C, alors vous avez Nu. Quelqu'un pirate un Lisp pour .net. Puis vous obtenez un Lisp avec de la concurrence et des idées nouvelles, alors vous avez Clojure.

C'est l'évolution de la langue au travail . C'est comme l'explosion cambrienne (lorsque de nombreux nouveaux animaux sont apparus). Certains mourront, d'autres continueront à vivre, d'autres encore apparaîtront. À un moment donné, certains dialectes apparaissent et reprennent l'état de l'art (Scheme pour tout ce qui concerne la programmation fonctionnelle en Lisp dans les années 70/80 et Common Lisp pour tout ce qui ressemble à MacLisp dans les années 80) - ce qui entraîne la disparition de certains dialectes pour la plupart (à savoir Standard Lisp, InterLisp et autres).

Common Lisp est l'alligator des dialectes Lisp. C'est un très vieux modèle (cent millions d'années) avec peu de changements, il a l'air un peu effrayant, et de temps en temps il mange quelques jeunes...

Si vous voulez en savoir plus, L'évolution de Lisp (et le correspondant à diapositives) est un très bon début !

29 votes

Il convient de souligner que lisp est l'un des plus anciens langages encore utilisés aujourd'hui. Cela signifie que Il a eu beaucoup plus de temps que la plupart des langues pour se fragmenter. .

7 votes

@KenLiu En fait, il semble que le code source de Lisp comporte le même nombre de parenthèses que certains langages courants (par exemple : Java), mais il comporte moins de ponctuation en général.

0 votes

@Elena - Intéressant... avez-vous une référence ?

14voto

David Miani Points 10548

Je pense que c'est parce que "Lisp" est une description tellement large d'un langage. Le seul point commun entre tous les lisp que je connais est que la plupart des choses sont entre parenthèses et utilisent la notation des fonctions préfixes. Par exemple

(fun (+ 3 4))

Cependant, presque tout le reste peut varier entre les implémentations. Scheme et CL sont des langages complètement différents, et doivent être considérés comme tels.

Je pense que qualifier la communauté lisp de fragmentée revient à qualifier la communauté "C like" de fragmentée. Il y a c, c++, d, java, c#, go, javascript, python et beaucoup d'autres langages auxquels je ne peux pas penser.

En résumé : Lisp est plus une propriété du langage (comme le ramassage des ordures, le typage statique) qu'une implémentation réelle du langage, il est donc tout à fait normal qu'il existe de nombreux langages qui ont la propriété Lisp, tout comme de nombreux langages ont le ramassage des ordures.

1 votes

Est-ce que ça a toujours été comme ça ? Il n'y avait sûrement qu'un seul Lisp au départ, qui s'est ensuite fracturé (éclaté ? émietté ? démêlé ?) en ces autres dialectes ? Ou bien y a-t-il toujours eu des dialectes ?

0 votes

Oui, c'est vrai, mais c'est de la même manière que les langages de type C ont commencé. Au départ, il n'y en avait qu'un seul (c évidemment), puis il y a eu c++, java et tous les autres. C'est naturel, car chaque langage fait les choses de manière différente. Par exemple, c++ a introduit les objets, et java a introduit la gestion de la mémoire et le concept de machine virtuelle.

4 votes

Au tout début, il n'y avait qu'un seul Lisp, l'implémentation initiale. Mais il s'est définitivement fragmenté. Nous avons le Common Lisp aujourd'hui spécifiquement à cause de cette fragmentation, il a été conçu pour unifier les Lisps fragmentés. Cela dit, si certaines choses ont été reprises de Scheme (les liaisons lexicales notamment), Scheme n'a jamais été une "partie" des pièces qui ont inévitablement donné naissance à Common Lisp. Pour un crédit supplémentaire, nous pouvons discuter des systèmes d'objets basés sur Lisp.

11voto

Frank Krueger Points 27508

Je pense que c'est parce que Lisp est né de, et maintient l'esprit de la culture hacker. La culture hacker est de prendre quelque chose et de le rendre "meilleur" selon votre croyance en ce "meilleur".

Ainsi, lorsque vous avez un groupe de hackers aux opinions bien tranchées et une culture de la modification, la fragmentation se produit. Vous obtenez Schéma , Common Lisp , ELISP , Arc . Ce sont tous des langages assez différents, mais ils sont tous "Lisp" en même temps.

Maintenant, pourquoi la communauté est-elle fragmentée ? Eh bien, je vais blâmer le temps et la maturité pour cela. Le langage a 50 ans ! :-)

9voto

dnolen Points 12833

Scheme et Common Lisp sont normalisés. SBCL semble être le lisp open source de facto et il y a beaucoup d'exemples sur la façon de l'utiliser. Elle est rapide et gratuite. ClozureCL semble également très bon.

Le système PLT semble être le système open source de facto et il existe de nombreux exemples de son utilisation. Il est rapide et gratuit.

L'HyperSpec CL me semble aussi bon que le JavaDoc.

En ce qui concerne la fragmentation de la communauté, je pense que cela a peu à voir avec les normes ou les ressources. Je pense que cela a beaucoup plus à voir avec ce qui a été une communauté relativement petite jusqu'à récemment.

Je pense que Clojure a de bonnes chances de devenir le Lisp de la nouvelle génération de codeurs.

Peut-être que ce que je veux dire, c'est qu'une mise en œuvre très populaire est tout ce qui est nécessaire pour donner à la illusion d'une communauté cohésive.

8voto

James Anderson Points 18253

LISP est loin d'être aussi fragmenté que BASIC.

Il y a tellement de dialectes et de versions de BASIC que j'en ai perdu le compte.

Même l'implémentation la plus couramment utilisée (MS VB) est différente d'une version à l'autre.

0 votes

Bon point, même si du côté de MS, chaque nouvelle version est censée remplacer l'ancienne. Bien sûr, cela a pour effet de rendre orphelins les projets utilisant une ancienne version de BASIC, vous verrez donc encore des messages sur VB6, par exemple. Existe-t-il des dialectes/versions de BASIC encore activement utilisés en dehors des implémentations MS ?

3 votes

Cette réponse ne répond pas à la question.

0 votes

@Justin Ether 'Existe-t-il des dialectes/versions de BASIC encore activement utilisés' -- Il est largement utilisé sur les sites DEC/VMS qui ont survécu aux différents rachats et fusions et il existe plusieurs produits commerciaux qui ont une sorte d'interpréteur basic intégré (par exemple IBM/Ascential DataStage).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X