it-swarm-eu.dev

Ist LISP in der heutigen Welt noch nützlich? Welche Version wird am häufigsten verwendet?

Ich versuche mir in regelmäßigen Abständen eine neue Programmiersprache beizubringen. Kürzlich habe ich gelesen, wie sich LISP und seine Dialekte von Sprachen wie C/C++ am anderen Ende des Spektrums befinden, was mich neugierig genug gemacht hat, mehr darüber zu erfahren. Zwei Dinge sind mir jedoch unklar, und ich suche nach einer Anleitung dazu:

  1. Wird LISP in der heutigen Welt noch praktiziert/verwendet oder ist es eine Legacy-Sprache wie FORTRAN/COBOL? Ich meine, abgesehen davon, dass vorhandener Code beibehalten wird, wird er überhaupt für neue Projekte verwendet?

  2. Was ist der am häufigsten verwendete Dialekt? Ich bin auf Scheme und Common LISP als die beiden am weitesten verbreiteten Dialekte gestoßen und wollte Ihre Meinung dazu, welche am beliebtesten/nützlichsten zu lernen ist - und wäre sehr erfreut, wenn Sie Ressourcen für einen Anfänger vorschlagen könnten.

Ich bin zwar bestrebt, eine Sprache zu lernen, die sich grundlegend von den gewohnten Verfahrenssprachen unterscheidet, möchte aber keine unangemessenen Anstrengungen in etwas investieren, wenn es völlig veraltet ist - ich würde es trotzdem lernen, wenn es beruflich "tot" wäre. aber nur mit einer akademischen Perspektive ...

116
TCSGrad

Ich mag Scheme eher. Wenn Sie mit der JVM arbeiten möchten, sollten Sie sich Clojure ansehen, ein LISP, das für die Arbeit in der JVM entwickelt wurde. Und ja, LISP ist es immer noch wert zu lernen, wie leistungsfähig ein so minimales Design sein kann! Die Leute, die LISP erstellt haben, haben einige Dinge wirklich richtig gemacht. Es ist erstaunlich, wie viele der coolen neuen Funktionen moderner Sprachen LISP in den 1960er Jahren hatte!

Versuchen Sie für ein eingebettetes Schema guile: http://www.gnu.org/s/guile/

59
Zachary K

Zur Beantwortung von Frage 2 "Am weitesten verbreiteter Dialekt":

Hängt davon ab, wie Sie "Am häufigsten verwendet" interpretieren. Hier sind einige Serviettenmathematiken für Untergrenzen darüber, wie viel Gebrauch jeder der ausgewählten Dialekte bekommt.

Der meiste Rohcode wurde geschrieben

  • Möglicherweise Schema (alle Dialekte) wegen pädagogischer Anwendungen
    • 270 Schulen ... Lassen Sie uns 50 Schüler/Jahr, 500 Codezeilen/Schüler, 10 Jahre hintereinander erraten. 1.000.000+ Zeilen basierend auf Serviettenmathematik.
    • 500.000 Zeilen Schläger in Racket selbst und seinen Werkzeugen.
  • Möglicherweise häufiges LISP aufgrund von AI und einer ganzen Menge Open Source Code und Produktionscode (siehe Produktionscode).
  • Möglicherweise Emacs LISP wegen ...
    • Emacs selbst: über 1.000.000 Zeilen
    • Die Anzahl der öffentlich geschriebenen Emacs-LISP - 237 Module, ungefähr 200 Zeilen/Module - beträgt 40.000 + Zeilen nur in EmacsWiki, wahrscheinlich viel mehr in ELPA
    • Plus Anwendungen, die in Emacs LISP-, .emacs-Dateien usw. geschrieben sind.
  • Clojure
    • Schwer abzuschätzen. Meist kleinere Dotcoms. Könnte viel sein.

Gewinner: Schema oder Common LISP. Zu viele Unbekannte.

Der meiste 'Produktions'-Code

Gewinner: Ich vermute Common LISP . Ich denke, wir können Frage 1 mit "Ja" beantworten, basierend auf der Verwendung von Common LISP und Clojure.

Die meisten Endbenutzer

  • Gemeinsame LISP
    • ITA Software-Kunden, darunter Orbitz, Bing Travel und Kayak.com - wahrscheinlich Millionen.
  • Clojure
    • Citigroup (keine Details), Akamai (keine Details), simple.com, viele andere. Wahrscheinlich Millionen.
  • Planen
    • CS Studenten, Forscher und Bastler. Weniger als eine Unmenge.
    • Die Uncharted-Serie - über 5 Millionen
  • Emacs LISP - Meist Programmierer, meistens auf Unix-Plattformen. Könnte eine Million sein.

Gewinner: Schema hat hier die beste Untergrenze, da es Verkaufszahlen für Uncharted gibt, aber es ist ziemlich umstritten.

Fazit

Abschließend finde ich, dass große Äpfel.

68
Jesse Millikan

Wird LISP in der heutigen Welt noch praktiziert/verwendet oder ist es eine Legacy-Sprache?

Ja, aber Sie müssen wissen, wo Sie suchen müssen. Leute, die LISP verwenden, neigen nicht dazu, zu laut darüber zu schreien, aber es gibt eine Handvoll Beispiele für einige hochkarätige Startups, die es in den letzten 20 Jahren mit großer Wirkung eingesetzt haben. Es ist auch bei kleinen Unternehmen in Europa sehr beliebt.

Was ist der am häufigsten verwendete Dialekt?

Dies ist eine gültige Frage, die jedoch nicht einfach zu beantworten ist. Die Beantwortung ist möglicherweise auch nicht besonders nützlich: Viele Implementierungen haben einen bestimmten Schwerpunkt. Sie werden daher am besten ausgewählt, wenn sie zu Ihrem speziellen Problem passen und nicht davon abhängen, wie häufig sie anderweitig verwendet werden. Stattdessen erzähle ich Ihnen ein wenig über Ihre Optionen und Sie können selbst entscheiden.

LISP ist eine Sprachfamilie, und jede dieser Sprachen verfügt über eine Familie von Dialekten und Implementierungen. Im Allgemeinen fallen Dialekte in zwei Lager "LISPs" und "Schemes".

LISPs: Bis vor relativ kurzer Zeit war Common LISP König. Es war ein Versuch, alle unterschiedlichen LISPs zu vereinheitlichen, und ohne unfreundlich zu sein, war es das "C++" von LISP. Das heißt, es war eine RIESIGE Sprache. Es hatte alles. In den letzten Jahren ist Clojure aufgetaucht. Clojure ist ein LISP, das auf der Java Virtual Machine) ausgeführt wird und versucht, sich in einer funktionalen Programmierphilosophie zu verankern. Traditionell waren andere LISPs streng multiparadig. Clojure ist interessant, weil es beides enthält Das Beste und das Schlimmste sowohl von LISP als auch von JVM. Es gibt immer noch viel Ausführlichkeit von Java-basierten Sprachen und sie waren ziemlich frei und einfach mit der Syntax, so dass es viele Knöpfe und Schaltflächen für verschiedene Dinge gibt, aber sie Ich habe einige wirklich interessante Ideen zu Datentypen, insbesondere einige der praktischen Möglichkeiten, Ideen aus der funktionalen Programmierung anzuwenden.

Schemata: Schemata sind eine strikte Teilmenge von LISPs. Das Schema wurde von Steele und Sussman erfunden und war in jungen Jahren bemerkenswert für die Verwendung im MIT Computing 101 Lecture Course). Das Schema ist im "Revised ^ n Report on the Algorithmic Language Scheme" (RnRS) definiert ) ". Ja, sie haben einen mathematischen Witz. Das Schema ist eine standardisierte Sprache, wie es andere LISPs nicht tun. Dies hilft sehr bei der Portabilität zwischen Implementierungen, ist aber keine Wunderwaffe. Die Standardisierungsbemühungen waren eher konservativ und Innovationen bei den Implementierungen, insbesondere in Bezug auf Module, waren tendenziell unterschiedlich. Es gibt auch eine Reihe von SRFIs (Scheme Requests For Implementation), die dem RFC-Prozess der IETF ähneln. Die Leute verwenden sie, um kleine Dinge nach Bedarf zu standardisieren.

Schemata unterscheiden sich von LISPs darin, dass sie eine Reihe von harten Anforderungen haben, die sie erfüllen müssen. Eine davon ist die "Tail-Call-Optimierung", die dazu beiträgt, die Rekursion effizienter zu gestalten. Daher sind rekursive Programmierstile in Scheme viel beliebter als in LISP. Das Schema ist auch ohne unfreundlich zu sein wie das "C" von LISP. Das heißt, es ist eine kleine Sprache und Sie sollten in der Lage sein, alles auf einmal im Kopf zu behalten.

Derzeit gibt es zwei Schemafamilien: Die auf der 5. Version (R5RS) basierenden und die auf der 6. Version (R6RS) basierenden. Die Komplexität von R6RS war weitaus größer als die der Vorgänger, und so viele R5RS-Implementierungen haben sich dafür entschieden, sie zu überspringen, in der Hoffnung, dass R7RS R5RS ähnlicher sein wird als R6RS. Der R7RS-Standardisierungsprozess ist derzeit im Gange und hat versucht, sowohl die Wünsche der R5RS-Implementierer als auch die der R6RS-Leute zu berücksichtigen, indem eine kleine Basissprache in ihrer ersten Arbeitsgruppe standardisiert und dann eine zweite Arbeitsgruppe beauftragt wurde, die größeren Funktionen zu standardisieren. Dies ermöglicht der Sprache effiziente und nützliche Implementierungen sowohl auf winziger eingebetteter Hardware als auch auf leistungsfähigeren Maschinen.

Jetzt werde ich genauer sein:

PicoLisp ist eine wirklich, wirklich coole LISP. Es ist winzig! Der Autor hat es für sich selbst geschrieben und, so wie ich es verstehe, lebt er seit den 1980er Jahren davon. Wenn Sie jemals die Gelegenheit haben, an einem Vortrag von ihm teilzunehmen, sollten Sie es tun: Er ist wirklich interessant und kennt sich wirklich gut aus, und Sie werden nicht einmal den kleinsten Hauch von Mainstream oder Langeweile bekommen.

Ich bin mit Common LISP-Implementierungen nicht vertraut, daher werde ich sie nicht weiter kommentieren.

Guile ist das offizielle GNU Schema.

Racket ist ein R6RS-Schema, aber in letzter Zeit scheint es das Netz erweitert zu haben und versucht, "als Plattform für die Erstellung, das Design und die Implementierung von Sprachen zu dienen".

Huhn soll ein praktisches Schema sein. Es basiert auf R5RS und wird bis zu C kompiliert. Dies stellt sich als sehr, sehr wichtiger Vorteil heraus, da es absolut trivial ist, vorhandene C-Bibliotheken zu verwenden. Daher ist Chicken wahrscheinlich das nützlichste Schema, um Perl, Python, Ruby usw. als Ihre tägliche Skriptsprache zu ersetzen. Es gibt mehrere Leute, die es seit mehreren Jahren ausschließlich für alle ihre Bedürfnisse verwenden. Es hat ein interaktives REPL sowie einen Compiler. Die Community (sowohl auf der Mailingliste als auch im IRC) ist kompetent, freundlich und hilfsbereit.

Suchen Sie nach einer Implementierung mit vielen Modulen: Dies zeigt, dass sie weit verbreitet ist und wahrscheinlich etwas enthält, das bei der anstehenden Aufgabe hilft.

Suchen Sie nach einer Implementierung mit einem Compiler oder zumindest nach etwas, das nicht streng IDE oder REPL) basiert. Viele der Implementierungen sind dafür ausgelegt Der Unterricht ist für allgemeine Skripte sehr schwierig zu verwenden.

Ich würde Chicken empfehlen, da ich das benutze. Ich habe es in meinen persönlichen Projekten verwendet und ich habe es professionell verwendet (und verwende es derzeit).

Ich möchte keine unangemessenen Anstrengungen in etwas investieren, wenn es völlig veraltet ist - ich würde es immer noch lernen, wenn es beruflich "tot" wäre, aber nur mit einer akademischen Perspektive ...

