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