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?
Antworten:
Es gibt einige Gründe, warum ich daran arbeite, mit Common Lisp kompetent zu werden.
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.
quelle
Ich mag Lisp für seine
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.
quelle
(+ 1 n)
Wünsche sein oder noch praktischer(incf n)
?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".
quelle
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:
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 ...
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).
quelle
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.
quelle
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.
quelle
M-x eval-region
(odereval-buffer
) markieren , aber das ist alles.C-j
(die moralisch äquivalent zu geben) , und es wird sofort wirksam.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.
quelle
Das Problem ist die Macht. Leistung = Arbeit (Programmfunktionalität) / Zeit
Zeichnen Sie eine Kurve zwischen C ++ und Java. Mach weiter und irgendwann wirst du Lisp finden.
quelle
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).
quelle
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.
quelle
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.PLEASE
?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.
quelle
"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.
quelle
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, wie
map
. 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.
quelle
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?
quelle
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.
quelle
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.
quelle
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).
quelle