Das Schema ist beruflich nicht tot, aber Sie müssen möglicherweise einige Anstrengungen unternehmen, um es in diesem Zusammenhang zu verwenden. So etwas wie Hühnchen ist weit mehr als eine akademische Tätigkeit und kann leicht fast alle Grundlagen der Hochsprachen abdecken, die Sie derzeit verwenden.

43
andyjpb

Ich kann nicht wirklich für alle Lisps sprechen, aber Clojure ist derzeit definitiv eine heiße und relevante Sprache. Eine Londoner Clojure-Benutzergruppe, zu der ich Anfang dieser Woche gegangen bin, hatte über 100 Teilnehmer ....

Ich fand es eine sehr aufschlussreiche Erfahrung, LISP in Form von Clojure im letzten Jahr zu lernen (nach viel Erfahrung mit Java und C #). Hauptgründe dafür sind:

  • Es hat einen ziemlich starken Schwerpunkt auf funktionaler Programmierung (mehr als die meisten anderen Lisps). Der Autor und BDFL Rich Hickey hat Haskell häufig als eine seiner Inspirationen für das Sprachdesign zitiert, was bedeutet, dass Sie Dinge wie vollständig unveränderliche Datenstrukturen und faule unendliche Sequenzen usw. erhalten.
  • Makro-Metaprogrammierung - Die LISP-Philosophie "Code ist Daten" ist schwer zu verstehen, es sei denn, Sie haben sie tatsächlich erlebt, aber dies ist einer der Gründe, warum Lisps dies ist ausdrucksstark und produktiv
  • Fantastische Unterstützung für Multi-Core-Parallelität - Ich denke, Clojure ist momentan die beste Sprache für die gleichzeitige Programmierung. Siehe http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey für eine aufschlussreiche Präsentation dazu

Aus folgenden Gründen scheint es auch eine praktische Wahl für den realen Produktionsgebrauch zu sein:

  • Ausführen auf der JVM mit sehr einfacher Java Interoperabilität ermöglicht Ihnen den Zugriff auf alle Bibliotheken und Tools im Java-Ökosystem
  • Es ist standardmäßig eine dynamische Sprache , was es sehr praktisch für die Entwicklung und das schnelle Prototyping mit kaum einer Boilerplate macht. Sie können jedoch statische Typhinweise hinzufügen, um dort, wo Sie sie benötigen, eine recht gute Leistung zu erzielen.

Ich persönlich kenne Leute, die Clojure in einigen Investmentbanken und Startups einsetzen. Ich habe auch Clojure als primäre Entwicklungssprache für mein eigenes Startup ausgewählt, also bin ich bereit, mein Geld dort einzusetzen, wo mein Mund ist :-)

27
mikera

Ich lerne zurzeit auch LISP (und ich liebe es). Ich benutze Common LISP, habe aber auch mit SBCL , Arc herumgespielt (beachten Sie, das ist Paul Grahams Version von LISP, der, Wie von Vitor Braga erwähnt, wurden Yahoo Store/Viaweb) und Allegro CL erstellt, die Visual Studio für LISP ähneln (können GUIs erstellen, ich habe sie jedoch nie verwendet).

Was die Verwendung betrifft, wurde LISP häufig in der künstlichen Intelligenz verwendet, aber ich bin ehrlich, ich bin mir nicht sicher, wie viele andere "allgemeine" Anwendungen für LISP verwendet werden. Viele der Websites, die ursprünglich in LISP erstellt wurden, wurden in anderen Sprachen neu geschrieben, sodass es schwer zu sagen ist, dass sie in der Webentwicklung verwendet werden (nicht, dass dies nicht der Fall ist, aber die größeren Websites, die sie verwenden, tun dies nicht mehr ). Nach einer schnellen Suche (sehr schnell) finden Sie hier eine Liste der in Common LISP geschriebenen Software von Wikipedia .

[BEARBEITEN] Für die professionelle Verwendung von LISP gibt es Jobs, bei denen Sie LISP verwenden müssten. Sie sind nicht so zahlreich wie beispielsweise Java oder C # -Jobs, aber sie existieren. Ich denke, LISP ist eine dieser Sprachen, die für interne Anwendungen verwendet wird und möglicherweise einen Wettbewerbsvorteil bietet, den Unternehmen nicht bieten Ich erinnere mich an einen Beitrag auf P.SE, in dem festgestellt wurde, dass Smalltalk im Finanzbereich ähnlich war.

