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

Search the boards