Pourquoi Lisp est-il utile? [fermé]

64

Lisp est évidemment un avantage pour l' IA , mais il ne me semble pas que Lisp soit plus rapide que Java, C # ou même C. Je ne suis pas un maître de Lisp, mais je trouve extrêmement difficile de comprendre l'avantage. on aurait à écrire un logiciel de gestion à Lisp.

Pourtant, il est considéré comme la langue d'un pirate informatique.

Pourquoi Paul Graham défend-il Lisp? Pourquoi ITA Software at-il choisi Lisp plutôt que d’autres langages de haut niveau? Quelle valeur a-t-il sur ces langues?

Peter Mortensen
la source
20
La phrase "Je ne pense pas que Lisp soit plus rapide que Java, mais aussi plus rapide que C" est quelque peu déroutante. C est généralement considéré comme la norme en matière de «code rapide parce que vous programmez proche du métal» - c'est la référence à battre pour à peu près tout. Désormais, Java et d'autres langages au format GC peuvent le battre dans certains contextes, par exemple la vitesse d'allocation / nettoyage de la mémoire. Mais, cette phrase semble néanmoins un peu en arrière.
Michael H.
2
Lisp est un langage de niveau supérieur à ceux que vous avez mentionnés, il est donc généralement plus lent.
segfault
5
@Bo Tian: "langage de niveau supérieur" nécessite une définition non ambiguë. Même s'il en avait un, cela ressemble à un non-séquestre. (merci @Mark)
Mike Dunlavey
5
@BoTian "niveau supérieur" n'est pas égal à "plus lent" par défaut.
24
Lisp existe pour montrer à quel point tous les autres concepteurs de langage ont eu tort.

Réponses:

78

Il y a quelques raisons pour lesquelles je travaille à devenir compétent avec Common Lisp.

  1. Code homoiconique. Cela permet au code structuré de s'auto-modifier.
  2. Macros compatibles avec la syntaxe. Ils permettent la réécriture du code standard.
  3. Pragmatisme. Common Lisp est conçu pour permettre aux professionnels de travailler de faire le nécessaire. La plupart des langages fonctionnels ne le sont généralement pas.
  4. Souplesse. Il peut faire beaucoup de choses différentes, toutes à une vitesse raisonnable.
  5. La verrue Le monde réel est en désordre . Le codage pragmatique finit par devoir utiliser ou inventer des constructions en désordre. Common Lisp a suffisamment de sang-froid pour pouvoir accomplir des tâches.

On peut soutenir que les seules vraies raisons de choisir Common Lisp sont le fait que les bibliothèques standard sont datées.

Je vais m'exprimer et dire que dans le cas général, la syntaxe ne devrait pas être un problème pour un informaticien professionnel.

Paul Nathan
la source
8
La syntaxe peut être un problème si elle affecte de manière significative la lisibilité ou l'écriture. Je ne pense pas que ce soit le cas pour Lisp. Un bon éditeur ou IDE peut faire assez de mise en évidence syntaxique et d'appariement de paren pour ne pas être une grosse affaire.
Matt Olenik
4
De plus, je n’ai que peu utilisé Lisp (Common Lisp) et j’ai eu l’impression générale que le n ° 2 était le plus gros avantage pour Lisp. Peut-être que je pense au mauvais paradigme, mais je ne pense pas que j'ai jamais eu une situation où un code auto-modificateur était nécessaire. Si vous avez une raison spécifique de l’utiliser, alors oui, mais sinon les macros ressemblent à la vraie fonctionnalité tueur. Edit: Je viens de me rendre compte que ce sont, en fait, la même fonctionnalité.
Matt Olenik
3
@ Matt: Oui. FWIW, j’ai récemment rencontré Nemerle, un langage expérimental CLR en C # avec des macros. nemerle.org . Cela vaut la peine de fouiller à un moment donné, je pense, juste pour l'expérience.
Paul Nathan
2
"Pragmatisme. CL est conçu pour permettre à des professionnels de travailler de faire le nécessaire. En règle générale, les langages fonctionnels ne le sont pas.": Je ne suis pas d'accord avec cette affirmation. Lisp m'intéresse beaucoup et j'essaie de consacrer un peu de temps à l'apprendre. Mais je trouve d'autres langages de PF également très efficaces pour "faire avancer les choses", du moins c'est mon expérience avec Scala et Haskell jusqu'à présent.
Giorgio
1
"CL est conçu pour permettre à des professionnels de travailler efficacement. La plupart des langages fonctionnels ne le sont généralement pas.": Pouvez-vous élaborer? Surtout sur la deuxième partie de la phrase. Pouvez-vous citer quelques exemples?
Giorgio
23

