Rivet Internals

Questa sezione facilmente pare sorpassata, come nuovo codice viene aggiunto, vecchio codice viene rimosso e di conseguenza vengono apportati i relativi cambiamenti. Il miglior posto dove poter verificare se sono state inserite nuove funzionalità è il suo codice sorgente. Se siete interessati ai cambiamenti osservate il FIXME.

Inizializzazione

Quando Apache è attivo, (o quando i processi figli di Apache sono attivi se un processo Tcl è in uso), Rivet_InitTclStuff viene chiamata, creando un nuovo interprete, o un interprete per host virtuale, dipendentemente dalla configurazione. Inoltre inizializza varie cose, come il canale di sistema RivetChan, crea i comandi Tcl specifici di Rivet ed esegue init.tcl. Il sistema di caching è anch'esso impostato e se c'è un GlobalInitScript, viene eseguito.

RivetChan

Il sistema RivetChan fu creato al fine di avere un canale Tcl reale che potesse redirigere lo standard output. Questo permette di usare, per esempio, il comando normale puts nelle pagine .rvt. Lavora creando un canale che bufferizza l'output e, a tempi predeterminati, lo passa al sistema IO di Apache. Il normale standard output di Tcl è rimpiazzato con un'istanza di questo tipo di canale, in modo che, predefinitamente, l'output venga inviato alla pagina web.

Parsing delle pagine, Esecuzione e Cacheing

Quando una pagina Rivet viene richiesta, è trasformata in un normale script Tcl tramite l'analisi nel file delle etichette di elaborazione delle istruzioni <? ?>. Ogni cosa fuori da queste etichette diviene un'istruzione estesa puts ed ogni cosa dentro rimane codice Tcl.

Ogni file .rvt è valutato nel proprio ::request namespace, in modo che non sia necessario creare e distruggere gli interpreti dopo ogni pagina. Tuttavia, operando nel proprio namespace, ogni pagina non verrà eseguita sporcando le variabili locali create da altri scripts, perché verranno cancellate automaticamente quando il namespace termina, dopo che Apache ha finito di gestire le richieste.

[Note]Nota
Un problema corrente con questo sistema è che, mentre le variabili usano la garbage collection, e quindi vengono distrutte automaticamente quando non sono più usate, i gestori dei file non lo sono: è molto importante quindi che gli autori di script Rivet si assicurino di chiudere tutti i file che hanno aperto.

Dopo che uno script è stato caricato ed analizzato dentro una form di "puro Tcl", viene pure immagazzinato, affinché possa essere utilizzato in futuro senza ricaricarlo (e rianalizzarlo) da disco. Il numero degli script immagazzinati in memoria è configurabile. Questa caratteristica può significativamente migliorare l'esecuzione.