Wydanie SBCL 2.3.11, realizacji języka Common Lisp.

Opublikowano wersję SBCL 2.3.11 (Steel Bank Common Lisp), wolnej implementacji języka programowania Common Lisp. Kod projektu został napisany w językach Common Lisp i C, i jest rozpowszechniany na licencji BSD. W nowej wersji:

  • Małe niekompatybilności:
    • Strumienie z parametrem external-format zdefiniowanym za pomocą ":REPLACEMENT" będą stosować dane do zastąpienia informacji tylko raz w strumieniu, co prowadzi do błędów dekodowania (a nie, jak w niektórych przypadkach, jeden raz dla sekwencji bajtów, z których każdy nie jest dozwoloną pozycją startową symbolu dla tego external-format).
    • Definiowane external-format przy użyciu nieobsługiwanych lub nierozpoznawanych wariantów teraz będą sygnalizować błąd.
  • Ulepszenia:
    • W procesie dyspozycji ogólnych funkcji, używających standardowej lub krótkiej metody łączenia, przy braku głównych stosownych metod system wywoła ogólną funkcję SB-PCL:NO-PRIMARY-METHOD, której standardowymi zachowaniami są sygnalizowanie błędów. Użytkownicy mogą definiować metody dla tej ogólnej funkcji.
    • Zewnętrzne formaty teraz wspierają warianty nowej linii dla jednobajtowych i utf-8 kodowań.
    • Sygnalizowane przez funkcje strumieni lub oktetów błędy kodowania i dekodowania symboli teraz wspierają USE-VALUE restart dla handlerów, które dostarczają zamienniki dla wejścia lub wyjścia.
    • READ-SEQUENCE i WRITE-SEQUENCE wspierają sekwencje zdefiniowane przez użytkownika; standardowa implementacja obsługuje element po elemencie, czytając lub zapisując jeden bajt lub symbol z/do strumienia odpowiednio.
  • Optymalizacje:
    • Zewnętrzne formaty z :REPLACEMENT nie łączą już handlerów dla błędów funkcji konwersji, co powinno zmniejszyć liczbę operacji cons i zwiększyć wydajność.
    • Jeśli :EXTERNAL-FORMAT jest argumentem dla STRING-TO-OCTETS lub OCTETS-TO-STRING i jest stałą w czasie kompilacji, to zewnętrzny format jest rozwiązywany w czasie ładowania, a nie przy każdym wywołaniu.
    • Kompilator może ograniczać typy argumentów dla niektórych funkcji w zależności od wywnioskowanego lub domniemanego typu wartości, która jest zwracana przez tę funkcję.
    • Kompilator redukuje liczbę zbędnych sprawdzeń typów w funkcjach takich jak ASSOC i GETF.
  • Poprawki błędów:
    • OCTETS-TO-STRING poprawnie sygnalizuje lub stosuje zamiany przy użyciu jednowyjściowych formatów zewnętrznych dla rzadko używanych kodowań (na przykład iso-8859-3), zamiast brać bity z adresu NIL i nie konwertować tych bitów na znaki.
    • FILE-STRING-LENGTH teraz zwraca NIL, jeśli dane wejściowe nie są kodowane w zewnętrzny format strumienia.
    • Tablicowe wielobajtowe zewnętrzne formaty (EUC-JP, Shift-JIS, GBK) teraz uwzględniają znak zastępczy (w formacie zewnętrznym lub przez ponowne uruchomienie) podczas kodowania do oktetów.
    • Konwersja z oktetów przy użyciu zewnętrznych formatów UCS-2, UCS-4 i UTF-32 już nie odczytuje końca tablicy oktetów z niecałą liczbą dwu- lub czterobajtowych jednostek.
    • Konwersja z oktetów przy użyciu zewnętrznych formatów UCS-2, UCS-4 i UTF-32 teraz zwraca prosty ciąg, jak wymaga definicja typu OCTETS-TO-STRING.
    • Stosowanie niewłaściwego zewnętrznego formatu argumentu dla OPEN lub WITH-OPEN-FILE (lub wewnętrzny MAKE-FD-STREAM) już nie prowadzi do wycieku deskryptora pliku.
    • SB-ROTATE-BYTE określa specyfikacje BYTE poza dozwolonym zakresem przed wykonaniem kons dotyczącego bardzo dużych liczb całkowitych do użycia w maskach i przesunięciach.
    • Korekta typu wyjściowego podczas kompilacji form SB-ROTATE-BYTE z niena nulowym POSITION w definicji bajtu.
    • Korekta kilku błędów assemblera podczas kompilacji MAKE-ARRAY, MAKE-STRING i innych o dużym stałym rozmiarze.
    • Korekta wewnętrznego błędu podczas kompilacji (SETF-SBIT) z dużym stałym indeksem.
    • Korekta wewnętrznego błędu kompilatora dla funkcji lambda z niepoprawną listą parametrów w LABELS.
    • Korekta wewnętrznego błędu kompilatora podczas kompilowania niektórych nieskończono-rekurencyjnych form LABELS.
    • Korekta wewnętrznego błędu kompilatora podczas próby wbudowania przejścia do już usuniętej etykiety.
    • FILL-POINTER nigdy nie powinien być ujemny.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster