Front page | perl.perl5.porters |
Postings from April 2000
[ID 20000418.007] Why is map slow?
Thread Next
From:
Benjamin J. Tilly
Date:
April 18, 2000 13:36
Subject:
[ID 20000418.007] Why is map slow?
Message ID:
E12hej7-0000MD-00@ourweb.trepp.com
This is a bug report for perl from ben_tilly@trepp.com,
generated with the help of perlbug 1.26 running under perl 5.00503.
-----------------------------------------------------------------
[Please enter your report here]
Why is the map() function so slow? Try the following:
sub my_map {
my $func = shift;
my @result;
foreach (@_) {
push @result, &$func;
}
return @result;
}
sub trivial {
return ($_, 1);
}
my $n = 30000;
print "Using Perl's map function\n";
@perl_big = map {&trivial} 1..$n;
print "Done\nUsing my map function\n";
@my_big = &my_map(\&trivial, 1..$n);
print "Done\n";
If you run that you will see that the simple map() I just wrote
is substantially faster than the map() function that Perl has
built in. Given that map() is widely used with reasonable
amounts of data (think Schwartzian sort), shouldn't the built-in
version have good performance?
Thanks,
Ben
[Please do not change anything below this line]
-----------------------------------------------------------------
---
Site configuration information for perl 5.00503:
Configured by torin at Wed Sep 22 00:18:38 PDT 1999.
Summary of my perl5 (5.0 patchlevel 5 subversion 3) configuration:
Platform:
osname=linux, osvers=2.0.36, archname=i386-linux
uname='linux perv 2.0.36 #2 wed nov 18 03:00:48 pst 1998 i686 unknown '
hint=recommended, useposix=true, d_sigaction=define
usethreads=undef useperlio=undef d_sfio=undef
Compiler:
cc='cc', optimize='-O2', gccversion=2.95.1 19990809 (prerelease)
cppflags='-Dbool=char -DHAS_BOOL -D_REENTRANT -DDEBIAN -I/usr/local/include'
ccflags ='-Dbool=char -DHAS_BOOL -D_REENTRANT -DDEBIAN -I/usr/local/include'
stdchar='char', d_stdstdio=undef, usevfork=false
intsize=4, longsize=4, ptrsize=4, doublesize=8
d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
alignbytes=4, usemymalloc=n, prototype=define
Linker and Libraries:
ld='cc', ldflags =' -L/usr/local/lib'
libpth=/usr/local/lib /lib /usr/lib
libs=-lnsl -lndbm -lgdbm -ldbm -ldb -ldl -lm -lc -lposix -lcrypt
libc=, so=so, useshrplib=false, libperl=libperl.a
Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'
Locally applied patches:
---
@INC for perl 5.00503:
/usr/lib/perl5/5.005/i386-linux
/usr/lib/perl5/5.005
/usr/local/lib/site_perl/i386-linux
/usr/local/lib/site_perl
/usr/lib/perl5
.
---
Environment for perl 5.00503:
HOME=/home/tilly
LANG=C
LANGUAGE (unset)
LD_LIBRARY_PATH (unset)
LOGDIR (unset)
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
PERL_BADLANG (unset)
SHELL=/bin/bash
Thread Next
-
[ID 20000418.007] Why is map slow?
by Benjamin J. Tilly