J'aime Lisp pour ses

  • manière unifiée, simple et élégante de représenter à la fois le code et les données.
  • point de vue unique, ce qui me donne 80 points de QI essentiels pour résoudre des problèmes difficiles (avec le chapeau à Alan Kay)
  • environnement de développement extrêmement agile, interactif et conversationnel
  • pouvoir sans précédent pour créer et manipuler des abstractions

La programmation combat la complexité. Les abstractions sont le seul outil efficace pour lutter contre la complexité croissante (avec notre taille de crâne très limitée et constante). Gérer des abstractions avec Lisp, c'est comme avoir un génie avec n + 1 souhaits.

Maglob
la source
5
+1 pour "La programmation combat la complexité. Les abstractions sont le seul outil efficace pour lutter contre la complexité croissante (avec notre taille de crâne très limitée et constante)". (J'aimerais pouvoir donner un +10.)
Giorgio
Qu'est-ce qu'un "environnement de développement extrêmement agile, interactif et conversationnel"?
Qed
6
Est-ce que cela ne devrait pas être des (+ 1 n)voeux, ou même plus pratique (incf n)?
Reb.Cabin
21

Je crois que la réponse correcte de Lisp est plus gnomique. Quelque chose comme: "Si vous devez demander, vous n'êtes pas prêt."

Ensuite, si quelqu'un pose d'autres questions, la réponse correcte est soit "oui" s'il s'agit d'une question soit / ou soit "vous n'êtes pas prêt".

glénatron
la source
5
Paul Graham cite Louis Armstrong: «Si vous devez demander ce qu'est le jazz, vous ne saurez jamais.»
Jason Baker Le
25
+1 Bien que des phrases telles que "Si vous devez demander, vous n'êtes pas prêt" me font penser que celui qui le dit ne peut tout simplement pas expliquer
superM
5
@superM Les langages fonctionnels Lisp et Lisp ont la propriété qu'une fois appris, on ne peut plus les expliquer!
esoterik
18

Je pense que l'avantage de Lisp dans le domaine de l'intelligence artificielle (IA) que tout le monde mentionne est un peu un accident historique ... Lisp a commencé pour / dans l'IA, mais c'est un langage généraliste.

Je pense que la rapidité d'exécution n'est pas le seul aspect important d'une langue (une fois par contre). Cependant, l’un des aspects de Lisp que j’aime bien, c’est que pour moi, il combine Python et C en un. Je peux commencer à coder sans déclaration et prototype immédiatement et très rapidement (le runtime et le REPL sont très importants pour cela). Après avoir exécuté quelque chose, j'ajoute des déclarations de type et "optimise" mon code, petit à petit. C’est une merveille d’appuyer sur une touche dans SLIME et de regarder le langage machine généré pour la fonction qui m’intéresse. En Python, il n’ya pas de déclaration de type, je ne peux donc pas obtenir plus de vitesse, mais en C, tout faire rapidement est beaucoup plus douloureux. Lisp est très utile dans ce cas.

Ceci dit, j'aime bien Lisp principalement à cause des macros . Lorsque vous comprenez enfin ce que les macros peuvent réaliser, je pense que vous supportez facilement les parenthèses. De plus, des éditeurs comme Emacs gèrent les parenthèses elles-mêmes, pour que vous n'ayez pas à le faire. J'avoue cependant que je n'ai pas trouvé les parenthèses aussi mauvaises au début et je sais que certaines personnes ne peuvent tout simplement pas les supporter. Mais comme les macros ont pour seul objectif de générer du code au moment de la compilation, le code dans Lisp utilise une structure de données standard et les parenthèses sont simplement une représentation du code sous forme de listes, ce qui est nécessaire pour simplifier l'écriture des macros.

Je ne connais aucune autre langue dans laquelle vous pouvez écrire de petites sous-langues pour décrire votre problème mieux avec la facilité de Lisp. C’est l’avantage dont parle Paul Graham dans Beating the Averages . C'est une modularité et une concision extrêmes. En Java, je dois écrire beaucoup de texte brut pour exprimer une idée unique. Sur Lisp, je pourrais écrire des macros qui génèrent ce code automatiquement et les utiliser ensuite. Quoi qu'il en soit, vous devez comprendre quelques exemples et ensuite juger par vous-même. Quand je l'ai "vu", j'ai été époustouflé et je pense toujours que le lisp est la meilleure langue pour cette seule raison. Je cherche toujours des macros dans les langues courantes pour voir si elles correspondent à la puissance des macros Lisp, mais à ce jour, je n'en ai trouvé aucune. Forth est une seconde proche.

Je terminerai par quelques critiques concernant les logiciels de gestion:

  1. Les logiciels d’entreprise ont besoin de bibliothèques, et de bonnes bibliothèques, et Lisp n’est pas doué pour cela. D'habitude, je n'en ai pas besoin, mais je dois choisir parmi une petite sélection de logiciels incomplets utilisés par quelques personnes. Je devrais contribuer à résoudre ce problème, je suppose ...

  2. Les logiciels d'entreprise sont généralement conçus par de grands groupes de personnes, et je pense que les macros peuvent entraver la communication, car elles changent fondamentalement le langage. Beaucoup de programmeurs sont plus à l'aise pour détecter certains modèles dans le code, même si le texte du programme est plus long et plus répétitif. Je suppose que chez ITA, ils ont des règles concernant les macros ou une immense bibliothèque de macros qui facilite la collaboration (ou, plus simplement, tous les programmeurs sont des experts en Lisp).

Pau Fernández
la source
7
Essayez clojure, c’est un fiasco sur la JVM. Donc, en utilisant la machine virtuelle, vous pouvez utiliser tous les trucs Java.
Zachary K
@zachary: Il existe au moins 2 implémentations de Common Lisp sur la machine virtuelle Java. ABCL est relativement mature.
Larry Coleman
Clojure est compatible à 100% avec Java (du moins, je n'ai jamais rien trouvé en Java que Clojure ne puisse améliorer et de manière à ce que les javaistes ne puissent pas se plaindre). Clojure est fortement influencé par le meilleur de Common Lisp et le meilleur de FP. Avec cela, SBCL, CLisp et Emacs, tout Lisper devrait maintenant se sentir roi.
Reb.Cabin
13

Je n'aime pas Lisp.

(J'aime beaucoup les concepts qu’il utilise, la manière dont il met à disposition nativement des techniques puissantes, etc.).

Mais je n’ai jamais été convaincu de l’utiliser (même si plusieurs personnes ont essayé ), car les avantages du langage peuvent être obtenus avec d’autres langages de programmation (certains directement, d’autres indirectement), de sorte qu’il n’ya pas assez d’avantages. pour que je passe le temps à apprendre et à supporter la syntaxe horrible.)))

