Uitgave SBCL 2.3.11 (Steel Bank Common Lisp) is gepubliceerd, een vrije implementatie van de programmeertaal Common Lisp. De code van het project is geschreven in de talen Common Lisp en C, en wordt verspreid onder de BSD-licentie. In de nieuwe uitgave:
- Kleine incompatibiliteiten:
- Streams met de parameter external-format, gedefinieerd met “:REPLACEMENT”, zullen de vervangingsgegevens één keer in de stream toepassen, wat leidt tot decoderingfouten (in plaats van, in sommige gevallen, één keer voor elke byte-sequentie, waarvan geen enkele een geldige startpositie voor het symbool voor dit external-format is).
- External-format-kwalificaties die niet-ondersteunde of niet-herkende opties gebruiken, zullen nu een fout signaliseren.
- Verbeteringen:
- In het proces van dispatching van generieke functies, die standaard of korte combinatiemethoden gebruiken, zal het systeem, bij afwezigheid van hoofdtoepasbare methoden, de generieke functie SB-PCL:NO-PRIMARY-METHOD aanroepen, waarvan het standaardgedrag het genereren van een fout is. Gebruikers kunnen methoden voor deze generieke functie definiëren.
- Externe formaten ondersteunen nu nieuwe regelvarianten voor eenbyte- en utf-8 coderingen.
- Fouten over de codering en decodering van symbolen signaliseerd door functies van streams of octetten ondersteunen nu USE-VALUE herstart voor handlers, die vervangingen voor invoer of uitvoer bieden.
- READ-SEQUENCE en WRITE-SEQUENCE ondersteunen door de gebruiker gedefinieerde sequenties; de standaardimplementatie behandelt element voor element, waarbij één byte of symbool gelezen of geschreven wordt in/uit de stream.
- Optimalisaties:
- Externe formaten met :REPLACEMENT koppelen niet langer handlers voor fouten van conversiefuncties, wat het aantal cons-bewerkingen moet verminderen en de prestaties moet verhogen.
- Als :EXTERNAL-FORMAT een argument is voor STRING-TO-OCTETS of OCTETS-TO-STRING en een constante is tijdens de compilatie, wordt het externe formaat opgelost tijdens het laden, in plaats van bij elke aanroep.
- De compiler kan de types van argumenten voor sommige functies beperken op basis van het afgeleide of impliciete type waarde dat door deze functie wordt geretourneerd.
- De compiler vermindert het aantal overbodige typecontroles in functies zoals ASSOC en GETF.
- Foutcorrecties:
- OCTETS-TO-STRING signaleert of past correct vervangingen toe bij het gebruik van eénoctet externe formats voor minder voorkomende coderingen (bijvoorbeeld iso-8859-3), en haalt geen bits uit het NIL-adres om deze bits naar karakters te converteren.
- FILE-STRING-LENGTH retourneert nu NIL als de invoerwaarden niet zijn gecodeerd in een extern flowformaat.
- Tabelvormige meerbyte externe formats (EUC-JP, Shift-JIS, GBK) houden nu rekening met het vervangingssymbool (in extern formaat of via herstart) bij het coderen naar octetten.
- Conversie van octetten met behulp van externe formats UCS-2, UCS-4 en UTF-32 leest niet langer het einde van de octetarray met een niet-heel aantal twee- of vierbyte-eenheden.
- Conversie van octetten met behulp van externe formats UCS-2, UCS-4 en UTF-32 retourneert nu een simpele string, zoals vereist door de definitie van OCTETS-TO-STRING.
- Het toepassen van een onjuist extern formatuurargument voor OPEN of WITH-OPEN-FILE (of interne MAKE-FD-STREAM) leidt niet langer tot een lek van bestandsdescriptoren.
- SB-ROTATE-BYTE definieert specificaties BYTE buiten het toelaatbare bereik vóór het uitvoeren van cons van zeer grote gehele getallen voor het gebruik van maskers en verschuivingen.
- Correctie van het type uitvoer bij het compileren van SB-ROTATE-BYTE-vormen met een niet-nul POSITION in de byte-definitie.
- Correctie van meerdere assemblerfouten bij het compileren van MAKE-ARRAY, MAKE-STRING en andere met een groot constant formaat.
- Correctie van een interne fout bij het compileren (SETF-SBIT) met een groot constant index.
- Correctie van een interne compilerfout voor lambda-functies met een onjuiste parameterlijst in LABELS.
- Correctie van een interne compilerfout bij het compileren van sommige oneindig-recursieve vormen van LABELS.
- Correctie van een interne compilerfout bij het proberen in te voeren van een sprongetje naar een al verwijderde label.
- FILL-POINTER mag nooit negatief zijn.
Bron: opennet.ru
