Nefunkcni py-lxml

Dan Lukes dan at obluda.cz
Mon Sep 21 17:47:13 CEST 2009


On 21.9.2009 16:23, Miroslav Prýmek:
> --> Vsiml jsem si, ze portupgrade vypisuje "Backing up the old version",
> ale nejak netusim, kde ji najit...

Nikde, pokud sis neobjednal, aby se porizena zaloha zachovala. bez toho 
existuje pouze po dobu update, kvuli tomu, aby bylo mozen se pri 
neuspesen instalaci nove verze vratit ke stare. Po uspesne instalaci je 
zaloha zrusena.


> --> Jedinej anoncvs server, ke kterymu se mi podarilo pripojit, byl
> anoncvs.tw.FreeBSD.org, coz neni
> Jakej teda pouzit priste nejblizsi server?

Jmena v tomhle formatu mi nic nerikaji (coz neznamena, ze nekde v 
nejakem navodu nejsou takhle uvedena). Ja pouzivam 
cvsup.ZEME.freebsd.org kde ZEME=cs

> Me porad nejde do hlavy, jak muze PO KOMPILACI byt nejakej nedefinovanej
> symbol. Vzdyt to by ta kompilace mela
> zhavarovat, ne?

Aha. Ty nevis, co je kompilace. Nebo, prinejmensim, nerozlisujes 
kompilaci (preklad) a linkovani (sestaveni).

Tak kompilace, to je prevod zdrojoveho kodu do jazyka konkretniho 
procesoru. Vznikne "objekt" (odtud obvykla pripona ".o"). Objekt 
neobsahuje kod, ktery nebyl v puvodnim zdrojovem kodu. Takze, kdyz v 
puvodnim kodu volas funkci, rekneme, strcmp(), ale tuhle funkci jsi sam 
v ramci toho kodu nenapsal (coz je bezny pripad) tak funkci strcmp 
nemuze obsahovat ani vysledny objekt. Ale obsahuje informaci, ze tato 
funkce ma byt zavolana (protoze tak to bylo i v puvodnim zdrojovem kodu).

Podobnych objektu muzes napsat desitky. Kazdy bude nejake symboly 
definovat (globalni promenne, funkce a tak) a na jine, ktere sam 
neobsahuje, se bude odvolavat.

Objekt sam ale nejde spustit. Do spustitelneho programu je treba objekty 
sestavit (slinkovat). Slinkovani - to je spojeni nekolika objektu a 
jejich vzajemne propojeni - prave tak, aby symbol, ktery jeden z objektu 
vyzaduje, byl "dodan" objektem jinym. Tak vznikne spustitelny program. 
Pokud by ve fazi sestavovani zustal nejaky symbol neuspokojen (objekt ho 
potrebuje, ale zadny jiny objekt ho "nedodava") pak se sestaveni nepovedlo.

To uz ale hezkou chvili mluvim o sestavovani. Kompilace z tohoto titulu 
neselze. Ta vyzaduje pouze to, aby vsechny symboly byly deklarovany.

To jsou mozna ta spravan slova, ktera ti to vysvetli - kompilaci 
zajimaji deklarace. Linkovani zajima implementace.

Knihovna, at uz staticka nebo dynamicka, to je "hromadka objektu". Ciste 
z praktickych duvodu - aby se nemuselo neustale operovat s desitkami 
objektu - bylo by to nepohodlne. Pri sestavovani tak muzes uvest nejen 
jednotlive objekty, ale celou knihovnu - je to totez, jako bys 
vyjmenoval vsechny ty jednotlive opbjekty, ktere v ni jsou.

Jak uz jsem rikal - pro kompilaci objektu neni podstatna implementace 
ale pouze deklarace symbolu. Pokud je knihovna pouha hromadka objektu, 
tak je jasne, ze pro ni plati totez.

Symbol xsltProcessOneNode byl nekde deklarovan (nevim, zda v include 
souborech pochazejicich z xslt baliku, nebo zda si ho deklaroval sam 
zdrojovy kod lxml) - proto se povedla kompilace objektu. Symbol ale 
nebyl v ramci zdrojoveho kodu "implementovan" a v objektu vzniklem z 
tohoto konkretniho zdrojaku se tak jednalo o symbol externi (takovy, 
ktery "doda" nekdo jiny).

Pri sestavovani (linkovani) ale nebyl tento symbol v zadnem z dodanych 
objektu nalezen a zustal nevyreseny. Nebylo tudiz mozne sestavit funkcni 
spustitelny program - a to je to, co jsi videl.

Mimochodem, tohle cele co jsem popsal neni specificka zalezitost jazyka 
C ani OS FreeBSD. Takhle funguje vetsina kompilatoru programovacich 
jazyku na prakticky vsech OS. Lze tak dokonce sestavovat program z 
objektu, ktere vytvorily ruzne kompilatory ze zdrojovych kodu ruznych 
programovacich jazyku a to dokonce i na ruznych OS.

Ze je gcc v nekterych (zejmena trivialnich) pripadech ochotno provest 
oba kroky (preklad i sestaveni) v jednom behu na "dvojtaktnosti" procesu 
nic nemeni. To, co se jmenuje 'gcc' stejne neni ve skutecnosti 
kompilator, ale "wrapper" - ten na zaklade parametru zjistit co se 
vlastne bude delat a podle toho zavola co je treba - skutecny 
kompilator, linker, ...

> mi to nejak polopaticky priblizit

Nekteri si mysli, ze prave tohle mi jde. Tak snad se to podarilo ...

						Dan




More information about the Users-l mailing list