[python] Re: igui2

Jan Svec honza na py.cz
Pondělí Březen 31 16:15:01 CEST 2003


On Thu, 27 Mar 2003, Zdenek Pavlas wrote:

> >> Aplikace bude volat IGUI2. IGUI2 wrapuje gtk+. gtk+ wrapuje gdk.
> >> gdk wrapuje xlib. teprve xlib konecne pohne prstem. Pritom je
> >> to vsechno slinkovany dohromady do jednoho mamuta a kazda vrstva
> >> se snazi aby to segfaultlo nebo aspon bezelo co nejpomaleji.

Nedalo mi to a premyslel jsem nad tim, jak onen "obludny"
pocet vrstev minimalizovat. A vysledek prekvapivy - moc to
nejde.

Pokud si vezmeme UNIX, (temer) vzdy budeme potrebovat xlib a
na sto procent jeste vrstvu v Pythonu, to uz tedy mame dve.
A ted co nacpeme mezi to:
1) GTK+
Jak bylo receno vyse, GTK+ pro kresleni pouziva GDK, cili
dve vrstvy a jsme na vysledku ctyri vrstvy.
2) QT
Zdanlive jde o jedinou vrstvu, nicmene rozdeleni tu opet
naleznete. Ovsem jiz ne tak transparentni, jako u GTK+ (to
se mimochodem existenci GDK primo chlubi). Pro kresleni
totiz pouzivame QCanvas, coz je totez co GDK. Opet ctyri
vrstvy.
3) Cokoli jineho
At se budem snazit jakkoli, vzdy nam vypadnou minimalne tri
vrstvy, casteji ovsem ctyri (od nejnizsi: xlib,
nejaky_canvas, neco_co_pouziva_canvas, python_binding).

Ted jakym zpusobem se to dotkne IGUI. V prvni fazi jsem
backend vyvijel na PyGTK, doslo ovsem opravdu k one
obludnosti, ze se to temer "zadrelo", cili rychlost se
blizila nule :)

Proto jsem jednu vrstvu skrtnul. Volba padla na PyGTK, cili
backend prepsan do C a cele mi to subjektivne prijde
rychlejsi nez PyGTK.

Kazdy si samozrejme muze zvolit svuj vlastni pristup a
vyhodit jinou vrstvu :) Klidne i IGUI, cimz ovsem prijde o
jeho vyhody, ale vysledek je opet stejny, ctyri vrstvy nad
GUI. Takze opravdu IGUI dela "jen" to co ostatni bindingy
jako PyGTK, PyQT a dalsi.

Dalsi minimalizaci provedeme nasledujicim postupem:
Nas drahoceny hroznysi vyplod (Python zdrojak) prepiseme do
C. Pokud tuto operaci prezijeme, zbavili jsme se jedne
vrstvy. Ovsem prisli jsme o moznost dalsiho jednoducheho
vyvoje a o "ctivost" programu.

V dalsi fazi vyhodime GTK+ nebo QT a program prepiseme pro
xlib. Mezitim jsme zesediveli, nas program zasel ma
nedostatek uzivatelu a prehrsel chyb, takze co z toho
vyplyva?

Pouzivejte Python, lidicky, a nebojte se dalsich vrstev,
urcite nejsou zbytecne.

> >> Nebylo by lepsi owrapovat do pythonu jen samotnej xlib a nad tim
> >> napsat widgety ciste v pythonu?
>
> > Myslim, ze by vysledek byl pomalejsi a mene portovatelny nez GTK
>
> xlib nema nekompatibilni zmeny API kazdych par mesicu jako gtk+.
>
> > wrapper. Uvedom si, ze volani funkce v Pythonu je relativne draha
> > operace a pro vykresleni jednoho tlacitka na nejnizsi urovni potrebujes
> > takovych operaci desitky nebo stovky, pokud chces dosahnout stejneho
> > vysledku jako pri pouziti GTK.
>
> Zkousel jsem pyGtk i wxWindows na notebooku s 16MB RAM. Podle doby
> na vykresleni trivialniho dialogu by behem setupu jednoho tlacitka
> Python v pohode zavolal desitky tisic funkci.
>
> Volba programovaciho jazyka je podruzna. U soucasnych CPU je bottleneckem
> pristup do pameti se spatnou lokalitou a temer nic jineho. Prave tohle
> je na
> volbe programovaiho jazyka temer nezavisle. Pocet "hot" mist ktere je treba
> drzet v cache zato roste umerne s poctem vsemoznych indirekci a "api
> wrapperu"!
>
> Muj zaver je: minimum zbytecnych rozhrani a dobra volba tech potrebnych
> => efektivni kod.

Muj nazor: Cely GUI program 90% casu ceka v event-loopu na
nejakou udalost, celou tuto dobu nic nedela a nam muze byt
jedno, kolik vrstev nad sebou mame. A zbyvajicich 10% casu
provadi nejakou akci, kde uz samozrejme pocet vrstev
rozhoduje. Z vyse uvedenych duvodu se vsak v Pythonu pod
ctyri vrstvy prakticky nedostanete.

Plyne z toho, ze pokud chcete efektivni kod, zapomente na
GUI a pouzivejte pouze stdin a stdout, propojte programy
rourou a ridte je parametry prik. radku...

Mohli byste se k tomu vyjadrit? Mozna jsem neco zavazneho
prehledl, ale muj uhel pohledu je timto smerem.

--
S pozdravem    .-------------------------.
Jan Svec       | Znate jazyk Python? NE? |
               | zkuste http://www.py.cz |
.--------------+-------------------------+
|            <honza na py.cz>               |
|     http://www.py.cz/Members/honza     |
|            honzas na jabber.cz            |
`----------------------------------------'



Další informace o konferenci Python