>>>>> "XL" == Xi Liu <jason.li...@gmail.com> writes:

  XL> I know I am doing the repetitive and useless summing again and again. What
  XL> confuses me is that using the same algorithm, I mean

  XL>  for my $i (99 .. 60000)
  XL> {
  XL>       my $sum;
  XL>       map {$sum += $_->{foo_value}} @lines[$i - $n + 1 .. $i];
  XL>       push @res, $sum;
  XL> }

  XL> in perl and 

  XL> for(int i =99; i <= 60000; i++)
  XL> {
  XL>       int sum = 0;
  XL>       for(int j = i - n +1; j < i;  j++)
  XL>           sum += lines[$j].foo_value;
  XL>       res[i] = sum;
  XL> }

  XL> in c, there is a huge difference in efficiency.  the c program,
  XL>  even using the same stupid algorithm, the cost of time is
  XL> acceptable. So I translated it to perl , and avoid the slow
  XL> subscripting operations using map on sliced array, I suppose the
  XL> perl program would be slower, but I don't predict such a huge
  XL> difference, you don't even need a benchmark or profiling tool to
  XL> notice the efficiency difference. This is what

nothing to be confused about. this is the difference between a compiled
and interpreted language. the c code you have is compiled down to very
efficient machine code. a structure access in c is very cheap (just an
addition or so in machine code). a hash access in perl is much more
expensive. general perl code will never be close to the speed of
compiled code. specialized perl code using its guts like the regex
engine can be close to c code especially badly written code. the win for
perl is the much faster time coding up the program and the flexibility
of perl over c. i did over 20 years of c and spent half my time doing
stuff that perl does for me like memory management, manipulating data
structures, dynamic data issues, etc. my time is more valuable than the
computer's so i choose perl over c. this difference is well known by
anyone who deals with c and perl. it is why you can write c code inside
perl (with XS, Inline::C, etc). many cpan modules have c code in them
for speedup. many existing libraries are all in c and perl modules
provide wrappers for them. c is not going away and neither is perl. if
you want blazing speed on simple stuff like your code, keep it in
c. perl will never be fast enough for that.

uri

-- 
Uri Guttman  ------  u...@stemsystems.com  --------  http://www.sysarch.com --
-----  Perl Code Review , Architecture, Development, Training, Support ------
---------  Gourmet Hot Cocoa Mix  ----  http://bestfriendscocoa.com ---------

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to