Die Veröffentlichung von SBCL 2.3.11 (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:
- Kleinere Inkonsistenzen:
- Streams mit dem Parameter external-format, der mit „:REPLACEMENT“ definiert ist, werden die Daten für den Ersatz von Informationen einmal im Stream anwenden, was zu Dekodierungsfehlern führt (und nicht, wie in einigen Fällen, einmal pro Bytefolge, wobei jedes keine gültige Startposition für ein Zeichen für dieses external-format darstellt).
- External-format-Definitionen, die nicht unterstützte oder nicht erkannte Varianten verwenden, werden jetzt einen Fehler signalisieren.
- Verbesserungen:
- Bei der Dispatching von generischen Funktionen, die eine Standard- oder Kurzmethodenkombination verwenden, wird das System im Falle des Fehlens wichtiger anwendbarer Methoden die generische Funktion SB-PCL:NO-PRIMARY-METHOD aufrufen, deren Standardverhalten ein Fehlerhinweis ist. Benutzer können Methoden für diese generische Funktion definieren.
- Externe Formate unterstützen jetzt neue Zeilenoptionen für Einbyte- und utf-8-Kodierungen.
- Von Streams oder Oktetten signalisierte Fehler beim Kodieren und Dekodieren von Zeichen unterstützen jetzt USE-VALUE-Neustart für Handler, die Ersetzungen für Ein- oder Ausgaben bereitstellen.
- READ-SEQUENCE und WRITE-SEQUENCE unterstützen benutzerdefinierte Sequenzen; die Standardimplementierung verarbeitet Element für Element, indem sie jeweils ein Byte oder Zeichen aus dem Stream liest oder in ihn schreibt.
- Optimierungen:
- Externe Formate mit :REPLACEMENT binden keine Handler mehr für Fehler von Konversionsfunktionen, was die Anzahl der cons-Operationen reduzieren und die Leistung erhöhen sollte.
- Wenn :EXTERNAL-FORMAT als Argument für STRING-TO-OCTETS oder OCTETS-TO-STRING dient und zur Compile-Zeit konstant ist, wird das externe Format während des Ladevorgangs aufgelöst und nicht bei jedem Aufruf.
- Der Compiler kann die Argumenttypen für einige Funktionen basierend auf dem abgeleiteten oder implizierten Typ des Wertes, den diese Funktion zurückgibt, einschränken.
- Der Compiler reduziert die Anzahl überflüssiger Typprüfungen in Funktionen wie ASSOC und GETF.
- Fehlerbehebungen:
- OCTETS-TO-STRING signalisiert oder wendet korrekt Ersetzungen an, wenn einbyte-externale Formate für wenig verbreitete Kodierungen (z. B. iso-8859-3) verwendet werden, anstatt Bits von der Adresse NIL zu übernehmen und diese Bits in Zeichen zu konvertieren.
- FILE-STRING-LENGTH gibt jetzt NIL zurück, wenn die Eingabewerte nicht in das externe Format des Streams kodiert werden.
- Tabellarische mehrbyte-externe Formate (EUC-JP, Shift-JIS, GBK) berücksichtigen jetzt das Ersetzungszeichen (im externen Format oder durch Neuladen) bei der Kodierung in Oktetten.
- Die Umwandlung von Oktetten mittels externer Formate UCS-2, UCS-4 und UTF-32 liest das Ende des Oktettarrays nicht mehr mit einer nicht ganzzahligen Anzahl von zwei- oder vierbyte-Einheiten.
- Die Umwandlung von Oktetten mittels externer Formate UCS-2, UCS-4 und UTF-32 gibt jetzt einen einfachen String zurück, wie es die Definition von OCTETS-TO-STRING erfordert.
- Die Verwendung eines ungültigen externen Formatarguments für OPEN oder WITH-OPEN-FILE (oder internes MAKE-FD-STREAM) führt nicht mehr zu einem Leck von Dateideskriptoren.
- SB-ROTATE-BYTE definiert die BYTE-Spezifikationen außerhalb des gültigen Bereichs, bevor sehr große Integer für Masken und Verschiebungen verwendet werden.
- Fehlerbehebung des Typausgabes bei der Kompilierung von SB-ROTATE-BYTE-Formen mit einer nicht nullen POSITION in der Byte-Definition.
- Behebung mehrerer Assemblerfehler bei der Kompilierung von MAKE-ARRAY, MAKE-STRING und anderen mit einer großen konstanten Größe.
- Behebung eines internen Fehlers bei der Kompilierung (SETF-SBIT) mit einem großen konstanten Index.
- Behebung eines internen Kompilierungsfehlers für Lambda-Funktionen mit einer ungültigen Parameterliste in LABELS.
- Behebung eines internen Kompilierungsfehlers bei der Kompilierung bestimmter unendlich rekursiver LABELS-Formen.
- Behebung eines internen Kompilierungsfehlers beim Versuch, zu einem bereits gelöschten Label zu springen.
- FILL-POINTER darf niemals negativ sein.
Quelle: opennet.ru