Wenn Sie zeigen können, dass Sie in der Lage sind, verschiedene Paradigmen zu lernen, können sich weitere Türen öffnen, selbst wenn Sie LISP nicht im Job verwenden.

"LISP ist es wert, für die tiefgreifende Erfahrung der Aufklärung gelernt zu werden, die Sie haben werden, wenn Sie es endlich bekommen. Diese Erfahrung wird Sie für den Rest Ihrer Tage zu einem besseren Programmierer machen, selbst wenn Sie LISP selbst nie wirklich oft verwenden." - Eric Raymond, "Wie man ein Hacker wird"

[/BEARBEITEN]

9
Jetti

Wenn Sie heute LISP lernen möchten, schauen Sie sich entweder Racket an, eine schnelle Schemaimplementierung (nun, es ist tatsächlich ein wenig vom Schema abgewichen, also ist es jetzt ein eigener Dialekt), oder Clojure, die von dem profitiert JVM, auf der es ausgeführt wird (so dass Millionen von Bibliotheken verfügbar sind und Sie es mit Ihrem eigenen Java Code) interagieren lassen können).

Selbst wenn Sie es nicht lernen, um es tatsächlich zu verwenden, ist es immer von Vorteil, es zu lernen: Sie lernen neue Denkweisen und Probleme, auch in anderen Sprachen, wenn Sie sich eine Weile mit LISP beschäftigt haben.

8
Fabien

Ein bedeutender Teil des Amazon-Backends befand sich früher in LISP, wurde aber jetzt in C++ umgeschrieben, wie ich gehört habe (ich muss zugeben, dass ich keine zuverlässige Quelle dafür habe).

Yahoo! Stores ist eines der klassischen Beispiele für LISP-Web-Apps. Von der Yahoo! Speichert Ruhm, von dem Sie vielleicht schon gehört haben Paul Graham . Graham ist einer der bekanntesten LISP-Befürworter und schreibt ausführlich über dieses Thema. Vielleicht möchten Sie seine Website lesen, um seine Punkte zu kennen.

AutoCAD hatte früher einen LISP-Dialekt für sein Makrosystem. Ich weiß nicht, ob es das noch tut.

Schema ist eine saubere Sprache und sehr elegant. Es ist wahrscheinlich meine Lieblingsprogrammiersprache, daher bin ich möglicherweise voreingenommen. Wenn ich jetzt eine Hauptanwendung schreiben würde, würde ich wahrscheinlich eine Skeleton-Anwendung in C schreiben, Geschäftsregeln in Schema erweitern und definieren. Dies ermöglicht es mir, Schema zu verwenden und C zu nutzen - für Geschwindigkeit und für die bloße Verfügbarkeit von Bibliotheken für fast alles.

7
Vitor Py

Wird LISP in der heutigen Welt noch praktiziert/verwendet oder ist es eine Legacy-Sprache wie FORTRAN/COBOL? Ich meine, abgesehen davon, dass vorhandener Code beibehalten wird, wird er überhaupt für neue Projekte verwendet?

Ich kenne mehrere Leute, die Lisps in einigen Startups im Silicon Valley machen, und ich weiß, dass Amazon.com LISP von Anfang an verwendet (obwohl ich gehört habe, dass sie es aus irgendeinem Grund durch C++ ersetzen?).

Aber eine Firma, die man im Auge behalten sollte, ist Naughty Dog . Alle ihre Spiele sind mit einem LISP-Dialekt geschrieben. Ursprünglich haben sie ihre eigenen gerollt, aber sie verwenden MZScheme in der Uncharted-Serie.

Was ist der am häufigsten verwendete Dialekt? Ich bin auf Scheme und Common LISP als die beiden am weitesten verbreiteten Dialekte gestoßen und wollte Ihre Meinung dazu, welche am beliebtesten/nützlichsten zu lernen ist - und wäre sehr erfreut, wenn Sie Ressourcen für einen Anfänger vorschlagen könnten.

