È stata pubblicata la versione SBCL 2.3.11 (Steel Bank Common Lisp), un'implementazione open source del linguaggio di programmazione Common Lisp. Il codice del progetto è scritto in Common Lisp e C, ed è distribuito sotto licenza BSD. Nel nuovo rilascio:
- Piccole incompatibilità:
- I flussi con il parametro external-format, definito tramite «:REPLACEMENT», applicheranno i dati per sostituire le informazioni una sola volta nel flusso, il che porta a errori di decodifica (e non come in alcuni casi, una volta per ogni sequenza di byte, ognuno dei quali non è una posizione di partenza valida per questo external-format).
- I determinatori external-format che utilizzano varianti non supportate o non riconosciute ora segnaleranno un errore.
- Migliorie:
- Durante la dispatching di funzioni generiche che utilizzano il metodo standard o breve di combinazione, in assenza di metodi principali applicabili, il sistema invocherà la funzione generica SB-PCL:NO-PRIMARY-METHOD, il cui comportamento standard consiste nel segnalare un errore. Gli utenti possono definire metodi per questa funzione generica.
- I formati esterni ora supportano varianti di nuova riga per le codifiche a byte singolo e UTF-8.
- Gli errori di codifica e decodifica dei caratteri segnalati da funzioni di flussi o ottetti ora supportano il riavvio USE-VALUE per i gestori che forniscono sostituzioni per l'input o l'output.
- READ-SEQUENCE e WRITE-SEQUENCE supportano sequenze definite dall'utente; l'implementazione standard gestisce gli elementi uno per uno, leggendo o scrivendo un byte o un carattere nel/stream rispettivamente.
- Ottimizzazioni:
- I formati esterni con :REPLACEMENT non collegano più gestori per gli errori delle funzioni di conversione, il che dovrebbe ridurre il numero di operazioni cons e aumentare le prestazioni.
- Se :EXTERNAL-FORMAT è un argomento per STRING-TO-OCTETS o OCTETS-TO-STRING ed è una costante durante la compilazione, il formato esterno viene risolto al momento del caricamento, e non ad ogni invocazione.
- Il compilatore può limitare i tipi di argomenti per alcune funzioni in base al tipo di valore che viene restituito da questa funzione, dedotto o implicito.
- Il compilatore riduce il numero di controlli di tipo ridondanti in funzioni come ASSOC e GETF.
- Correzioni di bug:
- OCTETS-TO-STRING segnala correttamente o applica sostituzioni quando si utilizzano formati esterni a byte singolo per codifiche non ampiamente diffuse (ad esempio, iso-8859-3), senza prendere bit dall'indirizzo NIL e senza convertire questi bit in caratteri.
- FILE-STRING-LENGTH ora restituisce NIL se i valori di input non sono codificati nel formato esterno del flusso.
- I formati esterni multibyte tabulari (EUC-JP, Shift-JIS, GBK) ora tengono conto del carattere di sostituzione (nel formato esterno o tramite riavvio) durante la codifica in ottetti.
- La conversione da ottetti mediante formati esterni UCS-2, UCS-4 e UTF-32 non legge più la fine dell'array di ottetti con un numero intero di unità di due o quattro byte.
- La conversione da ottetti tramite formati esterni UCS-2, UCS-4 e UTF-32 ora restituisce una stringa semplice, come richiesto dalla definizione del tipo OCTETS-TO-STRING.
- L'applicazione di un formato esterno non valido come argomento per OPEN o WITH-OPEN-FILE (o il comando interno MAKE-FD-STREAM) non porta più a una perdita di descrittore di file.
- SB-ROTATE-BYTE definisce le specifiche BYTE oltre il valore consentito prima di eseguire cons su numeri interi molto grandi per l'uso di maschere e shift.
- Correzione dei tipi di output durante la compilazione di SB-ROTATE-BYTE con POSITION diverso da zero nella definizione del byte.
- Correzione di diversi errori dell'assembler durante la compilazione di MAKE-ARRAY, MAKE-STRING e altri con dimensioni costanti elevate.
- Correzione di un errore interno durante la compilazione (SETF-SBIT) con un indice costante elevato.
- Correzione di un errore interno del compilatore per la funzione lambda con una lista di parametri non valida in LABELS.
- Correzione di un errore interno del compilatore durante la compilazione di alcune forme LABELS ricorsive infinite.
- Correzione di un errore interno del compilatore durante il tentativo di incorporare un salto a un'etichetta già rimossa.
- FILL-POINTER non dovrebbe mai essere negativo.
Fonte: opennet.ru
