Update systemu

Dan Lukes dan at obluda.cz
Mon Jun 11 22:39:56 CEST 2007


Roman Divacky napsal/wrote, On 06/11/07 19:50:
>> 	Duvodem, proc ma knihovna jine cislo je obvykle zpetne nekompatibilni 
>> zmena v ABI - zmena v datovych strukturach, predavanych parametrech, 
>> navracenych hodnotach a podobne.
>  
> to je blbost dane... pokud by se menilo ABI tak nemuze pomoct ani rekompilace, no ne?
> 
> API/ABI je format komunikace a pokud se tenhle format na jedne komunikacni strane zmeni
> tak te nezachrani ani libmap ani rekompilace ani 6hodin modleni.

	ABI a API jsou dve zkratky proto, ze to neni totez.

> rekompilace (te same verze sw) v novem worldu a libmap jsou identicke operace (semanticky).

	Predvedu ti to nazorne. Starsi knihovna obsahuje:

  --- header.h:
#define ZAPORNE   1
#define NEZAPORNE 0

  --- implementace v knihovne:
int xtest(int val) { return (val<0?ZAPORNE:NEZAPORNE) }

  --- aplikace:
#include "header.h"
...
a=-3;
printf("Cislo %d je %s", a, xtest(a)==ZAPORNE?"zaporne"?"nezaporne");


  ==========

	Aplikace po svem spusteni vypise 'Cislo -3 je zaporne'.


V novejsi verzi knihovny, ktera ma svejne API, nema vsak stejne ABI, to 
vypada takto (zmenil se pouze header.h, ostatni zustava naprosto stejne):

  ==========

  --- header.h:
#define ZAPORNE   -1
#define NEZAPORNE 0

  ==========

	Tato knihovna musi mit odlisne cislo verze (ma jine ABI), coz si ma 
vynutit to, aby aplikace pouzivala spravnou verzi knihovny. Pokdu mu 
starou knihovnu nechas, bud efungovat. Pokud aplikaci prekompilujes, 
bude fungovat. Pokud to odflaknes a pouzijes libmap, bude ti aplikace 
vypisovat

'Cislo -3 je nezaporne'.


	Predpokladam, ze se me nebudes chtit zeptat "proc by nekdo takovou 
zmenu delal". Neni dulezite "proc", ale ze to jde, a ze je zde 
mechanismus bez ohledu na duvody pro tyto pripady urceny, ktery ty 
navrhujes obejit bez dukladne analyzy dopadu v konretnim pripade.

	Mohu dodat prakticky libovolne mnozstvi dalsich prikladu - zmeny poradi 
polozek ve strukturach, zmeny velikosti struktur (pridanim polozek, 
ktere apliakce nepouziva, knihovna vsak ano), zmeny v definicich ENUM 
promennych, ...

	Samozrejme, pokud jsi zdrojaky nove verze prosel a overil, ze k zadne 
takove zmene nedoslo (pak ovsem nemelo byt cislo verze knihovny vubec 
inkrementovano), muzes libmapovat po libosti. Jsem si ale takrka jisty, 
ze provest korektni upgrade je jistejsi i rychlejsi.

	Kdo si to chce vyzkouset dopad "podvodu na systemu" za pouziti libmap 
pri zmene ABI knihovny ma na shora uvedenem prikladu prilezitost.

	Jinak ale, jak jsem rekl, kdo chce libmap pouzivat, ja mu v tom 
nebranim. IMHO lenost za mozne problemy nestoji, nicmene, kazdy sveho 
stesti strujcem.

> taky je vam vsem takovy horko? ;)


	Z te poucky se ti ztratilo jedno slovo - pri vysokych okolnich 
teplotach je dulezite dostatecne piti *nealkoholickych* napoju ;-)


						Dan



-- 
Dan Lukes                                               SISAL MFF UK
AKA: dan at obluda.cz, dan at freebsd.cz, dan at (kolej.)mff.cuni.cz



More information about the Users-l mailing list