Ich würde wetten, dass Common LISP, Clojure, Scheme und Emacs LISP die vier am häufigsten verwendeten Dialekte sind, und von diesen würde ich vermuten, dass Scheme am häufigsten verwendet wird. Ich habe natürlich nichts, womit ich das belegen könnte. :) :)

Ich mag SICP und den kleinen Schemer eher, wie von anderen vorgeschlagen, aber ich würde auch vorschlagen Land of LISP , was eine ziemlich unterhaltsame Lektüre ist. :) :)

4
greyfade

Ich denke, es hängt teilweise davon ab, was Sie damit machen möchten - wenn Sie Ihre Einblicke in die verschiedenen Konzepte der Programmierung vertiefen und sich zu einem besseren Programmierer machen möchten, dann würde ich sagen, dass es sich lohnt, zumindest ein Minimum an LISP zu lernen. Wenn Sie nach einer weiteren Sprache suchen, die Sie Ihrem Lebenslauf hinzufügen können, um einen Job mit dieser Sprache zu finden, möchten Sie wahrscheinlich woanders suchen. Es gibt nicht so viele LISP-Jobs da draußen.

Ich persönlich versuche entweder SBCL oder in jüngerer Zeit Clojure (und einige Emacs LISP, aber das liegt daran, dass ich ein langjähriger Emacs-Benutzer bin - ich würde versuchen, Emacs LISP zu lernen, wenn ich versuche, LISP zu lernen). Jetzt muss ich nur noch die Zeit finden, um tatsächlich mit diesen Sprachen zu spielen ...

2
Timo Geusch

Ich weiß nicht, dass es in LISP eine Menge Jobs gibt, ich kann sie sicherlich nicht sehen. Aber ich erinnere mich an eine lange Zeit, in der ich über eine NASA-Sonde gelesen habe, auf der LISP ausgeführt wurde und die neuen Code von der Erde einfügen konnte.

Auch in New York ist die Clojure-Meetup-Gruppe riesig. Ich vermute, wenn Sie interessiert sind und zu Ihrer Clojure-Meetup-Gruppe gehen, finden Sie möglicherweise Möglichkeiten, sich zu vernetzen und Jobs zu finden (keine Clojure-Jobs, sondern Dinge wie Java/C++/etc.). Es scheint im Raum New York absolut enorm zu sein, andere Gebiete können variieren.

Auch LISP ist eine andere Denkweise. Zusätzlich führen LISP und SQL dazu, dass Tonnen verschachtelter Ausdrücke verwendet werden. Ich habe eine Tonne SQL verwendet und dann festgestellt, dass LISP sinnvoller ist. Wenn Sie jedoch Probleme mit SQL haben, sich an super verschachtelte Klammern und Ausdrücke zu gewöhnen, während Sie LISP verwenden, wird es wahrscheinlich viel einfacher, SQL-Ausdrücke herauszufinden.

Ein klassisches Beispiel ist die Implementierung von MAX (a, b, c). Sie könnten eine verschlungene Funktion mit einer Reihe von if-Anweisungen erstellen. Oder könnte man einfach sagen

MAX (MAX (a, b), c)

und verwende zwei einfache verschachtelte Aufrufe der beiden Elemente MAX, die für mich leichter zu lesen sind. Wenn die Leistung ein Problem darstellt, möchten Sie dies möglicherweise auch andersherum tun. Ich habe mich jedoch nicht darum gekümmert, die Anzahl der Vergleiche bei der Verwendung der einzelnen Methoden zu zählen ... Auch wenn Sie MAX über ein C-Makro oder eine andere Methode implementieren, die das auswertet Ausdrücke mehrmals erhalten Sie möglicherweise nicht das erwartete Ergebnis, da der Ausdruck möglicherweise mehrmals ausgewertet wird. Achten Sie daher auf Nebenwirkungen ...

2
Cervo

Zwei zusätzliche Punkte:

Erstens ist LISP eine großartige Sprache zum Schreiben von Code, in der Interaktionen zwischen Funktionen oder Daten häufig komplex sind. Wenn Sie in vielen gängigen Sprachen verwirrt sind, warum Ihr Programm das tut, was es tut, müssen Sie spezielle Funktionen schreiben, damit Sie den internen Status des Programms während des Vorgangs überprüfen können. In einigen Sprachen müssen Sie dann warten, bis Ihr Code neu kompiliert wurde. Natürlich kann es Tools wie Debugger geben, die dabei helfen. In LISP benötigen Sie jedoch nur eine Möglichkeit, das Programm zu stoppen, und dann haben Sie normalerweise Zugriff auf alles in LISP. In Common LISP gebe ich manchmal einfach ^ C ein oder rufe error in eine einzelne Funktion auf (dies ist das einzige, was neu kompiliert werden muss, und Sie müssen nichts tun, um es neu zu kompilieren). . Sobald ich das Programm stoppe, werde ich sofort in einen Debugger geworfen - aber der Debugger gibt mir die gesamte Leistung von LISP und ich kann den Debugger beenden, bestimmte Funktionen aufrufen usw. Ich kann leicht jede der Datenstrukturen untersuchen in meinem Programm. Die meisten Programme sollten ähnliche Praktiken zulassen. LISP ist in dieser Hinsicht nicht einzigartig, aber was es bietet, geht über das hinaus, was viele beliebte Sprachen bieten.

Zweitens: Wenn Sie mit einem LISP-Dialekt experimentieren möchten, würde ich dies nicht tun, ohne (a) einen Editor zu verwenden, der mit Klammern übereinstimmt, und (b) die richtige LISP-Einrückung zu lernen. Es wäre eine gute Idee, einen Editor zu verwenden, der auch für Sie die richtige Einrückung annähert. Die Code-Formatierung im C/C++/Java-Stil wurde für Sprachen mit weniger Klammern/Klammern als LISP entwickelt. Der hübsche LISP-Druckstil funktioniert gut, wenn Sie damit vertraut sind, und Sie werden nicht durch Klammern verwirrt oder verschwenden die Hälfte Ihres Platzes, indem Sie eine schließende Klammer pro Zeile setzen.

2
Mars

Ich möchte eine Perspektive zu Common LISP und Scheme hinzufügen. Ich habe Clojure aufgrund der JVM vermieden, daher habe ich nicht viel Perspektive.

Schema ist eine schöne prägnante, gut definierte Sprache. Es waren viele Entscheidungen erforderlich, die CL aufgrund seines Erbes treffen musste, und es wurde ein reinerer Ansatz gewählt. Beispielsweise befinden sich Variablen und Funktionen im selben Namespace. Die Standardsprache ist kleiner und prägnanter. Dies ist gut geeignet, um Ihnen die Dinge beizubringen, in denen LISP gut ist. Beispielsweise wird die Verwendung von Rekursion anstelle von Iteration unter Druck gesetzt, da sie standardmäßig keine iterativen Schleifen aufweist und eine Tail-Call-Optimierung erfordert . Das Programm verfügt über ein sehr interessantes hygienisches Makrosystem, für das das Lernen von großem Wert ist. Aber IMO, ich würde empfehlen, zuerst unhygienische Makros im CL-Stil zu lernen, von denen die meisten (?) Schemadialekte mindestens eine Implementierung bieten, auch wenn sie nicht Teil der Spezifikation sind. Da es sehr wahrscheinlich ist, dass Sie eine Sprache lernen möchten, um zu lernen, würde ich Scheme empfehlen, da viele seiner Konzepte leicht auf andere Lisps und dynamische Sprachen im Allgemeinen übertragen werden können.

Trotzdem ist die Community von Scheme fragmentiert und scheint, abgesehen von ein paar kleinen Taschen, hauptsächlich der Forschung gewidmet zu sein, um echte Arbeit zu erledigen ... Zum Beispiel hat jeder Dialekt seinen eigenen Paketmanager, und Pakete sind meistens nicht portierbar über Dialekte hinweg, was ein großes Problem in der Systemgemeinschaft darstellt.

