S'ha publicat el llançament de SBCL 2.3.11 (Steel Bank Common Lisp), una implementació gratuïta del llenguatge de programació Common Lisp. El codi del projecte està escrit en Common Lisp i C, i es distribueix sota la llicència BSD. A la nova versió:
- Incompatibilitats lleus:
- Els fluxos amb format extern especificat amb ":REPLACEMENT" aplicaran les dades per substituir la informació una vegada per flux, donant lloc a errors de descodificació (en lloc, en alguns casos, una vegada per a una seqüència de bytes, cadascun dels quals no és un caràcter vàlid). posició inicial d'aquest format extern).
- Els especificadors de format extern ara indicaran un error quan s'utilitzen variants no admeses o no reconegudes.
- Millores:
- Quan s'envien funcions genèriques que utilitzen el mètode de combinació estàndard o curta, si no hi ha mètodes primaris disponibles, el sistema cridarà a la funció genèrica SB-PCL:NO-PRIMARY-METHOD, el comportament predeterminat de la qual és indicar un error. Els usuaris poden definir mètodes per a aquesta funció genèrica.
- Els formats externs ara admeten variants de nova línia per a codificacions d'un sol byte i utf-8.
- Els errors de codificació i descodificació de caràcters assenyalats per les funcions de flux o d'octets ara admeten el reinici USE-VALUE per als controladors que proporcionen substitucions d'entrada o sortida.
- READ-SEQUENCE i Write-SEQUENCE admeten seqüències definides per l'usuari; la implementació estàndard processa element per element, llegint o escrivint un byte o caràcter cap a/des del flux, respectivament.
- Optimitzacions:
- Els formats externs amb :REPLACEMENT ja no enllacen els controladors d'errors per a les funcions de conversió, la qual cosa hauria de reduir el nombre d'operacions en contra i millorar el rendiment.
- Si :EXTERNAL-FORMAT és l'argument de STRING-TO-OCTETS o OCTETS-TO-STRING i és una constant en temps de compilació, aleshores el format extern es resol en el moment de la càrrega i no en cada trucada.
- El compilador pot restringir els tipus d'arguments d'algunes funcions en funció del tipus inferit o implícit del valor que retorna aquesta funció.
- El compilador redueix el nombre de comprovacions de tipus redundants en funcions com ASSOC i GETF.
- Reparació d'errors:
- OCTETS-TO-STRING senyalitza correctament o aplica substitucions quan s'utilitzen formats externs d'un sol byte per a codificacions menys habituals (com ara iso-8859-3), en lloc d'agafar bits de l'adreça NIL i convertir aquests bits en caràcters.
- FILE-STRING-LENGTH ara retorna NIL si els valors d'entrada no estan codificats en el format de flux extern.
- Els formats externs tabulars multibyte (EUC-JP, Shift-JIS, GBK) ara respecten el caràcter de substitució (en format extern o mitjançant reinici) quan es codifiquen en octets.
- La conversió d'octets utilitzant formats externs UCS-2, UCS-4 i UTF-32 ja no llegeix el final d'una matriu d'octets amb un nombre no enter d'unitats de dos o quatre bytes.
- La conversió d'octets utilitzant formats externs UCS-2, UCS-4 i UTF-32 ara retorna una cadena senzilla, tal com requereix la definició de tipus OCTETS-TO-STRING.
- L'ús d'un format d'argument extern incorrecte per OPEN o WITH-OPEN-FILE (o MAKE-FD-STREAM intern) ja no provoca una filtració del descriptor de fitxer.
- SB-ROTATE-BYTE defineix les especificacions BYTE fora dels límits abans dels contres dels nombres enters molt grans per utilitzar màscares i desplaçaments.
- Corregiu la inferència de tipus en compilar formularis SB-ROTATE-BYTE amb POSICIÓ diferent de zero a la definició de bytes.
- S'han corregit diversos errors de l'assemblador en compilar MAKE-ARRAY, MAKE-STRING i altres amb una mida constant gran.
- Corregiu l'error intern en compilar (SETF-SBIT) amb un índex constant gran.
- S'ha corregit l'error intern del compilador per a la funció lambda amb una llista de paràmetres incorrecta a LABELS.
- Corregiu un error intern del compilador en compilar algunes formes infinitament recursives de LABELS.
- S'ha corregit un error intern del compilador quan s'intentava introduir un salt a una etiqueta ja suprimida.
- FILL-POINTER mai ha de ser negatiu.
Font: opennet.ru
