Qu'est-ce qu'il y a de si génial avec Lisp? [fermé]

104

Je ne connais pas assez Lisp pour dire si c'est bon ou mauvais. Il semble que tous ceux qui ont utilisé Lisp l'aiment, mais les langages les plus populaires de nos jours descendent de C.

Alors, qu'est-ce que Lisp est si génial et pourquoi n'est-il pas utilisé davantage? Y a-t-il quelque chose de tout simplement mauvais à propos de Lisp (autre que le nombre incessant de parenthèses)?

Darrell Brogdon
la source
5
"Les langues les plus populaires de nos jours ne descendent du C" que superficiellement. Si vous regardez les fonctionnalités au lieu de simplement utiliser des accolades, vous constaterez que les langues modernes ne sont pas si loin de Lisp et se rapprochent tout le temps. Un programme en C # ou Python ou Ruby, disons, ressemblera beaucoup plus à Lisp qu'à C.
Ken
11
Un bon exemple de langage qui ressemble à C mais qui agit plus comme Lisp est JavaScript. Une grande partie de sa conception est similaire à Scheme.
JAL
Bon point, Ken: un nombre croissant de fonctionnalités qui étaient autrefois propres à Lisp (fonctions de première classe, fonctions sous forme de données, voire macros) arrivent dans d'autres langages. Et le retour n'est pas à sens unique: Lisp fait évoluer de nouvelles techniques et idiomes en reconnaissance d'autres langages (par exemple CLOS en réponse au succès du paradigme orienté objet).
itowlson
6
Lisp a pris des idées de partout, mais CLOS en réponse à quoi? CLOS (1986-1987) était en grande partie une standardisation des systèmes d'objets antérieurs pour Lisp, par exemple Lisp Machine Lisp (1980) incluait Flavors. Je ne pense pas que "le succès du paradigme OO" était encore apparent en 1980: "C with Classes" n'avait qu'un an (et encore 3 ans d'être renommé "C ++"), et je ne sais pas que Simula-67 a toujours été très populaire. Lisp a un tas d'autres fonctionnalités avancées que les langages populaires aujourd'hui n'ont pas; OO a réussi, mais Lisp n'a pas réussi parce que (ou quand) il était populaire.
Ken
Je ne pense pas que tous ceux qui ont utilisé Lisp l'aiment. Mon expérience est différente. Essayez de demander aux étudiants en informatique qui ont commencé avec Scheme. Environ 10% l'aimeront probablement, 30% la respecteront et 60% la détesteront. Je ne pense pas non plus que les langues les plus populaires descendent de C.
Rainer Joswig

Réponses:

58

Lisp est le Chuck Norris des langages de programmation.

Lisp est la barre par rapport aux autres langues.

Connaître Lisp démontre l'illumination des développeurs.

J'ai entendu parler de 3 faiblesses (et de leurs contre-arguments):

  1. Typage dynamique.

    Il y a un argument pour les langages typés statiquement autour de donner au compilateur suffisamment d'informations pour attraper une certaine classe d'erreurs afin qu'elles ne se produisent pas au moment de l'exécution. Mais vous devez encore tester.

    Cet article plaide pour un typage dynamique avec plus de tests: frappe forte vs test forte .

  2. Difficile à ramasser.

    Il y a en fait deux parties à cela: l'apprentissage et les outils.

    Lisp demande un certain effort pour vraiment "obtenir", mais cela en vaut la peine, car apprendre Lisp fera vraiment de vous un meilleur programmeur dans d'autres langages. Par exemple, une fois que vous "obtenez" vraiment des fermetures, vous comprendrez les classes internes de Java. Et une fois que vous «obtenez» des fonctions de première classe, vous serez déprimé chaque fois que vous utiliserez une langue sans elles.

    J'ai lu The Little Schemer et je lis Practical Common Lisp , qui sont tous deux excellents.

    Viennent ensuite les outils. Je suis sur un Mac, donc je me suis concentré sur Aquamacs Emacs (rend Emacs habitable pour un novice) et Steel Bank Common Lisp (SBCL).

  3. Manque de bibliothèques.

    Je ne peux pas encore le dire avec certitude, mais j'en doute. Pour créer des sites Web, il semble que Hunchentoot et Elephant fournissent un bon ensemble d'outils. Mais vraiment, je ne vois pas les Lispers se plaindre du manque de bibliothèques (peut-être parce que Lisp est si puissant qu'ils ne sont tout simplement pas nécessaires?).

rickmode
la source
4
À l'adresse (3) - Avez-vous regardé Clojure?
viksit
5
"Mais vraiment, je ne vois pas les Lispers se plaindre du manque de bibliothèques (peut-être parce que Lisp est si puissant qu'ils ne sont tout simplement pas nécessaires?)." Je corrigerais la dernière déclaration en "(peut-être parce que Lisp est si puissant qu'ils ne sont tout simplement pas nécessaires POUR EUX?)" Cela fait une énorme différence.
Agnius Vasiliauskas
50
Ne dit pas une chose pourquoi lisp est génial, vote négatif de ma part.
Kilon
30
Évalué parce que "X est génial! X est génial! X est comme Y, ce qui est également super parce que je dis que c'est génial!" n'est pas une réponse à "Pourquoi X est-il considéré comme grand?". La référence politique est également inappropriée et inutile (la plupart des gens ne pensent même pas que le libertarisme est une bonne idée). Les trois points sont utiles, mais j'aurais aimé qu'ils ne le soient pas "Il a une faiblesse A ... Mais ce n'est même pas une faiblesse!".
Superbe
1
Lisp est le Chuck Norris des langages de programmation. c'est donc ce qui le rend si bon. Je l'ai. Voté contre.
NiCk Newman
71

«Lisp est un langage de programmation programmable.»
- John Foderaro, CACM, septembre 1991

Voici mon avis:

En apparence, Lisp est un langage de programmation fonctionnel simple et agréable. Il n'y a presque pas de syntaxe et toutes les pièces s'emboîtent de manière logique.

Si vous creusez un peu plus profondément, lisez SICP et écrivez un évaluateur métacirculaire, vous découvrez deux choses: Premièrement, l'interpréteur entier (avec seulement quelques primitives) est à peine une page de code, et deux, la relation entre le code et les données permet des techniques de programmation élégantes.

Une fois que vous avez complètement absorbé cela, vous avez l'impression que d'autres langues sont gravées dans le marbre lorsqu'elles ne vous permettent de dire que quelques choses. Lisp peut construire n'importe quelle abstraction si vous pouvez en définir la syntaxe et la sémantique.

Josh Lee
la source
1
Vous pouvez en théorie intégrer n'importe quel langage dans Lisp comme Rust, Ruby, C, Java, Python, Erlang. Ainsi, la version s-expression de Python (Hy) et la version de Rust s'appellent (Risp) [bien que je ne sache pas à quel point elles sont stables]. Si vous écrivez du code en Hy au lieu de Python, vous avez la possibilité de macros et d'édition structurelle comme parinfer / paredit ( shaunlebron.github.io/parinfer ). Les macros vous permettent d'incorporer vos propres DSL dans Lisp, et elles peuvent également être utilisées pour transformer du code lent en code rapide via des macros de compilateur. Vous pouvez également transformer le code Python (Hy) en Rust (Risp), en transformant l'arbre sexp.
aoeu256
J'ai également entendu ce dicton plusieurs fois. Souhaitez-vous en discuter un peu plus @ aoeu256?
Étudiant
66

Lisp est bon car il a une syntaxe très minimale, simple et régulière.

Lisp est mauvais car il a une syntaxe très minimale, simple et régulière.

Daniel Earwicker
la source
4
Qu'y a-t-il de mauvais dans une syntaxe minimale, simple et régulière?
oskarkv
27
@oskarkv - une syntaxe minimale totalement régulière signifie qu'il n'y a aucun biais vers une utilisation particulière. Cela semble bien, jusqu'à ce que vous rencontriez le principe de Pareto: il est plus efficace d'être biaisé vers les cas les plus courants et d'arrêter de prétendre que tous les cas sont également probables. Si 20% de vos clients sont à New York et 80% à Los Angeles, est-il judicieux de s'asseoir sur la clôture, quelque part à la frontière Kansas / Oklahoma, afin de rester «impartial» en termes géographiques? Ou plus de sens d'aller là où se trouvent la plupart des clients? Nous préférons les langages qui biaisent leurs fonctionnalités vers des problèmes probables.
Daniel Earwicker
4
La syntaxe Lisp est vraiment bonne. J'ai appris Haskell après Clojure, mais à ce moment-là, même la syntaxe de Haskell me semblait un obstacle. L'uniformité du suntax de Lisp est excellente. Donc, je ne sais pas exactement de quel biais vous parlez. Un biais vers la rigidité? Semble mauvais.
oskarkv
3
Ça sonne mal quand on le dit comme ça. Je ne l'ai pas dit comme ça! Qu'en est-il du biais vers les événements les plus courants, les situations les plus probables? Ce sont (bien sûr) des termes relatifs, donc cela dépend de ce que vous faites. Si vous manquez vraiment d'informations sur ce que vous allez faire, il ne sert à rien d'essayer de vous préparer. Mais ce n'est probablement pas vrai - vous avez des informations et vous pouvez donc vous préparer («biaiser») aux situations les plus probables auxquelles vous devez être prêt.
Daniel Earwicker
22

"Tout programme C ou Fortran suffisamment compliqué contient une implémentation ad hoc, spécifiée de manière informelle, remplie de bogues et lente de la moitié de Common Lisp."

Dixième règle de Greenspun

Paolo
la source
16

Voici quelques liens utiles:

Greg Hewgill
la source
1
Sur Lisp, c'est super (je suis juste à mi-chemin, même si j'admets que les macros deviennent un peu denses); mais vous devez connaître Lisp pour le lire. En dehors de ce petit problème, c'est un excellent livre non seulement sur Lisp, mais sur l'ingénierie logicielle en général.
JS