Warum ist Lisp nützlich? [geschlossen]

64

Lisp ist offensichtlich ein Vorteil für das AI- Zeug, aber es scheint mir nicht, dass Lisp schneller ist als Java, C # oder sogar C. Ich bin kein Meister von Lisp, aber ich finde es unglaublich schwierig, den Vorteil zu verstehen man würde in Lisp Business-Software schreiben.

Dennoch wird es als Hackersprache angesehen.

Warum befürwortet Paul Graham Lisp? Warum hat sich ITA Software für Lisp gegenüber anderen Hochsprachen entschieden? Welchen Wert hat es gegenüber diesen Sprachen?

Peter Mortensen
quelle
20
Die Zeile "Ich glaube nicht, dass Lisp schneller als Java, C # oder sogar schneller als C ist" ist etwas verwirrend. C ist in der Regel der Standard für "schnellen Code, weil Sie in der Nähe des Metals programmieren" - es ist der Maßstab, den man für fast alles schlagen muss. Java und andere GC-Sprachen können es jetzt in einigen Situationen übertreffen, zum Beispiel bei der Speicherzuweisung / -bereinigung. Aber dieser Satz scheint trotzdem ein bisschen rückwärts zu sein.
Michael H.
2
Lisp ist eine höhere Sprache als die von Ihnen genannten und daher im Allgemeinen langsamer.
Segfault
5
@ Bo Tian: "höhere Sprache" braucht eine eindeutige Definition. Auch wenn es eine hatte, klingt dies wie ein Non-Sequitur. (danke @Mark)
Mike Dunlavey
5
@BoTian "höhere Ebene" entspricht standardmäßig nicht "langsamer".
24
Lisp existiert, um zu zeigen, wie falsch jeder andere Sprachdesigner war.

Antworten:

78

Es gibt einige Gründe, warum ich daran arbeite, mit Common Lisp kompetent zu werden.

  1. Homoikonischer Code. Dies ermöglicht strukturierten selbstmodifizierenden Code.
  2. Syntaxbewusste Makros. Sie ermöglichen das Umschreiben des Kesselschildcodes.
  3. Pragmatismus. Common Lisp wurde entwickelt, um Dinge von Fachleuten erledigen zu lassen. Die meisten funktionalen Sprachen sind in der Regel nicht.
  4. Flexibilität. Es kann viele verschiedene Dinge tun, und das alles mit angemessener Geschwindigkeit.
  5. Wartiness. Die reale Welt ist chaotisch . Pragmatische Codierung muss entweder chaotische Konstrukte verwenden oder erfinden. Gemeines Lisp hat genügend Warzen, um Dinge zu erledigen.

Die einzigen wirklichen Gründe, sich gegen Common Lisp zu entscheiden, sind wahrscheinlich die veralteten Standardbibliotheken.

Ich werde mich auf die Probe stellen und sagen, dass die Syntax im Allgemeinen für einen professionellen Software-Entwickler kein Problem sein sollte.

Paul Nathan
quelle
8
Die Syntax kann ein Problem darstellen, wenn sie die Lesbarkeit oder Beschreibbarkeit erheblich beeinträchtigt. Ich glaube nicht, dass dies bei Lisp der Fall ist. Ein guter Editor oder eine gute IDE kann Syntaxhervorhebung und Paren-Matching gut genug ausführen, um keine große Sache zu sein.
Matt Olenik
4
Außerdem habe ich Lisp nur ein wenig benutzt (Common Lisp), und das allgemeine Gefühl, das ich bekam, war, dass # 2 der größte Vorteil für Lisp war. Vielleicht denke ich im falschen Paradigma, aber ich glaube nicht, dass ich jemals eine Situation hatte, in der selbstmodifizierender Code notwendig war. Wenn Sie einen bestimmten Grund dafür haben, dann ja, aber ansonsten scheinen die Makros das wahre Killer-Feature zu sein. Bearbeiten: Nur realisiert, dass dies in der Tat die gleiche Funktion sind.
Matt Olenik
3
@Matt: Ja. FWIW, ich bin kürzlich auf Nemerle gestoßen, eine C # -ische CLR-Experimentiersprache mit Makros. nemerle.org . Ich denke, es lohnt sich, irgendwann zu stöbern, nur wegen der Erfahrung.
Paul Nathan
2
"Pragmatismus. CL wurde entwickelt, um Dinge von Berufstätigen erledigen zu lassen. Die meisten funktionalen Sprachen sind dies in der Regel nicht.": Ich stimme dieser Aussage nicht zu. Ich interessiere mich sehr für Lisp und versuche, etwas Zeit zu investieren, um es zu lernen. Aber ich finde andere FP-Sprachen auch sehr effektiv, um "Dinge zu erledigen", zumindest war dies meine bisherige Erfahrung mit Scala und Haskell.
Giorgio
1
"CL wurde entwickelt, um Dinge von Fachleuten erledigen zu lassen. Die meisten funktionalen Sprachen sind das in der Regel nicht.": Können Sie das näher ausführen? Besonders im zweiten Teil des Satzes. Können Sie einige Beispiele nennen?
Giorgio
23

