Posted By: Quasimodo (Quasimodo) on 'CZprogram' Title: Re: Graficka knihovna Date: Tue Oct 12 18:31:31 2004 > Co embedovat Gecko a mit UI v HTML? > > Jerry III > > Enough said ... > http://jerryiii.home.sprynet.com/mica/index.htm Diky za rady zde i pres mail. Gecko se ukazalo jako nepouzitelne - velikost/rychlost. Delame merici zarizeni a odezva na udalost musi mit garantovany cas. Nevim proc, ale doba vykreslovani prvku v gecku nejak hrozne plave. Trolltech Qt normalni a emb. verze se jenom podobne jmenuji. Z cross platform vyvoje bysme asi zesediveli (tohle zhruba vypadlo ze cteni jejich dokumentace a par mailu.) Java - neumim ji a v casovem horizontu ktery mam neverim, ze se ji stihnu naucit. Navic se bojim garbage collectoru - nevim predem kdy se mi to na par milisekund zamysli... C++ prelozeno pro .NET/.GNU - to je cesta, kterou zrovna ted zkoumam. Stale se bojim GC a hledam jak bych to tomu zatrhnul. Mimochodem porovnaval jsem rychlosti C++ nativne prelozeneho na linuxu, .GNU a javy a jsem silne prekvapen, jak moc uz java slape cecku na paty, co se tyce vykonu. V jednom testu (alokace pameti) dokonce C++ predbehla! Uvadim tu zdrojaky - nejsou psane ani na to, aby byly hezky citelne, ani nic podobneho - ciste jen testy, ale aby se co nejvice podobaly ve vsech trech jazycich. (Pro testy .NET/.GNU pouzivam C# - jednak abych tomu dal co nejvetsi sanci a jednak mi nefunguje preklad C++ pod .GNU) Java src: public class pokus { public static int recursive(int a) { if (a < 1) return 0; int[] N = new int[a]; for (int i=0; i<a; i++) N[i] = recursive(i-1); int sum=0; for (int i=0; i<a; i++) sum += N[i]; return sum; } public static void main (String args[]) { recursive(40); } } C++ src: class pokus { public: static int recursive(int a) { if (a < 1) return 0; #ifdef FAIR int *N = new int[a]; #else int N[a]; #endif for (int i=0; i<a; i++) N[i] = recursive(i-1); int sum=0; for (int i=0; i<a; i++) sum += N[i]; #ifdef FAIR delete[] N; #endif return sum; } static void Main () { recursive(40); } }; int main() { pokus::Main(); return 0; } C# public class pokus { public static int recursive(int a) { if (a < 1) return 0; int[] N = new int[a]; for (int i=0; i<a; i++) N[i] = recursive(i-1); int sum=0; for (int i=0; i<a; i++) sum += N[i]; return sum; } public static void Main () { recursive(40); } } Java dosahla (druhy beh, aby se co nejvice eliminovalo nacitani javy) tento vysledek: athlon:~/zks/cs # time java pokus real 0m11.397s user 0m11.060s sys 0m0.210s Pokud je zapnuto #define FAIR, tak vysledky C++ jsou HORSI athlon:~/zks/cs # time ./pokus real 0m22.305s user 0m22.060s sys 0m0.000s Pokud je FAIR vypnuto, tak uz je to veselejsi: athlon:~/zks/cs # time ./pokus real 0m4.615s user 0m4.540s sys 0m0.000s .GNU ma casy pro alokaci pameti vyrazne horsi. athlon:~/zks/cs # time ilrun ./pokus.exe real 1m56.831s user 1m55.270s sys 0m0.040s Takze v tomto testu .GNU totalne propadlo. Pokousel jsem se zjistit proc a vypada to, ze pri kazde alokaci pameti to z nejakeho zahadneho duvodu vzdycky znova vola getuid(), coz pochopitelne zdrzuje... Jakmile zjistim nejaky kontaktni mail na vyvojare, pokusim se je presvedcit, aby to vyhodili. Druhy test ktery jsem poustel bylo eratosthenovo sito do max 2e7 Zdrojak uz dam jen jeden, reprezentativni, treba javu: public class erat { public static void main (String args[]) { int N=20000000; boolean[] nprim = new boolean[N]; for (int i=0; i<N; i++) nprim[i] = false; for(int i=2; i<N; i++) for(int j=2; j<i; j++) { int mul = i*j; if (mul >= N) break; nprim[mul] = true; } } } C++ athlon:~/zks/cs # time ./erat real 0m16.404s user 0m16.200s sys 0m0.030s Java athlon:~/zks/cs # time java erat real 0m17.003s user 0m16.760s sys 0m0.030s C# athlon:~/zks/cs # time ilrun ./erat.exe real 0m18.922s user 0m18.780s sys 0m0.020s Tady je podle ocekavani nejrychlejsi C++, ale zbyle dve moznosti mu dychaji na zada mnohem vice, nez bych cekal... Takze to jsou moje prozatimni vysledky, snad to nekoho i zaujme. Ja byl rozhodne prekvapen, protoze kdyz jsem v dobach davnych premyslel nad javou, zda ma smysl se ji ucit, tak pri mych testech (bublinky, eratosthenes, fibonacci nebo jak se to pise) byla vzdycky 4-10x pomalejsi nez C++. Zda se, ze panove od sunu se vubec neflakaji :-) - Clovek je nejpomalejsi zname zarizeni typu I/O. Quasimodo