Am Freitag, den 01.02.2008, 00:41 -0600 schrieb Zbigniew:
> A multiple-value call takes the following route under Chicken:
> C_call_with_values -> C_do_apply -> C_values -> values_continuation ->
> C_do_apply.  A single-value call is compiled to a function call.  You
> can see why returning a single list value and destructuring it should
> be a lot faster.
...
> None of this would usually matter because benchmarks are next to
> useless.  However, one major argument advanced for multiple values
> seems to be that the compiler has a chance to optimize them (which
> sounds like premature optimization to me, but I digress).  So, if
> you're going to use multiple values, don't do it because of a
> theoretical speedup, but because it semantically fits the problem.

Hm, this makes me wondering.

I once was surprised that a large program, when ported from RScheme
(which is usually regarded as slow) to chicken, became very slow in
comparison.

Background: from the internals of rscheme I'd expect multiple value
calls to be just as fast there as single value calls.  (RScheme
maintains a register file, which is used for both arguments and return
values.)

Now my program heavily uses multiple values, because of both - they fit
semantically and are expected to be much faster (there) than consing a
list and destructing it again.  And I love multiple values. ;-)

What I'm wandering about: if the multiple value implementation in
chicken is slow, why not change it?  A distinguished data type for
multiple values some magic (details of which I can't judge about right
now) to hide the manual deconstruction.

Any opinions?

/Jörg


_______________________________________________
Chicken-users mailing list
Chicken-users@nongnu.org
http://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to