Publicouse a versión 2.3.11 de SBCL (Steel Bank Common Lisp), unha implementación libre da linguaxe de programación Common Lisp. O código do proxecto está escrito en Common Lisp e C e distribúese baixo a licenza BSD. Esta versión inclúe:
- Incompatibilidades menores:
- As transmisións con formato externo definido con ":REPLACEMENT" aplicarán os datos de substitución unha vez por transmisión, o que provocará erros de descodificación (en lugar de, como nalgúns casos, unha vez por secuencia de bytes, cada un dos cales non é unha posición inicial de carácter válida para ese formato externo).
- Os especificadores de formato externo agora xerarán un erro ao usar variantes non compatibles ou non recoñecidas.
- Melloras:
- Ao enviar funcións xenéricas usando o método predeterminado ou de combinación curta, se non hai métodos primarios aplicables, o sistema chamará á función xenérica SB-PCL:NO-PRIMARY-METHOD, cuxo comportamento predeterminado é sinalar un erro. Os usuarios poden definir métodos para esta función xenérica.
- Os formatos externos agora admiten variantes de salto de liña para codificacións dun só byte e UTF-8.
- Os erros de codificación e descodificación de caracteres sinalados por funcións de fluxo ou octeto agora admiten o reinicio USE-VALUE para xestores que proporcionan substitucións para a entrada ou a saída.
- READ-SEQUENCE e WRITE-SEQUENCE admiten secuencias definidas polo usuario; a implementación predeterminada procésaas elemento por elemento, lendo ou escribindo un byte ou carácter cara a ou desde o fluxo, respectivamente.
- Optimizacións:
- Os formatos externos con :REPLACEMENT xa non vinculan os xestores para erros de funcións de conversión, o que debería reducir o número de operacións de conversión e mellorar o rendemento.
- Se :EXTERNAL-FORMAT é un argumento para STRING-TO-OCTETS ou OCTETS-TO-STRING e é unha constante en tempo de compilación, o formato externo resólvese no tempo de carga en lugar de en cada chamada.
- O compilador pode restrinxir os tipos de argumentos para algunhas funcións baseándose no tipo inferido ou implícito do valor devolto pola función.
- O compilador reduce o número de comprobacións de tipo redundantes en funcións como ASSOC e GETF.
- Corrección de erros:
- OCTETS-TO-STRING sinala ou aplica substitucións correctamente cando se usan formatos externos dun só byte para codificacións menos comúns (por exemplo, iso-8859-3), en lugar de tomar bits do enderezo NIL e convertelos en caracteres.
- FILE-STRING-LENGTH agora devolve NIL se os valores de entrada non están codificados nun formato de fluxo externo.
- Os formatos externos tabulares multibyte (EUC-JP, Shift-JIS, GBK) agora teñen en conta o carácter de substitución (no formato externo ou mediante reinicio) ao codificar en octetos.
- A conversión de octetos mediante formatos externos UCS-2, UCS-4 e UTF-32 xa non le o final dunha matriz de octetos cun número non enteiro de unidades de dous ou catro bytes.
- A conversión de octetos usando formatos externos UCS-2, UCS-4 e UTF-32 agora devolve unha cadea simple, como require a definición do tipo OCTETS-TO-STRING.
- Empregar un formato de argumento externo non válido para OPEN ou WITH-OPEN-FILE (ou internamente MAKE-FD-STREAM) xa non produce unha fuga do descritor de ficheiro.
- SB-ROTATE-BYTE especifica a especificación de BYTE fóra de límites antes de usar enteiros moi grandes para o uso de máscaras e desprazamentos.
- Corrixiuse a inferencia de tipo ao compilar formularios SB-ROTATE-BYTE con POSITION distinto de cero na definición de bytes.
- Corrixíronse varios erros do ensamblador ao compilar MAKE-ARRAY, MAKE-STRING e outras variables de tamaño constante grande.
- Corrixiuse un erro de compilación interno (SETF-SBIT) cun índice constante grande.
- Corrixiuse un erro interno do compilador para a función lambda cunha lista de parámetros non válida en LABELS.
- Corrixiuse un erro interno do compilador ao compilar algunhas formas infinitamente recursivas de LABELS.
- Corrixiuse un erro interno do compilador ao tentar incorporar un salto a unha etiqueta xa eliminada.
- FILL-POINTER nunca debería ser negativo.
Fonte: opennet.ru