Common LISP hingegen scheint der viel pragmatischere Ansatz zur Entwicklung einer Sprache zu sein. Der Standard ist so, dass viel LISP-Code zwischen Implementierungen portierbar ist, viele Compiler schnell und gut optimiert sind. Es gibt eine große Anzahl von Paketen, von denen viele zwischen Implementierungen portierbar sind. Und scheinbar wird eine (vergleichsweise) große Menge realer Produkte in der Sprache erstellt. Und mit say quicklisp fühlt sich das Paketmanagement ziemlich nahe an dem an, was Sie in einer modernen Community wie Ruby oder Node erhalten würden. CL ist jedoch nicht ohne Mängel, es hat zu diesem Zeitpunkt im Vergleich zum Schema eine sehr große Spezifikation, und selbst das Objektsystem CLOS, das traditionell als Bibliothek in Lisps geschrieben wird, ist Teil der Spezifikation IIRC. Und Sie können fühlen, wie das Erbe in einem großen Teil des Systems verwurzelt ist. Der Standardansatz des Build-Systems zum Extrahieren eines Bildes zur Kompilierung fühlt sich beispielsweise besonders geheimnisvoll an.

Ansonsten sagte ich, ich könnte nicht über Clojure sprechen, und Emacs LISP ist eindeutig die richtige Wahl, wenn Sie Emacs-Erweiterungen schreiben möchten, und ganz klar nicht die richtige Wahl für andere Software.

TLDR; Wenn Sie lernen möchten, empfehle ich Scheme. Wenn Sie jedoch Software erstellen möchten, würde ich Common LISP der beiden Haupt-LISP-Varianten empfehlen.

1
Arelius

Im Moment habe ich den Eindruck, dass LISP hauptsächlich in Beratungsgeschäften verwendet wird (nicht, dass Beratungsgeschäfte es meistens verwenden).

Für praktische Software gilt dies als etwas übertrieben. Meistens, weil die Leute nicht daran gewöhnt sind, glaube ich.

Traditionell ist Scheme ein ziemlich akademischer Dialekt von LISP, und Common LISP war der Branchendialekt.

LISP ist besonders nützlich für symbolische Manipulations- und Reflexionsfähigkeiten.

Als Beispiel war der Code, den ich geschrieben habe, um LISP zu lernen, ein Programm, das zufällige Lambda-Funktionen konstruierte, sie auswertete und dann operierte, um den Unterschied der Funktion zu einer Zielfunktion zu minimieren. All das war direkte Manipulation. In einer Sprache wie C++ oder Java hätte ich eine Darstellung für die Funktionen erfinden müssen, die der Computer manipulieren würde.

1
Paul Nathan

Ein weiterer Faktor, der bei der Auswahl des zu lernenden LISP-Dialekts berücksichtigt werden muss, kann die Anzahl und Qualität der Implementierungen sein. Wenn ein Dialekt nur eine oder zwei Implementierungen hat, bleiben Sie bei ihren Fehlern, bis diese behoben sind, und es besteht immer die Möglichkeit, dass die Leute aufhören, die Implementierung zu verfeinern. An sich ist dies kein Grund, keinen LISP-Dialekt mit einer einzelnen Implementierung zu verwenden, aber es ist etwas, das berücksichtigt werden muss. Ein Vorteil von Scheme und Common LISP ist, dass es viele Implementierungen dieser Dialekte gibt. Beide Sprachen haben Standards veröffentlicht, so dass relativ neue Implementierungen wahrscheinlich meistens denselben Code ausführen. Einige dieser Implementierungen gibt es schon lange, sie befinden sich jedoch noch in der aktiven Entwicklung: Sie sind jetzt qualitativ hochwertige Implementierungen und werden noch weiterentwickelt. (Zum Beispiel ist Steel Bank Common LISP - SBCL, wie oben erwähnt - extrem schnell. Ich frage mich, wie einfach es wäre, JVM-basiertes LISP so schnell zu machen.)

0
Mars

Ich habe viel aus den Antworten gelernt. Vielen Dank an alle, die zu diesem aufschlussreichen Gespräch beigetragen haben.

Ich sollte newLISP erwähnen. Obwohl es sich sowohl von CL als auch von Scheme ein wenig unterscheidet, implementiert es viele sehr nützliche Funktionen. Ich finde den http-Server, die Multi-Processing-Funktionalität (Cilk) und die Remote-Evaluierungsfunktionen sehr sauber und einfach zu bedienen.

Die einzelne ausführbare Datei ist klein, schnell und enthält viele coole Batterien.

0
CyberFonic