Se ha publicado la versión SBCL 2.3.11 (Steel Bank Common Lisp), una implementación libre del lenguaje de programación Common Lisp. El código del proyecto está escrito en los lenguajes Common Lisp y C, y se distribuye bajo la licencia BSD. En esta nueva versión:
- Pequeñas incompatibilidades:
- Los flujos con el parámetro external-format definido con «:REPLACEMENT» aplicarán los datos de reemplazo una vez en el flujo, lo que lleva a errores de decodificación (y no, como en algunos casos, una vez por cada secuencia de bytes que no es una posición de inicio válida para este external-format).
- Los definidores de external-format al usar variantes no soportadas o no reconocidas ahora generarán un error.
- Mejoras:
- En el proceso de despacho de funciones genéricas, al usar un método estándar o corto de combinación, si no hay métodos primarios aplicables, el sistema llamará a la función genérica SB-PCL:NO-PRIMARY-METHOD, cuyo comportamiento estándar es generar un error. Los usuarios pueden definir métodos para esta función genérica.
- Los formatos externos ahora soportan variantes de nueva línea para codificaciones de un solo byte y utf-8.
- Los errores de codificación y decodificación de caracteres señalados por las funciones de flujos u octetos ahora soportan USE-VALUE para reinicios en manejadores que proporcionan reemplazos para entrada o salida.
- READ-SEQUENCE y WRITE-SEQUENCE soportan secuencias definidas por el usuario; la implementación estándar procesa elemento por elemento, leyendo o escribiendo un byte o carácter en/de un flujo respectivamente.
- Optimizaciones:
- Los formatos externos con :REPLACEMENT ya no vinculan manejadores para errores de funciones de conversión, lo que debería reducir el número de operaciones cons y aumentar el rendimiento.
- Si :EXTERNAL-FORMAT actúa como un argumento para STRING-TO-OCTETS o OCTETS-TO-STRING y es una constante durante la compilación, entonces el formato externo se resuelve durante la carga, y no en cada llamada.
- El compilador puede restringir los tipos de argumentos para algunas funciones basándose en el tipo de valor inferido o implícito que esta función devuelve.
- El compilador reduce el número de comprobaciones de tipo redundantes en funciones como ASSOC y GETF.
- Correcciones de errores:
- OCTETS-TO-STRING indica correctamente o aplica sustituciones al usar formatos externos de un solo byte para codificaciones poco comunes (por ejemplo, iso-8859-3), en lugar de tomar bits de la dirección NIL y convertir esos bits en caracteres.
- FILE-STRING-LENGTH ahora devuelve NIL si los valores de entrada no se codifican en un formato externo de flujo.
- Los formatos externos de múltiples bytes en tablas (EUC-JP, Shift-JIS, GBK) ahora tienen en cuenta el carácter de sustitución (en el formato externo o mediante reinicio) al codificar en octetos.
- La conversión de octetos usando formatos externos UCS-2, UCS-4 y UTF-32 ya no lee el final de la matriz de octetos con un número no entero de unidades de dos o cuatro bytes.
- La conversión de octetos usando formatos externos UCS-2, UCS-4 y UTF-32 ahora devuelve una cadena simple, como lo requiere la definición del tipo OCTETS-TO-STRING.
- El uso de un formato externo de argumento incorrecto para OPEN o WITH-OPEN-FILE (o el interno MAKE-FD-STREAM) ya no provoca la fuga del descriptor de archivo.
- SB-ROTATE-BYTE define especificaciones de BYTE fuera del valor permitido antes de ejecutar cons de números enteros muy grandes para usar máscaras y desplazamientos.
- Corrección de la salida de tipo al compilar formas SB-ROTATE-BYTE con POSITION distinto de cero en la definición de byte.
- Corrección de múltiples errores de ensamblador al compilar MAKE-ARRAY, MAKE-STRING y otros con un tamaño constante grande.
- Corrección de un error interno al compilar (SETF-SBIT) con un índice constante grande.
- Corrección de un error interno del compilador para una función lambda con una lista de parámetros incorrecta en LABELS.
- Corrección de un error interno del compilador al compilar algunas formas de LABELS que son infinitamente recursivas.
- Corrección de un error interno del compilador al intentar incrustar un salto a una etiqueta que ya ha sido eliminada.
- FILL-POINTER nunca debe ser negativo.
Fuente: opennet.ru
