web-dev-qa-db-fra.com

LISP est-il toujours utile dans le monde d'aujourd'hui? Quelle version est la plus utilisée?

J'essaie de m'enseigner un nouveau langage de programmation à intervalles réguliers. Récemment, j'ai lu comment LISP et ses dialectes se situent à l'extrémité opposée du spectre des langages comme C/C++, ce qui m'a rendu assez curieux pour en savoir plus. Cependant, deux choses ne sont pas claires pour moi et je cherche des conseils à leur sujet:

  1. LISP est-il toujours pratiqué/utilisé dans le monde d'aujourd'hui, ou est-ce un langage hérité comme FORTRAN/COBOL? Je veux dire, en plus de maintenir le code existant, est-il utilisé sur de nouveaux projets?

  2. Quel est le dialecte le plus utilisé? Je suis tombé sur Scheme et Common LISP comme les 2 dialectes les plus répandus, et je voulais votre avis sur celui qui est le plus favorisé/utile à apprendre - et je serais extrêmement heureux si vous pouviez suggérer des ressources pour un débutant.

Bien que désireux d'apprendre une langue qui est fondamentalement différente des langues procédurales auxquelles je suis habitué, je ne veux pas investir un effort indu dans quelque chose qui est totalement obsolète - je l'apprendrais toujours s'il était professionnellement "mort", mais seulement dans une perspective académique ...

116
TCSGrad

J'aime plutôt Scheme, si vous voulez travailler avec la JVM, vous devriez vérifier Clojure, qui est un LISP conçu pour fonctionner dans la JVM. Et oui, LISP vaut toujours la peine d'apprendre pour voir à quel point un design aussi minimal peut être puissant! Les gens qui ont créé LISP ont bien compris certaines choses. C'est incroyable combien de nouvelles fonctionnalités intéressantes des langues modernes LISP avait dans les années 1960!

Pour un schéma intégré, essayez la ruse: http://www.gnu.org/s/guile/

59
Zachary K

En réponse à la question 2, "Dialecte le plus utilisé":

Dépend de la façon dont vous interprétez "le plus utilisé". Voici quelques mathématiques de serviette pour limites inférieures sur l'utilisation que chacun des quelques dialectes choisis obtient.

Code le plus brut écrit

  • Schéma possible (tous les dialectes) en raison de éducation applications
    • 270 écoles ... Supposons 50 élèves/an, 500 lignes de code/élève, 10 années consécutives. 1 000 000+ lignes basées sur les mathématiques de la serviette.
    • 500 000 lignes de Racket dans Racket lui-même et ses outils.
  • LISP commun possible à cause de AI et de nombreux codes open source et code de production (voir code de production).
  • Peut-être Emacs LISP à cause de ...
    • Emacs lui-même: plus de 1 000 000 lignes
    • Le nombre d'emacs LISP écrit publiquement - 237 modules, environ 200 lignes/modules est 40 000 + lignes uniquement sur EmacsWiki, probablement beaucoup plus dans ELPA
    • Plus les applications écrites dans emacs LISP, fichiers .emacs, etc.
  • Clojure
    • Difficile à estimer. Des dotcoms généralement plus petits. Ça pourrait être beaucoup.

Gagnant: Schéma ou LISP commun. Trop d'inconnues.

Code le plus "de production"

Gagnant: Je devine LISP commun . Je pense que nous pouvons répondre "Oui" à la question 1 sur la base de l'utilisation du LISP commun et de Clojure.

La plupart des utilisateurs finaux

  • LISP commun
    • Clients ITA Software, dont Orbitz, Bing Travel et Kayak.com - probablement des millions.
  • Clojure
    • Citigroup (pas de détails), Akamai (pas de détails), simple.com, beaucoup d'autres. Probablement des millions.
  • Schème
    • Étudiants CS, chercheurs et amateurs. Moins d'un bazillion.
    • La série Uncharted - Plus de 5 millions
  • Emacs LISP - Principalement des programmeurs, principalement sur des plates-formes Unix. Ça pourrait être un million.

Gagnant: Scheme a la meilleure borne inférieure ici, car il y a des chiffres de vente sur Uncharted, mais c'est assez discutable.

Conclusion

En conclusion, je trouve que les grosses pommes.

68
Jesse Millikan

LISP est-il toujours pratiqué/utilisé dans le monde d'aujourd'hui, ou est-ce un langage hérité

Oui, c'est vrai, mais il faut savoir où chercher. Les gens qui utilisent LISP n'ont pas tendance à crier trop fort à ce sujet, mais il existe quelques exemples de quelques startups de haut niveau qui l'ont utilisé avec beaucoup de succès au cours des 20 dernières années. Il est également très populaire auprès des petites entreprises en Europe.

Quel est le dialecte le plus utilisé?

C'est une question valable, mais ce n'est pas facile à répondre. Il peut également ne pas être particulièrement utile de répondre: de nombreuses implémentations ont un objectif spécifique, il est donc préférable de les choisir si elles correspondent à votre problème particulier plutôt qu'en fonction de l'étendue de son utilisation. Au lieu de cela, je vais vous parler un peu de vos options et vous pouvez décider par vous-même.

LISP est une famille de langues et chacune de ces langues possède une famille de dialectes et d'implémentations. En gros, les dialectes se répartissent en deux camps "LISP" et "Schemes".

LISP: Jusqu'à relativement récemment, le LISP commun était roi. C'était une tentative d'unifier tous les LISP disparates et, sans être méchant, c'était le "C++" de LISP. C'est-à-dire que c'était une langue ÉNORME . Il y avait tout. Au cours des dernières années, Clojure est apparu. Clojure est un LISP qui fonctionne sur la machine virtuelle Java et essaie de s’enraciner dans une philosophie de programmation fonctionnelle. Traditionnellement, d’autres LISP ont été strictement multi-paradigmes. Clojure est intéressant car il obtient à la fois la le meilleur et le pire du LISP et de la JVM. Il y a encore beaucoup de verbosité des langages basés sur Java et ils ont été assez libres et faciles avec la syntaxe, ce qui a beaucoup de boutons et boutons pour différentes choses, mais ils 'ai quelques vraiment idées intéressantes sur les types de données, en particulier certaines des façons pratiques qu'ils ont mises au point pour appliquer des idées de programmation fonctionnelle.

Schémas: les schémas sont un sous-ensemble strict des LISP. Le schéma a été inventé par Steele et Sussman et au début de sa vie, il était remarquable pour être utilisé dans le cours de conférence MIT Computing 101). Le schéma est défini dans le "Rapport révisé ^ n sur le schéma de langage algorithmique (RnRS ) ". Oui: ils contiennent une blague sur les mathématiques. Le schéma est un langage normalisé d'une manière différente des autres LISP. Cela facilite grandement la portabilité entre les implémentations, mais ce n'est pas une solution miracle. Les efforts de normalisation ont eu tendance à être conservateurs et les innovations dans les implémentations, en particulier autour de choses comme les modules, ont tendance à être disparates. Il existe également une série de SRFI (Scheme Requests For Implementation) qui est similaire au processus RFC de l'IETF. Les gens l'utilisent pour standardiser les petites choses selon les besoins.

Les schémas sont différents des LISP par le fait qu'ils ont un ensemble d'exigences strictes auxquelles ils doivent satisfaire, dont l'un est "l'optimisation des appels de queue" qui aide à rendre la récursivité efficace. Par conséquent, les styles de programmation récursifs sont beaucoup plus populaires dans Scheme que dans LISP. Le schéma est, aussi sans être méchant, comme le "C" de LISP. C'est-à-dire que ce sont de petites langues et que vous êtes censé pouvoir tout garder dans votre tête en même temps.

Il existe actuellement deux familles de Scheme: celles basées sur la 5ème version (R5RS) et celles basées sur la 6ème version (R6RS). La complexité de R6RS était considérablement plus grande que celle de n'importe lequel de ses prédécesseurs et de nombreuses implémentations R5RS ont choisi de l'ignorer, en espérant que R7RS sera plus similaire à R5RS qu'à R6RS. Le processus de normalisation R7RS est actuellement en cours et a essayé d'inclure les désirs des implémenteurs R5RS ainsi que ceux du folk R6RS en normalisant un petit langage de base dans leur premier groupe de travail, puis en chargeant un deuxième groupe de travail pour standardiser les fonctionnalités plus grandes. Cela permettra au langage d'avoir des implémentations efficaces et utiles sur de minuscules matériels embarqués ainsi que sur des machines plus performantes.

Je vais maintenant être plus précis:

PicoLisp est un LISP vraiment, vraiment cool. C'est minuscule! Son auteur l'a écrit pour lui-même et, si je comprends bien, il en gagne sa vie depuis les années 1980. Si jamais vous avez l'occasion d'assister à une conférence de lui, alors vous devriez le faire: il est vraiment intéressant et connaît vraiment ses trucs et vous n'obtiendrez même pas le plus petit reniflement de quoi que ce soit de traditionnel ou ennuyeux.

Je ne suis pas familier avec les implémentations LISP communes, donc je ne commenterai pas plus à leur sujet.

Guile est le schéma officiel GNU.

La raquette est un schéma R6RS mais ces derniers temps, elle semble avoir élargi le réseau et tente "de servir de plate-forme pour la création, la conception et la mise en œuvre de langage".

Le poulet vise à être un programme pratique. Il est basé sur R5RS et se compile en C. Cela s'avère être un avantage vraiment, vraiment, important car il est absolument trivial d'utiliser les bibliothèques C existantes. Par conséquent, Chicken est probablement le schéma le plus utile pour remplacer Perl, Python, Ruby, etc., comme langage de script au jour le jour. Il y a plusieurs personnes qui l'utilisent exclusivement pour tous leurs besoins depuis plusieurs années. Il a un REPL ainsi qu'un compilateur interactif. La communauté (à la fois sur la liste de diffusion et IRC) est bien informée, amicale et utile.

Recherchez une implémentation avec de nombreux modules: cela montre qu'elle est largement utilisable et signifie qu'elle est susceptible d'avoir quelque chose qui aide à la tâche à accomplir.

Recherchez une implémentation avec un compilateur ou, à tout le moins, quelque chose qui n'est pas strictement IDE ou REPL. De nombreuses implémentations conçues pour l'enseignement est très difficile à utiliser pour les scripts à usage général.

Je recommanderais Chicken car c'est ce que j'utilise. Je l'ai utilisé dans mes projets personnels et je l'ai utilisé (et je l'utilise actuellement) professionnellement.

Je ne veux pas investir un effort indu dans quelque chose s'il est totalement obsolète - je l'apprendrais toujours s'il était professionnellement "mort", mais uniquement dans une perspective académique ...

Le schéma n'est pas mort professionnellement, mais vous devrez peut-être faire des efforts pour l'utiliser dans ce contexte. Quelque chose comme Chicken est bien plus qu'une recherche académique et il peut facilement couvrir presque toutes les bases des langues de haut niveau que vous utilisez actuellement.

43
andyjpb

Je ne peux pas vraiment parler pour tous les Lisps mais Clojure est définitivement une langue chaude et pertinente à l'heure actuelle. Un groupe d'utilisateurs de London Clojure auquel je suis allé plus tôt cette semaine comptait plus de 100 participants ....

J'ai trouvé que c'était une expérience très enrichissante d'apprendre LISP sous la forme de Clojure au cours de la dernière année (après beaucoup d'expérience avec Java et C #). Les principales raisons en sont:

  • Il met assez fortement l'accent sur la programmation fonctionnelle (plus que la plupart des autres Lisps). L'auteur et BDFL Rich Hickey a fréquemment cité Haskell comme l'une de ses inspirations pour la conception du langage, ce qui signifie que vous obtenez des choses comme des structures de données entièrement immuables et des séquences infinies paresseuses, etc.
  • Métaprogrammation de macros - la philosophie LISP "code is data" est difficile à comprendre à moins que vous ne l'ayez réellement expérimentée, mais c'est l'une des raisons pour lesquelles Lisps est si expressif et productif
  • Support fantastique pour simultanéité multi-core - Je pense que Clojure est le meilleur langage pour la programmation simultanée en ce moment. Voir http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey pour une présentation éclairante à ce sujet

Il semble également être un choix pratique pour une utilisation réelle en production pour les raisons suivantes:

  • Exécuter sur la JVM avec une très simple Java vous donne accès à toutes les bibliothèques et outils de l'écosystème Java
  • C'est un langage dynamique par défaut, ce qui le rend très pratique pour le développement et le prototypage rapide avec pratiquement aucun passe-partout. Cependant, vous pouvez ajouter des conseils de type statique pour obtenir de très bonnes performances là où vous en avez besoin.

Je connais personnellement des gens qui utilisent Clojure dans quelques banques d'investissement et startups. J'ai également choisi Clojure comme langage de développement principal pour ma propre startup, donc je suis prêt à mettre mon argent là où ma bouche est :-)

