ĂshtĂ« publikuar versioni SBCL 2.3.11 (Steel Bank Common Lisp), njĂ« implementim tĂ« lirĂ« tĂ« gjuhĂ«s sĂ« programimit Common Lisp. Kodi i projektit Ă«shtĂ« shkruar nĂ« gjuhĂ«t Common Lisp dhe C, dhe shpĂ«rndahet nĂ«n licencĂ«n BSD. NĂ« kĂ«tĂ« version:
- Pikë të vogla të papajtueshmërisë:
- Të dhënat e përformatet ekstern, të përcaktuara me ":REPLACEMENT", do të aplikohen për të zëvendësuar informacionin një herë në rrjedhë, çka çon në gabime dekodimi (ndryshe nga disa raste ku zëvendësohet një herë për secilën sekuencë byte që nuk është një pozicion fillestar i vlefshëm për këtë format të jashtëm).
- Identifikuesit e formatit të jashtëm tani do të sinjalizojnë për gabime kur përdoren variante të papërkrahura apo të pazbuluara.
- Përmirësime:
- Gjatë shpërndarjes së funksioneve të përgjithshme, që përdorin metodën standard ose të shkurtuar të kombinimit, nëse nuk ka metoda kryesore të aplikueshme, sistemi do të thërrasë funksionin e përgjithshëm SB-PCL:NO-PRIMARY-METHOD, i cili ka si sjellje të standardizuar të sinjalizojë një gabim. Përdoruesit mund të përcaktojnë metoda për këtë funksion të përgjithshëm.
- Formatet e jashtme tani mbështesin variante të reja të rreshtave për kodime njëbyte dhe utf-8.
- Gabimet e kodimit dhe dekodimit të simboleve, të sinjalizuara nga funksionet e rrjedhës ose të okteteve, tani mbështesin rifillimin USE-VALUE për trajtuesit që ofrojnë zëvendësime për hyrjen ose daljen.
- READ-SEQUENCE dhe WRITE-SEQUENCE mbështesin sekuenca të përcaktuara nga përdoruesi; implementimi standard trajton elementet një nga një, duke lexuar ose shkruar një byte ose simbol nga/për rrjedhë përkatësisht.
- Optimizimet:
- Formatet e jashtme me :REPLACEMENT nuk lidhin më trajtuesit për gabimet e funksioneve të konvertimit, çka duhet të zvogëlojë numrin e operacioneve cons dhe të rrisë performancën.
- Nëse :EXTERNAL-FORMAT shërben si argument për STRING-TO-OCTETS ose OCTETS-TO-STRING dhe është një konstant gjatë kompilim, formati i jashtëm zgjidhet gjatë ngarkimit, e jo për çdo thirrje.
- Kompilatorit mund t'i kufizojë tipet e argumenteve për disa funksione në bazë të tipit të nxjerrë ose të implicit të vlerës që kthehet nga kjo funksion.
- Kompilatori zvogëlon numrin e verifikimeve të tepërta të tipeve në funksione si ASSOC dhe GETF.
- Korrigjimet e gabimeve:
- OCTETS-TO-STRING sinjalizon ose aplikon zëvendësime siç duhet kur përdoren formate të jashtme njëbyte për kodime të pazbuluara (p.sh., iso-8859-3), e jo duke marrë bitet nga adresa NIL dhe duke i konvertuar këto bite në simbole.
- FILE-STRING-LENGTH tani kthen NIL nëse vlerat hyrëse nuk kodohen në formatin e jashtëm të rrjedhës.
- Formatet shumëbyte të jashtme (EUC-JP, Shift-JIS, GBK) tani marrin në konsideratë simbolin zëvendësues (në formatin e jashtëm ose përmes rifillimit) gjatë kodimit në oktete.
- Konvertimi nga oktete me formate të jashtme UCS-2, UCS-4 dhe UTF-32 nuk lexon më fundin e array të okteteve me një numër jo të plotë të dy- ose katërbyteve.
- Konvertimi nga oktete me formate të jashtme UCS-2, UCS-4 dhe UTF-32 tani kthen një varg të thjeshtë, siç kërkohet nga përkufizimi i tipit OCTETS-TO-STRING.
- Përdorimi i një formati të jashtëm të papërshtatshëm për OPEN ose WITH-OPEN-FILE (ose MAKE-FD-STREAM të brendshëm) nuk çon më në rrjedhjen e një identifikuesi të skedarit.
- SB-ROTATE-BYTE përcakton specifikimet BYTE jashtë vlerës së lejueshme para se të ekzekutojë cons të numrave të mëdhenj të plotë për përdorimin e maskave dhe zhvendosjeve.
- Korrigjimi i daljes së tipit gjatë kompilimit të formulave SB-ROTATE-BYTE me POSITION jo të zero në përkufizimin e bytes.
- Korrigjimi i disa gabimeve të assembler-it gjatë kompilimit të MAKE-ARRAY, MAKE-STRING dhe të tjera me përmasa konstante të mëdha.
- Korrigjimi i një gabimi të brendshëm gjatë kompilimit (SETF-SBIT) me një indeks konstant të madh.
- Korrigjimi i një gabimi të brendshëm të kompilatorit për funksionin lambda me një listë parametrash të papërshtatshme në LABELS.
- Korrigjimi i një gabimi të brendshëm të kompilatorit gjatë kompilimit të disa formave të pafundme-rekurse LABELS.
- Korrigjimi i një gabimi të brendshëm të kompilatorit gjatë përpjekjes për të përfshirë një kalim në një etiketë të fshirë tashmë.
- FILL-POINTER nuk duhet të jetë kurrë negativ.
Burimi: opennet.ru
