Rilascio di SBCL 2.3.11, implementazione del linguaggio Common Lisp

È 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

Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster