Objavljen je izdanak SBCL 2.3.11 (Steel Bank Common Lisp), slobodne implementacije programskog jezika Common Lisp. Kod projekta napisan je na jezicima Common Lisp i C, te se distribuira pod BSD licencom. U novom izdanju:
- Mali nesuglasja:
- Strujni tokovi s parametrima external-format, definiranim putem ':REPLACEMENT', primjenjuju podatke za zamjenu informacija jednom u toku, što dovodi do grešaka dekodiranja (umjesto kako bi to u nekim slučajevima bilo jednom za sekvencu bajtova, od kojih nijedan nije dopuštena početna pozicija simbola za taj external-format).
- Definitori external-format pri korištenju nepodržanih ili neprepoznatih varijanti sada će signalizirati grešku.
- Poboljšanja:
- Tijekom usmjeravanja generičkih funkcija, koje koriste standardnu ili kratku metodu kombiniranja, kada nema glavnih primjenjivih metoda, sustav će pozvati generičku funkciju SB-PCL:NO-PRIMARY-METHOD, čije je standardno ponašanje signaliziranje greške. Korisnici mogu definirati metode za ovu generičku funkciju.
- Vanjski formati sada podržavaju varijante nove linije za jedno-bajtne i utf-8 kodiranja.
- Greške o kodiranju i dekodiranju simbola, koje signaliziraju funkcije tokova ili okteta, sada podržavaju USE-VALUE ponovno pokretanje za rukovatelje koji pružaju zamjene za unos ili izlaz.
- READ-SEQUENCE i WRITE-SEQUENCE podržavaju sekvence koje definira korisnik; standardna implementacija obrađuje element po element, čitajući ili bilježeći jedan bajt ili simbol iz/u tok prema tome.
- Optimizacije:
- Vanjski formati s ':REPLACEMENT' više ne povezuju rukovatelje za greške funkcija konverzije, što bi trebalo smanjiti broj cons-operacija i povećati performanse.
- Ako ':EXTERNAL-FORMAT' djeluje kao argument za STRING-TO-OCTETS ili OCTETS-TO-STRING i je konstanta tijekom kompajliranja, vanjski format se razrješava tijekom učitavanja, a ne prilikom svakog poziva.
- Kompajler može ograničiti tipove argumenata za neke funkcije na temelju izvedenog ili podrazumijevanog tipa vrijednosti koju vraća ta funkcija.
- Kompajler smanjuje broj suvišnih provjera tipova u funkcijama poput ASSOC i GETF.
- Ispravke grešaka:
- OCTETS-TO-STRING is correctly signaling or applying substitutions when using single-byte external formats for less common encodings (e.g., iso-8859-3), rather than taking bits from the NIL address and converting those bits into characters.
- FILE-STRING-LENGTH now returns NIL if the input values are not encoded in the external stream format.
- Table multi-byte external formats (EUC-JP, Shift-JIS, GBK) now account for the replacement character (in the external format or via restarts) when encoding to octets.
- Converting from octets using external formats UCS-2, UCS-4, and UTF-32 no longer reads the end of the octet array with a non-integer number of two- or four-byte units.
- Converting from octets using external formats UCS-2, UCS-4, and UTF-32 now returns a simple string as required by the definition of OCTETS-TO-STRING.
- Applying an incorrect external format argument for OPEN or WITH-OPEN-FILE (or internal MAKE-FD-STREAM) no longer leads to a file descriptor leak.
- SB-ROTATE-BYTE specifies BYTE specifications out of the allowed range before executing cons of very large integers for use in masks and shifts.
- Fixing type output when compiling SB-ROTATE-BYTE forms with a non-zero POSITION in the byte definition.
- Fixing several assembler bugs when compiling MAKE-ARRAY, MAKE-STRING, and others with a large constant size.
- Fixing an internal error when compiling (SETF-SBIT) with a large constant index.
- Fixing an internal compiler error for a lambda function with an incorrect parameter list in LABELS.
- Fixing an internal compiler error when compiling some infinitely-recursive forms in LABELS.
- Fixing an internal compiler error when attempting to embed a jump to an already deleted label.
- FILL-POINTER should never be negative.
Izvor: opennet.ru
