In una giornata in cui sono state integrate decine di patch (compresa una del vostro che aggiunge un po' di accesskey alle finestre di dialogo di pubblicazione per Composer), è calata una
piccola "bomba" tecnologica da 270KB, un nuovo garbage cycle collector. Urge qualche chiarimento.
Il Garbage Collector (GC per gli amici) è quello strumento software, che funziona parallelamente all'applicativo (di solito in un thread separato), che permette di raccogliere e riciclare tutta la "spazzatura" creata da un programma: in certi casi viene fornito dall'ambiente stesso in cui l'applicazione gira (ad es. Java), in altri deve essere fornito dall'applicativo stesso. Mozilla non fa eccezione alla regola, e infatti implementa (se non erro) l'ennesima versione del GC di Bohm (ovvero l'algoritmo più diffuso) usando il reference counting: detto in parole povere, tutte le volte che alloco della memoria incremento un contatore, e tutte le volte che la libero lo decremento di uno. Il valore che resta (se diverso da zero) viene indagato dal GC per vedere se si tratta di memoria che è possibile recuperare oppure se è ancora in uso. Questo funziona bene per certi tipi di dati e di strutture, ma non funziona affatto per le strutture dati cicliche, ovvero quelle che fanno riferimento a se stesse (per le quali non posso usare il ref counting visto che non so riferire ogni singolo numero ad una specifica copia della struttura, visto che sono tutte copie di se stessa): se cancello la struttura "radice" tutto il resto dell'albero invece di essere recuperato e liberato dal GC rimane nel limbo, sprecando risorse.
Nel tempo sono state usate diverse tecniche per sopperire a questa carenza, di solito molto complesse e molto "artefatte" se non artigianali: il nuovo garbage cycle collector invece è la soluzione scientifica e prevedibile di questo problema (magari non è altrettanto efficiente, ma ha il vantaggio di essere corretta e completa, e quindi prevedibile in ogni caso).
Cosa ci si guadagna, visto che le prestazioni del GC dovrebbero peggiorare di un 10-20%?
Innanzi tutto la gestione tramite il nuovo sistema è molto semplificata: basta dire quale struttura bisogna controllare e il GCC (non il compilatore, occhio!) se la gestisce da solo.
Secondo, finiscono tutte le implementazioni "ad hoc" per ogni struttura, quindi alla fine si risparmia "spazio" e si diminuiscono i bug (il codice è uno per tutti, quindi più facilmente gestibile). Terzo, il tutto viene implementato a livello di XPCOM/XULRunner, quindi sarà disponibile per tutta la piattaforma Mozilla, a qualsiasi livello e per qualsiasi applicativo: facendo un paragone un po' improprio, il GCC diventa parte del Sistema Operativo Mozilla, e ne beneficiano tutte le applicazioni che in tale SO girano.
Altre cosucce degne di nota:
- A breve le macchine di build di mozilla.com/org per Win useranno MSVC8 SP1 (VC Express 2005 versione free) per default (risolvendo così alcuni crash per certi utenti con una nuova dll di MS).
- Il supporto e l'integrazione con Vista: passi avanti concreti.
- Si spera che con qualche patch e una nuova versione di Cygwin/Mingw (al momento poco compatibili con Vista) dovrebbe essere superato il problema di dover fare build con un make "antiquato" e oramai quasi introvabile proprio sotto Cygwin.
- Continua l'integrazione di patch specifiche per OS/2 che dovrebbero permettere a SM di restare "in vita" su OS/2 per più di poche ore (se non ho capito male c'è un grave problema di gestione della memoria centrale che si esaurisce troppo in fretta perché SM non può usare la memoria esterna, anche se disponibile).