Llançament de SBCL 2.3.11, una implementació del llenguatge Common Lisp

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

Afegeix comentari