A fost lansată versiunea SBCL 2.3.11 (Steel Bank Common Lisp), o implementare liberă a limbajului de programare Common Lisp. Codul proiectului este scris în limbajele Common Lisp și C și este distribuit sub licența BSD. În noua versiune:
- Incompatibilități minore:
- Fluxurile cu parametrul external-format definit cu ":REPLACEMENT" vor aplica datele de înlocuire o singură dată în flux, ceea ce duce la erori de decodare (nu așa cum se întâmplă în unele cazuri, o dată pentru secvența de byte-uri fiecare dintre care nu este o poziție de start validă pentru acest external-format).
- Definitorii external-format care folosesc variante neacceptate sau nerecunoscute vor semnala acum o eroare.
- Îmbunătățiri:
- În procesul de dispecerizare a funcțiilor generice, care folosesc metoda de combinare standard sau scurtă, în absența metodelor principale aplicabile, sistemul va apela funcția generica SB-PCL:NO-PRIMARY-METHOD, comportamentul standard al acesteia constând în semnalizarea unei erori. Utilizatorii pot defini metode pentru această funcție generica.
- Formatele externe acceptă acum variante de linii noi pentru codificări de un byte și utf-8.
- Erorile de codificare și decodare a caracterelor semnalizate de funcțiile fluxurilor sau octeților sunt acum suportate cu USE-VALUE pentru gestionarii care oferă înlocuiri pentru intrare sau ieșire.
- READ-SEQUENCE și WRITE-SEQUENCE suportă secvențe definite de utilizator; implementarea standard procesează element cu element, citind sau scriind un byte sau un caracter în/din flux respectiv.
- Optimizări:
- Formatele externe cu :REPLACEMENT nu mai atașează gestionari pentru erorile funcțiilor de conversie, ceea ce ar trebui să reducă numărul de operații cons și să îmbunătățească performanța.
- Dacă :EXTERNAL-FORMAT acționează ca argument pentru STRING-TO-OCTETS sau OCTETS-TO-STRING și este o constantă în timpul compilării, atunci formatul extern este rezolvat în timpul încărcării, nu la fiecare apel.
- Compilatorul poate restricționa tipurile de argumente pentru unele funcții pe baza tipului de valoare inferat sau presupus care este returnat de această funcție.
- Compilatorul reduce numărul de verificări de tip redundante în funcții precum ASSOC și GETF.
- Corecturi de erori:
- OCTETS-TO-STRING semnalizează corect sau aplică înlocuiri atunci când se folosesc formate externe pe un singur octet pentru codări rare (de exemplu, iso-8859-3), și nu ia biți din adresa NIL, convertind acești biți în caractere.
- FILE-STRING-LENGTH acum returnează NIL dacă valorile de intrare nu sunt codificate în formatul extern al fluxului.
- Formatele externe tabulare pe mai multe octeți (EUC-JP, Shift-JIS, GBK) acum iau în considerare caracterul de substituție (în formatul extern sau prin resetare) atunci când sunt codificate în octeți.
- Conversia din octeți folosind formatele externe UCS-2, UCS-4 și UTF-32 nu mai citește sfârșitul tabloului de octeți cu un număr neîntreg de unități de două sau patru octeți.
- Conversia din octeți folosind formatele externe UCS-2, UCS-4 și UTF-32 acum returnează un șir simplu, așa cum cere definiția tipului OCTETS-TO-STRING.
- Utilizarea unui format extern incorect pentru OPEN sau WITH-OPEN-FILE (sau MAKE-FD-STREAM intern) nu mai duce la o scurgere a descriptorului de fișier.
- SB-ROTATE-BYTE definește specificațiile BYTE dincolo de valorile admisibile înainte de a executa cons asupra unor întregi foarte mari pentru utilizarea măștilor și deplasărilor.
- Corectarea tipului de ieșire la compilarea formelor SB-ROTATE-BYTE cu o POZIȚIE nenulă în definiția octetului.
- Corectarea mai multor erori de asamblare la compilarea MAKE-ARRAY, MAKE-STRING și altele cu o dimensiune constantă mare.
- Corectarea unei erori interne la compilare (SETF-SBIT) cu un index constant mare.
- Corectarea unei erori interne a compilatorului pentru o funcție lambda cu o listă incorectă de parametri în LABELS.
- Corectarea unei erori interne a compilatorului la compilarea unor forme LABELS cu recursie infinită.
- Corectarea unei erori interne a compilatorului atunci când se încearcă încorporarea unei salt către o etichetă deja ștearsă.
- FILL-POINTER nu ar trebui niciodată să fie negativ.
Sursa: opennet.ro