Ich mag Lisp für seine

  • Einheitliche, einfache und elegante Darstellung von Code und Daten.
  • einzigartige Sichtweise, die mir die entscheidenden 80 Bonus-IQ-Punkte bei der Lösung schwerer Probleme gibt (mit Hutspitze an Alan Kay)
  • extrem agile, interaktive und gesprächige Entwicklungsumgebung
  • Beispiellose Fähigkeit, Abstraktionen zu erschaffen und zu manipulieren

Programmierung kämpft gegen Komplexität. Abstraktionen sind das einzige wirksame Instrument zur Bekämpfung der ständig wachsenden Komplexität (mit unserer sehr begrenzten und konstanten Schädelgröße). Das Verwalten von Abstraktionen mit Lisp ist wie ein Geist mit n + 1 Wünschen.

Maglob
quelle
5
+1 für "Programmieren bekämpft Komplexität. Abstraktionen sind das einzige wirksame Werkzeug zur Bekämpfung der ständig wachsenden Komplexität (mit unserer sehr begrenzten und konstanten Schädelgröße)." (Ich wünschte, ich könnte eine +10 geben.)
Giorgio
Was ist die "extrem agile, interaktive und gesprächige Entwicklungsumgebung"?
qed
6
Sollten das nicht (+ 1 n)Wünsche sein oder noch praktischer (incf n)?
Reb.Cabin
21

Ich glaube, die richtige Lisp-Antwort ist eher gnomisch. Etwas wie: "Wenn Sie fragen müssen, sind Sie nicht bereit."

Wenn jemand weitere Fragen stellt, lautet die richtige Antwort entweder "Ja", wenn es sich um eine Frage handelt, oder "Sie sind nicht bereit".

Glenatron
quelle
5
Paul Graham zitiert Louis Armstrong: „Wenn Sie fragen müssen, was Jazz ist, werden Sie es nie erfahren.“
Jason Baker,
25
+1. Obwohl manchmal Sätze wie "Wenn Sie fragen müssen, sind Sie nicht bereit" mich denken lassen, dass derjenige, der das sagt, es einfach nicht erklären kann
superM
5
@superM Lisp und Lisp-ähnliche funktionale Sprachen haben die Eigenschaft, dass man sie nicht mehr erklären kann, wenn man sie erst einmal gelernt hat!
Esoterik
18

Ich denke, dass der Lisp-Vorteil auf dem Gebiet der künstlichen Intelligenz (KI), den alle erwähnen, ein historischer Unfall ist ... Lisp begann für / in KI, aber es ist eine Allzwecksprache.

Ich glaube, dass die Ausführungsgeschwindigkeit nicht der einzige wichtige Aspekt einer Sprache ist (ich habe es jedoch einmal getan). Einer der Aspekte, die ich an Lisp mag, ist, dass es für mich Python und C in einem vereint. Ich kann sofort und sehr schnell ohne Deklarationen und Prototypen mit dem Code beginnen (die Laufzeit und die REPL sind dafür sehr wichtig). Nachdem ich etwas ausgeführt habe, füge ich Typdeklarationen hinzu und "optimiere" meinen Code nach und nach. Es ist ein Wunder, eine Taste in SLIME zu drücken und die Maschinensprache zu beobachten, die für die Funktion generiert wurde, an der ich interessiert bin. In Python gibt es keine Typdeklarationen, daher kann ich keine höhere Geschwindigkeit erreichen, aber in C ist es eine schnelle Aufgabe viel schmerzhafter. Lisp ist in diesem Fall sehr nützlich.

Trotzdem mag ich Lisp hauptsächlich wegen Makros . Wenn Sie endlich verstehen, was Makros leisten können, können Sie sich meiner Meinung nach leicht mit Klammern abfinden. Außerdem verwalten Redakteure wie Emacs Klammern selbst, sodass dies nicht erforderlich ist. Ich gebe jedoch zu, dass ich Klammern anfangs nicht so schlecht fand und ich weiß, dass manche Leute sie einfach nicht ausstehen können. Da der gesamte Zweck von Makros darin besteht, Code zur Kompilierungszeit zu generieren, verwendet der Code in Lisp eine Standarddatenstruktur, und die Klammern sind einfach eine Darstellung des Codes als Listen. Dies ist erforderlich, um das Schreiben von Makros zu vereinfachen.

Ich kenne keine andere Sprache, in der Sie kleine Teilsprachen schreiben können, um Ihr Problem mit der Leichtigkeit von Lisp besser zu beschreiben. Das ist der Vorteil, über den Paul Graham in Beating the Averages spricht . Es ist extreme Modularität und Prägnanz. In Java muss ich viel Rohtext schreiben, um eine einzelne Idee auszudrücken. In Lisp konnte ich einige Makros schreiben, die diesen Code automatisch generieren, und diese anschließend einfach verwenden. Wie auch immer, Sie müssen einige Beispiele verstehen und dann selbst beurteilen. Als ich es "sah", war ich überwältigt, und ich denke immer noch, dass Lisp allein aus diesem Grund die beste Sprache ist. Ich suche immer nach Makros in gängigen Sprachen, um festzustellen, ob sie der Leistung von Lisp-Makros entsprechen. Bisher habe ich jedoch keine gefunden. Viertens ist eine knappe Sekunde.

Abschließend möchte ich einige Kritikpunkte in Bezug auf Unternehmenssoftware anbringen:

  1. Unternehmenssoftware braucht Bibliotheken und gute, und Lisp kann das nicht. Normalerweise brauche ich sie nicht, aber wenn ich sie brauche, muss ich aus einer kleinen Auswahl unvollständiger Software auswählen, die einige Leute verwenden. Ich denke, ich sollte dazu beitragen, das zu beheben ...

  2. Unternehmenssoftware wird in der Regel von großen Gruppen erstellt, und ich denke, dass die Kommunikation mit Makros behindert werden kann, da diese im Grunde die Sprache ändern. Viele Programmierer sind damit zufrieden, bestimmte Muster im Code zu erkennen, auch wenn der Programmtext länger und sich wiederholender ist. Ich nehme an, sie haben bei ITA einige Regeln bezüglich Makros oder sie haben eine riesige Makrobibliothek, die die Zusammenarbeit vereinfacht (oder einfacher gesagt, alle Programmierer sind Lisp-Experten).

Pau Fernández
quelle
7
Versuchen Sie es mit clojure, es ist ein lisp auf der JVM. Mit der JVM können Sie also alle Java-Elemente verwenden.
Zachary K
@zachary: Es gibt mindestens 2 Common Lisp-Implementierungen auf der JVM. ABCL ist relativ ausgereift.
Larry Coleman
Clojure ist zu 100% Java-kompatibel (zumindest habe ich noch nie etwas in Java gefunden, das Clojure nicht verbessern kann, und zwar so, dass sich die Java-Experten nicht beschweren können). Clojure wird stark von den Besten von Common Lisp und den Besten von FP beeinflusst. Mit dem und SBCL und CLisp und Emacs sollte sich jeder Lisper heutzutage wie ein König fühlen.
Reb.Cabin
13

Ich mag Lisp nicht.

(Ich mag viele der Konzepte, die es verwendet, wie es leistungsfähige Techniken nativ verfügbar macht und so weiter.

Aber ich war noch nie davon überzeugt, es tatsächlich zu verwenden (obwohl es bereits mehrere Leute versucht haben ), da die Vorteile der Sprache mit anderen Programmiersprachen (einige direkt, andere indirekt) erzielt werden können , sodass es nicht genug Vorteile gibt damit ich die Zeit damit verbringe, es zu lernen und mich mit der schrecklichen Syntax abzufinden.)))

Aber ja, aus Gründen, die manche Leute mögen, sehen Sie sich diese Fragen zum Stapelüberlauf an:

Es gibt wahrscheinlich ein paar mehr in den verwandten Fragen für diese auch.

Peter Boughton
quelle
26
Msgstr "Sich mit der schrecklichen Syntax abfinden". Vielleicht ist es einfach zu lange her, dass ich ein Lisp-Neuling war, aber die Einfachheit und Regelmäßigkeit der Lisp-Syntax ist ein riesiges Merkmal, da es mir ermöglicht, Lisp in sich zu erweitern. Ich kann benutzerdefinierte Iteratoren hinzufügen, ich kann neue "with-xxx" -Bereichskonstrukte hinzufügen, die automatisch nacheinander bereinigt werden, damit der Entwickler dies nicht muss usw. Die Syntax ist eine Funktion, kein Fehler.
Michael H.
5
Die Fähigkeit, eine Sprache mit sich selbst zu erweitern, erfordert keine Syntax, die auf ein halbes Dutzend Zeichen beschränkt ist. Auch: "Die Syntax ist ein Feature, kein Bug" ? - Ich weiß. Ich habe es keinen Bug genannt.
Peter Boughton
8
Okay, wie können Sie die Vorteile des Makrosystems nutzen? In wie vielen Sprachen können Sie in einem relativ kurzen Kapitel eine objektorientierte Erweiterung erstellen (Paul Graham, "On Lisp")?
David Thornley
6
Die Syntax ist nicht schrecklicher als in anderen Sprachen. Ich habe festgestellt, dass die Klammern nach einer Weile nur optisch "verschwinden". Bei guter Einrückung ist der Code gut lesbar.
Barry Brown
8
Aber die Fähigkeit, sich leicht zwischen S-Exps zu bewegen, scheint riesig zu sein ... Dann mag ich zum Thema Klammern das folgende Zitat: Klammern? Welche Klammern? Ich habe seit meinem ersten Monat der Lisp-Programmierung keine Klammern mehr bemerkt. Ich frage gerne Leute, die sich über Klammern in Lisp beschweren, ob sie von all den Leerzeichen zwischen Wörtern in einer Zeitung gestört werden "- Ken Tilton
Cedric Martin
9

Ich interpretiere "Lisp" als " Common Lisp "; Ich habe keinen Zweifel, dass andere Antworten " Schema " sagen werden . (Hinweis: Lisp ist eine Familie von Sprachen.)

Was bedeutet "schneller"? In Bezug auf die Zeit, die für die Durchführung eines Benchmarks benötigt wird, ist es nicht schneller als C ( aber es kann sein ).

"Schnell" in Bezug darauf, wie lange Joe Random Hacker benötigt, um ein funktionierendes Programm zu schreiben oder einen Fehler in einem großen Softwaresystem zu beheben? Fast sicher.

Was diesen Hacker betrifft, verwende ich ihn, weil ich Code schreiben möchte, nicht Boilerplate. Ich möchte etwas einmal schreiben und mich nicht ständig wiederholen. Und ich möchte mit dem Programm interagieren, während ich es schreibe.

Frank Shearar
quelle
Wäre das nicht großartig, wenn Sie eine kleine Funktion in Ihren Editor schreiben könnten, die sofort etwas mit dem Rest Ihres Codes zu tun hätte? Oder kannst du das schon?
Mark C
4
@Mark: Ich denke, Sie beschreiben Emacs.
Ferruccio
@Ferruccio Ich dachte, Sie müssen zuerst Ihren Code ausführen.
Mark C
2
@ Mark C: Nun, Sie müssen die Region und dann M-x eval-region(oder eval-buffer) markieren , aber das ist alles.
Frank Shearar
1
@MarkC: Auch, wenn Sie in der sind Kratzpuffer, können Sie einfach schreiben Sie Ihre Funktion , und drücken Sie C-j(die moralisch äquivalent zu geben) , und es wird sofort wirksam.
Tikhon Jelvis
7

Ich mag Lisp, weil es ein ausgezeichnetes Medium ist, um meine Gedanken auszudrücken. Das Prädikat für meine Lieblingssprache ist "Wenn ich etwas auswählen könnte, um Ideen auszudrücken, was wäre es?". Derzeit ist es Lisp * ( Schema , um genau zu sein), so dass ich darin Programmiernotizen schreibe. Wie IRL , Papier und Stift Notizen. Selbst wenn ich an Programme denke, muss ich sie in PHP, Ruby oder Python implementieren.

Dies ist kein Trick, den ich mir selbst beigebracht habe, oder etwas, das ich für die Glaubwürdigkeit von Nerds tue (sowieso bekommt niemand das Innere meines Notizbuchs zu sehen). Es ist nur so, dass Lisp für mich so viel natürlicher ist als jede andere Alternative, und jede Sprache, die Sie anspricht, ist eine Sprache, die Sie sehr schätzen.

