Byla vydána verze SBCL 2.3.11 (Steel Bank Common Lisp), svobodná implementace programovacího jazyka Common Lisp. Kód projektu je napsán v jazycích Common Lisp a C a je distribuován pod licencí BSD. V nové verzi:
- Malé nekompatibility:
- Proudy s parametrem external-format, definovaným pomocí „:REPLACEMENT“, nyní použijí data pro nahrazení informací jednou v proudu, což může vést k chybám dekódování (na rozdíl od toho, jak tomu bylo v některých případech, jednou pro sekvenci bajtů, kde každý z nich není platnou počáteční pozicí znaku pro tento external-format).
- Identifikátory external-format při používání nepodporovaných nebo nerozpoznaných variant nyní budou signalizovat chybu.
- Vylepšení:
- V procesu dispatchování obecné funkce, která používá standardní nebo zkrácenou metodu kombinování, pokud chybí hlavní aplikovatelné metody, systém vyvolá obecnou funkci SB-PCL:NO-PRIMARY-METHOD, jejíž standardní chování spočívá v signalizaci chyby. Uživatelé mohou definovat metody pro tuto obecnou funkci.
- Externí formáty nyní podporují varianty nového řádku pro jednosegmentové a utf-8 kódování.
- Chyby o kódování a dekódování znaků, signalizované funkcemi proudů nebo oktetů, nyní podporují USE-VALUE restart pro obsluhy, které poskytují substituce pro vstup nebo výstup.
- READ-SEQUENCE a WRITE-SEQUENCE podporují sekvence definované uživateli; standardní implementace zpracovává prvek po prvku, čtením nebo zápisem jednoho bajtu nebo znaku z/do proudu.
- Optimalizace:
- Externí formáty s :REPLACEMENT již nezpřahují obsluhy pro chyby konverzních funkcí, což by mělo snížit počet operací cons a zvýšit výkon.
- Pokud :EXTERNAL-FORMAT slouží jako argument pro STRING-TO-OCTETS nebo OCTETS-TO-STRING a je konstantou během kompilace, externí formát se vyřeší během načítání, a ne při každém volání.
- Kompilátor může omezit typy argumentů pro některé funkce na základě vyvozeného nebo předpokládaného typu hodnoty, kterou tato funkce vrací.
- Kompilátor snižuje počet nadbytečných kontrol typů ve funkcích, jako jsou ASSOC a GETF.
- Opravy chyb:
- OCTETS-TO-STRING nyní správně signalizuje nebo aplikuje náhrady při použití jednovalcových externích formátů pro méně běžné kódování (např. iso-8859-3), místo aby bral bity z adresy NIL a tyto bity převáděl na znaky.
- FILE-STRING-LENGTH nyní vrací NIL, pokud vstupní hodnoty nejsou kódovány do externího formátu proudu.
- Tabulkové vícebytové externí formáty (EUC-JP, Shift-JIS, GBK) nyní zohledňují náhradní znak (v externím formátu nebo prostřednictvím restartu) při kódování do oktetů.
- Převod z oktetů pomocí externích formátů UCS-2, UCS-4 a UTF-32 již nečte konec pole oktetů s necelým číslem dvou- nebo čtyřbytových jednotek.
- Převod z oktetů pomocí externích formátů UCS-2, UCS-4 a UTF-32 nyní vrací jednoduchý řetězec, jak vyžaduje definice typu OCTETS-TO-STRING.
- Použití nesprávného externího formátu argumentu pro OPEN nebo WITH-OPEN-FILE (nebo interní MAKE-FD-STREAM) již nevede k úniku souborového popisovače.
- SB-ROTATE-BYTE určuje specifikace BYTE mimo povolenou hodnotu před vykonáním cons velmi velkých celých čísel pro použití masek a posunů.
- Opraven typ výstupu při kompilování SB-ROTATE-BYTE forem s neprázdným POSITION v definici bytu.
- Opraveno několik chyb assembleru při kompilaci MAKE-ARRAY, MAKE-STRING a dalších s velkým pevným velikostním.
- Opravená interní chyba při kompilaci (SETF-SBIT) s velkým pevným indexem.
- Opravená interní chyba kompilátoru pro lambda funkci s nesprávným seznamem parametrů v LABELS.
- Opravená interní chyba kompilátoru při kompilaci některých nekonečně rekurzivních forem LABELS.
- Opravená interní chyba kompilátoru při pokusu o vložení skoku k již odstraněné značce.
- FILL-POINTER by nikdy neměl být záporný.
Zdroj: opennet.ru
