In A Critique of Common Lisp, geschrieben von Rodney A. Brooks und Richard P. Gabriel aus Stanford im Jahr 1984, werden einige Entwurfsentscheidungen des Normalisierungsausschusses von Common Lisp erörtert. Während der größte Teil der Diskussion gültig bleibt, gibt es zwei Aussagen, die sich auf die derzeit verfügbare Technologie beziehen und heute möglicherweise falsch sind.
Diese beiden Aussagen sind:
Zu viele Kosten der Sprache wurden mit der Ermahnung abgewiesen, dass 'jeder gute Compiler' sich um sie kümmern kann. Bisher hat noch niemand einen Compiler geschrieben, der einen Bruchteil der erwarteten Tricks ausführt - und wird dies wahrscheinlich auch nicht ohne großen Aufwand tun.
Da ich ein Anfänger oder sogar ein Lehrling von Common Lisp bin, kann ich nicht spezifischer sein als die Autoren. Sie scheinen zu behaupten, dass in verschiedene Aspekte der Sprache eine große Allgemeinheit und Flexibilität eingebaut wurde, was das Schreiben eines guten Compilers ziemlich schwierig macht.
In COMMON LISP wurde die Gleitkomma-Arithmetik etwas zu stark kontrolliert. Und obwohl das korrekte Verhalten eines Gleitkomma-intensiven Programms erreicht werden kann, kann die Leistung stark variieren.
Soweit ich weiß, scheint es möglich, effizienten numerischen Code in Common Lisp zu schreiben, aber es ist schwieriger als es sein muss.
Das war vor dreißig Jahren. Wie sollte ich diese Aussage heute betrachten, wenn ich bereit bin, Common-Lisp-Programme für eine der gemeinsamen Implementierungen freier Software (CLISP, SBCL et al.) Zu schreiben?
quelle
Antworten:
Das Papier ist in vielerlei Hinsicht interessant.
Der interessanteste Teil ist dieser: Die Autoren fälschten das Papier von 1984 nur zwei Jahre später, 1986, selbst. Brooks und Gabriel entwickelten einen hochoptimierenden Lisp-Compiler und verkauften ihn mehrere Jahre kommerziell sehr erfolgreich: Lucid Common Lisp (PDF).
Die Wartung für diesen Lisp-Compiler ist weiterhin über LispWorks verfügbar : Es heißt jetzt Liquid Common Lisp .
Die Compiler-Optimierungen von Liquid CL sind in Kapitel 3 des Advanced User's Guide : Optimieren von Lisp-Programmen dokumentiert .
In Lucid CL wurden mehrere kommerzielle Anwendungen geschrieben und bereitgestellt. Beispielsweise wurde in meiner Heimatstadt das erste öffentliche Verkehrsinformationssystem für den HVV (Hamburger Verkehrsverbund) mit Lucid CL auf einer SUN SPARC-Station bereitgestellt. Es stand der Öffentlichkeit in Bahnhöfen über einen großen Touchscreen und im Callcenter zur Verfügung.
Lucid CL war erfolgreich, weil sein Compiler für den Produktionsmodus schnelle Common-Lisp-Anwendungen erstellte, hauptsächlich für Unix / RISC-Plattformen.
Brooks und Gabriel schreiben 1986 über Lucid Common Lisp:
So hatten sie gerade das umgesetzt, was die A-Kritik von Common Lisp für schwierig oder unmöglich hielt.
Heutzutage führen die fortschrittlicheren Implementierungen eine Menge Optimierungen durch, aber die Hardware ist auch mehr als 1000 Mal schneller als 1984. Eine VAX 11/780 verfügte damals über ein MIPS (Millionen Anweisungen pro Sekunde) und eine Lisp-Maschine befand sich ebenfalls in dieser Bereich. Ein Motorola 68000 hatte eine Taktrate von 8 MHz.
Die Kritik an der Gleitkomma-Leistung und der allgemein variierenden Leistung ist immer noch gültig, aber dies spiegelt die Wahl der Implementierer wider. Einige Implementierungen wurden nicht als Hochleistungscompiler entwickelt. Ihr Hauptaugenmerk könnte auf Portabilität, Kompaktheit oder etwas anderem liegen und daher haben sie unterschiedliche Implementierungsziele.
Als Benutzer / Entwickler ist man nicht gezwungen, portablen Code zu schreiben und alle über zehn derzeit unterstützten Common Lisp-Systeme zu verwenden. Verwenden Sie die Implementierung, die für das Anwendungsproblem am besten geeignet ist.
quelle
Als dieses Papier 1984 geschrieben wurde, war ein Computer mit 1 Megabyte RAM und einer 20-Megabyte-Festplatte, der auf Ihrem Schreibtisch sitzen kann, eine große Sache. Natürlich werden Streitigkeiten über die Praktikabilität einer Sprache auf so hohem Niveau entstehen, wie Lisp es mit spartanischer Hardware zu tun hat. Die Fortschritte sowohl in der Hardware als auch in der Compilertechnologie, die seitdem stattgefunden haben, haben das Schreiben und Ausführen von Lisp-Programmen ungeachtet etwaiger numerischer Ineffizienzen in der Sprache erheblich vereinfacht.
Programmierer tauschen oft Recheneffizienz gegen Programmiereffizienz. Lisp kann eine langsame Sprache sein (in einigen Implementierungen, aber auch in anderen Sprachen), hat aber auch den Ruf, schnell entwickelt zu werden, und viele Programme erfordern keine hochoptimierte Infrastruktur, um eine angemessene Leistung zu erzielen.
Die Wahl der Lisp-Implementierung kann das Leistungsprofil Ihrer Programme stark beeinflussen. Beispielsweise gibt CLISP ohne weiteres zu, dass "Wenn Ihr Code stark numerisch ist, bevorzugen Sie möglicherweise CMUCL." In mehreren modernen Lisp- (und Scheme-) Implementierungen können Sie numerische Typhinweise angeben, um die numerische Leistung zu verbessern.
Kurz gesagt, die Situation ist heute viel besser als damals.
quelle