Warum ist Lisp nicht weiter verbreitet? [geschlossen]

50

Ich fange an, anhand der SICP-Videos Scheme zu lernen, und möchte als nächstes zu Common Lisp übergehen.

Die Sprache scheint sehr interessant zu sein, und die meisten Leute, die Bücher darüber schreiben, befürworten, dass sie eine unvergleichliche Ausdruckskraft hat. CL scheint eine anständige Standardbibliothek zu haben.

Warum ist Lisp nicht weiter verbreitet? Wenn es wirklich so mächtig ist, sollten die Leute es überall benutzen, aber stattdessen ist es fast unmöglich, Lisp-Stellenanzeigen zu finden.

Ich hoffe, es ist nicht nur die Klammer, da sie nach einer Weile kein großes Problem mehr sind.

Andrea
quelle
3
xkcd2.heroku.com/297
Michelle Tilley
5
Steel Bank (common) LISP ist tatsächlich beliebter, als Sie sich vorstellen können. LISP-ähnliche Makroprozessoren (z. B. M4) sind ebenfalls weit verbreitet. Sie werden es vielleicht nicht in Ihrer Domain Ihrer Wahl sehen, aber es ist immer noch da draußen (zum Guten oder zum Schlechten).
Tim Post
8
Das jüngste Erdbeben und der Tsunami haben die Klammerfabrik in Japan ausgelöscht. :-(
Oosterwal
1
Welche Version von Lisp sollten wir verwenden? Denken Sie daran, Lisp-Dialekte sind mehr oder weniger inkompatibel.
2
LISP (oder Dialekte) sind alle über den Ort zB AutoLISP- verwendet wird , ein Dialekt von LISP benutzt von Autocad en.wikipedia.org/wiki/AutoLISP oder EMACS en.wikipedia.org/wiki/Emacs_Lisp
Jaydee

Antworten:

68

Ausdruckskraft ist nicht immer ein positives Sprachmerkmal in einem Unternehmensumfeld. Java ist sehr beliebt, weil es leicht zu erlernen, leicht zu schreiben und leicht zu lesen ist. Mittelmäßige Programmierer können in Java immer noch sehr produktiv sein, selbst wenn ihr Code wortreich und unelegant ist.

Darüber hinaus ist es leicht, expressive Sprachen zu missbrauchen. Ein erfahrener Java-Programmierer kann schlecht geschriebenen Code schnell umgestalten. Je ausdrucksvoller die Sprache, desto schwieriger wird es, schrecklichen Code zu verstehen und umzugestalten. LISP-Makros sind ein gutes Beispiel. Makros sind mächtige Werkzeuge in den richtigen Händen. In den falschen Händen können sie zu verwirrendem und schwer zu debuggendem Code führen.

LISP ist eine riskante Wahl für Führungskräfte. Wenn etwas schief geht, gibt niemand dem Management die Schuld, eine beliebte objektorientierte Sprache gewählt zu haben, die von einem großen Unternehmen wie Oracle oder Microsoft unterstützt wird. Es ist viel einfacher, Programmierer mit Erfahrung in populären, leicht zu erlernenden Sprachen einzustellen.

Selbst fortschrittliche Unternehmen, die eine leistungsfähigere Sprache verwenden möchten, entscheiden sich normalerweise nicht für LISP. Dies liegt daran, dass viele der neueren Sprachen versuchen, Kompromisse einzugehen, indem sie leistungsstarke Funktionen von LISP entlehnen und gleichzeitig für die breite Masse leicht zu erlernen sind. Scala und Ruby folgen diesem Modell. Schlechte Programmierer können sie schnell abrufen und weiterhin denselben mittelmäßigen Code schreiben, den sie in Java geschrieben haben. Gute Programmierer können die erweiterten Funktionen nutzen, um schönen Code zu schreiben.

Klammern sind nicht das Problem. Haskell ist eine unglaublich leistungsfähige und ausdrucksstarke Sprache mit einer ähnlichen Syntax wie Python oder Ruby und wurde aus den gleichen Gründen wie LISP nicht häufig verwendet.

Trotz alledem hoffe ich ...

Clojure hat die Chance, populär zu werden. Es läuft auf der JVM, arbeitet hervorragend mit Java zusammen und vereinfacht die gleichzeitige Programmierung erheblich. Dies sind alles wichtige Dinge für viele Unternehmen.

* Dies ist meine Perspektive als professioneller JVM-Programmierer mit Erfahrung in Java, Clojure, JRuby und Scala.

U / min dbyrne
quelle
24
Der Einwand gegen die Schwierigkeit, qualifizierte Programmierer zu finden, ist ein bisschen wie ein Hund, der seinen Schwanz jagt. Wenn Lisp weiter verbreitet wäre, wäre es einfacher, gute Programmierer zu finden.
Andrea
2
@ Andrea Das ist definitiv wahr. Es ist allerdings schwieriger zu lernen, was ebenfalls zum Problem beiträgt. Mir ist klar, dass dies eine kontroverse Meinung sein könnte, da viele Professoren das Schema als Muttersprache unterrichten.
Dbyrne
8
Ja, APL ist ein hervorragendes Beispiel für eine ausdrucksstarke Sprache. Auch ein gutes Beispiel, warum Ausdruckskraft nicht das Wichtigste ist;)
dbyrne
9
Ich glaube nicht, dass diese Definition wirklich vermittelt, was Ausdruck bedeutet. Bevor ich eine Sprache zum Ausdruck bringe, würde ich persönlich sicherstellen, dass ich lesen kann, was ich geschrieben habe. Die Verwendung nichttrivialer Logik in der Schleifeninitialisierung in C kann beispielsweise einige Codezeilen einsparen, ist jedoch nicht ohne Weiteres verständlich. Andererseits kann ein Listenverständnis in Python einige Zeilen speichern und besser lesbar sein. Sie haben also tatsächlich einen Weg gefunden, das, was Sie meinten, präziser auszudrücken. Wenn es nicht lesbar ist, haben Sie überhaupt keine Möglichkeit, etwas auszudrücken.
Andrea
3
Ich glaube, ich komme vielleicht als jemand raus, der lispeln nicht mag. In Wahrheit liebe ich es. Clojure ist eine unglaubliche Sprache. Ich denke, es ist eine sehr gute Wahl für eine bestimmte Art von Unternehmen. Ich möchte nur darauf hinweisen, dass es viele Unternehmen gibt, bei denen dies keinen Sinn ergibt, und dass die Verwendung von Scala eine viel praktischere Wahl ist.
Dbyrne
17

Warum ist Lisp nicht weiter verbreitet? Wenn es wirklich so mächtig ist, sollten die Leute es überall benutzen,

Wenn Sie der Meinung sind, dass Sprachen aufgrund ihrer technischen Vorzüge ausgewählt wurden, werden Sie mit einer Enttäuschung konfrontiert, die Sie um den Verstand bringt.

Solche Entscheidungen werden basierend auf Strippers And Steaks getroffen . Microsoft kann sie sich leisten. Oracle kann. Sun gab so viel Geld für Java aus, dass sie bankrott gingen. Zweimal. Eine dezentrale, heterogene, freiwillige Gemeinschaft kann damit nicht konkurrieren.

stattdessen ist es fast unmöglich, beispielsweise Stellenanzeigen von Lisp zu finden.

Witzigerweise sagen die Lisp-Firmen genau das Gegenteil: Sie haben ständig offene Stellen, können aber nicht genug Leute finden, um sie zu besetzen. (Gleiches gilt für Haskell, ML, O'Caml, Forth, Smalltalk, ...)

Jörg W. Mittag
quelle
3
Wo ich lebe (Italien) Ich bezweifle, dass es überhaupt eine Lisp-Firma gibt ...
Andrea
1
Welche großen Unternehmen setzen auf Ruby, Python und JavaScript? JS ist ein zugegebenermaßen spezieller Fall, aber die anderen beiden scheinen ohne massive Unterstützung von Unternehmen / Anbietern sehr beliebt zu sein
Ben Hughes,
Ja, das gilt auch für andere Sprachen. Die meisten guten COBOL-Codierer haben bereits Jobs und lesen die Anzeigen sowieso nicht. Warum Werbung machen?
Bo Persson
Was wirklich? Ich werde in jeder Sprache codieren, die nicht zum Mainstream gehört, obwohl Haskell mir über den Kopf geht. Die kleine Menge an Code, die ich darin codiert habe, ist sehr schön, aber ohne einen guten Mentor habe ich keine Ahnung, wann ich die einzelnen Monaden und die anwendbaren Functors verwenden soll.
aoeu256
9

Ich habe keine Erfahrung in der Arbeit für ein echtes Unternehmen, aber ich weiß, warum es mir schwer gefallen ist, LISP anzuwenden.

Dies erinnert mich zunächst an diesen Blog-Beitrag: http://steve-yegge.blogspot.com/2006/04/lisp-is-not-acceptable-lisp.html

Das Hauptproblem, das ich mit Lisp habe, ist die "Welche Lisp" -Frage. Ich arbeite normalerweise unter Linux als Hauptplattform, aber die Dinge, die ich mache, müssen mit Windows kompatibel sein. Das heißt, wenn ich eine zu verwendende Technologie evaluiere, muss es mir das Leben erleichtern, wenn ich mit zwei völlig unterschiedlichen Betriebssystemen arbeite. Ich mag diese Anforderung nicht, aber sie für ein reales Projekt zu verwenden, ist eine Anforderung. Jetzt verwende ich Sprachen, die unter Windows nicht sehr gut unterstützt werden, für meine eigenen Nebenprojekte. Da ich jedoch nie die Möglichkeit habe, ein großes Softwareprojekt darin zu schreiben, habe ich nicht die erforderliche Erfahrung.

Als ich jetzt versuchte, eine funktionale Sprache zu lernen, wollte ich unbedingt Common Lisp lernen. Es schien das Richtige zu sein. Ich habe angefangen, Practical Common Lisp als Ausgangspunkt zu lesen, da ich die integrierten Funktionen wirklich nicht kannte und ein Projekt brauchte, an dem ich in Lisp arbeiten konnte. S-Ausdrücke waren schön und einfach. Alle diese Klammern waren unglaublich schön für mich, da klar war, was genau im Code vorging.

Also versuche ich mein erstes Programm in Lisp außerhalb des Buches zu schreiben. Ich wollte ein Befehlszeilentool, das Codezeilen zählt und triviale Zeilen aus der Codezählung entfernt. Nicht das nützlichste Werkzeug, aber es macht Spaß, es zu tun. Es beinhaltet Dateizugriff, ein bisschen Analysieren und Zählen. Ich hatte ungefähr eine Woche zuvor dasselbe Tool in Python implementiert.

Ich muss auf Befehlszeilenargumente zugreifen. Dann erfahre ich, dass es keine Standardmethode gibt, um Befehlszeilenargumente abzurufen. Sie sind alle nicht standardmäßige Funktionen. Es ist überhaupt nicht plattformübergreifend. Von da an wird es meistens nur schlimmer, da in der Sprache nicht viele Bibliotheken eingebaut sind. Am Ende bin ich zu Haskell gewechselt und bin nicht weit in Common Lisp vorgedrungen (daher sind meine Beschwerden möglicherweise nicht einmal gültig).

Diese Art von Nicht-Standard-Dingen hat mich in der Vergangenheit immer gequält. C ++ hat das gleiche Problem, aber mit Bibliotheken wie Boost können Sie diese Schwächen umgehen.

Es hilft auch nicht, dass die Lisp-Syntax für alles andere als S-Ausdrücke etwas hässlich ist.

Sternberg
quelle
1
PLT Racket (ehemals PLT Scheme) läuft sowohl unter Linux als auch unter Windows.
Larry Coleman
Interessanterweise würde ich erwarten, dass Common Lisp für reale Anwendungen viel standardmäßiger und benutzerfreundlicher ist als Scheme. (Ich lese gerade Practical Common Lisp.)
Giorgio
Ich empfehle Ihnen, dass Sie sich für Haskell entschieden haben (was meiner Meinung nach eine bessere Sprache ist), aber was ist mit Clojure? Es läuft auf der JVM, sollte also portabel sein und Zugriff auf alle benötigten Bibliotheken haben.
Andres F.
Befehlszeilenargumente sind in C ++ schwierig zu verwenden? "Ja wirklich?"
Nick Keighley
Ist es nicht trivial, einen Cross-Complier zu erstellen, der Lisp in Scheme in Clojure ändert? Warum benutzen die Leute sie nicht?
aoeu256
8

IMO, es liegt hauptsächlich an:

  • Schlechte Bibliotheksunterstützung. Sicher, es gibt jetzt Quicklisp, mit dem sich Bibliotheken leicht installieren lassen, aber es gleicht nicht aus, dass sie immer noch ziemlich wenige sind und einige schlecht dokumentiert oder nicht sehr gut gewartet sind. Im Vergleich zu Python besteht eine gute Chance, dass das Schreiben einer nicht trivialen Lisp-Anwendung (unabhängig vom jeweiligen Dialekt) wahrscheinlich immer noch die Neuerfindung mindestens eines Teils eines Rads oder zweier Teile erfordert.
  • Mangelnde Vertrautheit mit dem von Entwicklungswerkzeugen übernommenen Modell. Die meisten Leute, die ich kenne, sind ziemlich eingeschüchtert, weil sie SLIME und Emacs verwenden müssen, was für Leute, die mit Eclipse und Visual Studio vertraut sind, verständlich ist. Ich glaube, es gibt zwei Eclipse-Plugins, von denen ich vor ein paar Jahren nur eines ausprobiert habe und es war ziemlich fehlerhaft. Das gesamte Lisp-Ökosystem scheint auf halbem Weg zwischen den Tagen, als es Teil eines vollwertigen Lisp-Betriebssystems war, und dem modernen Standard einer anderen Sprache zu stecken. Das Erlernen von Lisp beschränkt sich nicht nur auf das Erlernen einer neuen Sprache. Sie müssen auch eine ganz andere Art des Arbeitens und Denkens erlernen, und obwohl dies in Ordnung ist, wenn Sie es als Hobby tun, ist es fraglich, ob es sich lohnt, es in einer anderen Sprache zu tun Geschäft.

Die Dinge sehen etwas besser aus, vor allem, wenn Clojure da ist.

donkey_lz
quelle
1
"Die meisten Leute, die ich kenne, sind ziemlich eingeschüchtert, weil sie SLIME und Emacs verwenden müssen, was für Leute, die an Eclipse und Visual Studio gewöhnt sind, verständlich ist.": Immer wieder habe ich das Gefühl, dass Lisp für Elite ist.
Giorgio
2
"Man muss auch eine ganz andere Art des Arbeitens und Denkens lernen, und obwohl dies in Ordnung ist, wenn man es als Hobby macht, ist es fraglich, ob es sich lohnt, es in einem Unternehmen zu tun." Grund genug?
Giorgio
Wurde diese "Produktivitätssteigerung" nachgewiesen? Es ist mir sicher nicht klar (ja, ich habe in einem Lisp-Dialekt programmiert). Es gibt keine Silberkugeln.
Nick Keighley
5

Ich habe LISP vor einer Milliarde Jahren am College gelernt.

LISP ist wie FORTH großartig für Logik. Bei den meisten Programmen geht es jedoch nicht um Logik, sondern darum, Daten auf langweilige mechanische Weise zu manipulieren. Zum Beispiel gibt es zur Zeit keine Möglichkeit, die numerische Ausgabe richtig auszurichten.

In LISP geht es um verschachtelte Funktionen, und die Leute denken einfach nicht so. Sie denken in DO A, B, C, D, dann E. Nicht tun A, was B und C beinhaltet, dann D und E. Dies beinhaltet eine Art Nebenläufigkeit, die verwirrend ist. Abgesehen von vordefinierten Aufgaben wie "Einkommensteuererklärung einreichen" denken die Menschen nicht gleichzeitig, sondern nacheinander. Aus diesem Grund dominieren heute die Verfahrenssprachen.

Infolgedessen können Produral-Codes wie Java und C leicht ins Englische übersetzt werden. LISP-Code kann nicht; Keine menschliche Sprache ist so strukturiert.

Es ist also großartig für die Problemlösung, aber die Problemlösung ist bei der Programmierung nicht sehr wichtig. Dateneingabe, Validierung, Ausgabeformatierung, bei denen LISP furchtbar schwach war.

Andy Canfield
quelle
7
Problemlösung ist alles, was wir tun. Das Manipulieren von Daten ist in Java oder C nicht einfach. Das Manipulieren von Daten in Konsolen ist in Lisp und anderen funktionalen Sprachen viel einfacher. Die meisten Operationen an Daten sind exakt gleich und es ist egal, in welcher Reihenfolge Sie sie verarbeiten. Dies kann einfach mit einem Aufruf der Zuordnung und einem Funktionszeiger erfolgen. Ich würde auch sagen, dass es einfacher ist, in verschachtelten Funktionen als in prozeduralen Funktionen zu denken (da eine Ihr Ziel und die anderen Details zur Ausführung dieses Ziels angibt), aber ich habe keinen Beweis dafür. Auf jeden Fall würde ich nicht sagen, dass dies der Grund ist, warum LISP nicht verwendet wird.
Sternberg
4
Beim Programmieren geht es nicht um Problemlösung? Ich glaube nicht Übrigens glaube ich auch nicht, dass man im College eine Sprache lernen kann .
Adam Arold
+1, klingt für mich sehr plausibel, die kein Lisp kennen. Ich würde den gleichen Grund angeben, warum C / Java für Lösungen in Unternehmensgröße besser ist als Python.
Jonas Byström
Dies ist die bisher einzige Antwort, die das große Thema funktional oder prozedural aufwirft. Vergessen wir jedoch nicht, dass prozedurales Denken dazu neigt, Datenflocken in VARs zu basteln, wo immer Sie sie von vielen Stellen aus anfassen können und Threads Synchronisationsprobleme verursachen. Functional leidet nicht so schnell darunter, gut geschriebene Functional leidet überhaupt nicht.
Maxpolk
1
Ein Programmierer fragte mich einmal, wie man eine for-Schleife am besten anhand eines Datenflussdiagramms ausdrückt. Für solche Menschen gibt es keinen Grund, prozessfreie Sprachen zu verwenden. Die denken in FORTRAN.
Nick Keighley
5

Ich denke, ein Problem mit Lisp, das noch nicht erwähnt wurde, ist, dass es für einen mittelmäßigen oder unerfahrenen Programmierer (wie ich es selbst zugegeben habe) schwierig sein kann, zu sehen, wie Sie Lisp-Code in ein großes Programm verwandeln. Es ist einfach zu schreiben, aber schwer zu entwerfen. Ich denke nicht, dass eines der Konzepte besonders schwierig ist, aber die DIY-Mentalität ist so stark, dass ich oft nicht weiß, wo ich überhaupt anfangen soll.

Mit einer OOP-Sprache wie Java oder C # können Sie das Typsystem verwenden, um sich in Richtung eines Arbeitsmodells zu steigern und dieses aufzubauen. Mit Lisp (oder Lua oder Javascript für diese Angelegenheit) gibt es die Vorstellung, dass Sie rausgehen und es tun können, wie Sie wollen. Wenn Sie OOP möchten, erstellen Sie einfach Ihr eigenes OOP-System! Abgesehen davon, dass Sie Ihr eigenes OOP erstellen oder das eines anderen lernen, ist dies eine neue Barriere über der Sprache, bevor Sie brauchbare Programme erhalten. Außerdem habe ich immer das Gefühl, dass die OOP in Lisp oder Lua nicht wirklich da ist. Ich könnte sie einfach ignorieren, wenn ich es wirklich wollte. Was ist der Sinn?

Kurz gesagt, ich denke, das Programmieren in Lisp erfordert viel Disziplin, und das ist sehr schwer zu bekommen. Stark typisierte Sprachen und OOP-Sprachen bieten beide eine Art integrierte Disziplin, sodass der Programmierer seine begrenzten Reserven auf das Beenden von Projekten konzentrieren kann, anstatt die Sprache zu optimieren.

EDIT: Als Analogie, die mir gerade aufgefallen ist, ist es, als müssten Sie Holzarbeiten erledigen und zwei Personen bieten Ihnen ihre Werkzeugkästen an. Die Werkzeuge einer Person sind irgendwie mies, würden aber im Grunde genommen die Arbeit mit ein wenig Mühe erledigen. Die andere Person hat einen großen Teilebehälter, verspricht jedoch, dass Sie diese Teile kombinieren können, um die besten Werkzeuge zu erhalten, die Sie jemals verwendet haben, die perfekt zu Ihrem Griff passen und von bester Qualität sind. Sie müssen sie nur zuerst bauen.

CodexArcanum
quelle
2
Zumindest Common Lisp ist explizit eine OO-Sprache: Das Common Lisp Object System ist Teil des Standards.
Frank Shearar
Es stimmt, und meines Wissens ist es sehr mächtig, aber es erscheint mir als Nebenerscheinung der Sprache. Es ist nicht wie in Java, wo Sie Objekte von Tag 1 an verstehen müssen. Praktisch Common Lisp geht erst in Kapitel 16 auf CLOS ein. Ich bin möglicherweise auch nur auf statische Typisierung eingestellt, obwohl ich dynamisch getippte Sprachen nicht mag .
CodexArcanum
In Lisp können Sie Verschlüsse (Let-over-Lambda) anstelle von Objekten für leichtes OOP verwenden, aber ich glaube, es ist einfach, ein Upgrade für die Verwendung von OOP über CLOS durchzuführen.
aoeu256
2

Ich habe mich schon lange darüber gewundert und sogar auf Lisp-Konferenzen versucht zu verstehen, was diese "dunkle Seite" von Lisp ist, die alle davon abhält, es zu übernehmen.

Ich habe keine vollständige anständige Antwort gefunden.

Unwissenheit mag der Grund für die fehlende Popularität sein, aber was mich mehr verwundert, ist, dass selbst wer mit Sicherheit etwas über Lisp weiß (zum Beispiel Google - Peter Norvig arbeitet für sie), es nicht benutzt.

Die einzige teilweise Erklärung, die mir einfällt, ist, dass die meisten großartigen Ideen von Lisp mittlerweile alltäglich sind. Die einzig wirklich wichtige fehlende (eine äußerst wichtige IMO) ist die Leichtigkeit der Metaprogrammierung.

Leider sehe ich keine einfache Möglichkeit, dieses Konzept für andere Sprachen zu adsorbieren, da die Metaprogrammierung eine homoikonische und reguläre Sprache erfordert (ich spreche von der allgemeinen Metaprogrammierung, nicht von der abgedrehten Nur-Template-Version). Mit anderen Worten, es erfordert grundsätzlich den Lisp-Ansatz für die Syntax: Code ist Daten und Daten sind Code. Das Schreiben von Code in einer syntaxreichen Sprache, die einen AST manipuliert, ist schwieriger, da Sie zwei Sprachen beherrschen müssen: das Schreiben des Codes und das Schreiben des AST. Dies ist besonders schwierig, wenn Ihr AST fest und auch komplex und unregelmäßig mit vielen verschiedenen Knotentypen ist. Lisp hat stattdessen einen einigermaßen regulären (und erweiterbaren!) AST und Sie codieren normalerweise bereits, indem Sie den AST direkt schreiben.

Die Metaprogrammierung ist von Natur aus schwieriger (und die Meta-Metaprogrammierung noch schwieriger), und die meisten Programmierer und Manager bevorzugen anscheinend nur die Antwort "Niemand würde das brauchen".

Besonders schade finde ich, dass "neue" Sprachen goletztendlich textbasierte Metaprogrammierung verwenden, wenn sie benötigt werden (externe Codegeneratoren, die Textdateien schreiben) und "Magie" (dh der Compiler kann das, was die Programmierer nicht können).

Ich denke, die Lösung für das Komplexitätsproblem sind leistungsfähige Tools und Bildung. Der Trend geht offenbar stattdessen zu stumpfen Werkzeugen und so zu tun, als sei das Problem nicht vorhanden.

6502
quelle
+1 für "Ich denke, die Lösung für das Komplexitätsproblem sind leistungsstarke Tools und Bildung."
Giorgio
Nach 50 Jahren ist die Ausrede der Unwissenheit ziemlich dünn geworden
Nick Keighley,
1
@ NickKeighley: Kommt drauf an. Bis heute wissen die meisten Programmierer wirklich nichts über Lisp (zum Beispiel hört man Lisp die meiste Zeit als funktionale Sprache beschrieben). Selbst unter denen, die Lisp "kennen", hat fast niemand die Makroidee mit ausreichenden Details gesehen (ich spreche nicht über die heruntergekommene Version des Schemas, sondern über die volle algorithmische Leistungsfähigkeit mit der Bequemlichkeit des Quasi-Zitierens, wenn das besser passt).
6502
@ 6502: Obwohl IMO Lisp nicht rein funktional ist, unterstützt es die funktionale Programmierung viel besser als viele gängige Sprachen wie C #, Java, C ++ und so weiter. Für viele Programmierer bedeutet FP, von Zeit zu Zeit nur einen Lambda-Ausdruck zu verwenden: Diese Programmierer werden Lisp, Clojure oder Haskell nicht verpassen. Also würde ich hinzufügen: (1) Lisp unterstützt FP ziemlich gut und funktionierende Programmierer würden davon profitieren, aber (2) Unkenntnis über FP und seine Vorteile ist ein Grund, warum Lisp nicht häufiger verwendet wird.
Giorgio
1
@ 6502: Listen als grundlegende Datenstruktur und die üblichen Funktionen höherer Ordnung in Listen zu haben, ist ebenfalls eine Funktion, die in Javascript fehlt. Und, soweit ich mich erinnern kann, hat Javascript auch die Dualitätsaussage / den Dualitätsausdruck. Ich würde Lisp (Common Lisp) definitiv ein paar Schritte weiter in Richtung FP setzen als Javascript oder Python. Damit meine ich nicht, dass Common Lisp eine rein funktionale Sprache ist, ich stimme zu, dass es ein Multiparadigma ist, aber es unterstützt FP viel besser als andere Multiparadigmasprachen.
Giorgio
1

Es scheint, dass selbst CL keine sehr gute Bibliotheksunterstützung hat. Zumindest nach Leuten, die von Lisp zu Python gewechselt sind:

http://www.redmountainsw.com/wordpress/archives/reddit-switches-from-lisp-to-python

Persönlich kenne ich ein Schema und spiele gerne damit, kann mir aber nicht vorstellen, ein nicht triviales Projekt in dieser Sprache zu machen.

Nemanja Trifunovic
quelle
2
Das ist nicht mehr wahr. Quicklisp hat dieses Problem gelöst.
2
Erwähnenswert ist auch, dass mit CFFI jede C-Bibliothek von Common Lisp verwendet werden kann. CFFI ist gut dokumentiert und funktioniert gut. Auf der anderen Seite ist Lisp ohnehin nicht die richtige Wahl, wenn Sie ein paar Stunden damit verbringen, Wrapper für C-Funktionen zu schreiben, was einen großen Einfluss auf Ihr Projekt hat.
Larry Coleman
Ich habe ein nicht triviales Projekt in Scheme durchgeführt und kenne ein Unternehmen, das Scheme (Chicken Scheme) für mehrere Produkte verwendet.
Giorgio
1

Mächtig zu sein, bedeutet nicht notwendigerweise, dass es weit verbreitet ist. Kennen Sie den Begriff "Für den alltäglichen Fall optimieren"? Leider haben schon viele gesagt, dass Mittelmäßigkeit, wenn sie konsequent versichert wird, für Menschen viel besser ist als große Hits mit vielen Misserfolgen dazwischen.

Dies ist nicht nur bei Lispeln der Fall, sondern bei vielen Technologien. Ein guter Touch über die Unix-Textverarbeitungswerkzeuge awk, sed und perl erspart Ihnen Tage des Programmierens. Leider habe ich gesehen, dass die Leute Tage damit verbracht haben, solche Aufgaben in anderen Werkzeugen schlecht auszuführen, was mit diesen Werkzeugen in wenigen Minuten effizienter hätte erledigt werden können. Aber wenn man sein ganzes Leben in einer Sonnenfinsternis verbringt, wird man den Wert dieser Dinge niemals zu schätzen wissen. Sie schreiben vielleicht ein riesiges Programm mit Lesbarkeit und Wartbarkeit und all dem, aber was bringt es, ein solches Programm zu schreiben, ohne es zu schreiben?

Ein weiterer Aspekt beim Entwerfen von Werkzeugen heutzutage ist, wie nützlich sie sind, um sie direkt zur Lösung eines Problems zu verwenden. Sie können nicht zu generisch bauen und dann sagen, Sie werden das alles durch Bibliotheken und Frameworks absichern. Es ist ein wenig schwierig, die Dinge auf diese Weise zu lösen. Ein gutes Werkzeug passt sich gut der Umgebung und den damit verbundenen Problemen an. Aus diesem Grund bleiben Tools wie PHP, Perl und AWK trotz endlosem Trolling und Bashing weiterhin relevant, da sie zu nützlich sind, um sie wegzuwerfen, und oftmals viel Arbeit leisten als eine allgemeine Sprache mit vielen eingeschraubten Bibliotheken und Frameworks.

In ähnlicher Weise werden Sie feststellen, dass Sprachen wie Java / Python sehr gut sind und ich würde für bestimmte Aufgaben das Beste sagen. Besonders Python ist sehr gut und leicht zu lernen und zu schreiben. Auch diese Sprachen sind wirklich gut, wenn Ihre Datenendpunkte Standard sind. Eine Art Datenbank oder XML oder Daten dieser Art. Grundsätzlich strukturierte Daten.

Lisp wird noch lange da sein, aber nicht unbedingt weit verbreitet. Wie Sie sehen werden, hat jedes Werkzeug seine eigene Nische. Und sie lösen bestimmte Probleme sofort. Ich denke und ich bin mir sicher, dass Lispel in Bereichen und Problemen gut abschneidet, für die es eine gute Lösung sein soll.

kamaal
quelle
+1 für das Zitieren des Prinzips "Optimieren für den allgemeinen Fall".
Giorgio,
Ja, aber LISPs Closures sind eine Optimierung für den allgemeinen Fall von Objekten. Außerdem habe ich mich gefragt, ob jemand Änderungen an seiner LISP-Codebasis vornimmt, indem er sie als Baum behandelt und wie JQuery for HTML Abfragen darauf ausführt.
aoeu256
1

Bei der Webentwicklung mit Lisp-Dialekten kann es ein kleines Problem mit Hühnchen und Eiern geben - weil nur wenige Leute Lisp verwenden, Hosts es entweder nicht zulassen oder nicht einfach machen und weil es nicht einfach ist, wenige Leute benutze es. Tatsächlich kann es einfacher sein, Lisp auf einem Host zum Laufen zu bringen, als Sie vielleicht denken, selbst wenn es etwas mehr Arbeit erfordert als der standardmäßige PHP-Service. Ich habe vor kurzem mit ein wenig Aufwand Guile- Scheme-Apps hier zum Laufen gebracht .

gcbenison
quelle
0

IMO, es ist meistens eine Frage des schlechten Timings: Lisp war alt (und per Definition nicht mehr aufregend), lange bevor es für die meisten Menschen oder Verwendungszwecke praktisch wurde. Clojure (zum Beispiel) hat eine viel bessere Chance. Ihr Erfolg wird wesentlich mehr davon abhängen, als neu, modisch und cool wahrgenommen zu werden, als alles, was so praktisch ist wie die Interoperation mit Java (und allem anderen, was auf der JVM läuft).

Jerry Sarg
quelle