Was ist so toll an Lisp? [geschlossen]

103

Ich weiß nicht genug Lisp, um zu sagen, ob es gut oder schlecht ist. Es scheint, als ob jeder, der Lisp benutzt hat, es liebt, aber die beliebtesten Sprachen dieser Tage stammen von C.

Was ist an Lisp so großartig und warum wird es nicht mehr verwendet? Gibt es etwas einfach Schlechtes an Lisp (außer der unaufhörlichen Anzahl von Klammern)?

Darrell Brogdon
quelle
5
"Die beliebtesten Sprachen stammen heutzutage nur oberflächlich von C ab". Wenn Sie sich die Funktionen ansehen, anstatt nur geschweifte Klammern zu verwenden, werden Sie feststellen, dass moderne Sprachen nicht so weit von Lisp entfernt sind und immer näher kommen. Ein Programm in C # oder Python oder Ruby sieht viel mehr nach Lisp aus als nach C.
Ken
11
Ein gutes Beispiel für eine Sprache, die wie C aussieht, sich aber eher wie Lisp verhält, ist JavaScript. Ein Großteil des Designs ähnelt dem Schema.
JAL
Guter Punkt, Ken: Eine zunehmende Anzahl von Funktionen, die früher nur für Lisp verfügbar waren (erstklassige Funktionen, Funktionen als Daten, sogar Makros), kommen in anderen Sprachen an. Und das Feedback ist keine Einbahnstraße: Lisp entwickelt neue Techniken und Redewendungen zur Erkennung anderer Sprachen (z. B. CLOS als Reaktion auf den Erfolg des objektorientierten Paradigmas).
Itowlson
6
Lisp hat Ideen von überall her übernommen, aber CLOS als Antwort auf was? CLOS (1986-1987) war weitgehend eine Standardisierung früherer Objektsysteme für Lisp, z. B. Lisp Machine Lisp (1980), einschließlich Flavours. Ich glaube nicht, dass "der Erfolg des OO-Paradigmas" 1980 noch offensichtlich war: "C with Classes" war erst ein Jahr alt (und noch 3 Jahre von der Umbenennung in "C ++" entfernt), und ich weiß es nicht dass Simula-67 jemals sehr beliebt war. Lisp verfügt über eine Reihe weiterer erweiterter Funktionen, über die beliebte Sprachen heutzutage nicht verfügen. OO ist zufällig erfolgreich geworden, aber Lisp hat es nicht bekommen, weil (oder wann) es beliebt war.
Ken
Ich glaube nicht, dass jeder, der Lisp benutzt hat, es liebt. Meine Erfahrung ist anders. Versuchen Sie, Informatikstudenten zu fragen, die mit Scheme begonnen haben. Wahrscheinlich werden ungefähr 10% es lieben, 30% werden es respektieren und 60% werden es hassen. Ich glaube auch nicht, dass die beliebtesten Sprachen von C. abstammen
Rainer Joswig

Antworten:

59

Lisp ist der Chuck Norris der Programmiersprachen.

Lisp ist der Balken, an dem andere Sprachen gemessen werden.

Das Wissen um Lisp demonstriert die Erleuchtung der Entwickler.

Ich habe von 3 Schwächen (und ihren Gegenargumenten) gehört:

  1. Dynamische Eingabe.

    Es gibt ein Argument für statisch typisierte Sprachen, bei dem es darum geht, dem Compiler genügend Informationen zu geben, um eine bestimmte Fehlerklasse abzufangen, damit sie zur Laufzeit nicht auftreten. Aber Sie müssen noch testen.

    Dieser Artikel spricht sich für dynamisches Tippen und weitere Tests aus: Starkes Tippen vs. Starkes Testen .

  2. Schwer zu erlernen.

    Das besteht eigentlich aus zwei Teilen: Lernen und Werkzeuge.

    Lisp braucht einige Mühe, um wirklich "zu bekommen", aber es lohnt sich, denn wenn Sie Lisp lernen, werden Sie wirklich ein besserer Programmierer in anderen Sprachen. Wenn Sie zum Beispiel wirklich Schließungen "bekommen", werden Sie die inneren Klassen von Java verstehen. Und sobald Sie erstklassige Funktionen "erhalten", werden Sie jedes Mal depressiv, wenn Sie eine Sprache ohne diese verwenden.

    Ich habe The Little Schemer gelesen und lese Practical Common Lisp , die beide ausgezeichnet sind.

    Als nächstes sind die Werkzeuge. Ich bin auf einem Mac, also habe ich mich auf Aquamacs Emacs (macht Emacs für Anfänger lebenswert) und Steel Bank Common Lisp (SBCL) konzentriert.

  3. Mangel an Bibliotheken.

    Ich kann es noch nicht genau sagen, aber ich bezweifle es. Für das Erstellen von Websites scheinen Hunchentoot und Elephant eine gute Reihe von Tools bereitzustellen. Aber ich sehe Lispers wirklich nicht, die sich über den Mangel an Bibliotheken beschweren (vielleicht weil Lisp so mächtig ist, dass sie einfach nicht gebraucht werden?).

Rickmode
quelle
4
An Adresse (3) - Haben Sie sich Clojure angesehen?
Viksit
5
"Aber ich sehe Lispers wirklich nicht, die sich über den Mangel an Bibliotheken beschweren (vielleicht weil Lisp so mächtig ist, dass sie einfach nicht gebraucht werden?)." Ich würde die letzte Aussage auf "(vielleicht weil Lisp so mächtig ist, dass sie für SIE einfach nicht benötigt werden?) Korrigieren." Das macht einen großen Unterschied.
Agnius Vasiliauskas
49
Sagt nichts, warum Lisp großartig ist, stimme von mir ab.
Kilon
30
Abgestimmt, weil "X ist großartig! X ist großartig! X ist wie Y, was auch großartig ist, weil ich sage, dass es großartig ist!" ist keine Antwort auf "Warum wird X als großartig angesehen?". Der politische Bezug ist ebenfalls unangemessen und nicht hilfreich (die meisten Leute halten Libertarismus nicht einmal für eine gute Idee). Die drei Punkte sind hilfreich, aber ich wünschte, sie wären nicht "Es hat Schwäche A ... Aber es ist eigentlich nicht einmal eine Schwäche!".
Superbest
1
Lisp ist der Chuck Norris der Programmiersprachen. Das macht es so gut. Verstanden. Abgestimmt.
NiCk Newman
71

"Lisp ist eine programmierbare Programmiersprache."
- John Foderaro, CACM, September 1991

Hier ist meine Ansicht:

An der Oberfläche ist Lisp eine schöne, einfache funktionale Programmiersprache. Es gibt fast keine Syntax und alle Teile passen auf logische Weise zusammen.

Wenn Sie etwas tiefer gehen, SICP lesen und einen Metacircular-Evaluator schreiben, entdecken Sie zwei Dinge: Erstens ist der gesamte Interpreter (mit nur wenigen Grundelementen) kaum eine Code-Seite und zweitens die Beziehung zwischen Code und Daten ermöglicht elegante Programmiertechniken.

Sobald Sie dies vollständig aufgenommen haben, scheint es, als wären andere Sprachen in Stein gemeißelt, wenn Sie nur ein paar Dinge sagen können. Lisp kann jede Abstraktion überhaupt erstellen, wenn Sie Syntax und Semantik dafür definieren können.

Josh Lee
quelle
1
Sie können theoretisch jede Sprache wie Rust, Ruby, C, Java, Python, Erlang in Lisp einbetten. Die S-Expression-Version von Python (Hy) und die von Rust heißt also (Risp) [obwohl ich nicht weiß, wie stabil diese sind]. Wenn Sie Code in Hy anstelle von Python schreiben, können Sie Makros und strukturelle Bearbeitungen wie parinfer / paredit ( shaunlebron.github.io/parinfer ) ausführen . Mit Makros können Sie Ihre eigenen DSLs in Lisp einbetten. Sie können auch verwendet werden, um langsamen Code über Compilermakros in schnellen Code umzuwandeln. Sie können Python (Hy) -Code auch in Rust (Risp) umwandeln, indem Sie den Sexp-Baum transformieren.
aoeu256
Ich habe dieses Sprichwort auch mehrmals gehört. Würden Sie ein bisschen mehr @ aoeu256 erörtern?
Student
65

Lisp ist gut, weil es eine sehr minimale, einfache, reguläre Syntax hat.

Lisp ist schlecht, weil es eine sehr minimale, einfache, reguläre Syntax hat.

Daniel Earwicker
quelle
4
Was ist schlecht an einer minimalen, einfachen, regulären Syntax?
oskarkv
26
@oskarkv - Eine völlig normale minimale Syntax bedeutet, dass keine Tendenz zu einer bestimmten Verwendung besteht. Das hört sich gut an, bis Sie auf das Pareto-Prinzip stoßen: Es ist effizienter, sich auf die am häufigsten auftretenden Fälle zu konzentrieren und nicht mehr so ​​zu tun, als wären alle Fälle gleich wahrscheinlich. Wenn 20% Ihrer Kunden in NYC und 80% in LA sind, ist es sinnvoll, irgendwo an der Grenze zwischen Kansas und Oklahoma auf dem Zaun zu sitzen, um geografisch "unvoreingenommen" zu bleiben? Oder sinnvoller, dorthin zu gehen, wo die meisten Kunden sind? Wir bevorzugen Sprachen, die ihre Funktionen auf wahrscheinliche Probleme ausrichten.
Daniel Earwicker
4
Die Lisp-Syntax ist wirklich gut. Ich habe Haskell nach Clojure gelernt, aber bis dahin fühlte sich sogar Haskells Syntax wie ein Hindernis an. Die Gleichmäßigkeit von Lisps Sonnensteuer ist großartig. Ich weiß also nicht genau, von welcher Voreingenommenheit Sie sprechen. Neigung zur Inflexibilität? Hört sich schlecht an.
oskarkv
3
Es klingt schlecht, wenn Sie es so sagen. Ich habe es nicht so ausgedrückt! Wie wäre es mit einer Tendenz zu den häufigsten Ereignissen, den wahrscheinlichsten Situationen? Dies sind (natürlich) relative Begriffe, es kommt also darauf an, was Sie tun. Wenn Ihnen wirklich Informationen darüber fehlen, was Sie tun werden, macht es keinen Sinn, sich darauf vorzubereiten. Aber es ist wahrscheinlich nicht wahr - Sie haben Informationen und können sich so auf die wahrscheinlichsten Situationen vorbereiten ("voreingenommen"), auf die Sie vorbereitet sein müssen.
Daniel Earwicker
22

"Jedes ausreichend komplizierte C- oder Fortran-Programm enthält eine ad-hoc, informell spezifizierte, fehlerbehaftete, langsame Implementierung der Hälfte von Common Lisp."

Zehnte Regel von Greenspun

Paolo
quelle
16

Hier sind einige hilfreiche Links:

Greg Hewgill
quelle
1
On Lisp ist großartig (ich bin gerade auf halbem Weg, obwohl ich zugebe, dass die Makros etwas dichter werden); Aber Sie müssen Lisp kennen, um es lesen zu können. Abgesehen von diesem kleinen Problem ist es ein großartiges Buch, nicht nur über Lisp, sondern über Software-Engineering im Allgemeinen.
JS