Mondi su mondi, sistemi di sistemi.

Semantic versioning in tcl

Leggendo questo articolo che definisce le pratiche per quello che viene definito semantic versioning, mi è venuto in mente che tcl supporta direttamente a livello di linguaggio il controllo della versione dei package caricati.

Package require e i moduli in soccorso

L’uso è banale: basta specificare la versione che si vuole usare, con la pos­sibilità di essere restrittivi fino al punto di caricare una versione specifica e non una semplicemente compatibile.

La cosa mi è stata molto utile durante lo sviluppo di alcuni moduli. Come spesso succede, man mano che le idee diventano più chiare, le prime versioni sono quasi sempre da rifare; tuttavia era spesso impos­sibile modificare subito tutti gli script che utilizzavano il modulo rivisto per fargli caricare subito la nuova versione. È bastato quindi specificare la versione corretta nel codice che usava quel modulo.

Bisogna anche notare che le due versioni dei moduli pos­sono convivere nel file system tranquillamente l‘una accanto all’altra grazie all’infrastruttura dei moduli.

Non è comunque pos­sibile caricare due versioni diverse all’interno dello stesso interprete 1 ma visto che in Tcl è facilis­simo creare interpreti aggiuntivi, il problema potrebbe essere mitigabile:

% set slave1 [interp create]
interp0
% set slave2 [interp create]
interp1
% $slave1 eval {source a.tcl}
% $slave1 eval {source a2.tcl}
conflicting versions provided
for package "a": 1.0, then 1.2.0
# a.tcl e a2.tcl contengono due
# versioni dello stesso package
% $slave2 eval {source a2.tcl}

E gli altri?

Che io sappia, non mi risulta che né PerlPythonRuby pos­siedano questa caratteristica.

Qualcuno ha informazioni più pre­cise su questi o altri linguaggi?

  1. cosa invece pos­sibile in Erlang

Per proseguire

Commenti e trackback sono disabilitati.