Veröffentlichung von SBCL 2.3.11, einer Implementierung der Programmiersprache Common Lisp

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 Common Lisp und C geschrieben und steht unter der BSD-Lizenz. In dieser neuen Version:

  • Kleinere Inkompatibilitäten:
    • Streams mit dem Parameter external-format, der durch ":REPLACEMENT" definiert wurde, wenden die Ersetzungsdaten einmal im Stream an, was zu Dekodierungsfehlern führen kann (anders als in einigen Fällen, wo es einmal für die Bytefolge gilt, wobei jedes Byte keine gültige Startposition für ein Symbol in diesem external-format ist).
    • External-format-Definitionen werden jetzt Fehler signalisieren, wenn nicht unterstützte oder nicht erkannte Varianten verwendet werden.
  • Verbesserungen:
    • Im Rahmen der Dispatching-Prozesse von generischen Funktionen, die die Standard- oder Kurzmethoden-Kombination verwenden, wird das System in Abwesenheit relevanter Hauptmethoden die generische Funktion SB-PCL:NO-PRIMARY-METHOD aufrufen, deren Standardverhalten in der Signalisierung eines Fehlers besteht. Benutzer können Methoden für diese generische Funktion definieren.
    • Externe Formate unterstützen nun neue Zeilenvarianten für einbyte und UTF-8 Kodierungen.
    • Von den Funktionen für Ströme oder Oktette signalisierten Fehler bei der Kodierung und Dekodierung von Zeichen unterstützen jetzt den USE-VALUE Neustart für Handler, die Ersatzwerte für Ein- oder Ausgabe bereitstellen.
    • READ-SEQUENCE und WRITE-SEQUENCE unterstützen benutzerdefinierte Sequenzen; die Standardimplementierung verarbeitet die Elemente einzeln, indem sie ein Byte oder Zeichen in den Stream liest bzw. daraus schreibt.
  • Optimierungen:
    • Externe Formate mit :REPLACEMENT binden keine Handler mehr an Fehler von Konversionsfunktionen, was die Anzahl der cons-Operationen reduzieren und die Leistung steigern sollte.
    • Wenn :EXTERNAL-FORMAT als Argument für STRING-TO-OCTETS oder OCTETS-TO-STRING fungiert und zur Kompilierungszeit konstant ist, wird das externe Format beim Laden aufgelöst und nicht bei jedem Aufruf.
    • Der Compiler kann die Argumenttypen für bestimmte Funktionen basierend auf dem abgeleiteten oder implizierten Rückgabewerttyp dieser Funktion 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 Umsetzungen an, wenn einbyte externe Formate für weniger verbreitete Kodierungen (z. B. iso-8859-3) verwendet werden, anstatt Bits aus der Adresse NIL zu entnehmen und diese in Zeichen zu konvertieren.
    • FILE-STRING-LENGTH gibt jetzt NIL zurück, wenn die Eingabewerte nicht in ein externes Stream-Format kodiert sind.
    • Tabellarische mehrbyte externe Formate (EUC-JP, Shift-JIS, GBK) berücksichtigen jetzt das Ersatzzeichen (im externen Format oder durch Neuausführung) beim Kodieren in Oktette.
    • Die Umwandlung aus Oktetten mit Hilfe externer Formate UCS-2, UCS-4 und UTF-32 liest nun nicht mehr das Ende des Oktettarrays mit einer nicht ganzzahligen Anzahl von zwei- oder vierbyteeinheiten.
    • Die Umwandlung aus Oktetten mittels externer Formate UCS-2, UCS-4 und UTF-32 gibt jetzt eine einfache Zeichenkette zurück, wie es die Definition von OCTETS-TO-STRING verlangt.
    • Die Verwendung eines ungültigen externen Argumentformats für OPEN oder WITH-OPEN-FILE (oder internem MAKE-FD-STREAM) führt nicht mehr zu einem Leck des Dateideskriptors.
    • SB-ROTATE-BYTE definiert die BYTE-Spezifikationen außerhalb des zulässigen Wertes, bevor sehr große Ganzzahlen für Masken und Verschiebungen verwendet werden.
    • Korrektur des Typausgabe beim Kompilieren von SB-ROTATE-BYTE-Formen mit nicht-null POSITION in der Byte-Definition.
    • Behebung mehrerer Assemblerfehler beim Kompilieren von MAKE-ARRAY, MAKE-STRING und anderen mit großem konstanten Größen.
    • Behebung eines internen Fehlers beim Kompilieren (SETF-SBIT) mit großem konstanten Index.
    • Korrektur eines internen Fehlers des Compilers für Lambda-Funktionen mit ungültiger Parameterliste in LABELS.
    • Behebung eines internen Compilerfehlers beim Kompilieren einiger unendlich rekursiver LABELS-Formen.
    • Korrektur eines internen Fehlers des Compilers beim Versuch, auf ein bereits gelöscht Label zu springen.
    • FILL-POINTER darf niemals negativ sein.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster