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?
Réponses:
Il y a quelques raisons pour lesquelles je travaille à devenir compétent avec Common Lisp.
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.
la source
J'aime Lisp pour ses
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.
la source
(+ 1 n)
voeux, ou même plus pratique(incf n)
?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".
la source
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:
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 ...
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).
la source
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.
la source
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.
la source
M-x eval-region
(oueval-buffer
), mais c'est tout.C-j
( ce qui est moralement équivalent à entrer) et il prend effet immédiatement.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.
la source
La question est le pouvoir. Puissance = Travail (fonctionnalité du programme) / Heure
Tracez une sorte de courbe entre C ++ et Java. Continuez et, à un moment donné, vous trouverez Lisp.
la source
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).
la source
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.
la source
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.PLEASE
?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é.
la source
"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.
la source
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.
la source
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?
la source
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.
la source
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é.
la source
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).
la source