27
mikera

J'apprends aussi LISP actuellement (et je l'adore). J'utilise Common LISP mais je me suis aussi amusé avec SBCL , Arc (notez, c'est la version de Paul Graham de LISP qui, comme mentionné par Vitor Braga a créé Yahoo store/Viaweb) et Allegro CL qui est similaire à Visual Studio pour LISP (peut créer des GUI, cependant, je ne l'ai jamais utilisé).

En ce qui concerne les utilisations, LISP a été beaucoup utilisé en intelligence artificielle mais je vais être honnête, je ne sais pas combien d'autres utilisations "générales" pour LISP. Beaucoup de sites Web qui ont été construits dans LISP à l'origine ont été réécrits dans d'autres langues, il est donc difficile de dire qu'il est utilisé dans le développement Web (sans le dire, mais les grands sites qui l'utilisent ne le font plus). ). Après avoir fait une recherche rapide (très rapide) voici une liste de logiciels écrits en LISP commun de Wikipedia .

[MODIFIER] En ce qui concerne l'utilisation professionnelle de LISP, il existe des emplois qui vous obligeraient à utiliser LISP. Ils ne sont pas aussi nombreux que, par exemple Java ou travaux C #, mais ils existent. Je pense que LISP est l'un de ces langages qui est utilisé pour les applications internes et peut fournir un avantage concurrentiel dont les entreprises ne font pas Je ne veux pas abandonner en annonçant qu'ils utilisent LISP. Je me souviens avoir vu un article sur P.SE qui disait que Smalltalk était similaire dans le domaine financier.

De plus, être en mesure de montrer que vous êtes capable d'apprendre différents paradigmes peut ouvrir plus de portes même si vous n'utilisez pas LISP dans le travail.

"LISP mérite d'être appris pour la profonde expérience des Lumières que vous vivrez lorsque vous l'aurez enfin obtenue; cette expérience fera de vous un meilleur programmeur pour le reste de vos jours, même si vous n'utilisez jamais vraiment LISP lui-même." - Eric Raymond, "Comment devenir un hacker"

[/ÉDITER]

9
Jetti

Si vous voulez apprendre LISP aujourd'hui, j'aimerais jeter un œil à la raquette, qui est une implémentation de schéma rapide (enfin, elle s'écarte un peu du schéma, c'est donc son propre dialecte maintenant) ou à clojure, qui bénéficie de la JVM sur lequel il fonctionne (donc des millions de bibliothèques sont disponibles, et vous pouvez le faire interagir avec votre propre Java).

Même si vous ne l'apprenez pas à l'utiliser réellement, il est toujours bénéfique de l'apprendre: vous apprenez de nouvelles façons de penser et de traiter les problèmes, même dans d'autres langues, une fois que vous vous êtes concentré sur LISP pendant un certain temps.

8
Fabien

Une partie importante du backend d'Amazon était auparavant dans LISP mais a maintenant été réécrite en C++, ou du moins j'ai entendu (je dois admettre que je n'ai pas de source fiable pour cela).

Yahoo! Les magasins sont l'un des exemples classiques d'applications Web LISP. Depuis Yahoo! Stocke la renommée dont vous avez peut-être entendu parler Paul Graham . Graham est l'un des défenseurs les plus connus du LISP et écrit abondamment sur ce sujet. Vous voudrez peut-être lire son site pour connaître ses points.

AutoCAD avait un dialecte LISP pour son système macro. Je ne sais pas si c'est toujours le cas.

Le schéma est un langage propre et très élégant. C'est probablement mon langage de programmation préféré, donc je peux être biaisé. Si j'allais écrire une application majeure en ce moment, j'écrirais probablement une application squelette en C, étendre et définir des règles métier dans Scheme. Cela me permet d'utiliser Scheme et de tirer parti de C - pour la vitesse et la disponibilité des bibliothèques pour presque tout.

7
Vitor Py

LISP est-il toujours pratiqué/utilisé dans le monde d'aujourd'hui, ou est-ce un langage hérité comme FORTRAN/COBOL? Je veux dire, en plus de maintenir le code existant, est-il utilisé sur de nouveaux projets?

Je connais plusieurs gars qui font Lisps dans certaines startups de la Silicon Valley, et je sais qu'Amazon.com utilise LISP depuis le début (même si j'ai entendu dire qu'ils le remplaçaient par C++ pour une raison quelconque?)

Mais une entreprise à surveiller est Naughty Dog . Tous leurs jeux sont écrits avec un dialecte LISP. À l'origine, ils ont lancé leur propre, mais ils utilisent MZScheme dans la série Uncharted.

Quel est le dialecte le plus utilisé? Je suis tombé sur Scheme et Common LISP comme les 2 dialectes les plus répandus, et je voulais votre avis sur celui qui est le plus favorisé/utile à apprendre - et je serais extrêmement heureux si vous pouviez suggérer des ressources pour un débutant.

Je parierais que LISP commun, Clojure, Scheme et Emacs LISP sont les quatre dialectes les plus largement utilisés, et parmi eux, je soupçonne que Scheme est le plus couramment déployé. Je n'ai rien à l'appui de cela, bien sûr. :)

J'aime plutôt le SICP et le Little Schemer, comme suggéré par d'autres, mais je suggère également Land of LISP , ce qui est une lecture plutôt divertissante. :)

4
greyfade

Je pense que cela dépend en partie de ce que vous voulez en faire - si vous cherchez à approfondir vos connaissances sur les différents concepts de programmation et à vous faire un meilleur programmeur, je dirais qu'il vaut la peine d'apprendre au moins un minimum de LISP. Si vous cherchez une autre langue à ajouter à votre CV en vue de trouver un emploi avec cette langue, vous voudrez probablement chercher ailleurs. Il n'y a pas beaucoup d'emplois LISP.

J'essaie personnellement d'utiliser SBCL ou plus récemment, Clojure (et certains Emacs LISP, mais htat est parce que je suis un utilisateur Emacs à long terme - j'essayerais d'apprendre Emacs LISP lorsque j'essaierais d'apprendre LISP). Il ne me reste plus qu'à trouver le temps de jouer avec ces langues ...

2
Timo Geusch

Je ne sais pas qu'il y a une tonne d'emplois dans LISP, je ne peux certainement pas les voir. Mais je me souviens d'une longue lecture sur une sonde de la NASA où ils exécutaient LISP et ont pu insérer un nouveau code depuis la Terre.

Toujours à New York, le groupe de rencontre clojure est énorme. Je suppose que si vous êtes intéressé et que vous allez dans votre groupe Meetup clojure, vous pouvez trouver des opportunités de réseautage et de trouver des emplois (pas des emplois clojure mais des choses comme Java/C++/etc.). Cela semble être absolument énorme dans la région de New York, d'autres régions peuvent varier.

LISP est également une façon de penser différente. De plus, LISP et SQL entraînent tous deux l'utilisation de tonnes d'expressions imbriquées. J'ai utilisé SQL une tonne et j'ai remarqué que LISP avait plus de sens. Mais si vous rencontrez des problèmes avec SQL pour vous habituer aux parenthèses et expressions super imbriquées lors de l'utilisation de LISP, il sera probablement plus facile de comprendre les expressions SQL.

Un exemple classique est de savoir comment implémenter MAX (a, b, c). Vous pouvez créer une fonction alambiquée avec un tas d'instructions if. Ou vous pourriez simplement dire

MAX (MAX (a, b), c)

et utiliser deux appels imbriqués simples des deux éléments MAX, qui pour moi sont plus faciles à lire. Bien que si les performances sont un problème, vous voudrez peut-être le faire également dans l'autre sens, je n'ai pas pris la peine de compter le nombre de comparaisons lors de l'utilisation de chaque méthode ... Aussi si vous implémentez MAX via une macro C ou une autre méthode qui évalue la plusieurs fois vous risquez de ne pas obtenir le résultat escompté car l'expression peut être évaluée plusieurs fois, alors faites attention aux effets secondaires ...

2
Cervo

Deux points supplémentaires:

Premièrement, LISP est un excellent langage pour écrire du code dans lequel les interactions entre fonctions ou données sont souvent complexes. Dans de nombreux langages populaires, si vous ne savez pas pourquoi votre programme fait ce qu'il fait, vous devez écrire des fonctions spéciales pour vous permettre d'examiner l'état interne du programme au fur et à mesure. Dans certaines langues, vous devez ensuite attendre que votre code soit recompilé. Bien sûr, il peut y avoir des outils tels que des débogueurs qui aident à cela. Dans LISP, cependant, tout ce dont vous avez besoin est un moyen d'arrêter le programme, puis, généralement, vous avez accès à tout dans LISP. Dans Common LISP, parfois je tape simplement ^ C, ou jette un appel à error dans une seule fonction (qui est la seule chose qui doit être recompilée, et vous n'avez rien à faire pour la recompiler) . Une fois que j'arrête le programme, je suis instantanément jeté dans un débogueur - mais le débogueur me donne toute la puissance de LISP, et je peux quitter le débogueur, appeler des fonctions spécifiques, etc. Je peux facilement examiner n'importe quelle structure de données dans mon programme. La plupart des programmes devraient permettre des pratiques similaires. LISP n'est pas unique à cet égard, mais ce qu'il offre va au-delà de ce que de nombreuses langues populaires offrent.

Deuxièmement: si vous allez expérimenter n'importe quel dialecte de LISP, je ne le ferais pas sans (a) utiliser un éditeur qui correspond aux parenthèses et (b) apprendre une indentation LISP appropriée. Ce serait une bonne idée d'utiliser un éditeur qui se rapproche également de l'indentation appropriée pour vous. Le formatage de code de style C/C++/Java est conçu pour les langues avec moins de parenthèses/accolades/crochets que LISP. Le joli style d'impression LISP fonctionne bien une fois que vous le connaissez, et vous ne finissez pas par être confondu par des parenthèses ou perdre la moitié de votre espace en mettant une parenthèse fermante par ligne.

2
Mars

Je voudrais ajouter un peu de perspective sur le LISP commun et le schéma. J'ai évité le clojure à cause de la JVM, donc je n'ai pas beaucoup de perspective là-dessus.

Le schéma est un beau langage concis et bien défini. Il a fallu beaucoup de décisions que CL a dû prendre en raison de l'héritage, et a adopté l'approche la plus pure. Par exemple, les variables et les fonctions sont dans le même espace de noms. Le langage par défaut est plus petit et plus concis, ce qui fonctionne bien pour vous enseigner le genre de choses que LISP est bon, par exemple, il exerce une pression sur l'utilisation de la récursivité au lieu de l'itération, car par défaut, il n'a pas de boucles itératives et nécessite une optimisation des appels de queue . Le programme a un système de macro hygiénique très intéressant, qui a beaucoup de valeur à apprendre. Mais IMO, je recommanderais d'abord d'apprendre les macros non hygiéniques de style CL, dont la plupart des dialectes (?) Proposent au moins une implémentation de, même si cela ne fait pas partie de la spécification. Comme il semble que vous souhaitiez apprendre une langue pour le plaisir d'apprendre, je recommanderais Scheme, car en outre, bon nombre de ses concepts sont facilement transférés vers d'autres lisps et les langues dynamiques en général.

Cela dit, la communauté de Scheme est fragmentée et, à part quelques petites poches, semble être principalement dédiée à la recherche d'un travail réel ... Par exemple, chaque dialecte a son propre gestionnaire de paquets, et les paquets ne sont généralement pas portables à travers les dialectes, ce qui est un énorme problème dans la communauté des schémas.

Le LISP commun, d'autre part, semble être l'approche beaucoup plus pragmatique pour développer un langage. La norme est telle qu'une grande partie du code LISP est portable entre les implémentations, de nombreux compilateurs sont rapides et bien optimisés. Il existe un grand nombre de packages, dont beaucoup sont portables entre les implémentations. Et apparemment, une quantité (comparativement) importante de produits réels est créée dans la langue. Et avec, par exemple, quicklisp, la gestion des packages semble raisonnablement proche de ce que vous obtiendriez dans une communauté moderne comme Ruby ou Node. CL, cependant, n'est pas sans défauts, il a une très grande spécification à ce stade par rapport au schéma, et même son système d'objet CLOS, quelque chose qui est traditionnellement écrit comme une bibliothèque en Lisps, fait partie de la spécification IIRC. Et vous pouvez sentir l'héritage ancré dans une grande partie du système. L'approche du système de construction standard d'extraction d'une image pour la compilation semble particulièrement mystérieuse, par exemple.

Sinon, j'ai dit que je ne pouvais pas parler de clojure, et Emacs LISP est clairement le choix approprié si votre objectif est d'écrire des extensions Emacs, et assez clairement pas le choix approprié pour d'autres logiciels.

TLDR; Si votre objectif est d'apprendre, je recommande Scheme. Cependant, si vous souhaitez créer un logiciel, je recommanderais Common LISP des deux variantes principales de LISP.

1
Arelius

En ce moment, j'ai l'impression que LISP est principalement utilisé dans les magasins de conseil (pas que les magasins de conseil l'utilisent principalement).

C'est considéré un peu plus pour les logiciels pratiques. Surtout parce que les gens n'y sont pas habitués, je crois.

Traditionnellement, Scheme est un dialecte assez académique du LISP, et Common LISP était le dialecte de l'industrie.

LISP est particulièrement utile pour la manipulation symbolique et les capacités de réflexion-esque.

Par exemple, le code que j'ai écrit pour apprendre LISP était un programme qui a construit des fonctions lambda aléatoires, les a évaluées, puis les a exploitées, dans le but de minimiser la différence de la fonction avec une fonction cible. Tout cela était une manipulation directe. Dans un langage comme C++ ou Java, j'aurais dû inventer une représentation des fonctions que l'ordinateur manipulerait.

1
Paul Nathan

Un autre facteur à considérer dans le choix du dialecte du LISP à apprendre peut être le nombre et la qualité des implémentations. Si un dialecte n'a qu'une ou deux implémentations, alors vous êtes coincé avec ses défauts jusqu'à ce que ces défauts soient corrigés, et il y a toujours une chance que les gens cessent d'affiner l'implémentation. En soi, ce n'est pas une raison pour ne pas utiliser un dialecte à implémentation unique de LISP, mais c'est quelque chose à prendre en compte. Un avantage de Scheme et Common LISP est qu'il existe de nombreuses implémentations de ces dialectes. Les deux langues ont publié des normes, donc les implémentations relativement récentes sont susceptibles d'exécuter le même code, principalement. Certaines de ces implémentations existent depuis longtemps, mais sont toujours en cours de développement: ce sont maintenant des implémentations de haute qualité, et elles sont toujours en cours de perfectionnement. (Par exemple, Steel Bank Common LISP - SBCL, mentionné ci-dessus - est extrêmement rapide. Je me demande à quel point il serait facile de rendre LISP basé sur JVM aussi rapide.)

0
Mars

J'ai beaucoup appris des réponses. Merci à tous ceux qui ont contribué à cette conversation enrichissante.

Je devrais mentionner newLISP . Bien qu'il diffère un peu de CL et de Scheme, il implémente de nombreuses fonctions très utiles. Je trouve le serveur http, la fonctionnalité de multi-traitement (Cilk) et les fonctions d'évaluation à distance très propres et faciles à utiliser.

L'exécutable unique est petit, rapide et comprend beaucoup de batteries cool.

0
CyberFonic