Mais oui, pour des raisons qui plaisent à certaines personnes, consultez ces questions de débordement de pile:

Il y a probablement un peu plus de questions connexes dans les questions connexes.

Peter Boughton
la source
26
"Mettre en place avec la syntaxe horrible". C’est peut-être trop long depuis que je suis un novice Lisp, mais la simplicité et la régularité de la syntaxe Lisp constituent un atout majeur, car c’est ce qui me permet d’étendre Lisp en lui-même. Je peux ajouter des itérateurs personnalisés, de nouvelles constructions de portée "with-xxx" qui se nettoient automatiquement par elles-mêmes afin que le développeur ne soit pas obligé de le faire, etc. La syntaxe est une fonctionnalité, pas un bogue.
Michael H.
5
La possibilité d'étendre une langue avec elle-même ne nécessite pas une syntaxe limitée à une demi-douzaine de caractères. Aussi: "La syntaxe est une fonctionnalité, pas un bug" ? - Je connais. Je n'ai pas appelé ça un bug.
Peter Boughton
8
Ok, comment obtenez-vous les avantages du système macro? Combien de langues vous permettent de construire une extension orientée objet dans un chapitre assez court (Paul Graham, "On Lisp").
David Thornley
6
La syntaxe n'est pas plus horrible que les autres langues. J'ai constaté que les parenthèses disparaissaient visuellement au bout d'un moment. Avec une bonne indentation, le code est facilement lisible.
Barry Brown
8
Mais avoir la possibilité de se déplacer facilement entre S-exps semble énorme ... Alors, au sujet des parenthèses, j'aime bien la citation suivante: Des parenthèses? Quelles parenthèses? Je n'ai pas remarqué de parenthèses depuis mon premier mois de programmation Lisp. J'aime demander aux personnes qui se plaignent de parenthèses dans Lisp si elles sont gênées par tous les espaces entre les mots d'un journal "- Ken Tilton
Cedric Martin
9

Je vais interpréter "Lisp" comme " Common Lisp "; Je n'ai aucun doute que d'autres réponses diront " Scheme ". (Indice: Lisp est une famille de langues.)

Que veut dire "plus vite"? En termes de temps nécessaire pour exécuter un point de repère, non, ce n'est pas plus rapide que C ( mais ça peut l'être ).

"Rapide" en termes de temps nécessaire pour que Joe Random Hacker écrive un programme de travail ou corrige un bogue dans un système logiciel volumineux? Presque certainement.

Quant à ce pirate informatique, je l’utilise parce que je veux écrire du code, pas un passe-partout. Je veux écrire quelque chose une fois et ne pas me répéter continuellement. Et je veux interagir avec le programme pendant que je l'écris.

Frank Shearar
la source
Ne serait-ce pas génial si vous pouviez écrire une petite fonction dans votre éditeur qui ferait immédiatement quelque chose au reste de votre code? Ou pouvez-vous le faire déjà?
Marc C
4
@Mark: Je pense que vous décrivez Emacs.
Ferruccio
@ Ferruccio, je pensais que vous deviez d'abord exécuter votre code.
Marc C
2
@Marque C: Eh bien, vous devez mettre en évidence la région et ensuite M-x eval-region(ou eval-buffer), mais c'est tout.
Frank Shearar le
1
@MarkC: Aussi, si vous êtes dans le zéro tampon, vous pouvez simplement écrire votre fonction et appuyez sur C-j( ce qui est moralement équivalent à entrer) et il prend effet immédiatement.
Tikhon Jelvis
7

J'aime Lisp parce que c'est un excellent moyen d'exprimer mes pensées. Le prédicat de ma langue préférée est "Si je pouvais choisir quoi que ce soit pour exprimer des idées, lequel serait-il?". Actuellement, il s’agit de Lisp * ( schéma pour être spécifique), au point que je me retrouve à écrire des notes de programmation. Comme IRL , notes de papier et de stylo. Même quand je pense aux programmes que je dois implémenter en PHP, Ruby ou Python.

Ce n’est pas un truc que j’ai appris moi-même, ou quelque chose que je fais pour la crédibilité de nerd (personne ne peut voir l’intérieur de mon cahier de toute façon); c'est juste que Lisp est tellement plus naturel pour moi de penser à aucune alternative, et toute langue qui résonne avec vous et qui vous tient à cœur est celle que vous chérissez.

* En guise de note de bas de page, Haskell se rapproche assez vite, à mesure que j'en apprends davantage.

Inaimathi
la source
6

La question est le pouvoir. Puissance = Travail (fonctionnalité du programme) / Heure

"Nous ne voulions pas conquérir les programmeurs Lisp, nous voulions les programmeurs C ++. Nous avons réussi à en faire glisser beaucoup à mi-chemin de Lisp."

- Guy Steele, co-auteur de la spécification Java

Tracez une sorte de courbe entre C ++ et Java. Continuez et, à un moment donné, vous trouverez Lisp.

compman
la source
2
Le problème ici est que vous perdez beaucoup de fonctionnalités C ++ en Java, mais que vous les reprenez (souvent sous une forme améliorée) lorsque vous passez à Lisp.
David Thornley
@DavidT La question SO sur cette citation exacte a un lien vers la source (recherchez "cite"). La citation ne devrait pas être prise si sérieusement.
Mark C
@ David: Comme les macros. Ce n'est pas simplement qu'ils les ont laissés de côté pour aller à Java (et donc en C #), mais ils en ont fait une "vertu". Les macros sont vraiment utiles si je construis un DSL au-dessus du langage de base.
Mike Dunlavey
@ Mike Dunlavey: Je n'aime vraiment pas les macros en C ++ (heu, je ne les aime pas en C, mais je n'ai pas vraiment le choix là-bas). J'aime beaucoup les macros dans Common Lisp. Vous savez, je pense que mon problème avec ce commentaire est que j'aime beaucoup plus le C ++ et le Common Lisp que le Java.
David Thornley
@ David: Je suis avec vous à 100% sur les macros dans Lisp. En C / C ++, ils sont laids et enclins à abuser, mais pour le genre de choses ( certes marginales ) que je fais, ils sont tellement meilleurs que rien. Bien sûr, quand je le fais en C ++, cela peut très bien être considéré comme un abus, mais en Lisp, il est considéré chaleureusement comme intelligent. Allez comprendre.
Mike Dunlavey
6

Paul Graham répond en quelque sorte à cette question dans Ce qui a rendu Lisp différent .

N'oubliez pas qu'il l'utilisait pour sa startup au milieu des années 90, si bien que Python et Ruby n'étaient pas vraiment matures à ce moment-là (ni même nés).

Lisp a fondamentalement tous les avantages des langages dynamiques, et je pense que pour la plupart des applications Web actuelles, Python et Ruby sont plutôt géniaux. Ils ont l'avantage des frameworks, de la documentation et des communautés dynamiques.

La principale caractéristique est probablement que tout le programme est constitué d'expressions. Cela signifie que vous pouvez en quelque sorte passer des blocs de code à des fonctions (ou macros ...), car un bloc de code n'est rien de plus qu'une expression.

Python n'a pas exactement cette fonctionnalité. vous devez définir des fonctions et les faire circuler. Ruby semble avoir des blocs, peut-être est-il quelque peu limité par rapport à ce que Lisp peut faire (je ne suis pas sûr).

minimum
la source
L’article de Paul Graham est intéressant car, à l’exception de quelques articles, la plupart des langues semblent présenter les caractéristiques qu’il énumère. Alors peut-être que Lisp était plus convaincant à l'époque; De nos jours, il est plus précieux que le langage qui introduit ces fonctionnalités?
Andres F.
AST comme syntaxe de langage est encore du domaine de Lisp. Je ne suis pas au courant de l'existence de langages non lisibles dans lesquels les macros ont tout le langage disponible, au moment de la compilation (Oui, le compilateur appelle essentiellement la macro à la définition de macro qui est le programme Lisp par lui-même. Vous voulez créer des macros http et db au moment de la compilation ?)
przemo_li
6

J'ai eu une réaction instinctive envers Scheme dans le passé, mais je suis maintenant prêt à donner un coup de feu à Lisp ( Clojure , en fait).

Vous voyez, au fil des ans, j'ai appris des langages comme Java, C #, C ++, Python, et tout ne pose plus aucun problème.

Clojure a de nombreuses promesses, semble très propre et peut résoudre de nombreux problèmes du monde réel. L'avènement des ordinateurs multi-cœurs est un cas solide pour un langage propre comme Clojure.

Yay LISP!

EDIT: ITA Software a été fondé par des diplômés du MIT et Scheme / Lisp était la seule langue apprise par de nombreux diplômés du MIT. Pour être juste, on peut échanger à chaud les algorithmes Lisp sur un système de production en cours d'exécution, ce qui est un énorme avantage.

emploi
la source
8
Re: Les choses ne sont plus un défi - essayez Haskell et dites-nous ce que vous pensez. Aussi, vous pouvez toujours essayer d'apprendre un peu INTERCAL pour changer!
Mark C
3
@Marque C, désolé mais je ne touche pas INTERCAL. Le défi n'est pas le seul critère; il doit aussi être capable de résoudre rapidement les vrais problèmes. Au moins, Haskell est utilisé et aimé par beaucoup.
Job
C'était en plaisanterie, bien sûr.
Marc C
1
Mettre à jour le code en cours (avec précaution!) Sur un serveur de production est l’une des joies de Lisp, oui. Python, du moins quand je jouais avec, ne le faisait pas bien; vous devrez recompiler manuellement toutes les fonctions / méthodes qui font référence à vos modifications, tandis que toutes les implémentations de Common Lisp le gèrent pour vous. J'utilise le même pouvoir pour le développement: écrire, tester quelque chose, éditer, tester - pas de boucle de compilation, et vous pouvez passer vos tests interactifs et les transformer en tests unitaires si vous le souhaitez.
Michael H.
@Job j'ai oublié ... PLEASE?
Mark C
6

Ce qui me plaît chez Lisp, c’est qu’il transcende les paradigmes. Certaines personnes diront que Lisp est fonctionnel, d’autres, déclaratif, et d’autres, multiparadigm. Je pense que tout cela passe à côté de l'essentiel. Lorsque vous utilisez Lisp, le paradigme n’est plus une contrainte.

Vous voulez des objets? Vous pouvez les avoir. Vous voulez une programmation fonctionnelle? Vous pouvez l'avoir. Vous voulez une programmation logique de type Prolog ? Ecrire des macros. Vous voulez une programmation déclarative de style SQL? Fonce. Vous voulez utiliser un paradigme qui n'a pas encore été inventé? Je suis convaincu que cela peut être fait à Lisp.

Mis à part les langues qui ressemblent à Forth , je n’ai pas encore vu d’autre langue offrir ce niveau de flexibilité.

Jason Baker
la source
+1 Programmation multi-paradigme, plusieurs décennies à l’avance de F #, très bon point.
Orbling le
Je souhaite que je pourrais upvoter cela dix fois. Il n'y a pas de cuillère ... il n'y a pas de paradigme ... Cela décrit mon sentiment à propos de Common Lisp avec une grande précision :)
MadPhysicist
5

"Faster" n'est pas une chose simple à mesurer - cela dépend vraiment de quel aspect vous comparez. Selon la tâche et l’implémentation de Lisp, les vitesses peuvent s’approcher de C. Regardez l’ analyse décisive pour évaluer les détails. L'implémentation de Lisp par SBCL est à égalité avec Java 6 Server et est nettement plus rapide que Ruby ou Python.

