🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.ruby
Article #696

Re: Ruby poza railsami

#696
From: moldovenu
Date: Mon, 22 Oct 2007 18:22
79 lines
4422 bytes
zgodnie z obietnicami ;) wrzucam kody którymi porównywałem szybkość i 
zajętość pamięci w perlu, rubym i pythonie.

Zasadnicza część, to pliki dao/data_process.(rb|py|pl)
które tworzą listę obiektów-rekordów danych (przyjąłem, że właśnie tak 
chcę porównywać szybkość tych języków). Tworzony obiekt (dao) jest 
instancją jednokrotnie dziedziczonej klasy z własną metodą sortowania. 
Nic skomplikowanego.

Potem te obiekty sortuję, modyfikuję, znowu sortuję, przeszukuję 
regexpem... i dostaję takie mniej więcej wyniki:

cd dao; perl data_process.pl; python data_process.py; ruby data_process.rb
data_process.pl point: list created, 24.313586 total: 24.313586 MEM: 573
data_process.pl point: sorting 1, 6.366267 total: 30.679853 MEM: 673
data_process.pl point: total incr, 1.796528 total: 32.476381 MEM: 673
data_process.pl point: Last sort, 7.006141 total: 39.482522 MEM: 673
rev sort OK
data_process.pl point: Find by regex, 2.995174 total: 42.477696 MEM: 735
fives: 200000

data_process.py point: list created 81.5295240879  total:  81.5295240879 
MEM: 654
data_process.py point: sorting 1 11.3950788975  total:  92.9246029854 
MEM: 654
data_process.py point: total incr 1.5905020237  total:  94.5151050091 
MEM: 654
data_process.py point: last sort 11.1945290565  total:  105.709634066 
MEM: 654
data_process.py point: Find by regex 15.8707268238  total: 
121.580360889 MEM: 655
fives:  200000
fives counted ok
MEM: 655

data_process.rb point: list created, 31.129116, total: 31.129116, MEM: 578
data_process.rb point: sorting 1, 5.633625, total: 36.762741, MEM: 578
data_process.rb point: total incr, 5.374478, total: 42.137219, MEM: 578
data_process.rb point: Last sort, 5.565322, total: 47.702541, MEM: 578
data_process.rb point: Find by regex, 7.589033, total: 55.291574, MEM: 595
fives:
200000

Ciekawi mnie, że ruby, choć bardziej dynamiczny od pythona, dużo lepiej 
sobie radzi w prostych operacjach jak sortowanie. Lepiej nawet od perla. 
Również czas tworzenia listy jest z ogromną przewagą dla Rubiego vs. py. 
A nawet szukanie regexpem. No chyba że tam są jakieś błędy...?

Drugi test (w makefile jako pierszy) to głównie szybkość wybierania z hasha.

hash.pl point: Hash created, 26.208645 total: 26.208645 MEM: 1391
hash.pl point: randoms created /not counted/, 4.211777 total: 26.208645 
MEM: 1506
hash.pl point: RAndoms from hash, 17.002721 total: 43.211366 MEM: 1506

hash.py point: Hash created 81.9068770409  total:  81.9068770409 MEM: 842
hash.py point: randoms created /not counted/ 27.4965000153  total: 
81.9068770409 MEM: 976
hash.py point: RAndoms from hash 11.7002389431  total:  93.607115984 
MEM: 976

hash.rb point: Hash created, 101.553801, total: 101.553801, MEM: 1189
hash.rb point: randoms created /not counted/, 12.131743, total: 
101.553801, MEM: 1213
hash.rb point: RAndoms from hash, 17.927992, total: 119.481793, MEM: 1213

Pliki źródłowe do całości http://mountains.ws/varia/rupy.tgz
Można po prostu rozpakować i dać "make"
Poza linuxowym sposobem sprawdzania pamięci, reszta kodu powinna działać 
też na innych systemach. Dla kompów <= 1GB ramu warto zmniejszyć zmienną 
"times" w data_process, aby się nie zaswapować.

Disklajmer: testy robiłem pod kątem tego, co mniej-więcej chciałem 
sprawdzić. Jeśli uważacie, że daną operację w danym języku wydajniej 
jest zrobić w inny sposób - podzielcie się. Na razie nie cross-postuję 
tego na py i pl, bo ciekaw jestem waszych komentarzy i uwag.
Dobrej zabawy ;)

-adam
Technical Details
Message-ID: <ffippa$u82$1@news.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
References: <ff9pcl$219$1@news.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
From: moldovenu <moldovenu@spamu.niet.interia.pl>
Newsgroups: pl.comp.lang.ruby
Subject: Re: Ruby poza railsami
Date: Mon, 22 Oct 2007 20:22:25 +0200
Organization: Onet.pl
Lines: 79
Message-ID: <ffippa$u82$1@news.onet.pl>
References: <ff9pcl$219$1@news.onet.pl>
NNTP-Posting-Host: dxt91.internetdsl.tpnet.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1193077354 30978 83.14.45.91 (22 Oct 2007 18:22:34 GMT)
X-Complaints-To: usenet@news.onet.pl
NNTP-Posting-Date: Mon, 22 Oct 2007 18:22:34 +0000 (UTC)
X-Sender: XhQPhEXoBt/dj5NN0wQhPQmP4ChPRQ7I
In-Reply-To: <ff9pcl$219$1@news.onet.pl>
User-Agent: Thunderbird 1.5.0.13 (X11/20070824)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit