[nem-pl] Ból meczingu po stałych

"Paweł W. Olszta" Pawel.Olszta at adv.pl
Sun Jan 25 14:13:03 CET 2004


Napisałem sobie program. W kilku językach, ale mniej więcej taki sam. 
Polega na bardzo dużej liczbie wywołań instrukcji switch/match/case, w 
której jest bardzo dużo wzorców/case'ów (jakoś 400, w tym 3/4 to 
czterocyfrowe liczby pierwsze, a reszta bez jakiejś specjalnej struktury).

Oto timingi (kompilator, czas wykonania, czas względem najszybszego, 
czas względem Nemerle):

C (gcc -O3):        1.480s  /   1.00  /  0.17
Ocaml (ocamlopt):   3.305s  /   2.23  /  0.38
C#:                 3.538s  /   2.39  /  0.41
Nemerle:            8.529s  /   5.76  /  1.00
SML.NET:           16.150s  /  10.91  /  1.89
Ocaml (ocamlc):    17.590s  /  11.88  /  2.06
F#:                23.531s  /  15.89  /  2.75

Gwoli uczciwości dodam, że Nemerle (pod Windowsami przynajmniej) tego 
testu nie przechodzi na wersji z repozytorium -- generuje StackOverflow 
w czasie kompilacji. Czas działania Nemerle podany dla zoptymalizowanego 
meczingu po intach, który zaraz chyba skomituję.

Trochę na pewno tracimy względem C# na tym, że generujemy generalnie 
gorszy kod (tzn. czasami robimy zupełnie niepotrzebny ruch na stosie, 
etc.). Poza tym póki co robię tylko wyszukiwanie binarne (C# używa do 
tego czasami tablic skoków) + generuję kod który wygląda na kwadratowy 
względem matcha. Obie rzeczy mam nadzieję, że do naprawienia.

-- 
My opinions may have changed, but not the fact
that I am right. -- Ashley Brilliant





More information about the devel-pl mailing list