Publicación de SBCL 2.3.11, la implementación del lenguaje Common Lisp

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

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster