Re: TECH:PRG: (bylo Re: UCT: Narocnost zpracovani)


To Oto Buchta <tapik@neo.cz>
From Milan Zamazal <pdm@zamazal.org>
Date 19 Jul 2001 00:55:29 +0200
Cc ucto-dev-l@pinknet.cz
User-agent Gnus/5.09 (Gnus v5.9.0) Emacs/21.0.104

>>>>> "OB" == Oto Buchta <tapik@neo.cz> píše:

    OB> Nakolik toho o C a C++ vim, tak automatický Garbage collector a
    OB> softreferences (reference na objekty, ktere při nedostatku místa
    OB> na disku mohou být GC odstraněny) tak nějak není implementované
    OB> :-)

Je potřeba se poněkud myšlenkově odvázat od prostředí, kde nejde rozumně
udělat leccos, není-li to tam již zadrátováno, protože chybí i tak
základní nástroje užitečné pro přidávání nových rysů, jako je alespoň
rudimentární podoba maker či vícenásobná dědičnost. :-| Použití garbage
collectoru v podobě knihovny v C celkem nic nebrání, s C++ je to trochu
složitější, ale při troše disciplíny by to také mělo být schůdné.

Hojně užívaným garbage collectorem pro C je boehm_gc.  Dívám se, že má
i nějakou podporu pro C++.

V C je to založeno na náhražce mallocu, čehož lze dosáhnout
i automaticky (#defina malloc GC_malloc, příp. další #defines pro
variace na malloc).  V C++ to nabízí nějaké třídy, které lze podědit a
instance těchto tříd jsou pak sbíratelné, k tomu je však ještě nutná
určitá obezřetnost na jiných místech.

Co se týče soft references, tak na ty snad v C (resp. C s GC knihovnou)
není potřeba vůbec žádná sofistikovaná podpora -- stačí obalit malloc
(resp. GC_malloc) něčím, co v případě selhání alokace (resp. při
nedostatku paměti z hlediska efektivního fungování GC) požádá správce
soft references o zahození příslušných dat a zkusí alokaci ještě jednou,
ne?

Ale to už jsem asi skoro off-topic, že. :-)

Milan Zamazal

-- 
It's amazing how much better you feel once you've given up hope.
                                                (unknown source)
-------------------------- ucto-dev-l@pinknet.cz ------------------------
Konference o vyvoji ucetnictvi                       http://ucto.linux.cz/




Partial thread listing: