[erlang-questions] At what point am I "playing compiler"
Tony Rogvall
tony@REDACTED
Sun May 17 23:23:13 CEST 2009
Currently the compiler does not know what lists:foldl does, so it
makes it hard
for the compiler to optimise code like this. There is an efficiency
guide in the
OTP documentation describing things like this. http://www.erlang.org/doc/
under Erlang Programming/Efficency Giud. I could not make a nice link
to it!
If list functions like lists:map/lists:fold where to be given strict
semantics,
just meaning that compiler knows what result should be computed for
any kind of input.
Then the compiler can use this knowledge to optimise code. With the
dynamic module
system the lists:map could basically do one thing today and something
else tomorrow,
unless some one decide that lists:map is defined in a precise way.
We already have some lists functions in the system that (like reverse)
that has found
it's way into the runtime system. Thereby qualifying both the lists
module and the
functions within the lists module to be a bit special.
Maybe it's time to integrate some of the high order lists functions
as part of the
language ?
/Tony
On 17 maj 2009, at 19.11, Dennis Byrne wrote:
> The functions expressive/0 and efficient/0 have the same result.
> Sometimes I prefer expressive syntax but I am concerned about
> efficiency. Should Erlang developers worry about this or do any of
> the compilers (or runtime) make these concerns obselete?
>
> expressive() ->
> List = [1,2,3],
> Last = lists:last(List),
> Min = lists:foldl(fun min/2, Last, List),
> Max = lists:foldl(fun max/2, Last, List),
> Sum = lists:foldl(fun sum/2, 0, List),
> {Min, Max, Sum}.
>
> efficient() ->
> List = [1,2,3],
> Last = lists:last(List),
> lists:foldl(fun summary/2, {Last, Last, 0}, List).
>
> summary(X, {Min, Max, Total}) ->
> {min(X, Min), max(X, Max), Total + X}.
>
> sum(X, Y) ->
> X + Y.
>
> min(X, Y) when X < Y ->
> X;
> min(_, Y) ->
> Y.
>
> max(X, Y) when X > Y ->
> X;
> max(_, Y) ->
> Y.
>
> --
> Dennis Byrne
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://www.erlang.org/mailman/listinfo/erlang-questions
More information about the erlang-questions
mailing list