Veröffentlichung von SBCL 2.4.2, Implementierungen der Programmiersprache Common Lisp

Die Veröffentlichung von SBCL 2.4.2 (Steel Bank Common Lisp), einer freien Implementierung der Programmiersprache Common Lisp, ist erfolgt. Der Code des Projekts ist in den Sprachen Common Lisp und C geschrieben und steht unter der BSD-Lizenz.

In der neuen Version:

  • Die Kompilierung durch das System selbst auf x86-64 mit Linux erzeugt jetzt bitgenau identische, plattformübergreifend kompilierte fasl-Dateien, wenn die Build-Host cmucl, ccl, clisp oder sbcl selbst ist.
  • Optimierungen:
    • Eine große Anzahl interner Tabellen, insbesondere die, die die Unicode-Unterstützung betreffen, wurde auf die Verwendung von kollisionsfreien Hash-Funktionen (perfect) umgestellt, was die Geschwindigkeit verbessert und die Größe reduziert hat.
    • FIND, POSITION, ASSOC und RASSOC mit Argumenten unveränderlicher Sequenzen, die Symbole als Schlüssel enthalten, werden nun zum Suchen mit kollisionsfreien Hashes kompiliert.
    • In x86-64-Systemen wurde der Sprung von Jump zu Jump im Compiler behoben.
  • Fehlerbehebungen:
    • Die Möglichkeit, sowohl von SEQUENCE als auch von SB-MOP:FUNCALLABLE-STANDARD-OBJECT zu erben, wurde wiederhergestellt.
    • COERCE konvertiert Lambda-Formen nicht in Funktionen, wenn der angegebene Typ ein Untertyp von FUNCTION ist.
    • LOG mit double-float und rationalen Argumenten (in beliebiger Reihenfolge) verliert durch ein zwischenzeitliches single-float-Argument keine Präzision.
    • LOG zur Basis 2 einer ganzzahligen Potenz von zwei gibt höchstwahrscheinlich eine mathematisch exakte Antwort.
    • LOG auf rationalen Zahlen, die nahe bei Eins mit Zähler oder Nenner nahe einer Potenz von zwei sind, verwendet log1p und verliert somit weniger Präzision.
    • Das externe Format utf-8 mit Unix-Zeilenenden aktualisiert die Informationen zu seinen Zeichengrößen, wenn der Schnellmodus für ASCII-Zeichenpuffer verwendet wird.
    • Der Inhalt möglicherweise nicht mehr gültiger dynamisch existierender cons-Zellen wurde in der METHOD PRINT-OBJECT für THREAD-Objekte nicht ausgegeben.
    • Ständige Platzierung externer Einstiegspunkte für Funktionen vor allen anderen lokalen Funktionen.
    • Entfernung inaktiver Optimierungsbemerkungen für kommagetrennte Formulare und Einzelaufrufe von APPEND mit hoher Geschwindigkeit.
    • Eine Endlosschleife in COPY-SEQ bei Arrays der Länge null mit dem Elementtyp NIL.
    • Fehlerbehebung beim Kompilieren von Strukturkonstruktoren auf oberster Ebene.
  • Fehlerbehebungen in SB-SIMD:
    • Verbesserung der Grenzwertüberprüfung in SB-SIMD.
    • Fehlerbehebung von SB-SIMD AVX f64.4-reverse.
    • Fehlerbehebung beim Mischen in SB-SIMD auf AVX und SSE2.
    • Fehlerbehebung der Lebensdauer in sse+xmm0 VOPs.

Quelle: opennet.ru

60GB SSD 8Gb DDR4