È stato pubblicato il rilascio di SBCL 2.4.1 (Steel Bank Common Lisp), un'implementazione libera del linguaggio di programmazione Common Lisp. Il codice del progetto è scritto in Common Lisp e C, ed è distribuito con licenza BSD.
Nel nuovo rilascio:
- Nel garbage collector parallelo, che utilizza l'algoritmo mark-region, è stata aggiunta la supporto parziale per gli header delle istanze compatte.
- Per le funzioni con tipi di ritorno dichiarati, nei livelli di ottimizzazione con elevati valori di SAFETY e in modalità DEBUG 3, è stata assicurata la verifica del tipo per i valori di ritorno.
- Sulla piattaforma FreeBSD è stata implementata la linkabilità con libpthread e disabilitata la randomizzazione dello spazio degli indirizzi (ASLR).
- Ripristinato il supporto per le architetture a 64 bit riscv e ppc.
- Per tutte le piattaforme è stato implementato il supporto per fastrem-32 (per calcoli FLOOR ottimizzati).
- Risolto un bug che portava a una pulizia ripetuta delle stringhe spostate dopo la compattazione della memoria tramite il garbage collector parallelo mark-region.
- Risolta una problematica di blocco del compilatore durante l'elaborazione di alcune costrutti con i tipi SATISFIES.
- Le tabelle hash utilizzate in diverse parti del sistema (pacchetti, tabelle Unicode) sono state convertite per utilizzare funzioni hash prive di collisioni (perfette).
- Il macro TYPECASE per le gerarchie delle strutture di classe è stato implementato utilizzando un hash senza collisioni.
- Al fine di ottimizzare le prestazioni, sono stati rimossi i controlli sui limiti per gli indici con offset costanti, quando il compilatore sa che l'indice è inferiore alla differenza tra dimensione e offset.
- Nel compilatore sono stati considerati dati aggiuntivi sull'ottimizzazione DIGIT-CHAR.
- Nel compilatore è stata implementata la possibilità di escludere valori intermedi in alcune chiamate di APPLY, CONCATENATE e MAKE-ARRAY per argomenti costruiti a partire da sequenze con nuove modifiche cons.
- È stato accelerato il funzionamento del ciclo "(LOOP FOR X IN (REVERSE LIST) …)", che ora utilizza meno cons.
- Il ciclo "(LOOP … APPEND …)" è diventato più compatto e compie meno operazioni nell'aggiungere NIL.
- Sono state accelerate e ridotte le verifiche dei tipi di vari array.
Fonte: opennet.ru
