Dies ist eine etwas knifflige Frage, da die Unterschiede sowohl technischer als auch (was meiner Meinung nach wichtiger ist) kultureller Natur sind. Eine Antwort kann immer nur eine ungenaue, subjektive Sichtweise liefern. Dies werde ich hier bereitstellen. Einige technische Details finden Sie im Schema-Wiki .
Scheme ist eine Sprache, die auf dem Prinzip basiert, ein elegantes, konsistentes und durchdachtes Basissprachensubstrat bereitzustellen, auf dem sowohl praktische als auch akademische Anwendungssprachen aufbauen können.
Selten werden Sie jemanden finden, der eine Anwendung im reinen R5RS- (oder R6RS-) Schema schreibt, und aufgrund des minimalistischen Standards ist der meiste Code nicht über Schema-Implementierungen hinweg portierbar. Dies bedeutet, dass Sie Ihre Schema-Implementierung sorgfältig auswählen müssen, wenn Sie eine Art Endbenutzeranwendung schreiben möchten, da die Auswahl weitgehend bestimmt, welche Bibliotheken Ihnen zur Verfügung stehen. Andererseits bedeutet die relative Freiheit beim Entwerfen der tatsächlichen Anwendungssprache, dass Schemaimplementierungen häufig Funktionen bereitstellen, die anderswo unbekannt sind. Mit PLT Racket können Sie beispielsweise statische Typisierung verwenden und eine sehr sprachbewusste IDE bereitstellen.
Interoperabilität über die Basissprache hinaus wird durch den Community-gesteuerten SRFI-Prozess bereitgestellt, die Verfügbarkeit eines bestimmten SRFI variiert jedoch je nach Implementierung.
Die meisten Schemadialekte und -bibliotheken konzentrieren sich auf funktionale Programmiersprachen wie Rekursion statt Iteration. Es gibt verschiedene Objektsysteme, die Sie als Bibliotheken laden können, wenn Sie OOP ausführen möchten. Die Integration in vorhandenen Code hängt jedoch stark vom Scheme-Dialekt und seiner umgebenden Kultur ab (Chicken Scheme scheint objektorientierter zu sein als beispielsweise Racket).
Die interaktive Programmierung ist ein weiterer Punkt, in dem sich die Untergemeinschaften des Schemas unterscheiden. Das MIT-Schema ist für seine starke Interaktivitätsunterstützung bekannt, während sich PLT Racket viel statischer anfühlt. Auf jeden Fall scheint die interaktive Programmierung für die meisten Untergemeinschaften des Schemas kein zentrales Anliegen zu sein, und ich habe noch keine Programmierumgebung gesehen, die ähnlich interaktiv ist wie die der meisten Common Lisps.
Common Lisp ist eine vom Kampf getragene Sprache, die für die praktische Programmierung entwickelt wurde. Es ist voller hässlicher Warzen und Kompatibilitäts-Hacks - ganz im Gegenteil zu Schemes elegantem Minimalismus. Aber es ist auch viel nützlicher, wenn es für sich genommen wird.
Common Lisp hat ein relativ großes Ökosystem tragbarer Bibliotheken hervorgebracht. Normalerweise können Sie die Implementierung auch nach der Anwendungsbereitstellung jederzeit ohne allzu große Probleme wechseln. Insgesamt ist Common Lisp viel einheitlicher als das Schema, und radikalere Sprachexperimente werden, wenn überhaupt, normalerweise als tragbare Bibliothek eingebettet, anstatt einen ganz neuen Sprachdialekt zu definieren. Aus diesem Grund sind Spracherweiterungen eher konservativ, aber auch kombinierbarer (und oft optional).
Universell nützliche Spracherweiterungen wie Schnittstellen für Fremdfunktionen werden nicht auf formalem Wege entwickelt, sondern basieren auf Quasi-Standardbibliotheken, die auf allen wichtigen Common Lisp-Implementierungen verfügbar sind.
Die Sprachsprachen sind eine wilde Mischung aus funktionalen, imperativen und objektorientierten Ansätzen, und im Allgemeinen fühlt sich Common Lisp eher wie eine imperative als wie eine funktionale Sprache an. Es ist auch äußerst dynamisch, wahrscheinlich mehr als jede der gängigen dynamischen Skriptsprachen (die Neudefinition von Klassen gilt beispielsweise für vorhandene Instanzen, und das Bedingungssystem hat eine integrierte Interaktivität), und interaktive, explorative Programmierung ist ein wichtiger Bestandteil von "der Common Lisp Weg." Dies spiegelt sich auch in den für Common Lisp verfügbaren Programmierumgebungen wider, die praktisch alle eine direkte Interaktion mit dem laufenden Lisp-Compiler bieten.
Common Lisp verfügt über ein integriertes Objektsystem (CLOS), ein Zustandsbehandlungssystem, das wesentlich leistungsfähiger ist als die bloße Ausnahmebehandlung, Laufzeit-Patchbarkeit und verschiedene Arten von integrierten Datenstrukturen und -nutzungszwecken (einschließlich des berüchtigten LOOP- Makros, einer Iteration) Sublanguage viel zu hässlich für Scheme, aber viel zu nützlich, um es nicht zu erwähnen, sowie ein printf-ähnlicher Formatierungsmechanismus mit GOTO-Unterstützung in Format-Strings.
Sowohl aufgrund der bildbasierten, interaktiven Entwicklung als auch aufgrund der größeren Sprache sind Lisp-Implementierungen in der Regel betriebssystemübergreifend weniger portabel als Schema-Implementierungen. Das Ausführen eines Common Lisp auf einem eingebetteten Gerät ist beispielsweise nichts für schwache Nerven. Ähnlich wie bei der Java Virtual Machine treten auch bei Maschinen mit eingeschränktem virtuellem Speicher (z. B. OpenVZ-basierten virtuellen Servern) Probleme auf. Schemaimplementierungen sind dagegen tendenziell kompakter und portabler. Die zunehmende Qualität der ECL-Implementierung hat diesen Punkt etwas gemildert, obwohl sein Wesen immer noch wahr ist.
Wenn Sie sich für kommerziellen Support interessieren, gibt es einige Unternehmen, die ihre eigenen Common Lisp-Implementierungen anbieten, darunter grafische GUI-Builder, spezialisierte Datenbanksysteme usw.
Zusammenfassend ist Scheme eine eleganter gestaltete Sprache. Es ist in erster Linie eine funktionale Sprache mit einigen dynamischen Merkmalen. Seine Implementierungen repräsentieren verschiedene inkompatible Dialekte mit besonderen Merkmalen. Common Lisp ist eine vollwertige, hochdynamische Multi-Paradigmen-Sprache mit verschiedenen hässlichen, aber pragmatischen Merkmalen, deren Implementierungen weitgehend miteinander kompatibel sind. Schemadialekte sind in der Regel statischer und weniger interaktiv als Common Lisp. Gängige Lisp-Implementierungen sind in der Regel schwerer und schwieriger zu installieren.
Egal für welche Sprache Sie sich entscheiden, ich wünsche Ihnen viel Spaß! :) :)