Pubblicata l'uscita SBCL 2.3.11 (Steel Bank Common Lisp), implementazione libera del linguaggio di programmazione Common Lisp. Il codice del progetto è scritto nei linguaggi Common Lisp e C, e viene distribuito con licenza BSD. Nel nuovo rilascio:
- Piccole incompatibilità:
- I flussi con il parametro external-format definito tramite «:REPLACEMENT» applicheranno i dati di sostituzione all'informazione una sola volta nel flusso, il che porta a errori di decodifica (e non, come in alcuni casi, una sola volta per la sequenza di byte ciascuno dei quali non è una posizione di partenza valida per questo external-format).
- I definitori di external-format che utilizzano varianti non supportate o non riconosciute segnaleranno ora un errore.
- Miglioramenti:
- Durante il dispatching di funzioni generiche, che utilizzano il metodo standard o accorciato di combinazione, in assenza di metodi primari applicabili, il sistema chiamerà 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 codifiche a byte singolo e utf-8.
- Gli errori di codifica e decodifica dei caratteri segnalati dalle funzioni di flusso o di byte ora supportano il riavvio USE-VALUE per gestori che forniscono sostituzioni per l'input o l'output.
- READ-SEQUENCE e WRITE-SEQUENCE supportano sequenze definite dall'utente; l'implementazione standard gestisce elemento per elemento, leggendo o scrivendo un byte o un carattere da/verso il flusso di conseguenza.
- Ottimizzazioni:
- I formati esterni con :REPLACEMENT non collegano più gestori per errori delle funzioni di conversione, il che dovrebbe ridurre il numero di operazioni cons e aumentare le prestazioni.
- Se :EXTERNAL-FORMAT funge da argomento per STRING-TO-OCTETS o OCTETS-TO-STRING ed è una costante durante la compilazione, allora il formato esterno viene risolto al momento del caricamento, piuttosto che ad ogni chiamata.
- Il compilatore può limitare i tipi di argomenti per alcune funzioni basandosi sul tipo di valore che viene restituito da questa funzione.
- Il compilatore riduce il numero di controlli di tipo ridondanti in funzioni come ASSOC e GETF.
- Correzioni di errori:
- OCTETS-TO-STRING segnala correttamente o applica sostituzioni quando utilizza formati esterni a byte singolo per codifiche poco diffuse (ad esempio, iso-8859-3), invece di prendere i bit dall'indirizzo NIL e di non 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 multi-byte tabellari (EUC-JP, Shift-JIS, GBK) ora considerano il carattere di sostituzione (nel formato esterno o tramite riavvio) durante la codifica in ottetti.
- La conversione da ottetti utilizzando i formati esterni UCS-2, UCS-4 e UTF-32 non legge più la fine dell'array di ottetti con una lunghezza non intera di unità di due o quattro byte.
- La conversione da ottetti utilizzando i formati esterni UCS-2, UCS-4 e UTF-32 ora restituisce una stringa semplice, come richiesto dalla definizione del tipo OCTETS-TO-STRING.
- L'uso di un formato esterno non corretto come argomento per OPEN o WITH-OPEN-FILE (o l'interno MAKE-FD-STREAM) non provoca più una fuga di descrittori di file.
- SB-ROTATE-BYTE definisce le specifiche BYTE al di fuori del valore consentito prima di eseguire cons di numeri interi molto grandi per utilizzare maschere e spostamenti.
- Correzione dell'output di tipo durante la compilazione di SB-ROTATE-BYTE con un POSITION non nullo nella definizione di byte.
- Correzione di vari errori dell'assemblatore durante la compilazione di MAKE-ARRAY, MAKE-STRING e altri con una dimensione costante grande.
- Correzione di un errore interno durante la compilazione (SETF-SBIT) con un indice costante grande.
- Correzione di un errore interno del compilatore per una funzione lambda con un elenco di parametri non corretto in LABELS.
- Correzione di un errore interno del compilatore durante la compilazione di alcune forme LABELS infinitamente ricorsive.
- Correzione di un errore interno del compilatore nel tentativo di inserire un salto verso un'etichetta già rimossa.
- FILL-POINTER non deve mai essere negativo.
Fonte: opennet.ru
