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'.
csort.c
Description: Binary data
|