««« | »»»
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 possibilità 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 impossibile 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 possono convivere nel file system tranquillamente l‘una accanto all’altra grazie all’infrastruttura dei moduli.
Non è comunque possibile caricare due versioni diverse all’interno dello stesso interprete 1 ma visto che in Tcl è facilissimo 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é Perl né Python né Ruby possiedano questa caratteristica.
Qualcuno ha informazioni più precise su questi o altri linguaggi?
Per proseguire
Commenti e trackback sono disabilitati.