it-swarm-eu.dev

Warum ist LISP nützlich?

LISP ist offensichtlich ein Vorteil für das AI Zeug, aber es erscheint nicht Für mich ist LISP schneller als Java, C # oder sogar C. Ich bin kein Meister von LISP, aber ich finde es unglaublich schwierig, den Vorteil zu verstehen, den man beim Schreiben von Unternehmenssoftware in LISP erhalten würde.

Dennoch wird es als Hackersprache angesehen.

Warum befürwortet Paul Graham Lisp? Warum hat ITA Software LISP gegenüber anderen Hochsprachen gewählt? Welchen Wert hat es gegenüber diesen Sprachen?

64
Geek

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 von Boilerplate-Code.
  3. Pragmatismus. Common LISP wurde entwickelt, um Dinge von Berufstätigen erledigen zu lassen. Die meisten funktionalen Sprachen sind dies in der Regel nicht.
  4. Flexibilität. Es kann viele verschiedene Dinge tun, alles mit angemessener Geschwindigkeit.
  5. Wartiness. Die reale Welt ist chaotisch. Pragmatische Codierung führt dazu, dass chaotische Konstrukte entweder verwendet oder erfunden werden müssen. Common LISP hat genügend Warzen, um Dinge erledigen zu können.

Der einzige wirkliche Grund, sich gegen Common LISP zu entscheiden, ist wohl, dass die Standardbibliotheken datiert sind.

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

78
Paul Nathan

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 für die Lösung schwieriger Probleme gibt (mit Hutspitze an Alan Kay)
  • extrem agile, interaktive und gesprächige Entwicklungsumgebung
  • beispiellose Macht, Abstraktionen zu erzeugen und zu manipulieren

Die Programmierung bekämpft die Komplexität. Abstraktionen sind das einzige wirksame Instrument zur Bekämpfung der immer komplexer werdenden 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.

24
Maglob

Ich glaube, die richtige LISP-Antwort ist gnomischer. So etwas wie: "Wenn Sie fragen müssen, sind Sie nicht bereit."

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

21
glenatron

Ich denke, dass der LISP-Vorteil im Bereich künstliche Intelligenz (AI), den jeder erwähnt, ein historischer Unfall ist ... LISP begann für/in AI, 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 jedoch, dass es für mich Python und C in einem. Ich kann sofort und sehr schnell ohne Deklarationen und Prototypen (Laufzeit und) mit dem Code ohne Deklarationen und Prototypen beginnen 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 Ich frage mich, ob ich eine Taste in SLIME drücken und die Maschinensprache beobachten soll, die für die Funktion generiert wurde, an der ich interessiert bin. In Python gibt es keine Typdeklarationen, also ich kann nicht schneller werden, aber in C ist es viel schmerzhafter, etwas schnell zu erledigen. 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 leicht Klammern gefallen lassen. Außerdem verwalten Editoren wie Emacs Klammern selbst, sodass Sie dies nicht tun müssen. Ich gebe jedoch zu, dass ich Klammern am Anfang 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 Code in LISP eine Standarddatenstruktur, und die Klammern sind lediglich eine Darstellung von Code als Listen, was erforderlich ist, um das Schreiben von Makros zu vereinfachen.

Ich kenne keine andere Sprache, in der Sie kleine Subsprachen 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 Ich muss viel Rohtext schreiben, um eine einzelne Idee auszudrücken. In LISP könnte ich einige Makros schreiben, die diesen Code automatisch generieren, und danach einfach diese verwenden. Wie auch immer, Sie müssen Verstehe einige Beispiele dafür und urteile dann selbst. 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 Mainstream-Sprachen, um zu sehen, ob sie übereinstimmen Die Leistung von LISP-Makros, aber bisher habe ich keine gefunden. Forth ist eine knappe Sekunde.

Ich werde mit ein paar Kritikpunkten in Bezug auf Unternehmenssoftware abschließen:

  1. Unternehmenssoftware benötigt Bibliotheken und gute, und LISP ist darin nicht gut. 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 sollte dazu beitragen, das zu beheben, denke ich ...

  2. Unternehmenssoftware wird normalerweise von großen Gruppen von Menschen erstellt, und ich denke, dass die Kommunikation mit Makros behindert werden kann, da sie die Sprache grundsätzlich ändern. Viele Programmierer können bestimmte Muster im Code besser erkennen, selbst wenn der Programmtext länger und sich wiederholender ist. Ich nehme an, bei ITA gibt es einige Regeln für Makros oder eine riesige Makrobibliothek, die die Zusammenarbeit erleichtert (oder einfacher gesagt, alle Programmierer sind LISP-Experten).

18
Pau Fernández

Ich mag LISP nicht.

(Ich mag viele der Konzepte, die es verwendet, wie es leistungsstarke Techniken nativ zur Verfügung stellt und so weiter.

Aber ich war nie davon überzeugt, es tatsächlich zu verwenden ((obwohl mehrere Leute haben es versucht ), weil die Vorteile der Sprache können mit anderer Programmierung erreicht werden können Sprachen (einige direkt, andere indirekt), daher gibt es nicht genug Vorteile, um mich dazu zu bringen, die Zeit damit zu verbringen, sie zu lernen und mich mit der schrecklichen Syntax abzufinden.)))

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

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

13
Peter Boughton

Ich werde "LISP" als " Common LISP " interpretieren. Ich habe keinen Zweifel, dass andere Antworten " Schema " sagen werden. (Hinweis: LISP ist eine Sprachfamilie.)

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

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

Was this Hacker betrifft, benutze ich es, 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.

9
Frank Shearar

Ich mag LISP, weil es ein ausgezeichnetes Medium ist, um meine Gedanken auszudrücken. Das Prädikat für meine Lieblingssprache lautet "Wenn ich etwas auswählen könnte, um Ideen auszudrücken, was wäre das?". Derzeit ist es LISP * ( Schema um genau zu sein), bis zu dem Punkt, an dem ich Programmiernotizen darin schreibe. Als IRL , Papier- und Stiftnotizen. Selbst wenn ich an Programme denke, muss ich sie in PHP oder 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 (niemand kann das Innere meines Notizbuchs sehen). Es ist nur so, dass LISP so viel natürlicher ist für mich zu denken als jede der Alternativen, und jede Sprache, die tief mit Ihnen in Resonanz steht, ist eine, die Sie schätzen.

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

7
Inaimathi

Paul Graham beantwortet diese Frage selbst in Was LISP anders gemacht hat.

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

LISP hat im Grunde alle Vorteile dynamischer Sprachen, und ich denke, für die meisten heutigen Webanwendungen sind Python und Ruby sind ziemlich fantastisch und sie haben den Vorteil) von Frameworks und Dokumentationen und lebendigen Communities.

Das Killer-Feature ist wahrscheinlich, dass das gesamte Programm aus Ausdrücken besteht. Dies bedeutet, dass Sie Codeblöcke an Funktionen (oder Makros ...) weitergeben 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 (ich bin nicht sicher).

6
hasen

Ich hatte in der Vergangenheit eine ruckartige Reaktion auf Schema , aber jetzt bin ich bereit, LISP ( Clojure , tatsächlich) 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 herausfordernd.

Clojure hat viele Versprechen, scheint sehr sauber zu sein und kann viele reale Probleme lösen. Ein starkes Argument für eine saubere Sprache wie Clojure ist das Aufkommen von Multi-Core-Computern.

Yay LISP!

BEARBEITEN: ITA Software wurde von MIT Absolventen, und Scheme/LISP war die einzige Sprache, die viele der MIT Absolventen gelernt haben. Um fair zu sein, eine kann LISP-Algorithmen auf einem laufenden Produktionssystem im laufenden Betrieb austauschen, was ein großes Plus ist.

6
Job

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

Willst du Objekte? Du kannst sie haben. Willst du funktionale Programmierung? Du kannst es haben. Willst du Prolog - Logikprogrammierung? Schreiben Sie einige Makros. Möchten Sie deklarative Programmierung im SQL-Stil? 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 - ähnlichen Sprachen habe ich noch keine andere Sprache gesehen, die dieses Maß an Flexibilität bietet.

6
Jason Baker

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 etwa auf halbem Weg zu LISP zu ziehen."

- Guy Steele, Java spec Co-Autor

Zeichnen Sie eine Kurve zwischen C++ und Java. Machen Sie weiter und irgendwann finden Sie LISP.

6
compman

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

Grund Nummer eins: LISP lässt mich anders denken, was mich zu einem besseren Ruby Codierer) macht.

Es scheint sehr umständlich, bestimmte Dinge in LISP zu tun, beispielsweise verschachtelte Iterationen, um mehrere Listen zu durchlaufen. Es zwingt mich also, andere Dinge zu verwenden, wie map. Meine Lieblingssprache, Ruby, hat dieselbe Kartenmethode, aber ich verwende sie nicht immer, weil sie unbekannt 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 verfügt über gute moderne Bibliotheken.

Es gibt ein sehr schönes, leichtes Webframework für newLisp namens Libelle . Dadurch kann ich für einige Aufgaben anstelle von PHP] newLisp-Code 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, Konsistenz).

5
philosodad

"Schneller" ist nicht einfach zu messen - es hängt wirklich davon ab, welchen Aspekt Sie bewerten. Abhängig von der Aufgabe und der LISP-Implementierung können sich die Geschwindigkeiten C nähern. Weitere Informationen finden Sie unter Great Benchmarking Shoot-Out . Die SBCL-Implementierung von LISP entspricht Java 6 Server und ist erheblich schneller als Ruby oder Python).

Aber reine Geschwindigkeit ist nicht der Hauptgrund, eine Programmiersprache zu wählen - wenn es so wäre, würden wir alle 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 Sonden 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 Ihre Gedanken fortsetzen können. Das ist es, was das Schreiben in Java oder einer anderen Sprache wie dieser für mich ist. Manchmal gibt es einen Grund, das zu tun, und ich mag Java in Ordnung, aber LISP ist gerecht reaktionsschneller und es ist einfacher, die Arbeit zu erledigen.

5
Michael H.

Können Sie "Markentreue" sagen?

Ich habe in Fortran angefangen. Ich liebte es.

Ich bin zu LISP gewechselt. Zuerst 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?

4
Mike Dunlavey

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

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

4
Zachary K

Ein großer Anziehungspunkt ist die Community. LISP hat 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, finden Sie wahrscheinlich LISP, wie in künstliche Intelligenz (KI) Forschung, Computer Vision, Planung, Wissensrepräsentation und komplexer heuristischer Optimierung. Die Sprache eignet sich dazu, Probleme gleichzeitig von unten nach oben und von oben nach unten zu lösen, was bei der Bewältigung der haarigsten Herausforderungen hilfreich zu sein scheint.

Die sinnvolle Syntax über Makros bedeutet, dass die Sprachdefinition selten erweitert werden muss. 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 einen neuen Sprachstandard und ohne notwendigerweise eine echte Geschwindigkeitsstrafe zu verwenden. Grundsätzlich werden Unmengen von Boilerplate-Code durch kleine Erweiterungen unnötig. Ganz neue Ideen im Kontrollfluss, wie die Vereinheitlichung des Prolog-Stils, werden effizient und kompakt als Erweiterungen implementiert.

Das OOP System, CLOSE ist in Bezug auf Flexibilität eine Klasse für sich. Es ist sehr schwierig zu gehen zurück zu rudimentärem C++/Java/C # OOP nachdem Sie einen Vorgeschmack erhalten haben. GoF 5 Entwurfsmuster werden unnötig, da sie einfach und direkt ausgedrückt werden können.

Die Sprache hatte keinen einzigen Firmeninhaber und keine einzige endgültige Implementierung, obwohl sie einen ANSI Standard mit vielen konformen Implementierungen hat. Alle zehn Jahre kommen wichtige neue Implementierungen hinzu, und die alten sind immer noch recht aktiv. Experten können planen, ihr Fachwissen noch lange zu nutzen. Dies führt zwar zu anarchistischer Reibung und Fragmentierung der Gemeinschaft, bedeutet aber auch, dass der Teppich nicht herausgezogen werden kann und die Sprache aus unternehmens- oder projektpolitischen Gründen nicht sterbend werden kann. Es wird immer an mehreren kommerziellen und Open Source-Implementierungen gearbeitet. Die leistungsorientierteren messen regelmäßig einen Benchmark innerhalb eines 2-fachen Faktors der schnellsten, stark finanzierten 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 Machine war in Bezug auf eine 8 MB Sun-Workstation kostengünstig nicht realisierbar. Heute sind RAM Preise zusammengebrochen und es besteht ein enormes Interesse an den LISP-Sprachen, insbesondere angesichts der Tatsache, dass die gängigen Java-Sprachen C #, PHP Sprachen heute nur minimal fortgeschritten sind) die von vor 30 Jahren.

Es gibt moderne Sprachen, die jetzt mit LISP um Mindshare mit intelligenten Entwicklern konkurrieren: Python, Lua , Erlang , Haskell und OCaml . Aber keine bietet die gleiche Mischung aus Reife, Anpassungsfähigkeit, mehreren standardkonformen Implementierungen und Geschwindigkeit.

2
bcaulf

Ich mache eigentlich kein LISP. Aber der Ort, an dem ich arbeite, ist finite Elemente mit Millionen von Zeilen, hauptsächlich von Fortran. Der Typ hier, den ich am meisten respektiere, wenn es darum geht, Dinge zu berechnen (Codes Computational Fluid Mechanics ), glaubt, dass die ideale Kombination LISP von außen ist (hauptsächlich, weil Sie unordentliche Probleme mit der Speicherverwaltung vermeiden), und Fortran für das niedrige Niveau Algorithmen (Fortran eignet sich am besten zum Ausnutzen der Vektorfunktionen von SSE / AVX und Wir halten es für unwahrscheinlich, dass dieser Vorsprung geschlossen wird.

1
Omega Centauri