Mais la vitesse pure n'est pas la raison principale pour choisir un langage de programmation - si c'était le cas, nous programmerions toujours en langage assembleur , n'est-ce pas? Pour moi, le plaisir quotidien de Lisp est que le code est compilé, mais je n'ai pas à supprimer l'application, à tout recompiler, puis à recommencer à courir à partir de zéro. Au lieu de cela, je peux changer une seule fonction et ce changement prendra effet partout, et je peux immédiatement voir l'effet dans mon application. De plus, cette approche très rapide "écrire, tester, écrire plus, tester plus" facilite le test immédiat dès l'écriture du code (et vous pouvez ensuite transformer ces sondes interactives en tests unitaires).

Imaginez écrire un courrier électronique où, après chaque ligne, vous deviez appuyer sur un bouton pour compiler votre courrier électronique à l'écran avant de poursuivre votre réflexion. C'est ce que j'écris en Java ou dans un autre langage comme celui-là. Parfois, il y a une raison de le faire, et j'aime bien Java, mais Lisp est simplement plus réactif et il est plus facile de travailler.

khédron
la source
Si je commençais à zéro, je choisirais probablement Ruby - elle est héritée de la nature de Lisp, mais elle possède des bibliothèques plus modernes et un seul dictateur bienveillant. Mais ce n’était pas la question posée par le PO.
Michael H.
J'ai en fait choisi le rubis pour commencer et maintenant j'essaie d'apprendre newLisp.
philosodad
5

J'apprends Lisp ( newLisp ) pour plusieurs raisons.

Raison numéro un: Lisp me fait penser différemment, ce qui fait de moi un meilleur codeur Ruby.

Il semble très gênant de faire certaines choses dans Lisp, par exemple une itération imbriquée pour parcourir plusieurs listes. Donc, cela me force à utiliser d'autres choses, comme map. Mon langage préféré, Ruby, utilise la même méthode cartographique, mais je ne l'utilise pas toujours, car ce n'est pas familier: j'ai appris à faire des choses avec une technique médiocre et, lorsque le langage le prend en charge, je continue à l'utiliser.

Raison numéro deux: Lisp est pratique et possède de bonnes bibliothèques modernes.

Il y a une très belle, framework web léger pour appelé newLisp libellule . Cela me permet d’utiliser du code newLisp au lieu de PHP pour certaines tâches. Je n'aime pas vraiment PHP et newLisp semble plus amusant que Ruby pour cette tâche spécifique.

Raison numéro trois: Lisp est cohérent sur le plan syntaxique et conceptuel.

Pour moi, c'est la grande différence entre Ruby et Python, la cohérence.

philosodad
la source
+1: "Lisp est cohérent sur le plan syntaxique et conceptuel." C'est une caractéristique très importante d'une langue. Certaines langues mal conçues manquent de cohérence, elles ressemblent à une grande collection d'idiomes assemblés dans un ordre quelconque (je n'ai qu'une langue en tête, mais je ne l'appellerai pas :-)). Lisp est à cet égard très cohérent. Dès que j'ai un peu de temps, je vais certainement essayer de l'apprendre.
Giorgio
4

Pouvez-vous dire "fidélité à la marque"?

J'ai commencé à Fortran. Je l'ai aimé.

Je suis passé à Lisp. Au début je détestais ça. Puis j'ai appris à l'aimer et à haïr Fortran.

Plus tard, Pascal, C, C ++, divers assembleurs, C #. (En fait, je n'aime pas le C #.)

Je suppose que je suis capricieux?

Mike Dunlavey
la source
4

Quand Lisp a été créé, ils ont commencé par les mathématiques, pas par l'informatique (qui n'existait pas encore). Et l’équipe Lisp a vraiment bien certaines choses. Lisp avait la collecte des ordures en 1960 ou à peu près! Ils ont vraiment fait un excellent travail.

Je pense que la chanson The Eternal Flame le couvre.

Zachary K
la source
Oui, apparemment, Lisp était le premier langage soumis à GCed.
Mark C
2

