erlug
[Top] [All Lists]

RE: [Erlug] stesso problema

To: "'erlug@xxxxxxxxxxxxxx'" <erlug@xxxxxxxxxxxxxx>
Subject: RE: [Erlug] stesso problema
From: Alessandro Forghieri <Alessandro.Forghieri@xxxxxxxxxx>
Date: Thu, 4 Apr 2002 13:14:17 +0200
Saluti.

[...]
> 
> Scommettiamo che qualcuno ti contesta l'eccesso di header :)
[...]
> Sinceramente però qualche domanda su tutta questa mobilitazione di 
> megastrutture me la faccio anche io.... mi piacerebbe 
> disassemblare il 
> risultato...
> 
> A non molto... preparati a essere "torturato" sul "necessaire" per un 
> ambiente di sviluppo confortevole sotto Linux.
> 

Allora.
Ho preso il listato di davide, l'ho compilato e l'ho paragonato con:

/bin/sort

csort (programma in C scritto da me per motivi didattici - autodidattici - e
di cui mi vergogno abbastanza, ma che accludo lo stesso per masochismo)

sort.pl:

#!/usr/bin/perl
my @lines=();
while(<>) {
    chomp;
    push @lines,split(/\b/,$_);
}
print $_,"\n" for (sort @lines);
#EOF

Tempo di scrittura di:
 sort.pl: 45 sec.

 csort  : 120 min. perche': (a) il mio C e' assai arrugginito; 
                             (b)non ho voluto usare librerie non standard
e.g. 
                               libretto);
                            e perche' 
                            (c) scanf("%as",string) sembra non  funzionare 
                                come da man (perche'?) - quindi l'ho scritto
e
                                debuggato due volte da zero) 

 cpsort: non so quanto c'ha messo Davide (ma la STL conta come standard,
tenuto conto
         che la gran parte di chi programma in C++ non la sa usare? Sul tema
e' stato
         scritto un articolo).

Provato su /usr/bin/words rimescolato come segue:

my $file = shift;
open(FF,$file) or die("Opening $file: $!");
chomp(@lines=<FF>);

my $i;
for ($i = $#lines; --$i; ) {
    my $j = int rand ($i+1);
    next if $i == $j;
    @lines[$i,$j] = @lines[$j,$i];
}

my $ll;

print $_,"\n" for (@lines);


Da notare che rispetto a locale, i18n e compagnia cantante l'unico che fa le
cose 
giuste e' sort (che fa anche molto di piu' e credo meglio di tutti gli
altri, ma lasciamo stare). Sort.pl tokenizza in maniera leggermente diversa.

E ora i risultati:

$ time make cpsort
g++     cpsort.cpp   -o cpsort
11.40user 1.54system 0:56.37

$ time make csort
cc     csort.c   -o csort
0.97user 0.34system 0:06.16elapsed 21%CPU (0avgtext+0avgdata 0maxresident)k



ls -l cpsort csort `which sort`
-rwxr-xr-x   1 gaonet   gao         65941 Apr  4 10:20 cpsort
-rwxr-xr-x   1 gaonet   gao         13516 Apr  4 12:51 csort
-rwxr-xr-x   1 root     root        28796 Aug 10  1999 /bin/sort


$ time sort words >/dev/null
19.60user 1.14system 1:30.07elapsed 23%CPU

$ time ./cpsort < words >/dev/null
10.11user 0.43system 0:45.64elapsed 23%CPU 

$ time ./csort < words >/dev/null
1.72user 0.36system 0:09.22elapsed 22%CPU (0avgtext+0avgdata 0maxresident)k

$ time perl sort.pl words > /dev/null
8.62user 0.76system 0:41.41elapsed 22%CPU


Se qualcuno ha dei dubbi su cosa e' meglio (in termini di efficienza
personale)...

La sorpresa qui e' ... per quale motivo /bin/sort ci mette tanto?

Cheers,
alf

P.S: non sforzatevi d'imbarazzarmi col mio C, tanto lo so gia'.

Attachment: csort.c
Description: Binary data

<Prev in Thread] Current Thread [Next in Thread>