Mondi su mondi, sistemi di sistemi.

Semantic versioning in tcl

Leggendo que­sto arti­colo che defi­ni­sce le pra­ti­che per quello che viene defi­nito seman­tic ver­sio­ning, mi è venuto in mente che tcl sup­porta diret­ta­mente a livello di lin­guag­gio il con­trollo della ver­sione dei pac­kage caricati.

Package require e i moduli in soccorso

L’uso è banale: basta spe­ci­fi­care la ver­sione che si vuole usare, con la pos­si­bi­lità di essere restrit­tivi fino al punto di cari­care una ver­sione spe­ci­fica e non una sem­pli­ce­mente compatibile.

La cosa mi è stata molto utile durante lo svi­luppo di alcuni moduli. Come spesso suc­cede, man mano che le idee diven­tano più chiare, le prime ver­sioni sono quasi sem­pre da rifare; tut­ta­via era spesso impos­si­bile modi­fi­care subito tutti gli script che uti­liz­za­vano il modulo rivi­sto per far­gli cari­care subito la nuova ver­sione. È bastato quindi spe­ci­fi­care la ver­sione cor­retta nel codice che usava quel modulo.

Bisogna anche notare che le due ver­sioni dei moduli pos­sono con­vi­vere nel file system tran­quil­la­mente l‘una accanto all’altra gra­zie all’infra­strut­tura dei moduli.

Non è comun­que pos­si­bile cari­care due ver­sioni diverse all’interno dello stesso inter­prete 1 ma visto che in Tcl è faci­lis­simo creare inter­preti aggiun­tivi, il pro­blema potrebbe essere miti­ga­bile:

% 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 sap­pia, non mi risulta che né PerlPythonRuby pos­sie­dano que­sta caratteristica.

Qualcuno ha infor­ma­zioni più pre­cise su que­sti o altri linguaggi?

  1. cosa invece pos­si­bile in Erlang

Per proseguire

Commenti e trackback sono disabilitati.