* Nur als Fußnote, Haskell schließt die Lücke ziemlich schnell, als ich mehr darüber erfahre.

Inaimathi
quelle
6

Das Problem ist die Macht. Leistung = Arbeit (Programmfunktionalität) / Zeit

"Wir wollten die Lisp-Programmierer nicht für uns gewinnen, wir waren hinter den C ++ - Programmierern her. Wir haben es geschafft, viele von ihnen auf halbem Weg zu Lisp zu bringen."

- Guy Steele, Co-Autor der Java-Spezifikation

Zeichnen Sie eine Kurve zwischen C ++ und Java. Mach weiter und irgendwann wirst du Lisp finden.

compman
quelle
2
Das Problem dabei ist, dass Sie eine Menge C ++ - Funktionalität verlieren, wenn Sie nach Java gehen, diese aber wieder aufgreifen (oft in verbesserter Form), wenn Sie nach Lisp gehen.
David Thornley
@DavidT Die SO-Frage zu diesem genauen Zitat enthält einen Link zur Quelle (Suche nach "Zitieren"). Das Zitat sollte nicht so ernst genommen werden.
Mark C
@ David: Wie Makros. Es ist nicht nur so, dass sie auf Java (und damit auf C #) verzichtet haben, sondern sie haben das Fehlen von Java zu einer "Tugend" gemacht. Makros sind sehr praktisch, wenn ich auf der Basissprache ein DSL aufbaue.
Mike Dunlavey
@ Mike Dunlavey: Ich mag keine Makros in C ++ (zum Teufel, ich mag sie nicht in C, aber ich habe dort keine große Auswahl). Ich mag Makros in Common Lisp sehr. Wissen Sie, ich glaube, mein Problem mit diesem Kommentar ist, dass ich sowohl C ++ als auch Common Lisp viel mehr mag als Java.
David Thornley
@David: Ich bin zu 100% bei Makros in Lisp. In C / C ++ sind sie hässlich und anfällig für Missbrauch, aber für die Art von ( zugegebenermaßen Rand- ) Dingen, die ich mache, sind sie so viel besser als nichts. Natürlich, wenn ich es in C ++ mache, kann es sehr gut als Missbrauch angesehen werden, aber in Lisp wird es warm als schlau angesehen. Stelle dir das vor.
Mike Dunlavey
6

Paul Graham beantwortet diese Frage in What Made Lisp Different .

Denken Sie daran, dass er es Mitte der neunziger Jahre für sein Startup verwendet hat, sodass Python und Ruby zu diesem Zeitpunkt noch nicht wirklich ausgereift waren (oder vielleicht noch nicht einmal geboren wurden).

Lisp bietet im Grunde alle Vorteile dynamischer Sprachen, und ich denke, für die meisten heutigen Webanwendungen sind Python und Ruby ziemlich beeindruckend. Sie bieten den Vorteil von Frameworks und Dokumentation sowie lebendigen Communitys.

Das Killer-Feature ist wahrscheinlich, dass das gesamte Programm aus Ausdrücken besteht. Dies bedeutet, dass Sie Codeblöcke sozusagen an Funktionen (oder Makros ...) übergeben können, da ein Codeblock nichts anderes als ein Ausdruck ist.

Python hat diese Funktion nicht genau. Sie müssten Funktionen definieren und weitergeben. Ruby scheint Blöcke zu haben, vielleicht ist es etwas eingeschränkt im Vergleich zu dem, was Lisp kann (da bin ich mir nicht sicher).

hasen
quelle
Der Artikel von Paul Graham ist interessant, da die meisten Sprachen heutzutage, abgesehen von ein paar Elementen, die von ihm aufgelisteten Funktionen zu haben scheinen. Also war Lisp in jenen Tagen vielleicht überzeugender. Heutzutage ist es wertvoller als die Sprache, die diese Funktionen eingeführt hat?
Andres F.
AST als Sprachsyntax ist immer noch eine Domäne von Lisp. Mir ist keine Non-Lisp-Sprache bekannt, bei der Makros während der Kompilierungszeit über die gesamte verfügbare Sprache verfügen ?)
przemo_li
6

Ich hatte in der Vergangenheit eine knifflige Reaktion auf Scheme , aber jetzt bin ich bereit, Lisp ( Clojure , eigentlich) eine Chance zu geben .

Sie sehen, im Laufe der Jahre habe ich einige Sprachen wie Java, C #, C ++, Python gelernt, und die Dinge sind nicht länger schwierig.

Clojure hat viele Versprechen, scheint sehr sauber zu sein und kann viele Probleme der realen Welt lösen. Ein starkes Argument für eine saubere Sprache wie Clojure ist das Aufkommen von Mehrkerncomputern.

Ja LISP!

EDIT: ITA Software wurde von MIT-Absolventen gegründet und Scheme / Lisp war die einzige Sprache, die viele MIT-Absolventen lernten. Um fair zu sein, kann man Lisp-Algorithmen auf einem laufenden Produktionssystem im laufenden Betrieb austauschen, was ein großes Plus ist.

Arbeit
quelle
8
Betreff: Die Dinge sind nicht mehr schwierig - probieren Sie Haskell aus und teilen Sie uns Ihre Meinung mit. Sie können zur Abwechslung auch immer versuchen, INTERCAL zu lernen!
Mark C
3
@ Mark C, tut mir leid, aber ich rühre nicht INTERCAL. Herausforderung ist nicht das einzige Kriterium; es muss auch in der Lage sein, echte Probleme schnell zu lösen. Zumindest wird Haskell von vielen benutzt und geliebt.
Job
Das war natürlich ein Scherz.
Mark C
1
Das Aktualisieren des laufenden Codes (sorgfältig!) Auf einem Produktionsserver ist eine der Freuden von Lisp, ja. Zumindest als ich damit spielte, hat Python das nicht gut gemacht. Sie müssten alle Funktionen / Methoden, die sich auf Ihre Änderungen beziehen, manuell neu kompilieren, während alle Common Lisp-Implementierungen dies für Sie erledigen. Ich benutze die gleiche Kraft für die Entwicklung: Schreiben, Testen, Bearbeiten, Testen - keine Kompilierungsschleife, und Sie können Ihre interaktiven Tests in Komponententests umwandeln, wenn Sie dies wünschen.
Michael H.
@Job hab ich vergessen ... PLEASE?
Mark C
6

Das, was ich an Lisp mag, ist, dass es Paradigmen überwindet. Einige Leute werden sagen, dass Lisp funktionell ist, andere werden sagen, dass es deklarativ ist, und andere werden sagen, dass es multiparadigm ist. Ich denke, dass all dies den Punkt verfehlt. Wenn Sie Lisp verwenden, ist das Paradigma keine Einschränkung mehr.

Möchtest du Gegenstände? Du kannst sie haben. Willst du funktionale Programmierung? Du kannst es haben. Willst du eine Prolog- artige Logikprogrammierung? Schreiben Sie einige Makros. Möchten Sie deklarative SQL-Programmierung? Tue es. Möchten Sie ein Paradigma verwenden, das noch nicht erfunden wurde? Ich bin zuversichtlich, dass dies in Lisp möglich ist.

Abgesehen von Forth- like-Sprachen habe ich noch keine andere Sprache gesehen, die dieses Maß an Flexibilität bietet.

Jason Baker
quelle
+1 Multi-Paradigma-Programmierung, Jahrzehnte vor F #, sehr guter Punkt.
Orbling
Ich wünschte, ich könnte das zehnmal verbessern. Es gibt keinen Löffel ... es gibt kein Paradigma ... Es beschreibt mein Gefühl über Common Lisp mit großer Genauigkeit :)
MadPhysicist
5

"Schneller" ist nicht einfach zu messen - es hängt wirklich davon ab, welchen Aspekt Sie messen. Abhängig von der Aufgabe und der Lisp-Implementierung kann sich die Geschwindigkeit C nähern. Weitere Informationen finden Sie im Great Benchmarking Shoot-Out . Die SBCL-Implementierung von Lisp entspricht Java 6 Server und ist deutlich schneller als Ruby oder Python.

Aber Geschwindigkeit ist nicht der Hauptgrund für die Wahl einer Programmiersprache - wenn es so wäre, würden wir alle noch in Assemblersprache programmieren , oder? Für mich ist die tägliche Freude von Lisp, dass der Code kompiliert wird, aber ich muss die Anwendung nicht herunterfahren, alles neu kompilieren und dann von vorne anfangen. Stattdessen kann ich eine einzelne Funktion ändern, und diese Änderung wird überall wirksam, und ich kann den Effekt sofort in meiner Anwendung sehen. Darüber hinaus erleichtert dieser sehr schnelle Ansatz "Schreiben, Testen, Mehr schreiben, Mehr testen" das sofortige Testen beim Schreiben des Codes (und Sie können diese interaktiven Tests später in Komponententests umwandeln).

Stellen Sie sich vor, Sie schreiben eine E-Mail, in der Sie nach jeder Zeile eine Schaltfläche drücken müssen, um Ihre E-Mail-Ausgabe auf dem Bildschirm zusammenzustellen, bevor Sie mit Ihren Gedanken fortfahren. Das ist es, was für mich das Schreiben in Java oder einer anderen Sprache ist. Manchmal gibt es einen Grund, das zu tun, und ich mag Java gut, aber Lisp ist nur reaktionsschneller und es ist einfacher, die Arbeit zu erledigen.

khedron
quelle
Wenn ich heute frisch anfangen würde, würde ich wahrscheinlich Ruby auswählen - es ist ein großer Teil der Lisp-Natur, aber es hat modernere Bibliotheken und einen einzigen wohlwollenden Diktator, der es vorantreibt. Aber das war nicht die Frage, die das OP stellte.
Michael H.
Eigentlich habe ich Rubin genommen, um anzufangen, und jetzt versuche ich, newLisp zu lernen.
Philosodad
5

Ich lerne Lisp ( newLisp ) aus mehreren Gründen.

Grund Nummer eins: Lisp lässt mich anders denken, was mich zu einem besseren Ruby-Programmierer macht.

Es scheint sehr umständlich, bestimmte Dinge in Lisp zu tun, zum Beispiel verschachtelte Iterationen, um mehrere Listen durchzugehen. Also zwingt es mich, andere Dinge zu benutzen, wiemap . Meine Lieblingssprache, Ruby, hat die gleiche Kartenmethode, aber ich verwende sie nicht immer, weil sie ungewohnt ist: Ich habe gelernt, Dinge mit einer schlechten Technik zu tun, und wenn die Sprache diese Technik unterstützt, verwende ich sie weiterhin.

Grund Nummer zwei: Lisp ist praktisch und hat gute moderne Bibliotheken.

Es ist ein sehr schöner, leicht Web - Framework für newLISP genannt Libelle . Dadurch kann ich für einige Aufgaben newLisp-Code anstelle von PHP verwenden. Ich mag PHP nicht wirklich und newLisp scheint für diese spezielle Aufgabe mehr Spaß zu machen als Ruby.

Grund Nummer drei: Lisp ist syntaktisch und konzeptionell konsistent.

Für mich ist dies der große Unterschied zwischen Ruby und Python, die Konsistenz.

philosodad
quelle
+1: "Lisp ist syntaktisch und konzeptionell konsistent." Dies ist ein sehr wichtiges Merkmal einer Sprache. Einige schlecht gestaltete Sprachen sind nicht konsistent, sie sind wie eine große Sammlung von Redewendungen, die in einer bestimmten Reihenfolge zusammengefügt werden (ich habe eine Sprache im Sinn, aber ich werde sie nicht nennen :-)). Lisp ist in dieser Hinsicht sehr konsequent. Sobald ich etwas Zeit habe, werde ich definitiv versuchen, es zu lernen.
Giorgio
4

Können Sie "Markentreue" sagen?

Ich habe in Fortran angefangen. Ich liebte es.

Ich wechselte zu Lisp. Anfangs hasste ich es. Dann habe ich gelernt, es zu lieben und Fortran zu hassen.

Später Pascal, C, C ++, verschiedene Assembler, C #. (Eigentlich liebe ich C # nicht.)

Ich denke, ich bin launisch?

Mike Dunlavey
quelle
4

Als Lisp erstellt wurde, fingen sie mit Mathematik an, nicht mit Informatik (die es noch nicht wirklich gab). Und das Lisp-Team hat einiges WIRKLICH richtig gemacht. Lisp hatte 1960 oder so eine Müllabfuhr! Sie haben wirklich einen tollen Job gemacht.

Ich denke, das The Eternal Flame- Lied deckt es ab.

Zachary K
quelle
Ja, anscheinend war Lisp die erste GCed-Sprache.
Mark C
2