Un grand tirage est la communauté. Lisp a attiré les développeurs les plus ambitieux et les plus brillants depuis l’invention du langage. Si des chercheurs tentent de résoudre des problèmes qui n'ont jamais été résolus, vous trouverez probablement Lisp, comme dans la recherche sur l'intelligence artificielle (IA), la vision par ordinateur, la planification, la représentation des connaissances et l'optimisation heuristique complexe. La langue se prête à la résolution simultanée de problèmes de haut en bas, ce qui semble aider à relever les défis les plus délicats.

La syntaxe exensible via les macros signifie qu'il est rarement nécessaire d'étendre la définition du langage. Une grande partie de ce qui nécessiterait une extension de langue dans une langue plus restreinte n’est qu’à une macro de Lisp. Les programmeurs Lisp sont donc libres d'utiliser les concepts de langage nouvellement inventés sans nouvelle norme de langage et sans nécessairement une pénalité de vitesse réelle. Au niveau de base, les rames de code standard sont rendues inutiles par de petites extensions. De nouvelles idées dans le flux de contrôle, telles que l’unification de style Prolog, sont mises en œuvre de manière efficace et compacte en tant qu’extensions.

Le système OOP, CLOS , est une classe à part en termes de flexibilité. Il est très difficile de revenir à des opérations rudimentaires COP / C ++ / Java / C # après avoir goûté. Les  modèles de conception GoF 5 deviennent inutiles car ils peuvent être exprimés simplement et directement.

Le langage n'a eu aucun propriétaire d'entreprise ni aucune implémentation définitive, bien qu'il ait une norme ANSI avec de nombreuses implémentations conformes. De nouvelles mises en œuvre majeures se produisent chaque décennie et les anciennes sont toujours très actives. Les experts peuvent envisager d’utiliser leurs connaissances spécialisées pendant une longue période. Cela provoque des frictions anarchiques et une fragmentation de la communauté, mais cela signifie également que le tapis ne peut pas être retiré et que le langage ne peut pas devenir moribond pour des raisons politiques d'entreprise ou de projet. Il y a toujours plusieurs implémentations commerciales et open source sur lesquelles travailler. Les plus axés sur les performances comparent régulièrement avec un facteur 2x des implémentations de langage impératif très rapides et fortement financées.

Le talon d’Achille de la commercialisation initiale de Lisp était l’empreinte mémoire qui lui permettait de prendre en charge à la fois les caractéristiques de sécurité du langage et les environnements de développement logiciel avancés qu’ils incluaient, avec des fonctionnalités incroyables telles que la documentation complète en ligne, y compris les graphiques. Une machine Lisp Symbolics de 64 Mo n’était pas viable sur le plan des coûts par rapport à une station de travail Sun de 8 Mo. Aujourd'hui, les prix de la RAM se sont effondrés et les langages Lisp suscitent un vif intérêt, d'autant plus que les langages traditionnels Java, C # et PHP n'ont progressé que très légèrement par rapport à ceux d'il y a 30 ans.

Il existe maintenant des langages modernes en concurrence avec Lisp pour le partage d'esprit avec des développeurs intelligents: Python, Lua , Erlang , Haskell et OCaml . Mais aucun n'offre le même mélange de maturité, d'adaptabilité, d'implémentations conformes à de nombreuses normes et de rapidité.

bcaulf
la source
1

Je ne fais pas réellement Lisp. Mais l’endroit où je travaille ne contient que des éléments finis avec des millions de lignes principalement en Fortran. Le type que je respecte le plus concernant les outils informatiques (codes de calcul des fluides ) pense que la combinaison idéale est Lisp à l'extérieur (principalement parce que vous évitez les problèmes de gestion de la mémoire), et Fortran pour les algorithmes de bas niveau (Fortran est le meilleur pour exploiter capacités vectorielles de SSE / AVX , et nous pensons que cette avance est peu probable).

Peter Mortensen
la source