Ein großer Anziehungspunkt ist die Community. Lisp hatte seit der Erfindung der Sprache ein Unentschieden für die ehrgeizigsten und intelligentesten Entwickler. Überall dort, wo Forscher versuchen, Probleme zu lösen, die noch nie gelöst wurden, ist es wahrscheinlich, dass Sie Lisp finden, beispielsweise in der künstlichen Intelligenz (KI), der Bildverarbeitung, der Planung, der Wissensrepräsentation und der komplexen heuristischen Optimierung. Die Sprache bietet sich an, um Probleme von unten nach oben und von oben nach unten gleichzeitig zu lösen, was bei der Bewältigung der schwierigsten Herausforderungen hilfreich zu sein scheint.

Die über Makros mögliche Syntax macht es selten erforderlich, die Sprachdefinition zu erweitern. Vieles, was eine Spracherweiterung in einer eingeschränkteren Sprache erfordern würde, ist mit Lisp nur ein Makro entfernt. So steht es Lisp-Programmierern frei, neu erfundene Sprachkonzepte ohne neuen Sprachstandard und ohne echten Geschwindigkeitsverlust zu nutzen. Auf einer grundlegenden Ebene werden durch kleine Erweiterungen Unmengen von Boilerplate-Code überflüssig. Ganz neue Ideen im Kontrollfluss, wie die Vereinheitlichung im Prolog-Stil, werden effizient und kompakt als Erweiterungen implementiert.

Das OOP-System CLOS ist in puncto Flexibilität eine Klasse für sich. Es ist sehr schwierig, auf rudimentäres C ++ / Java / C # OOP zurückzukommen, nachdem man sich einen Eindruck verschafft hat. GoF  5-Designmuster werden unnötig, da sie einfach und direkt ausgedrückt werden können.

Die Sprache hatte keinen einzigen Firmeninhaber und keine einzige definitive Implementierung, obwohl es einen ANSI- Standard mit vielen konformen Implementierungen gibt. Alle zehn Jahre kommen wichtige neue Implementierungen hinzu, und die alten sind noch recht aktiv. Experten können planen, ihr Fachwissen noch lange zu nutzen. Dies führt zwar zu anarchistischen Spannungen und zu einer Fragmentierung der Community, aber es bedeutet auch, dass der Teppich nicht herausgezogen werden kann und die Sprache aus geschäftlichen oder projektpolitischen Gründen nicht moribund werden kann. Es werden immer mehrere kommerzielle und Open Source-Implementierungen bearbeitet. Die leistungsorientierteren vergleichen sich regelmäßig mit einem 2-fachen Faktor der schnellsten, finanzstarken imperativen Sprachimplementierungen.

Die Achillesferse der frühen Lisp-Kommerzialisierung war der Speicherbedarf, um sowohl die Typensicherheitsfunktionen der Sprache als auch die darin enthaltenen fortschrittlichen Softwareentwicklungsumgebungen mit unglaublichen Funktionen wie vollständiger Online-Dokumentation einschließlich Grafiken zu berücksichtigen. Eine 64-MB- Symbolics-Lisp-Maschine war für eine 8-MB-Sun-Workstation nicht rentabel. Heutzutage sind die RAM-Preise eingebrochen, und das Interesse an den Lisp-Sprachen ist enorm, insbesondere angesichts der Tatsache, dass die gängigen Java-, C # - und PHP-Sprachen heute nur noch geringfügig über denen von vor 30 Jahren fortgeschritten sind.

Es gibt moderne Sprachen, die jetzt mit Lisp um Mindshare mit intelligenten Entwicklern im Wettbewerb stehen: Python, Lua , Erlang , Haskell und OCaml . Keines bietet jedoch die gleiche Mischung aus Reife, Anpassungsfähigkeit, mehreren standardkonformen Implementierungen und Geschwindigkeit.

bcaulf
quelle
1

Ich mache eigentlich kein Lisp. Aber der Ort, an dem ich arbeite, enthält Finite Elemente mit Millionen von Zeilen, hauptsächlich Fortran. Der Typ, den ich am meisten schätze, wenn es um das Rechnen geht (Code- Fluid-Mechanik ), ist Lisp von außen (hauptsächlich, weil Sie unordentliche Probleme mit der Speicherverwaltung vermeiden) und Fortran für die Low-Level-Algorithmen (Fortran eignet sich am besten zum Ausnutzen) die Vektorfähigkeiten von SSE / AVX , und wir denken, dass dieser Vorsprung wahrscheinlich nicht geschlossen wird).

Peter Mortensen
quelle